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

获取含子类且忽略真值的Wikidata实体实例的SPARQL查询修正

解决Wikidata SPARQL查询丢失实例的问题

要实现提取指定实体的所有实例及其子类实例、忽略truthiness、可复用的查询,核心是覆盖所有P31声明(而非仅最优优先级的),同时正确遍历子类传递链。以下是修正后的查询:

SELECT DISTINCT ?item ?itemLabel
WHERE {
  # 替换此处的QID即可切换目标实体,比如Q6256=国家,Q486972=人类聚居地
  BIND(wd:Q6256 AS ?targetClass)
  
  # 匹配所有P31声明(忽略truthiness,包含所有优先级的声明)
  ?item p:P31/ps:P31 ?instanceType.
  # 匹配目标实体及其所有子类的传递关系
  ?instanceType wdt:P279* ?targetClass.
  
  # 可选:获取中文标签,方便查看结果
  SERVICE wikibase:label { bd:serviceParam wikibase:language "zh". }
}
ORDER BY ?itemLabel

关键修正点:

  • 忽略truthiness:用p:P31/ps:P31替代wdt:P31。wdt:P31仅返回每个条目的最优优先级(首选/正常)声明,会丢失那些只有过时、备选优先级声明的实例;而p:P31获取所有P31声明,ps:P31提取声明的主值,确保不遗漏任何实例。
  • 子类覆盖:?instanceType wdt:P279* ?targetClass通过传递遍历,确保包含目标实体的所有子类实例,比如查询人类聚居地时,会自动覆盖城市、乡镇等子类的实例。
  • 去重处理:DISTINCT避免同一个条目因多个P31声明(如同时属于城市和聚居地)重复出现。

复用说明

只需修改BIND(wd:Q6256 AS ?targetClass)中的QID即可切换查询目标,比如替换为wd:Q486972就能查询所有人类聚居地及其子类实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:15:10