我有喜欢的城市,湖泊山川奥德作为字符串的1200个地理enties列表。 我愿与权威文件维基数据ID来丰富这些enties。 这工作,但作为结果,我得到有时不止一个WikiDataID建议。 我需要定义由国家中陈述外观是正确的。
作为一个例子,我尝试了城市卡尔斯鲁厄。 对于字符串“卡尔斯鲁厄”我得到三个结果。 但我想只是一个特定的维基数据ID(在这种情况下: https://www.wikidata.org/wiki/Q1040 )在德国,Englisch和法语标签和altLabel(又称)。 作为条件,主体应是国家的一部分。 这可以由酒店P17或作为值Q6256定义。
有没有办法只是为了查询一个属性,而不在查询助手的过滤器的价值?
非常感谢您的帮助!
下面是该查询:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
prefix schema: <http://schema.org/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT DISTINCT ?country ?item ?itemLabel ?altLabel ?label_en ?
label_de ?label_fr
WHERE {
?item rdfs:label "Karlsruhe"@de.
?item skos:altLabel ?altLabel.
?item rdfs:label ?label_en.
?item rdfs:label ?label_de.
?item rdfs:label ?label_fr.
FILTER(LANGMATCHES(LANG(?altLabel), "de"))
FILTER((LANG(?label_en)) = "en")
FILTER((LANG(?label_de)) = "de")
FILTER((LANG(?label_fr)) = "fr")
SERVICE wikibase:label { bd:serviceParam wikibase:language "
[AUTO_LANGUAGE],de, en, fr". }
}
作为条件,主体应是国家的一部分。 这可以由酒店P17或作为值Q6256定义。 有没有办法只是为了查询一个属性,而不在查询助手的过滤器的价值?
如果我理解正确的话,你问如果您可以修改查询,如果该项目有一些国家(我们不关心哪一个)连接到它使得它只返回结果。 如果是这样的话,你可以在下面的图表模式添加到您的查询:
?item wdt:P17 ?country .
甚至:
?item wdt:P17 [] .
(在[]
是一个空节点,其在SPARQL表示一个匿名变量,即用于我们不感兴趣的值的占位符变量)。
此查询工作,我的目的:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX schema: <http://schema.org/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT DISTINCT *
WHERE {
?item rdfs:label "Karlsruhe"@de.
?item rdfs:label ?label_de.
FILTER((LANG(?label_de)) = "de").
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE], de, en, fr". }
bind(if(exists{?item wdt:P17 []}, "yes", "no") as ?country_)
optional {
?item rdfs:label ?label_en.
FILTER((LANG(?label_en)) = "en").
?item rdfs:label ?label_fr.
FILTER((LANG(?label_fr)) = "fr").
?item skos:altLabel ?altLabel_de.
FILTER(LANGMATCHES(LANG(?altLabel_de), "de"))
optional {
?item skos:altLabel ?altLabel_en.
FILTER(LANGMATCHES(LANG(?altLabel_en), "en"))
}
optional {
?item skos:altLabel ?altLabel_fr.
FILTER(LANGMATCHES(LANG(?altLabel_fr), "fr"))
}
}
}
order by ?item