我有以下SPARQL查詢:過濾
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT *
WHERE {
?person a foaf:Person;
foaf:name ?name;
prop:deathCause ?death_cause.
FILTER (langMatches(lang(?name), "EN")) .
}
LIMIT 50
如果這個位置運行:http://dbpedia.org/snorql/
你會看到,你得到了不少成果。現在我想過濾一個死亡原因,讓我們說'交通碰撞'。所以這應該添加濾鏡是簡單的:
FILTER (?death_cause = "Traffic collision").
所以查詢應該再是:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT *
WHERE {
?person a foaf:Person;
foaf:name ?name;
prop:deathCause ?death_cause.
FILTER (?death_cause = "Traffic collision").
FILTER (langMatches(lang(?name), "EN")) .
}
LIMIT 50
然而,這沒有返回。任何知道查詢有問題的人?謝謝。
謝謝!對不起,我其實並不是指_filter out_,我想要一個單一的死亡原因。但刪除「!」在你的答案的最後一個查詢解決了這個問題,並學習過濾_out_我考慮獎金!一個小的後續:在屬性名稱/變量周圍添加str()的原因是什麼?這並不明顯。 –
@MariusLian RDF中的文字可以是純文本(無語言或數據類型),鍵入(帶有數據類型)或帶有語言標記的語言(帶有語言標籤)。 'str'從所有三種中提取字符串部分。我爲答案增加了更多解釋。 –
所以實際上在其他過濾器中發生了什麼。 lang()函數提取語言部分。感謝您的明確解釋! –