Apache Jena - 一个查询得到3个相同的结果

时间:2014-12-16 12:44:46

标签: java sparql jena

这是我在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>

知道为什么我没有获得单一资源吗?我尝试了其他资源,同样的问题。

感谢您的帮助,祝您度过愉快的一天!

2 个答案:

答案 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输出不对应)