我正在尝试使用 Jena 创建 SPARQL 查询来查询 DBpedia。当我使用 Virtuoso 时,查询正常工作,但是当我将其插入以下 Java 代码时,它返回一个空集。
String sr="Christopher_Nolan";
String sparqlQueryString1 = "PREFIX dbont: <http://dbpedia.org/ontology/> "+
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"+
"PREFIX foaf: <http://xmlns.com/foaf/0.1/> "+
" SELECT distinct ?s"+
" WHERE { "+
"?s foaf:name ?label ." +
"filter(?label=\"Christpher_Nolan\"@en)." +
" }";
Query query = QueryFactory.create(sparqlQueryString1);
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
ResultSet results = qexec.execSelect();
ResultSetFormatter.out(System.out,results, query);
qexec.close() ;
最佳答案
我认为这不是耶拿的问题,而是您的特定查询的问题。您的查询在 DBpedia SPARQL 端点上运行时不会产生任何结果
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?s
WHERE {
?s foaf:name ?label .
filter(?label="Christpher_Nolan"@en)
}
但是,如果将 o
添加到 Christopher 的名字中,并将下划线更改为空格,则会得到三个结果:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?s
WHERE {
?s foaf:name ?label .
filter(?label="Christopher Nolan"@en)
}
s
http://dbpedia.org/resource/Christopher_Nolan_(author)
http://dbpedia.org/resource/Christopher_Nolan
http://dbpedia.org/resource/Chris_Nolan_(musician)
我还想指出,这是 filter
的一种相当不寻常的用法。如果您想选择使用特定值的三元组,只需将该值放入三元组模式即可:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?s
WHERE {
?s foaf:name "Christopher Nolan"@en
}
关于sparql - DBpedia 查询返回 Virtuoso 的结果,但不返回 Jena 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19631246/