维基数据查询所有语言的城市名称
Wikidata Query Names of city in all languages
我从维基数据中查询一个城市及其人口。通过语言服务,我得到了给定语言的标签。
但我想获得所有语言的城市名称,或者至少一次获得多种语言的城市名称。我试图将 * 作为语言传递,但我没有返回所有城市名称。
我是否必须对每种语言进行一次查询?
这是我的查询
SELECT DISTINCT ?city ?cityLabel ?population
WHERE
{
?city wdt:P31/wdt:P279* wd:Q515 .
?city wdt:P1566 "2950157" .
?city wdt:P1082 ?population .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
我也试过只设置成这样的语言
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
bd:serviceparam wikibase:language "de" .
}
但是 returns
Unknown error: Expected a variable in the object position to which to
bind the language.
错误告诉您必须在选择过程中将德语标签绑定到变量 (?cityGe)。
SELECT DISTINCT ?city ?cityLabel ?cityGe ?population
WHERE
{
?city wdt:P31/wdt:P279* wd:Q515 .
?city wdt:P1566 "2950157" .
?city wdt:P1082 ?population .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
bd:serviceParam wikibase:language "de" .
}
}
但是,这并不能解决您的问题,因为这只是一种回退机制。如果它找不到英语,那么它会给你德语 label.There 是一些例子 here.
这可以简化为只有一个变量:
SERVICE wikibase:label { bd:serviceParam wikibase:language "en,de" }
但是,正如 AKSW 指出的那样,您可以使用 rdfs:label 来解决您的问题:
SELECT DISTINCT ?city ?label ?population
WHERE
{
?city wdt:P31/wdt:P279* wd:Q515 .
?city wdt:P1566 "2950157" .
?city wdt:P1082 ?population .
?city rdfs:label ?label
filter(lang(?label) = 'de' || lang(?label) = 'en')
}
我从维基数据中查询一个城市及其人口。通过语言服务,我得到了给定语言的标签。
但我想获得所有语言的城市名称,或者至少一次获得多种语言的城市名称。我试图将 * 作为语言传递,但我没有返回所有城市名称。
我是否必须对每种语言进行一次查询?
这是我的查询
SELECT DISTINCT ?city ?cityLabel ?population
WHERE
{
?city wdt:P31/wdt:P279* wd:Q515 .
?city wdt:P1566 "2950157" .
?city wdt:P1082 ?population .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
我也试过只设置成这样的语言
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
bd:serviceparam wikibase:language "de" .
}
但是 returns
Unknown error: Expected a variable in the object position to which to bind the language.
错误告诉您必须在选择过程中将德语标签绑定到变量 (?cityGe)。
SELECT DISTINCT ?city ?cityLabel ?cityGe ?population
WHERE
{
?city wdt:P31/wdt:P279* wd:Q515 .
?city wdt:P1566 "2950157" .
?city wdt:P1082 ?population .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
bd:serviceParam wikibase:language "de" .
}
}
但是,这并不能解决您的问题,因为这只是一种回退机制。如果它找不到英语,那么它会给你德语 label.There 是一些例子 here.
这可以简化为只有一个变量:
SERVICE wikibase:label { bd:serviceParam wikibase:language "en,de" }
但是,正如 AKSW 指出的那样,您可以使用 rdfs:label 来解决您的问题:
SELECT DISTINCT ?city ?label ?population
WHERE
{
?city wdt:P31/wdt:P279* wd:Q515 .
?city wdt:P1566 "2950157" .
?city wdt:P1082 ?population .
?city rdfs:label ?label
filter(lang(?label) = 'de' || lang(?label) = 'en')
}