2016-08-01 133 views
0

我在想這些這兩個查詢是否產生相同的輸出。 讓我們想象一下,我有我收集數據的兩個RDF命名圖,並且前綴是店鋪: 我想寫一個SPARQL查詢,其中找出哪些客戶更喜歡哪一頓,輸出應該是人類可讀的SPARQL語法差異

一)

PREFIX shop: <"http://example.org/shop"> 
SELECT ?customerName ?mealName 
FROM <Customers.rdf> 
FROM <Meals.rdf> 
WHERE 
{ 
?customer shop:prefersMeal ?meal . 
?meal shop:mealName ?mealName . 
?customer shop:customerName ?customerName 
} 

b)

PREFIX shop: <"http://example.org/shop"> 
SELECT ?customerName ?mealName 
FROM <Customers.rdf> 
FROM <Meals.rdf> 
WHERE 
{ 
?x shop:prefersMeal ?meal . 
?y shop:mealName ?mealName . 
?z shop:customerName ?customerName 
} 

我試圖找出差異,但是當你沒有任何地方練習看起來比較複雜。

+0

你是什麼意思,你沒有任何地方練習?下載並安裝簡單的三重存儲並嘗試一些SPARQL查詢非常簡單。例如,請參閱[RDF4J服務器的安裝說明](http://rdf4j.org/doc/rdf4j-server-workbench-and-console/installing-rdf4j-server-and-rdf4j-workbench/)。 –

+2

當您將兩個查詢都視爲圖時,差異就變得非常明顯,即爲每個三元模式繪製一個邊,其中節點是主題和對象,邊標籤是謂詞。 – AKSW

回答

4

這兩個查詢不相同。

在第一個查詢中,您將在第二個和第三個三重模式中重複使用來自您的第一個三重模式的變量?meal?customer。在這個查詢中,你的意思是:「給我一個喜歡吃飯的顧客,同一餐必須有一個名字,同一個顧客必須有一個名字。」

在第二個查詢中,您在第二個和第三個子句中使用新變量?y?z。這個查詢說的是:「給我一個喜歡吃飯的顧客,給我一些餐的名字,並給我一些顧客的名字」。您不強制檢索的名稱針對同一客戶/餐飲,因此您將得到隨機的客戶/膳食組合,而不是每個客戶的實際首選膳食。

+0

你是說如果我用?x來更改?z,它會強制使用prefersMeal的CustumerName(比如綁定客戶名稱和優先餐),並且兩個查詢的結果都是相同的(它們會產生相同的輸出?)。我正在使用Windows併爲sparql尋找windows。 – Shkolla

+0

您還需要用'?meal'(或'?meal'替換'?y',如果您願意的話)替換'?y'。而RDF4J在Windows上運行良好。但如果你想要一些不同的東西做一個快速的谷歌搜索,有很多選項。 –