维基数据查询所有语言的城市名称

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')
}