如何获取应用于维基数据 SPARQL 查询中先前语句的 P642 of-predicate 的值?

How to get the values of the P642 of-predicate applied to a previous statement in a SPARQL query for Wikidata?

我想获取加拿大的省会或地区首府城市

SELECT ?item ?itemLabel ?provinceOrTerritoryLabel
    WHERE 
    {
      ?item wdt:P31 wd:Q21507383. # provincial or territorial capital city in Canada (Q21507383)
      wd:Q21507383 pq:P642 ?provinceOrTerritory.
     ?provinceOrTerritory wdt:P31 wd:Q11828004. # province of Canada (Q11828004)
      
      SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
    }

我认为这应该有效,但事实并非如此。

非常感谢您的帮助!

编辑

我在这里的真正目的是了解如何获取大量与 属性“of (P642)”相关的维基数据。例如,对于多伦多 (https://www.wikidata.org/wiki/Q172),我们得到:

实例 > 加拿大的省或地区首府 > (P642) > 安大略省

(编辑后的答案,现在几乎可以理解了)

这是您要查询的内容:

SELECT ?capital ?capitalLabel ?of ?ofLabel WHERE {
  ?capital p:P31 ?statement.
  ?statement ps:P31 wd:Q21507383.
  OPTIONAL { ?statement pq:P642 ?of. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

Here's the link

运行 那么,您会明白为什么我之前没有完全按照您的意愿行事:限定符 P642 的“of”并不是最常用的建模方式,也不应该是。

除其他原因外,原因是“of”非常通用,几乎打破了 Wikidata 的整个概念。

所以这就是为什么我立即采用不同的方式获取省份、地区及其首府的原因。这也不完美。大写有明确的属性,这就是你最好的获取数据的方式,实际上是完整的:

SELECT ?provinceOrTerritory ?provinceOrTerritoryLabel ?capital ?capitalLabel
WHERE {
    ?provinceOrTerritory wdt:P31/wdt:P279  wd:Q2879;
    OPTIONAL { ?provinceOrTerritory wdt:P36 ?capital. }
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

(Link)