通过在 WikiData 中使用 SPARQL 查询清空标签
Empty Labels by querying with SPARQL in WikiData
更新:这个问题通过链接到另一个问题,因为它是关于相同的输出数据。
我有一个包含 1200 个地理实体的列表,例如城市、湖泊或山脉等字符串。我想用权威文件 WikiData ID 丰富这些实体。这行得通,但结果我有时会收到不止一个 WikiDataID 建议。我需要根据声明中任何国家(无论哪个国家)的外观来定义正确的作为约束。
作为示例,我尝试了卡尔斯鲁厄市。对于字符串 "Karlsruhe" 我得到五个结果。在本例中,我选择 ID Q1040 (https://www.wikidata.org/wiki/Q1040)。
现在我遇到了一个问题,我不知道如何用英语、德语和法语查询 altLabel(也称为 konwn as)和标签。
使用当前代码,尽管有 altLabels 和 Labels(请参阅 WikiData),但 altLabel 和 Labels 的条目为空。
我想我刚刚使用了错误的代码行顺序。
有人可以帮我确定正确的顺序吗?
非常感谢您的帮助!
这里是查询:
SELECT DISTINCT ?item ?itemLabel ?altLabel ?label_en ?label_de ?
label_fr WHERE {
?item rdfs:label "Karlsruhe"@de.
?item wdt:P17 [] .
optional {
?item skos:altLabel ?altLabel.
?item rdfs:label ?label_de FILTER((LANG(?label_de)) = "de") .
?item rdfs:label ?label_en FILTER((LANG(?label_en)) = "en") .
?item rdfs:label ?label_fr FILTER((LANG(?label_fr)) = "fr") .
FILTER(LANGMATCHES(LANG(?altLabel), ?item))
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "
[AUTO_LANGUAGE],de, en, fr". }
}
此查询适用于我的项目:
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" 我得到五个结果。在本例中,我选择 ID Q1040 (https://www.wikidata.org/wiki/Q1040)。 现在我遇到了一个问题,我不知道如何用英语、德语和法语查询 altLabel(也称为 konwn as)和标签。 使用当前代码,尽管有 altLabels 和 Labels(请参阅 WikiData),但 altLabel 和 Labels 的条目为空。 我想我刚刚使用了错误的代码行顺序。 有人可以帮我确定正确的顺序吗?
非常感谢您的帮助!
这里是查询:
SELECT DISTINCT ?item ?itemLabel ?altLabel ?label_en ?label_de ?
label_fr WHERE {
?item rdfs:label "Karlsruhe"@de.
?item wdt:P17 [] .
optional {
?item skos:altLabel ?altLabel.
?item rdfs:label ?label_de FILTER((LANG(?label_de)) = "de") .
?item rdfs:label ?label_en FILTER((LANG(?label_en)) = "en") .
?item rdfs:label ?label_fr FILTER((LANG(?label_fr)) = "fr") .
FILTER(LANGMATCHES(LANG(?altLabel), ?item))
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "
[AUTO_LANGUAGE],de, en, fr". }
}
此查询适用于我的项目:
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