在QLever Wikidata Query中获取Quantity类型属性值单位的问题
解决QLever Wikidata Query获取Quantity属性单位的问题
你的查询在QLever中无法获取单位的核心原因是:QLever对Wikidata direct claim(wdt:前缀)的Quantity值存储逻辑与Wikidata Query Service不同——QLever将direct claim的Quantity值直接作为字面量返回,无法通过wikibase:quantityUnit访问单位结构。需要改用statement路径(p:和psv:前缀)来获取完整的Quantity数据结构。
修改后的查询代码:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX wikibase: <http://wikiba.se/ontology#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX wdt: <http://www.wikidata.org/prop/direct/> PREFIX wd: <http://www.wikidata.org/entity/> PREFIX p: <http://www.wikidata.org/prop/> PREFIX psv: <http://www.wikidata.org/prop/statement/value/> SELECT DISTINCT ?item ?itemLabel ?property ?propertyLabel ?value ?unit WHERE { # 目标item集合:Q556及其所有子类实例 { SELECT DISTINCT ?instanceOf WHERE { VALUES (?startItem) { (wd:Q556) } ?startItem wdt:P31 ?instanceOf. } ?item wdt:P31 ?instanceOf. ?item rdfs:label ?itemLabel. FILTER(LANG(?itemLabel) = "en") } UNION { VALUES (?item) { (wd:Q556) } ?item rdfs:label ?itemLabel. FILTER(LANG(?itemLabel) = "en") } # 关联Quantity类型属性的statement与value节点 ?property rdf:type wikibase:Property. ?property wikibase:propertyType wikibase:Quantity. ?property wikibase:directClaim ?directProp. # 从direct claim URI转换为statement前缀的URI BIND(REPLACE(STR(?directProp), "http://www.wikidata.org/prop/direct/", "http://www.wikidata.org/prop/") AS ?propStmt) ?item ?propStmt ?statement. ?statement psv:?propStmt ?valueNode. # 提取数值与单位 ?valueNode wikibase:quantityAmount ?value. OPTIONAL { ?valueNode wikibase:quantityUnit ?unit. } # 属性英文标签 ?property rdfs:label ?propertyLabel. FILTER(LANG(?propertyLabel) = "en") }
关键修改说明:
- 新增
p:和psv:前缀,用于访问Wikidata的statement及其对应的value节点 - 通过
BIND函数将direct claim的URI转换为statement URI,建立属性与statement的关联 - 从
psv:对应的value节点中,直接提取quantityAmount(数值)和quantityUnit(单位)字段
内容的提问来源于stack exchange,提问作者Tim Konitzer
相关产品推荐
相关产品推荐

