Запрос репозитория в Open RDF и отображение результатов

Я загрузил хранилище данных RDF в репозиторий OpenRDF, а затем пытаюсь запросить репозиторий и получить определенные данные на основе запроса. Я запускаю очень простой запрос, чтобы получить все предикаты субъектов и объекты. Но когда я пытаюсь распечатать результаты запроса, он просто показывает первую тройку. Я даю код метода, который выполняет только запрос, пожалуйста, проверьте и дайте мне знать, что не так.

private static void queryingRDF(Repository repo) {
    try{
        RepositoryConnection con = repo.getConnection();
        try{
            String queryString = "SELECT ?s ?p ?o WHERE { ?s ?p ?o } ";
              TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

              TupleQueryResult result = tupleQuery.evaluate();
              try {
                    BindingSet bindingSet = result.next();
                    Value valueOfX = bindingSet.getValue("s");
                    Value valueOfY = bindingSet.getValue("p");
                    Value valueOfZ = bindingSet.getValue("o");
                    System.out.println(valueOfX);
                    System.out.println(valueOfY);
                    System.out.println(valueOfZ);
              }
              finally {
                  result.close();
              }
        }
        finally{
            con.close();
        }
    }
    catch(OpenRDFException e){
        System.out.println("Query error");
    }

}

person Som Sarkar    schedule 12.05.2014    source источник
comment
Я только что заметил, что в пользовательской документации это не совсем понятно, пример кода был немного искажен. Исправлено сейчас.   -  person Jeen Broekstra    schedule 13.05.2014


Ответы (1)


TupleQueryResult — это итератор, поэтому, если вы хотите увидеть все результаты, вам нужно повторить его:

while (result.hasNext()) 
{
  BindingSet bindingSet = result.next();
  // Do what you want with the result
}
result.close();

Если вы не знаете, как использовать итераторы, взгляните на Oracle Коллекции руководство для краткого ознакомления

person RobV    schedule 12.05.2014
comment
Фактически, TupleQueryResult — это итерация (который является специфичным для Sesame объектом), а не фактический итератор Java (который нельзя было использовать повторно, потому что нам нужно было иметь возможность генерировать проверенные исключения). Но тот же принцип работает, конечно. - person Jeen Broekstra; 13.05.2014