2015-07-30 1 views
1

Я запросил DBPedia через конечную точку Virtuoso SPARQL и Jena, но результаты разные. Мой запрос:Почему результаты, возвращаемые конечной точкой Virtuoso SPARQL, и Jena разные?

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.

Есть ли идеи?

+0

Я не вижу разные результаты в вопросе. Какие результаты вы на самом деле видите? –

+0

Как вы выполняете запрос Йены? Использование «FROM» может не делать то, что вы ожидаете от этого. –

+0

Я добавил детали. – user3070752

ответ

1

Как упоминалось в комментариях к 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> . 
    } 
+0

@TallTed благодарит за ответы и исправления. – user3070752