You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SPARQL将Wikidata的ps:/pq:类型关联到属性标签

解决Wikidata SPARQL中ps:/pq:类型属性的标签获取问题

你的查询中?p绑定的是Wikidata的陈述属性(ps:前缀)或限定词属性(pq:前缀),而wikibase:label服务默认仅为wd:前缀的实体(含属性实体)生成标签,因此直接调用?pLabel无法得到正确的属性名称。

解决方案

通过REPLACE正则函数将ps:/pq:前缀的属性转换为对应的wd:前缀属性实体,再通过标签服务或直接查询获取属性标签。

修改后的查询代码(推荐使用标签服务)

SELECT DISTINCT ?topstatement ?topstatementLabel ?target ?targetLabel ?p ?propertyLabel ?pointInTime {
  VALUES (?target) {(wd:Q937)}
    ?statement (
              pq:P571
              |pq:P575
              |pq:P585
             ) ?pointInTime .
  ?topstatement ?wdq ?statement .
  ?statement ?p ?target .
  
  # 转换ps:/pq:属性为wd:属性实体
  BIND(REPLACE(STR(?p), "^.*:(ps|pq):(P\\d+)$", "wd:$2") AS ?property)
  
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language 'en' .
    ?property rdfs:label ?propertyLabel .
  }
}

关键说明

  • BIND(REPLACE(STR(?p), "^.*:(ps|pq):(P\\d+)$", "wd:$2") AS ?property):提取ps:/pq:后的属性ID(如P61),拼接为wd:P61格式的属性实体URI。
  • 在wikibase:label服务中显式指定?property的标签生成,确保服务为转换后的属性返回英文标签。

替代方案(直接查询标签)

若不想依赖wikibase:label服务,可直接查询属性实体的rdfs:label:

SELECT DISTINCT ?topstatement ?topstatementLabel ?target ?targetLabel ?p ?propertyLabel ?pointInTime {
  VALUES (?target) {(wd:Q937)}
    ?statement (
              pq:P571
              |pq:P575
              |pq:P585
             ) ?pointInTime .
  ?topstatement ?wdq ?statement .
  ?statement ?p ?target .
  
  BIND(REPLACE(STR(?p), "^.*:(ps|pq):(P\\d+)$", "wd:$2") AS ?property)
  ?property rdfs:label ?propertyLabel .
  FILTER(LANG(?propertyLabel) = 'en')
}

内容的提问来源于stack exchange,提问作者3524

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:23:11