我正在使用wikidata的查询服务来获取数据:https://query.wikidata.org/
我已经设法使用2种方法使用实体的标签:
SELECT ?spouse ?spouseLabel WHERE { wd:Q1744 wdt:P26 ?spouse. SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . } }
rdfs:label
属性: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方法看起来更快(这是合乎逻辑的,因为查询不需要从外部源连接数据)。
谢谢!
答案 0 :(得分:5)
据我从文档中了解,wikibase标签服务通过消除显式搜索标签的需要简化了查询。在这方面,它在语法方面降低了您需要编写的查询的复杂性。
我会假设在实际解析之前,查询会扩展为另一个表示,可能与第二个选项中的rdfs命名空间一样。
根据第二种选择更快,您是否已完成系统基准测试?在我的几次尝试中,第一种选择更快。我认为公共端点的性能总是受到基于需求,缓存等的波动的影响,因此对类似查询的性能得出结论可能很棘手。