如何在SPARQL中实现Wikidata树形结构的深度限制查询
如何在Wikidata SPARQL中限制树形查询的深度为1
你的原查询使用wdt:P279*,其中*表示零或任意次数匹配P279(子类关系),所以会返回目标条目下所有层级的子类。要限制深度为1(仅包含父节点和直接子节点),只需将通配符修改为?——?表示零或一次匹配,刚好覆盖自身和直接子类两种情况。
修改后的查询代码:
SELECT ?item ?itemLabel WHERE { ?item wdt:P279? wd:Q3314483. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } }
如果需要更直观地拆分逻辑(方便后续扩展不同深度的处理),也可以用UNION明确指定两种匹配情况:
SELECT ?item ?itemLabel WHERE { { ?item wd:Q3314483 } # 匹配父节点自身 UNION { ?item wdt:P279 wd:Q3314483 } # 匹配直接子节点 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } }
两种写法都能得到你预期的结果:父节点Q3314483(Fruit)加上所有直接子类如Q89(Apple)、Q169(Mango)等。
内容的提问来源于stack exchange,提问作者Timebird
相关产品推荐
相关产品推荐

