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

如何编写SPARQL查询从Wikidata获取Scotland的指定属性?

正确查询Wikidata中Scotland的实例类型、子类及所属关系的SPARQL语句

我来帮你排查下问题,你的原SPARQL查询里有几个关键错误,导致要么无结果要么超时:

  • 属性ID混淆:instance of对应的是wdt:P31,你错误地用了wdt:P361(这是part of的属性ID),还重复绑定了两次;
  • 模糊匹配低效:FILTER(CONTAINS(?label, "Scotland"))会匹配所有包含该字符串的条目,容易触发超时,用精准的标签匹配更高效;
  • 未处理属性缺失:如果某个属性没有值,严格的绑定会直接过滤掉整个条目,用OPTIONAL能保留有值的属性结果。

下面是修正后的查询语句,你可以直接在Wikidata查询编辑器中运行:

SELECT ?instanceOfLabel ?subclassOfLabel ?partOfLabel
WHERE {
  # 精准定位英文标签为"Scotland"的条目
  ?scotland rdfs:label "Scotland"@en;
            wdt:P31 ?instanceOf.  # instance of(实例类型)对应属性P31
  
  # 可选匹配子类和所属关系,避免属性缺失时无结果
  OPTIONAL { ?scotland wdt:P279 ?subclassOf }
  OPTIONAL { ?scotland wdt:P361 ?partOf }
  
  # 自动获取人类可读的英文标签
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

关键部分说明:

  • ?scotland rdfs:label "Scotland"@en:直接定位到Scotland的Wikidata条目(Q22),比模糊匹配速度快很多;
  • wdt:P31 ?instanceOf:正确绑定instance of属性,对应你在网页上看到的“英国境内的国家”这类实例;
  • OPTIONAL包裹属性查询:确保即使某个属性没有值,其他有值的属性依然能正常返回结果;
  • 选择带Label后缀的变量:直接返回可读的标签文本,而非Wikidata的QID编号。

如果需要同时获取QID和标签,可以用这个版本:

SELECT ?instanceOf ?instanceOfLabel ?subclassOf ?subclassOfLabel ?partOf ?partOfLabel
WHERE {
  ?scotland rdfs:label "Scotland"@en;
            wdt:P31 ?instanceOf.
  
  OPTIONAL { ?scotland wdt:P279 ?subclassOf }
  OPTIONAL { ?scotland wdt:P361 ?partOf }
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:01:40