为什么 Virtuoso SPARQL 端点和 Jena 返回的结果不同?
why are the results returned by Virtuoso SPARQL endpoint and Jena different?
我已经通过 Virtuoso SPARQL 端点和 Jena 查询了 DBPedia,但结果不同。我的查询是:
SELECT (COUNT(DISTINCT (?v)) AS ?num)
FROM <http://dbpedia.org>
WHERE {
?x <http://dbpedia.org/property/deathPlace> ?v .
?v rdf:type ?t .
FILTER STRSTARTS( STR(?t), STR("http://dbpedia.org/ontology/Place") )
}
我通过这个函数在耶拿执行我的查询:
public static ArrayList<String> query(String queryStr) {
ArrayList<String> result = new ArrayList<>();
queryStr = SPARQL_PREFIX + queryStr;
Query query = QueryFactory.create(queryStr);
// Remote execution.
try (QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query)) {
// Set the DBpedia specific timeout.
((QueryEngineHTTP) qexec).addParam("timeout", "10000");
// Execute.
ResultSet rs = qexec.execSelect();
while (rs.hasNext()) {
result.add(rs.next().toString());
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("============================================");
System.err.println(queryStr);
System.err.println("============================================");
}
return result;
}
我已将图表设置为在 FROM
表达式中搜索,但结果仍然不同。当我在 Virtuoso 的 SPARQL 端点上执行查询时,结果是 21482,但 Jena 返回的结果是 9586。
有什么想法吗?
正如 AKSW 和 Taylor 在评论中提到的,DBPedia 对远程查询的限制与从其网站发起的查询的限制不同。在这种情况下,字符串匹配(这是一个代价高昂的操作)使得查询更加耗时,jena 返回的结果只是查询实际结果的一部分。
为了解决这个问题,我们可以直接使用 URI 而不是它的字符串:
SELECT (COUNT(DISTINCT (?v)) AS ?num)
FROM <http://dbpedia.org>
WHERE
{
?x <http://dbpedia.org/property/deathPlace> ?v .
?v rdf:type <http://dbpedia.org/ontology/Place> .
}
我已经通过 Virtuoso SPARQL 端点和 Jena 查询了 DBPedia,但结果不同。我的查询是:
SELECT (COUNT(DISTINCT (?v)) AS ?num)
FROM <http://dbpedia.org>
WHERE {
?x <http://dbpedia.org/property/deathPlace> ?v .
?v rdf:type ?t .
FILTER STRSTARTS( STR(?t), STR("http://dbpedia.org/ontology/Place") )
}
我通过这个函数在耶拿执行我的查询:
public static ArrayList<String> query(String queryStr) {
ArrayList<String> result = new ArrayList<>();
queryStr = SPARQL_PREFIX + queryStr;
Query query = QueryFactory.create(queryStr);
// Remote execution.
try (QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query)) {
// Set the DBpedia specific timeout.
((QueryEngineHTTP) qexec).addParam("timeout", "10000");
// Execute.
ResultSet rs = qexec.execSelect();
while (rs.hasNext()) {
result.add(rs.next().toString());
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("============================================");
System.err.println(queryStr);
System.err.println("============================================");
}
return result;
}
我已将图表设置为在 FROM
表达式中搜索,但结果仍然不同。当我在 Virtuoso 的 SPARQL 端点上执行查询时,结果是 21482,但 Jena 返回的结果是 9586。
有什么想法吗?
正如 AKSW 和 Taylor 在评论中提到的,DBPedia 对远程查询的限制与从其网站发起的查询的限制不同。在这种情况下,字符串匹配(这是一个代价高昂的操作)使得查询更加耗时,jena 返回的结果只是查询实际结果的一部分。
为了解决这个问题,我们可以直接使用 URI 而不是它的字符串:
SELECT (COUNT(DISTINCT (?v)) AS ?num)
FROM <http://dbpedia.org>
WHERE
{
?x <http://dbpedia.org/property/deathPlace> ?v .
?v rdf:type <http://dbpedia.org/ontology/Place> .
}