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

标签 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
...

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

最佳答案

您必须沿着位于行政领土实体内的属性(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/

相关文章:

php - Yii2 翻译存储在数据库中的数据

linux - 无法在终端代码中为带连字符 (-) 的用户名添加密码

java - 遍历耶拿的匿名/空白节点

wikipedia - 维基数据有多少是有机的(用户输入的,独立于维基百科)?

php - 我有一个 HTML 表单用于更新数据库中的内容,如果我在表单的输入字段中输入单引号,则 sql 更新失败

php - 使用表将 php 中的数据与 MySQL 中的数据按日期分开

java - 执行查询后如何在 SPARQL 中打印检索到的语句

namespaces - 从图形数据库中检索所有前缀

wikidata - Wikidata-SPARQL查询的请求限制

json - 我如何利用 Wikidata 构建类似 Siri 的服务?