2011-08-17 42 views
2

假設我有一個包含4個三元組一個RDF基:4store中奇怪的SPARQL模式匹配?

"John" "loves" "sushi" 
"John" "loves" "Mary" 
"Frank" "hates" "sushi" 
"John" "hates" "olives" 

,讓我們說,我認爲「壽司」這樣的,我想知道到底是什麼人可以用它做更一個奇怪的事情還有什麼他們可以使用同樣的動作=)

所以我寫了SPARQL查詢似乎是合乎邏輯對我說:

SELECT ?s ?o WHERE 
{ 
    ?s ?p "sushi". 
    ?s ?p ?o 
} 

自然期待得到以下結果

"John" "sushi" 
"John" "Mary" 
"Frank" "sushi" 

因爲對於每一個第一3個三元組存在一個滿意的雙(αS,?P)的值,使接合圖案評估爲TRUE。

但在現實中(我使用本地4store引擎& DB)的答案是這樣的:

"John" "sushi" 
"John" "Mary" 
"Frank" "sushi" 
"John" "olives" 

有人能解釋這種現象給我嗎?

如果這確實是它應該如何在SPARQL中工作,那麼獲得我需要的是什麼方式?

+0

沒有使用過sparql,這對我來說似乎非常隨意。 「約翰討厭橄欖」有什麼特別的地方讓你覺得它應該被拒絕? – Blindy

+1

你會發現,如果s =「John」並且p =「hates」,那麼在數據庫中就不存在滿足查詢第一部分的三元組。我期望這部分**定義**我感興趣的領域。我想找出約翰如果喜歡壽司可能喜歡的其他東西,或者如果他討厭壽司,他可能會討厭什麼其他的東西。但我得到的是一種混合 - 弗蘭克討厭壽司,因此我註定要被告知約翰討厭什麼。 –

+0

有多奇怪。再次,我不能幫你,我只是好奇:) – Blindy

回答

1

嗯,這看起來可能是4store一個錯誤,因爲我剛剛測試這四個不同的獨立SPARQL實現 - 耶拿ARQ,dotNetRDF利維坦,OpenLink公司的Virtuoso和克拉克&帕希婭的Stardog - 他們都返回答案你在期待。

而作爲一個自認SPARQL堅果,我認爲你所期望的答案是正確的。

我建議使用他們的支持郵件列表獲得與4store傢伙觸摸 - http://groups.google.com/group/4store-support?pli=1

注意這可能不是直接在4store一個錯誤,但在底層rasqal查詢庫中的錯誤,但我不足夠了解4store以這種或那種方式告訴你。

+2

4store有它自己的查詢引擎,所以如果一個錯誤,它會在那。我可以想象這個錯誤是什麼,優化器可能會忽略它,因爲它顯然對查詢並不重要,但實際上它需要這個值。 –

+0

非常感謝RobV。我將檢查你提到的其中一個實現。很高興知道我沒有生氣=) –

+0

是的,你說得對。必須是4store中的一個bug。 –