使用SPARQL查询获取城市的州/省

时间:2019-04-24 19:11:14

标签: database sparql wikidata

我有以下SPARQL查询:

SELECT ?item ?itemLabel WHERE {
  ?item wdt:P17 wd:Q16;
    (wdt:P31/(wdt:P279*)) wd:Q515.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

,在这种情况下,返回加拿大的城市。我还想显示状态/过程,例如,预期输出应为

...
Montreal    Quebec
...

或者,如果我要查询美国城市

...
Los Angeles    California
...

如何扩展查询以显示州/省?

1 个答案:

答案 0 :(得分:1)

您必须通过位于行政领土实体中的媒体资源走一条路,然后找到要停止的地方,也就是说,一旦该实体是加拿大的一个省,就在这里:

SELECT ?item ?itemLabel ?regionLabel 
WHERE { ?item wdt:P17 wd:Q16; 
              (wdt:P31/(wdt:P279*)) wd:Q515; 
              wdt:P131* ?region . 
        ?region wdt:P31 wd:Q11828004 
        SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
}

更一般地,对于一个国家的州,我们必须找到一些通用的术语来表示它。这种三重模式可以做到:

 ?region (wdt:P31/(wdt:P279*)) wd:Q107390

但是,三元组商店的属性路径非常糟糕,并且可能会超时。

以下查询至少返回一个国家/地区的顶级区域:

select ?region ?regionLabel 
{ VALUES ?country {wd:Q30} # get the top level regions of the country 
  ?region wdt:P17 ?country . 
  ?region wdt:P31/wdt:P279* wd:Q10864048 . 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }