用SPARQL和Jena查询DBpedia

用SPARQL和Jena查询DBpedia,sparql,semantic-web,jena,dbpedia,Sparql,Semantic Web,Jena,Dbpedia,我无法理解如何使用Jena查询DBpedia。在类似(清单4)的教程中,模型初始化如下: //从文件系统打开bloggers RDF图 InputStream in=新文件InputStream(新文件(“bloggers.rdf”); //创建一个空内存模型,并从图形中填充它 模型模型=ModelFactory.createMemModelMaker().createModel(); model.read(in,null);//空基URI,因为模型URI是绝对的 in.close(); 假设

我无法理解如何使用Jena查询DBpedia。在类似(清单4)的教程中,模型初始化如下:

//从文件系统打开bloggers RDF图
InputStream in=新文件InputStream(新文件(“bloggers.rdf”);
//创建一个空内存模型,并从图形中填充它
模型模型=ModelFactory.createMemModelMaker().createModel();
model.read(in,null);//空基URI,因为模型URI是绝对的
in.close();
假设我想写一个查询,列出巴黎的教堂。在SPARQL中,它看起来像(取自):

前缀p:
前缀dbpedia:
前缀类别:
前缀rdfs:
前缀skos:
前缀geo:
选择不同的?m?n?p?d
在哪里{
?m rdfs:标签?n。
m skos:受试者?c。
c skos:更广泛的类别:巴黎的教堂。
m p:摘要d。
?m geo:点?p
过滤器(lang(?n)=“fr”)
滤波器(lang(?d)=“fr”)
}

这个查询在Java中看起来如何?我特别感兴趣的是模型对象是如何初始化的。

在浏览了无数页之后,我找到了答案。也许我问的问题不够清楚,但下面的代码对我来说很有用

字符串查询字符串=
“前缀p:”+
“前缀dbpedia:”+
“前缀类别:”+
“前缀rdfs:”+
“前缀skos:”+
“前缀geo:”+
“选择不同的?m?n?p?d”+
“其中{”+
“?m rdfs:标签?n。”+
“m skos:受试者?c”+
“c skos:更广泛的类别:巴黎的教堂。”+
“?MP:摘要?d。”+
“m geo:点?p”+
“过滤器(lang(?n)=“fr”)”+
“过滤器(lang(?d)=“fr”)”+
" }"
//现在正在创建查询对象
Query=QueryFactory.create(queryString);
//正在使用远程服务初始化queryExecution工厂。
//**这实际上是我无法解决的主要问题**
QueryExecution qexec=QueryExecutionFactory.sparqlService(“http://dbpedia.org/sparql“,查询);
//然后执行标准查询和结果处理,可以
//几乎可以在任何Jena/SPARQL教程中找到。
试一试{
ResultSet results=qexec.execSelect();
对于(;results.hasNext();){
//结果处理在这里完成。
}
}
最后{
qexec.close();
}

这是我在上找到的答案。

您想知道如何在Jena中运行SPARQL查询,还是执行与该查询等价的查询的过程?是的。事实上,我找到了一个我一直在寻找的答案,但我很乐意看到你的答案。谢谢。这个答案中的代码不太正确,并且包含一些微妙的错误。类似于
“SELECT DISTINCT?m?n?p?d”+“SELECT DISTINCT…”这样的字符串连接,{
导致“SELECT DISTINCT…”dWHERE{`和名为
dWHERE
的变量(这仍然是合法的,因为SPARQL WHERE中的
WHERE
是可选的;即
SELECT?x{}
SELECT?x WHERE{}
是相同的).和转义是语言标记中需要的,在
“FILTER(lang(?n)=“fr”)”+
中。但最重要的是,语言标记应该与langMatches进行比较:
FILTER langMatches(lang(?n),'fr')
PREFIX p: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geo: <http://www.georss.org/georss/>

SELECT DISTINCT ?m ?n ?p ?d
WHERE {
 ?m rdfs:label ?n.
 ?m skos:subject ?c.
 ?c skos:broader category:Churches_in_Paris.
 ?m p:abstract ?d.
 ?m geo:point ?p
 FILTER ( lang(?n) = "fr" )
 FILTER ( lang(?d) = "fr" )
 }