Rdf 为什么Virtuoso SPARQL endpoint和Jena返回的结果不同?
我已经通过Virtuoso SPARQL端点和Jena查询了DBPedia,但是结果不同。我的问题是:Rdf 为什么Virtuoso SPARQL endpoint和Jena返回的结果不同?,rdf,sparql,jena,dbpedia,virtuoso,Rdf,Sparql,Jena,Dbpedia,Virtuoso,我已经通过Virtuoso SPARQL端点和Jena查询了DBPedia,但是结果不同。我的问题是: SELECT(COUNT(DISTINCT(?v))AS?num) 从…起 在哪里{ ?x?v。 ?v rdf:t型。 过滤器STRSTARTS(STR(?t),STR(“http://dbpedia.org/ontology/Place") ) } 我通过以下函数在Jena中执行查询: publicstaticarraylist查询(stringquerystr){ ArrayList结果
SELECT(COUNT(DISTINCT(?v))AS?num)
从…起
在哪里{
?x?v。
?v rdf:t型。
过滤器STRSTARTS(STR(?t),STR(“http://dbpedia.org/ontology/Place") )
}
我通过以下函数在Jena中执行查询:
publicstaticarraylist查询(stringquerystr){
ArrayList结果=新建ArrayList();
queryStr=SPARQL_前缀+queryStr;
Query=QueryFactory.create(queryStr);
//远程执行。
try(QueryExecution qexec=QueryExecutionFactory.sparqlService(“http://dbpedia.org/sparql“,查询)){
//设置DBpedia特定的超时。
((QueryEngineHTTP)qexec).addParam(“超时”,“10000”);
//执行。
ResultSet rs=qexec.execSelect();
while(rs.hasNext()){
result.add(rs.next().toString());
}
}捕获(例外e){
e、 printStackTrace();
System.err.println(“===================================================================”);
系统错误println(queryStr);
System.err.println(“===================================================================”);
}
返回结果;
}
我已将图形设置为在FROM
表达式中搜索,但结果仍然不同。当我在Virtuoso的SPARQL端点上执行查询时,结果是21482,但Jena返回的结果是9586
有什么想法吗?正如AKSW和Taylor在评论中提到的,DBPedia对远程查询的限制不同于从其网站发起的查询。在这种情况下,字符串匹配(这是一个昂贵的操作)使得查询更加耗时,jena返回的结果只是查询实际结果的一部分 为了解决这个问题,我们可以直接使用URI而不是它的字符串:
SELECT(COUNT(DISTINCT(?v))AS?num)
从…起
哪里
{
?x?v。
?v rdf:类型。
}
我看不出这个问题有任何不同的结果。您实际看到了什么结果?如何执行Jena查询?使用“FROM”可能不会达到您期望的效果。我添加了详细信息。@amirveyseh如果它更昂贵,可能会导致问题。可能是DBpedia对远程查询和从其网站启动的查询施加了不同的限制。可能是远程查询得到的时间更短,因此在分配的时间内得到的结果更少,因此结果计数也更小。我的意思是直接将类URI用作资源,而不是变量?t和字符串比较,这更昂贵。