简单的耶拿SPARQL查询不起作用

问题描述:

我在这里做错了什么?简单的耶拿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 | 
========= 
--------- 

我相信这是愚蠢的东西...

我觉得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()创建测试图,您使用的是较低级别的内部Graph API,而不是更常用的Model API。这样做完全没问题,但Graph API通常假定你知道更多你正在做的事情,并且可能会减少检查意外事件的检查次数。