2013-08-21 31 views
5

僅這一個四添加到一個空店:Single quad +最基本的SPARQL查詢= 1結果在耶拿,2結果在芝麻 - 誰是對的?

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 

然後檢索橫跨所有四邊形執行這個SPARQL查詢(每鮑勃·杜查姆的書「學習SPARQL」拍攝,所以這一定是標準SPARQL數據集,無論實施,右!?)的:

SELECT ?g ?s ?p ?o 
WHERE { 
{ ?s ?p ?o } 
UNION 
{ GRAPH ?g { ?s ?p ?o } } } 

但是耶拿和芝麻不同的答案回答!?這是我看到:(!版本2.10.0 - 外的開箱,沒有配置更改) -

耶拿定式控制檯上的Tomcat 6.0.37(正確的答案,因爲我明白的事情):

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

Tomcat 6.0.37上的Sesame Workbench(版本2.7.3 - 開箱即用,無需更改配置!):只需在工作臺中使用「添加」功能手動添加上述四元組(以'N在「數據格式」下拉框中選擇「四元組」),在「輸入您想上傳的RDF數據」編輯框中,然後運行上面的查詢:

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
|     | <http://x.com/s> | <http://x.com/p> | 2 | 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

因此,對於開始關注RDF的人來說,這有點嚇人 - 我在這裏錯過了什麼?我假設芝麻不可能是'錯誤的' - 所以它必須是我想'我的'解釋'(或鮑勃的查詢不是'標準SPARQL',所以不同的實現可以自由地返回不同的結果) - 任何啓示都會是非常歡迎:)!

+3

您的'UNION'左側查詢默認圖形。我懷疑這兩個系統的默認圖中包含的內容有所不同。例如,可能在Jena中,除非添加三元組,否則默認圖是空的,而在Sesame中,默認圖是指定圖的聯合? –

回答

7

正如@Joshua Taylor在他的評論中指出的,原因是芝麻和耶拿對默認圖形使用了不同的解釋。

在芝麻中,整個存儲庫被認爲是默認圖:所有命名圖中的所有語句以及沒有命名圖的所有語句。因此,查詢默認圖形的工會的第一個參數成功並綁定了?s,?p?o(但不是?g)。你的工會的第二個參數顯然也成功了,因爲原來的四元組當然是在一個有名的圖中,因此你會得到兩個答案。

Jena默認使用「獨佔」默認圖形:只有未明確添加到任何特定命名圖形的語句纔會出現在默認圖形中。因此,在耶拿,你的聯合的第一部分失敗(Jena默認圖中沒有匹配的語句),第二部分成功,因此你只能得到1結果。

奇怪,因爲它聽起來,都是正確的。區別僅在於如何設置執行查詢的數據集。

當然,有辦法來解決這個問題。在Jena和芝麻中,您可以添加FROM (NAMED)子句以明確查詢數據集是什麼(Sesame提供sesame:nil圖名以明確查詢那些沒有命名圖關聯的語句)。或者,您可以編程方式修改執行查詢的數據集定義。 Jena和芝麻中的確切機制有點不同,但他們都有選擇(在芝麻中,您可以在執行前創建並提供Dataset對象,在Jena中我相信您可以重新配置實際商店或模型您執行查詢的行爲不同)。

+4

發佈之前的評論後,我研究了在Jena中獲取默認和聯合圖的方法。 [文檔](http://jena.apache.org/documentation/tdb/datasets.html)描述了兩個特殊圖形,「urn:x-arq:UnionGraph」和「urn:x-arq:DefaultGraph」。 –

+4

我不必在查詢中:如果通過上下文設置TDB.getContext()。set(TDB.symUnionDefaultGraph,true);那麼查詢默認圖是指定圖的聯合。請參閱http://jena.apache.org/documentation/tdb/datasets.html – AndyS