[英]SPARQL - Unable to filter by country
我知道這是一個容易回答的問題,但是我已經搜索了幾個小時而沒有成功。 為什么在http://dbpedia.org/snorql/中輸入以下SPARQL不會返回任何內容?
prefix dbo: <http://dbpedia.org/ontology/>
SELECT ?country ?city ?city_name ?country_name
WHERE {
?city rdf:type dbo:City .
?city foaf:name ?city_name .
?city dbo:country ?country .
FILTER(?country=dbpedia:Canada).
?country foaf:name ?country_name .
}
LIMIT 200
我也嘗試過-結果相同(即沒有)
prefix dbo: <http://dbpedia.org/ontology/>
SELECT ?country ?city ?city_name
WHERE {
?city rdf:type dbo:City .
?city foaf:name ?city_name .
?city dbo:country ?country .
?country foaf:name ?country_name .
FILTER(langMatches(lang(?country_name),"EN") && ?country_name="Canada")
}
LIMIT 200
無需過濾器即可獲得相等性。
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?country ?city ?city_name
WHERE {
?city rdf:type dbo:City ;
foaf:name ?city_name ;
dbo:country ?country .
?country foaf:name "Canada"@en .
FILTER(langMatches(lang(?city_name), "en"))
}
ORDER BY ?city_name
LIMIT 100
測試: http : //linkedwiki.com/query/Filter_cities_by_country_with_DBpedia
進一步挖掘了一下。
為了進行第一個查詢挖掘,我使用了錯誤的前綴。 我需要使用<http://dbpedia.org/Resource>
而不是本體。 這是在snorql中預定義的-但實際上沒有前綴。 但隨着一些擺弄,以下工作。
prefix dbo: <http://dbpedia.org/ontology/>
SELECT ?country ?city ?city_name ?country_name
WHERE {
?city rdf:type dbo:City .
?city foaf:name ?city_name .
?city dbo:country ?country .
FILTER(?country=:Canada).
?country foaf:name ?country_name .
}
LIMIT 200
至於名稱匹配,顯然在使用foaf
時不能僅匹配文字。 您需要添加語言標簽:
prefix dbo: <http://dbpedia.org/ontology/>
SELECT ?country ?city ?city_name
WHERE {
?city rdf:type dbo:City .
?city foaf:name ?city_name .
?city dbo:country ?country .
?country foaf:name ?country_name .
FILTER(langMatches(lang(?country_name),"EN") && ?country_name="Canada"@en)
}
LIMIT 200
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.