Как я могу получить результат запроса «Выбрать количество (*)» с Apache Jena? - PullRequest
0 голосов
/ 27 ноября 2018

Я много раз пытался получить результат подсчета запросов select с apache jena в JAVA, но он не работает.

select count(*) where { 
        ?s dbo:award ?o.
        ?o rdf:type ?C.
        FILTER
        regex(?C,"http://dbpedia.org/ontology/Award")}

Результат этого запроса в конечной точке - 33767

Так что я сделал этот код в Java, чтобы получить результат.

public int CR() {

    int CR=0;
    String ch="http://dbpedia.org/ontology/";
    String service="http://dbpedia.org/sparql";
    String query="PREFIX dbo:<http://dbpedia.org/ontology/>" 
    + "PREFIX : <http://dbpedia.org/resource/>" 
    + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
    + "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"

    +"select * where { "
        +"?s dbo:award ?o."
        +"?o rdf:type ?C."
        +"FILTER"
        +"regex(?C,\"http://dbpedia.org/ontology/Award\")}";
    QueryExecution qe=QueryExecutionFactory.sparqlService(service, query);
    ResultSet rs=qe.execSelect(); 
    while (rs.hasNext()){ 
        QuerySolution s=rs.nextSolution();

        CR++;
        System.out.println(CR);
        }
    ;
    return CR;
}

Результат, который я получил в консоли, не превышает 10000.

.
.
9992
9993
9994
9995
9996
9997
9998
9999
10000

Пожалуйста, мне нужен пример запроса на выборку с apache jena, или найдите чтонеправильно с моим кодом.

Спасибо!

1 Ответ

0 голосов
/ 02 декабря 2018

Виртуоз Dbpedia, как и многие открытые конечные точки sparql, имеет ограничение по количеству результатов, которые он возвращает.Используйте LIMIT и OFFSET, чтобы получить результаты в пакетном режиме.Это даст вам вторую партию 10000:

SELECT * WHERE { 
    ?s dbo:award ?o .
    ?o rdf:type ?C .
    FILTER STRSTARTS(STR(?C), "http://dbpedia.org/ontology/Award")
}
LIMIT 10000
OFFSET 10000

Повторяйте со смещением 0, 10000, 20000 и т. Д., Пока результат не станет пустым.

PS.Поскольку ваш фильтр на самом деле соответствует URI полного типа, вы можете полностью удалить фильтр и просто сопоставить ?o rdf:type <http://dbpedia.org/ontology/Award> (или эквивалентно: ?o rdf:type dbo:Award) во втором условии.Это гораздо эффективнее.

...