2013-04-11 68 views
2

如何用兩個變量創建sparql查詢? 讓我解釋一下: 我有一個歷史地圖的本體論。我的實體是:HistoricalMap,Language,Color 以及連接它們的對象屬性爲:hasLanguage,hasColor(hist.map具有語言和顏色)。 如果我使查詢:帶兩個變量的Sparql查詢

SELECT ?HistoricalMap ?Language ?Color 
     WHERE { ?HistoricalMap p1:hasLanguage ?Language. 
         ?HistoricalMap p1:hasColor ?Color. 
} 

我得到的所有有顏色和語言的地圖。

我該如何要求地圖hasColor「紅」AND hasLanguage法語?

回答

5

因爲你想要「AND」,所以你可以在模式中使用常量。

SELECT ?HistoricalMap 
     WHERE { ?HistoricalMap p1:hasLanguage "French". 
         ?HistoricalMap p1:hasColor "Red" . 
} 

如果你也想還是回到了變量,使用FILTER

SELECT ?HistoricalMap ?Language ?Color 
     WHERE { ?HistoricalMap p1:hasLanguage ?Language. 
         ?HistoricalMap p1:hasColor ?Color. 
       FILTER(?Language = "French" && ?Color = "Red") 
} 
+0

:我嘗試了建議的模式,但它返回「沒有找到匹配」,即使存在一個匹配「法國」和「紅」的代表作爲我本體中的實例(Protege)。「French」和「Red」是實例的名稱,它們也作爲標籤存儲在這些實例中。也許這是一種問題? – user2270072 2013-04-11 19:38:50

+1

這是一個猜謎遊戲,沒有一個完整的,最小的例子。請顯示數據;請說出您使用哪個系統進行查詢。嘗試「紅色」^^ xsd:string和「French」^^ xsd:string因爲Protege通常將字符串存儲爲數據類型文字。 – AndyS 2013-04-11 20:18:09

+0

我終於做到了這一點,它似乎工作: – user2270072 2013-04-11 20:22:48

3

你需要了解如何法語紅色在你的數據表示。

它應該足以查看它們在執行查詢時如何返回。

查詢DBpedia中,這將是,例如:

SELECT ?entity 
WHERE { 
    ?entity dbpedia-owl:colour <http://dbpedia.org/resource/Red> . 
    ?entity dbpedia-owl:language <http://dbpedia.org/resource/French_language> . 
} 
+0

「French」在我的本體(Protege)中被表示爲實例。單詞「French」和「Red」是實例的名稱,它們也作爲標籤存儲在這些實例中。也許這是某種問題? – user2270072 2013-04-11 19:43:39

+1

使用url _instance_。(請參閱dbpedia上的網址示例) – kr1 2013-04-11 19:52:23

+0

謝謝您的回答。它似乎接受查詢,但它返回白色線作爲答案...即使有兩個真實的答案... – user2270072 2013-04-11 20:07:22