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

通过Wikidata查询服务提取条目DOI时遇一致性问题

问题1:部分条目用wdt:P356无法获取DOI(如Q67940907)
  • 原因:Wikidata中DOI的存储分两种场景:
    1. 直接作为条目的主属性——这种情况用wdt:P356可直接查询到结果
    2. 存储在某个声明的引用节点中——wdt:前缀仅识别条目的主属性值,会忽略引用、限定这类附属数据,因此查不到
  • 解决查询:通过UNION合并两种场景的结果,覆盖所有可能的DOI存储位置:
SELECT DISTINCT ?doi WHERE {
  wd:Q67940907 wdt:P356 ?doi.
  UNION
  {
    wd:Q67940907 ?p ?statement.
    ?statement prov:wasDerivedFrom ?refNode.
    ?refNode pr:P356 ?doi.
  }
}
  • 说明:DISTINCT用于去重,若确定不会出现重复结果可移除。
问题2:提取异牡荆素(Q3155636)所属类群参考文献DOI结果不全
  • 原因:原查询存在两个限制:
    1. 强制要求引用包含P248(参考来源条目),但大量参考文献直接将DOI存储在引用节点中,未关联其他条目
    2. 仅查询P248关联条目的DOI,漏掉了直接存储在引用节点中的DOI
  • 优化后的查询:
SELECT ?item ?refDOI ?statement
WHERE {
  VALUES ?item { wd:Q3155636 }
  ?item p:P703 ?statement.
  ?statement prov:wasDerivedFrom ?refNode.
  # 同时匹配两种DOI存储方式:引用节点直接存储的DOI、引用来源条目关联的DOI
  OPTIONAL { ?refNode pr:P356 ?refDOI }
  OPTIONAL { 
    ?refNode pr:P248 ?refSource.
    ?refSource wdt:P356 ?refDOI 
  }
  # 过滤无DOI的结果(不需要可删除此行)
  FILTER(BOUND(?refDOI))
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en,de,fr". }
}
LIMIT 10000
  • 关键改动:
    • 将?refNode pr:P248 ?refSource从必填改为可选,避免过滤掉未关联来源条目的引用
    • 新增直接从引用节点提取DOI的逻辑
    • 用FILTER(BOUND(?refDOI))仅保留有DOI的结果,剔除空值
额外提示
  • wdt:是简化属性路径,仅返回条目主属性;p:用于访问声明本身,pr:用于访问引用节点内的属性,注意区分使用
  • 若结果存在重复,可在SELECT后添加DISTINCT去重
  • 部分引用可能使用PMID等其他标识符,需扩展查询可匹配对应属性

内容的提问来源于stack exchange,提问作者A. Bollans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:03:13