You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Wikidata SPARQL查询判断名称对应的物品是否为博物馆展品?

判断Wikidata物品是否为博物馆展品的SPARQL方案

好问题!硬编码instance of的具体取值确实太局限了——博物馆展品的类型五花八门,从雕塑、绘画到古籍、文物,根本没法穷举所有可能的类型。Wikidata的知识图谱本身就提供了更灵活的关联方式,我们可以利用它的属性关系概念层级来智能判断,不用硬编码。

核心思路:从馆藏与概念层级入手

最直接的判断依据是:如果一件物品是博物馆的馆藏,那它大概率是展品(或具备展出资格)。另外,Wikidata里有专门的上层概念(比如“博物馆物品”“文化财产”),所有展品类型都是这些概念的子类,我们可以通过子类链来匹配所有相关实例。

方案1:结合馆藏属性+概念层级(推荐)

这个查询会同时检查物品是否属于博物馆馆藏,以及是否属于博物馆展品相关的概念范畴,结果更准确:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT ?thing ?thingLabel ?museum ?museumLabel
WHERE {
  # 匹配目标物品名称(这里以"The Kiss"@en为例)
  ?thing rdfs:label "The Kiss"@en.
  
  # 关键1:检查是否属于某个博物馆的馆藏(P195 = 馆藏于)
  OPTIONAL { ?thing wdt:P195 ?museum. }
  
  # 关键2:匹配所有属于"博物馆物品"或"文化财产"的实例(含子类)
  { 
    ?thing wdt:P31/wdt:P279* wd:Q207628  # Q207628 = museum object
  }
  UNION
  { 
    ?thing wdt:P31/wdt:P279* wd:Q937449  # Q937449 = cultural property
  }
  
  # 自动生成多语言标签(这里用英文)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

代码解释:

  • wdt:P195:直接关联到物品所属的博物馆,这是最权威的判断依据——能进入博物馆馆藏的物品,基本都是展品或馆藏储备品。
  • wdt:P31/wdt:P279*:利用Wikidata的子类链,P31是“instance of”,P279是“subclass of”,*表示允许任意层级的子类继承。这样不管物品是雕塑、绘画还是其他类型,只要属于“博物馆物品”的子类,都会被匹配到,不用硬编码具体类型。
  • OPTIONAL:可选返回所属博物馆的信息,方便你验证结果。

方案2:通过展览历史补充判断

如果一件物品有明确的展览记录,那它肯定是展品。可以用P1366(展览历史)属性来查询:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT ?thing ?thingLabel ?exhibition ?exhibitionLabel
WHERE {
  ?thing rdfs:label "The Kiss"@en.
  
  # 检查是否有过展览记录
  ?thing wdt:P1366 ?exhibition.
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

总结

  • 优先用方案1,结合馆藏属性和概念层级,既保证准确性又覆盖所有展品类型。
  • 方案2可以作为补充,用来判断那些可能还没进入馆藏,但有过展出记录的物品。
  • 这种方式完全避免了硬编码的局限,能随着Wikidata的知识更新自动适配新的展品类型。

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

火山引擎 最新活动