Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rdf 为什么Virtuoso SPARQL endpoint和Jena返回的结果不同?_Rdf_Sparql_Jena_Dbpedia_Virtuoso - Fatal编程技术网

Rdf 为什么Virtuoso SPARQL endpoint和Jena返回的结果不同?

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结果

我已经通过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结果=新建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和字符串比较,这更昂贵。