如何修正Wikidata SPARQL查询以获取wd:Q95关联的wd:43229相关实体?
修正后的SPARQL查询方案
原查询存在两个核心问题:
- 使用
OPTIONAL导致未关联到wd:Q43229的冗余实体也被返回,无法过滤无效结果 - 中间节点
?node的引入让查询逻辑冗余,直接建立?subClass与wd:Q43229的子类链关联即可
修正后的查询语句
SELECT DISTINCT ?subClass ?subClassLabel WHERE { # 获取wd:Q95的所有类型及类型的子类 wd:Q95 p:P31/ps:P31/wdt:P279* ?subClass . # 确保?subClass是wd:Q43229的超类或自身(即wd:Q43229是?subClass的子类) wd:Q43229 wdt:P279* ?subClass . # 获取英文标签 ?subClass rdfs:label ?subClassLabel . FILTER(LANG(?subClassLabel) = "en") }
逻辑说明
wd:Q95 p:P31/ps:P31/wdt:P279* ?subClass:遍历Google(wd:Q95)的实例类型,以及所有上层类(子类链向上)wd:Q43229 wdt:P279* ?subClass:确保筛选出的类是组织(wd:Q43229)的上层类或自身,精准匹配你需要的实体范围DISTINCT和英文标签过滤保留唯一且符合语言要求的结果
内容的提问来源于stack exchange,提问作者sl_
相关产品推荐
相关产品推荐

