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

时间:2016-09-01 07:09:16

标签: sparql wikidata

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

我已经设法使用2种方法使用实体的标签:

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

      但是,对于复杂查询,第二种方法似乎执行得更快,与MediaWiki用户手册所述相反:

        

      当您想要检索标签时,该服务非常有用   降低了原本需要的SPARQL查询的复杂性   达到同样的效果。

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

      使用rdfs:label无法实现wikibase添加的内容? 这看起来很奇怪,因为它们似乎都达到了相同的目的,但是rdfs:label方法看起来更快(这是合乎逻辑的,因为查询不需要从外部源连接数据)。

      谢谢!

1 个答案:

答案 0 :(得分:5)

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

我会假设在实际解析之前,查询会扩展为另一个表示,可能与第二个选项中的rdfs命名空间一样。

根据第二种选择更快,您是否已完成系统基准测试?在我的几次尝试中,第一种选择更快。我认为公共端点的性能总是受到基于需求,缓存等的波动的影响,因此对类似查询的性能得出结论可能很棘手。