这是我在StackOverflow上的第一个问题。 我正在使用Apache Jena来查询DBPedia,我得到的结果很奇怪。 这是我的代码,只有一个简单的查询:
String sparqlQuery = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select ?o where { <http://dbpedia.org/ontology/Agent> rdfs:subClassOf ?o}";
System.out.println("Query : " + sparqlQuery);
Query query = QueryFactory.create(sparqlQuery);
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
ResultSet results = qexec.execSelect();
ResultSetFormatter.out(System.out, results, query);
qexec.close();
这就是我的回应:
<http://www.w3.org/2002/07/owl#Thing>
<http://www.w3.org/2002/07/owl#Thing>
<http://www.w3.org/2002/07/owl#Thing>
知道为什么我没有获得单一资源吗?我尝试了其他资源,同样的问题。
感谢您的帮助,祝您度过愉快的一天!
答案 0 :(得分:2)
这很奇怪,当我在http://dbpedia.org/sparql上测试您的查询时,我只获得了一个资源。
您可以检查ResultSet
中有三个结果吗?
int count = 0;
while( results.hasNext() ){
results.next();
count++;
}
System.out.println("I see "+count+" rows !");
作为解决方法,您可以使用DISTINCT
关键字:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?o
WHERE {
<http://dbpedia.org/ontology/Agent> rdfs:subClassOf ?o
}
答案 1 :(得分:2)
查询被发送到dbpedia,因此它给出了三个答案。 Jena只会格式化结果。
可能是因为在不同的命名图中有3个三元组 - 默认的dbpedia图是所有命名图的并集。
尝试:
select *{ GRAPH ?g { <http://dbpedia.org/ontology/Agent> rdfs:subClassOf ?o} }
同时检查结果返回:使用wget或curl发出查询,并查看发回的字节。
(您显示的响应与ResultSetFormatter输出不对应)