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

Database 使用SPARQL查询获取城市的州/省,database,sparql,wikidata,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 ... 或者,如果我要为美国

我有以下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
...

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

您必须沿着位于行政区域实体中的财产的路径,然后找到要停止的点,即,一旦实体是加拿大的一个省:

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". } }

这并不是那么简单。您必须遵循通过属性的路径,然后找到某个要停止的点,即,一旦实体是:
SELECT?item?itemLabel?regionLabel,其中{item wdt:P17 wd:Q16;(wdt:P31/(wdt:P279*)wd:Q515;wdt:P131*?region。?region wdt:P31 wd:Q11828004服务wikibase:label{bd:serviceParam wikibase:language“en”。}
@AKSW谢谢,这对加拿大很有效。我试图让它与美国一起工作,并使用了以下查询:
SELECT?item?itemlab?regionLabel其中{item wdt:P17 wd:Q30;(wdt:P31/(wdt:P279*)wd:Q515;(wdt:P131*)?region。?region wdt:P31 wd:Q35657。服务维基库:label{bd:serviceParam wikibase:language“en”。}
但我得到了一个超时错误。有没有可能使这个查询更“一般”,以便它可以很容易地适用于北美和欧洲国家?好吧,我们必须找到一些表示一个国家的国家的通用术语。这种三元组模式可以做到:
?region(wdt:P31/(wdt:P279*)wd:Q107390
——但同样,属性路径对于三元组存储非常糟糕,并且可能会超时。好吧,我至少可以给你一个查询,返回国家的顶级区域,也许你可以将其重用为:
select?region?regionLabel{VALUES?country{wd:Q30}获取国家的顶级地区?地区wdt:P17?国家。?地区wdt:P31/wdt:P279*wd:Q10864048.服务wikibase:label{bd:serviceParam wikibase:language“en”。}
我想知道是否有办法在一次查询中不仅为一个国家,而且为任何国家获得更高的行政区划。例如,为任何城市获得Q15916867。