2014-05-02 40 views
1

我正在嘗試使用Sesame API查詢本體。通常的查詢方式是不可能的,因爲它提供了UnsupportedQueryLanguageException。沒有工廠可用於查詢語言SPARQL。如何在Android中使用SPARQL在芝麻openrdf中查詢?

最終我與查詢:

SPARQLParser parser=new SPARQLParser(); 
ParsedQuery query=parser.parseQuery(queryString,null); 

StatementPatternCollector collector=new StatementPatternCollector(); 
query.getTupleExpr().visit(collector); 

List<StatementPattern> patterns=collector.getStatementPatterns(); 

當我顯示的結果,它不包含任何陳述;我如何顯示這些語句?

+0

你到目前爲止嘗試過什麼?沒有上下文的代碼,你不清楚你在問什麼。 「通常的查詢方式」:這是什麼? –

+0

出於興趣:你是怎麼想出這個代碼的?我想問的原因是我記得其他人做類似的事情,所以我想知道是否有網上的教程,錯誤地推薦這種方法來查詢... –

+0

正如Joshua在他的回答中所說:這段代碼不執行查詢,它只是分析一個查詢字符串。這完全是錯誤的方法。您面臨的問題是類路徑配置之一,而不是編程問題,您應該專注於解決這個問題。 –

回答

2

如果你得到一個UnsupportedQueryLanguageException你可能沒有正確設置你的類路徑。芝麻通過JDK ServiceLoader加載東西,所以你可能會丟失一個包含SPARQL東西的jar文件。

就你的代碼片段而言,這不會執行SPARQL查詢。這是分析查詢的代數,並收集查詢中包含的任何BGP。我不認爲這就是你的意圖。

仔細檢查您的類路徑,確保您已包含相應的芝麻罐並重新嘗試查詢芝麻庫的正常方式。

+1

鑑於異常中的具體錯誤消息,我會說OP缺少'sesame-queryparser-sparql- .jar'或'sesame-queryparser-api- .jar',至少。一些常規建議:使用依賴管理工具導入您的Sesame庫,如Maven或Ivy。 –

+0

是的,我在線獲得了此代碼。我說的常用方法是以TupleQuery tuplequery = con.prepareTupleQuery(QueryLanguage.SPARQL,queryString)這樣的簡單方法; TupleQueryResult結果= tuplequery.evaluate()。 – user3556249

+0

我正在做一個Android應用程序。如果你還記得我問加載文件的類似問題。通過編寫TurtleParser parser = new TurtleParser(),然後在代碼中使用這個解析器解決了這個問題。之後,我遇到了Query的問題,我想可能會以類似的方式解決它。 – user3556249