Запрос к открытому репозиторию RDF

Я пытаюсь запросить открытый репозиторий RDF, который загружен файлом черепахи. Когда я выбираю все запросом - "SELECT ?s WHERE {?s ?p ?o}"; тогда все работает нормально, но когда я использую небольшой сложный запрос, он не работает. Я прилагаю код для части запроса -

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

              TupleQueryResult result = tupleQuery.evaluate();
              try {
                   while(result.hasNext()){
                        BindingSet bindingSet = result.next();
                        Value valueOfX = bindingSet.getValue("s");
                        //Value valueOfY = bindingSet.getValue("p");
                        //Value valueOfZ = bindingSet.getValue("o");
                        //System.out.println(valueOfX + "   " + valueOfY + "   " + valueOfZ);
                        System.out.println(valueOfX) ;
                   }

              }

              finally {
                  result.close();
              }
        }
        finally{
            con.close();
        }
    }
    catch(OpenRDFException e){
        System.out.println("Query error");
    }

}

Это постоянно попадает в раздел исключений и выдает ошибку - «Ошибка запроса». Что происходит не так?


person Som Sarkar    schedule 16.05.2014    source источник
comment
Просто совет: при отладке такого рода проблем не игнорируйте фактическое исключение. Вместо этого проверьте его трассировку стека, например, распечатав его: e.printStackTrace();, или, по крайней мере, посмотрите на сообщение об исключении: System.out.println(e.getMessage());. Точное сообщение и трассировка стека часто содержат полезную информацию о том, что именно пошло не так.   -  person Jeen Broekstra    schedule 16.05.2014


Ответы (1)


Похоже, вы не определили префиксы uml или cp. Я ищу подобное утверждение в вашей строке запроса:

PREFIX uml: <http://example.com/uml>

или вызов RepositoryConnection::setNamespace следующим образом:

con.setNamespace("uml", "http://example.com/uml");
person Paul Butcher    schedule 16.05.2014
comment
Вызов setNamespace не решит проблему. Запрос SPARQL должен быть синтаксически полным, что означает, что в запрос необходимо добавить объявление префикса. - person Jeen Broekstra; 16.05.2014
comment
Спасибо @JeenBroekstra. Я раньше не использовал эту библиотеку Java и предположил, что это способ установить пространства имен вне фактического запроса. - person Paul Butcher; 20.05.2014