如何在Wikidata中查询获取全部花卉物种?多法尝试未达预期
解决Wikidata获取全部花卉物种的查询问题
你之前的查询结果远少于预期,核心原因是没考虑Wikidata中分类关系的传递性,以及花卉物种和“花”(Q506)类的关联逻辑。以下是几种有效的查询方案:
方案1:查询所有属于Q506或其子类的实例(含物种)
用传递属性路径wdt:P31/wdt:P279*获取所有层级的Q506子类实例,涵盖各类花卉物种和花类型:
SELECT DISTINCT ?flower ?flowerLabel WHERE { ?flower wdt:P31/wdt:P279* wd:Q506 . SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } }
方案2:精准查询开花植物物种
花卉物种本质是能产生花的植物物种,可通过“具有花”(P1525)属性关联Q506类,同时限定为生物物种(Q7432):
SELECT DISTINCT ?species ?speciesLabel ?flowerType ?flowerTypeLabel WHERE { ?species wdt:P31 wd:Q7432 ; # 限定为生物物种 wdt:P1525 ?flowerType . # 该物种对应花类型 ?flowerType wdt:P279* wd:Q506 . # 花类型属于Q506或其子类 SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } }
方案3:从被子植物分类出发
所有被子植物(Q25314)都能开花,可查询所有属于被子植物子类的物种:
SELECT DISTINCT ?species ?speciesLabel WHERE { ?species wdt:P31 wd:Q7432 ; wdt:P279* wd:Q25314 . # 传递查询被子植物的所有子类物种 SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } }
之前查询结果少的原因
- 直接查
wdt:P31 wd:Q506只能得到Q506的直接实例,这类条目多是泛化花类型或特定个体,并非物种; - 查
wdt:P279 wd:Q506仅能获取Q506的直接子类,而Q506存在大量间接子类(如月季是玫瑰的子类,玫瑰又是Q506的子类),必须用wdt:P279*实现层级传递; - 用P171(父分类)追溯被子植物不正确,Wikidata中物种的分类关系通常用P279(子类)或P31(实例)结合传递路径查询。
内容的提问来源于stack exchange,提问作者V310RG
相关产品推荐
相关产品推荐

