You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wikidata SPARQL查询如何获取前置语句的P642谓词关联值

问题原因

你的SPARQL查询写法不符合Wikidata限定属性的查询规则,核心问题出在P642(of)属性的关联对象上:P642是属性声明的限定词,不是直接挂载在类型实体wd:Q21507383(加拿大省/地区首府类型)上的属性,而是挂载在每个城市「属于该类型」这条属性声明的节点上的。
你原来的写法wd:Q21507383 pq:P642 ?provinceOrTerritory是尝试从类型实体本身取P642值,自然取不到对应数据。

正确查询语句

如果要同时获取首府城市、对应省/地区名称,可用如下查询:

SELECT ?item ?itemLabel ?provinceOrTerritoryLabel
WHERE 
{
  # 先匹配首府城市的类型声明,并取该声明的P642限定值作为所属省/地区
  ?item p:P31 [ 
    ps:P31 wd:Q21507383 ; # 实例为加拿大省/地区首府
    pq:P642 ?provinceOrTerritory 
  ] .
  # 过滤省/地区的类型,这里保留了原来的省筛选,如果需要包含地区可添加对应类型
  { ?provinceOrTerritory wdt:P31 wd:Q11828004 . } # 加拿大的省
  UNION
  { ?provinceOrTerritory wdt:P31 wd:Q107370042 . } # 加拿大的地区

  SERVICE wikibase:label { bd:serviceParam wikibase:language "zh,en". }
}

如果你只需要查询省对应的首府,去掉UNION和加拿大地区的过滤条件即可。

P642属性批量查询通用规则

要批量获取Wikidata中通过P642关联的实体,统一使用如下查询范式:

  • 当你需要查询「某类实体的P属性声明附带的P642关联值」时,需要先拿到该属性的声明节点,再从声明节点取pq:P642的值:
    ?实体 p:属性ID [
      ps:属性ID 目标属性值 ;
      pq:P642 ?关联实体
    ]
    

以你举的多伦多为例,对应的查询片段就是:

wd:Q172 p:P31 [
  ps:P31 wd:Q21507383 ;
  pq:P642 ?province
]

执行后?province就会返回安大略省的实体。

内容的提问来源于stack exchange,提问作者Ludovic Bocken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:51:03