使用SPARQL从Wikidata获取Q29863机场跑道长度失败求助
解决Wikidata机场跑道长度查询问题
问题原因
你使用的属性wdt:P869(跑道)指向的是独立的跑道实体,而非直接的长度数值。史基浦机场的跑道信息存储在各个跑道子实体的wdt:P2048(长度)属性中,需要关联到跑道实体后再提取长度。
正确SPARQL查询
1. 获取所有跑道的长度(带单位)
SELECT ?runway ?runwayLabel ?runwayLength ?runwayLengthUnit ?runwayLengthUnitLabel WHERE { wd:Q29863 wdt:P869 ?runway. ?runway wdt:P2048 ?runwayLength. ?runwayLength wikibase:unit ?runwayLengthUnit. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } }
该查询会返回每条跑道的名称、长度数值及对应单位(如米、英尺)。
2. 仅获取米为单位的长度数值
如果需要统一提取米单位的长度,可添加过滤条件:
SELECT ?runwayLabel ?runwayLengthValue WHERE { wd:Q29863 wdt:P869 ?runway. ?runway wdt:P2048 ?runwayLength. ?runwayLength wikibase:unit wd:Q11573. # Q11573是“米”的实体ID ?runwayLength wikibase:quantityValue ?runwayLengthValue. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } }
补充说明
Wikidata中机场与跑道是一对多关联,每条跑道作为独立条目存在,长度等属性直接附着在跑道条目上,而非机场主条目,因此必须通过跑道实体中转才能获取长度数据。
内容的提问来源于stack exchange,提问作者Harald Klomp
相关产品推荐
相关产品推荐

