2011-12-21 110 views
2

我在這裏做錯了什麼?簡單的耶拿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()創建測試圖,您使用的是較低級別的內部Graph API,而不是更常用的Model API。這樣做完全沒問題,但Graph API通常假定你知道更多你正在做的事情,並且可能會減少檢查意外事件的檢查次數。