我有以下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
...
如何扩展查询以显示州/省?
答案 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". } }