使用Wikidata中的SPARQL获取实体标签数据

Shl*_*iel 2 sparql wikidata

我正在使用Wikidata的查询服务来获取数据:https ://query.wikidata.org/

我已经设法通过两种方法使用实体的标签:

  1. 使用Wikibase标签服务。例如:
SELECT ?spouse ?spouseLabel WHERE {
   wd:Q1744 wdt:P26 ?spouse.
   SERVICE wikibase:label {
     bd:serviceParam wikibase:language "en" .
   }
}
Run Code Online (Sandbox Code Playgroud)
  1. 使用rdfs:label属性:
SELECT ?spouse ?spouseLabel WHERE {
   wd:Q1744 wdt:P26 ?spouse.
   ?spouse rdfs:label ?spouseLabel. filter(lang(?spouseLabel) = "en").
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎对于复杂的查询,第二种方法的执行速度更快,这与MediaWiki用户手册指出的相反:

当您要检索标签时,该服务非常有用,因为它降低了SPARQL查询的复杂性,否则您将需要获得相同的效果。

https://www.mediawiki.org/wiki/Wikidata_query_service/User_Manual#Label_service

wikibase补充了我仅使用rdfs:label无法实现的功能?这似乎很奇怪,因为它们看起来都达到了相同的目的,但是rdfs:label方法似乎更快(这是合乎逻辑的,因为查询不需要联接来自外部源的数据)。

谢谢!

ati*_*oSE 5

从文档中了解到,Wikibase标签服务通过消除显式搜索标签的需求来简化了查询。在这方面,就语法而言,它降低了您需要编写查询的复杂性。

我假设查询随后被扩展到另一个表示形式,例如在您第二个选项中使用rdfs命名空间,然后才被实际解析。

由于第二种选择更快,您是否进行了系统的基准测试?在我的几次尝试中,第一个选择是更快。我假设公共端点的性能总会因需求,缓存等因素而波动,因此为类似查询得出性能结论可能很棘手。