我有以下 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
...
如何扩展查询以显示州/省?
最佳答案
您必须沿着位于行政领土实体内的属性(property)走一条路,然后找到一些停靠点,即如果该实体是加拿大的一个省,就在这里:
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". } }
关于database - 使用 SPARQL 查询获取城市的州/省,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55837039/