在 WikiData 中使用 SPARQL 查询没有值的 属性
Querying property without value with SPARQL in WikiData
我有一个包含 1200 个地理实体的列表,例如城市、湖泊或山脉等字符串。我想用权威文件 WikiData ID 丰富这些实体。这行得通,但结果我有时会收到不止一个 WikiDataID 建议。我需要在声明中根据一个国家的外观来定义正确的。
作为示例,我尝试了卡尔斯鲁厄市。
对于字符串 "Karlsruhe" 我得到三个结果。但我只想要一个特定的 WikiData ID(在本例中为:https://www.wikidata.org/wiki/Q1040),带有标签和德语、英语和法语的 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". }
}
As an condition the entity should be part of an country. This you can define by the property P17 or as an value Q6256. Is there a way just to query a property without the value in Filter of the Query Helper?
如果我没理解错的话,你问的是你是否可以修改查询,如果项目有 一些 个国家(我们不不在乎哪个)附加到它。如果是这种情况,您只需将以下图形模式添加到您的查询中:
?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
我有一个包含 1200 个地理实体的列表,例如城市、湖泊或山脉等字符串。我想用权威文件 WikiData ID 丰富这些实体。这行得通,但结果我有时会收到不止一个 WikiDataID 建议。我需要在声明中根据一个国家的外观来定义正确的。
作为示例,我尝试了卡尔斯鲁厄市。 对于字符串 "Karlsruhe" 我得到三个结果。但我只想要一个特定的 WikiData ID(在本例中为:https://www.wikidata.org/wiki/Q1040),带有标签和德语、英语和法语的 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". }
}
As an condition the entity should be part of an country. This you can define by the property P17 or as an value Q6256. Is there a way just to query a property without the value in Filter of the Query Helper?
如果我没理解错的话,你问的是你是否可以修改查询,如果项目有 一些 个国家(我们不不在乎哪个)附加到它。如果是这种情况,您只需将以下图形模式添加到您的查询中:
?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