1

我想获得每个城市的人口数量。

你知道如何正确添加吗?目前我得到了空的结果。

这是我的查询:

SELECT DISTINCT ?cityLabel ?population ?gps ?data WHERE {
?city (wdt:P31/(wdt:P279*)) wd:Q515;
wdt:P1082 ?population;
wdt:P625 ?gps.
OPTIONAL { ?population wdt:P585 ?date. } # here I have a problem
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY DESC(?population) LIMIT 100

PS。只需将其粘贴在这里:https ://query.wikidata.org/

4

1 回答 1

1
  • 第一个问题:您正在选择?data,但实际变量是?date.
  • 第二个问题:?population是你语句的对象,但限定词指的是整个语句,而不仅仅是它的对象。

要引用该语句,您必须使用p:P1082而不是wdt:P1082.

您可以通过以下查询获得所需的内容:

SELECT DISTINCT ?cityLabel ?population ?gps ?date WHERE {
  ?city
    wdt:P31/wdt:P279* wd:Q515;
    wdt:P625 ?gps.
  ?city p:P1082 ?populationStatement .
  ?populationStatement ps:P1082 ?population .
  OPTIONAL { ?populationStatement pq:P585 ?date. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY DESC(?population)
LIMIT 10

我设置LIMIT 10是因为这是一个非常繁重的查询,有时它会超时。

为了加深这个话题,我建议你阅读Wikidata:SPARQL tutorial§Qualifiers

于 2021-02-08T18:43:09.317 回答