2014-07-23 82 views
1

我試圖在java中查詢jena TDB。我的代碼如下。看起來我的TDB數據集是空的,因爲model.size()(其中model是數據集默認模型)返回0.我確定它不是空的,因爲我可以用Fuseki用我的sparqlEndpoint查詢它。查詢Jena TDB商店

String directory = "//var//www//fuseki//TDB" ; 
Dataset dataset = TDBFactory.createDataset(directory) ; 

Model model = dataset.getDefaultModel(); 
String sparqlQueryString = "SELECT (count(*) AS ?count) { ?s ?p ?o }" ; 

Query query = QueryFactory.create(sparqlQueryString) ; 
QueryExecution qexec = QueryExecutionFactory.create(query, model); 

ResultSet results = qexec.execSelect() ; 
ResultSetFormatter.out(results) ; 

qexec.close(); 
System.err.printf("Model size is: %s\n", model.size()); 
+0

爲什麼'「// var // www // fuseki // TDB」'中的所有雙斜線? –

+0

'System.err.printf(「Model size is:%s \ n」,model.size());'? –

回答

4

這似乎我的TDB是空的,因爲model.size()返回0。我敢肯定,它 是不是空的,因爲我可以用我的sparqlEndpoint定式查詢。

事情可以存在沒有內容。字符串""的長度爲0,但它仍然是一個字符串。你沒有顯示你的查詢結果

SELECT (count(*) AS ?count) { ?s ?p ?o } 

它返回0,還是別的?此外,當你做

Model model = dataset.getDefaultModel(); 

你只得到數據集的默認模式,但數據集可以包含多個命名圖的,除了默認的圖形。如果你確實有三倍的數據集,他們可能會在命名圖,在這種情況下,你可以不喜歡

select (count(*) as ?count) { graph ?g { ?s ?p ?o } } 

我不知道隨便定式是如何處理的默認的圖形,但它可能是,數據集的默認圖形已配置(我認爲這可以自定義)爲數據集中指定圖形的聯合。在這種情況下,getDefaultModel的結果可能仍然是空的模型。我在這方面進行了推測,但這是一種可以從默認圖表中獲得結果的可行方式,同時仍然將默認模型設爲空。

+0

你有權利,我不需要雙斜槓。 我刪除Model model = dataset.getDefaultModel()。我詢問了 QueryExecution qexec = QueryExecutionFactory.create(query,dataset);使用查詢select(count(*)as?count){graph?g {?s?p?o}} 謝謝Joshua! – Ryfa