2011-12-21 4 views
2

Что я здесь делаю неправильно?Простой запрос Jena SPARQL не работает

public class SimpleSearchTest { 
    public static void main(String[] args) throws Exception { 
    Model model = ModelFactory.createDefaultModel(); 
    model.getGraph().add(new Triple(Node.createURI("a"), Node.createURI("b"), Node.createURI("c"))); 
    String queryString = "SELECT ?p ?o WHERE { <a> ?p ?o }"; 
    Query query = QueryFactory.create(queryString); 
    QueryExecution qExec = QueryExecutionFactory.create(query, model); 
    ResultSetFormatter.out(qExec.execSelect()); 
    } 
} 

Я ожидаю

------------- 
| p | o | 
============= 
| <b> | <c> | 
------------- 

Но вместо этого я не подвожу никаких результатов:

--------- 
| p | o | 
========= 
--------- 

Я уверен, что это что-то немой ...

ответ

2

Я думаю, что SPARQL Парсер не нравится вашему <a>, потому что это не юридический URI (хотя странно, что вы не получите предупреждение). Если вы измените свой код следующим образом:

model.getGraph().add(new Triple(Node.createURI("http://example.com/a"), Node.createURI("b"), Node.createURI("c"))); 
String queryString = "SELECT ?p ?o WHERE { <http://example.com/a> ?p ?o }"; 

Вы получаете результат, которого ожидаете.

Параметрически, создавая тестовый график с помощью Node.createURI(), вы используете внутренний графический API нижнего уровня, а не более обычно используемый API-интерфейс модели. Это прекрасно, но Graph API обычно предполагает, что вы знаете больше, что делаете, и, возможно, меньше проверок против неожиданного.

 Смежные вопросы

  • Нет связанных вопросов^_^