为何Wikidata ID的SPARQL标签查询返回多条相同英文结果?
问题翻译
我尝试通过Wikidata条目的ID获取对应条目标签,使用的SPARQL查询语句如下:
SELECT ?label WHERE { wd:Q245068 rdfs:label ?label . FILTER (langMatches( lang(?label), "EN" ) ) }
运行该查询后我得到了3条结果,内容均为“comedian”,请问为何相同ID和语言筛选条件会返回多条重复结果?
问题解答
出现重复结果是SPARQL的langMatches匹配规则和Wikidata的多语言标签设置共同导致的:
langMatches(lang(?label), "EN")是语系宽匹配规则,会匹配所有属于英文语系的标签,不限制具体地区变体- Wikidata的实体通常会设置三类英文标签:通用英文(标签语言为
en)、美式英文(标签语言为en-US)、英式英文(标签语言为en-GB),你查询的wd:Q245068这三类英文标签的取值恰好都是comedian,所以会返回三条内容相同、仅隐含的语言子标签不同的结果
如果只需要返回单条结果,可以选择两种修改方案:
- 精准匹配通用英文:将过滤条件修改为
FILTER (lang(?label) = "en") - 直接对返回结果去重:将查询头修改为
SELECT DISTINCT ?label
内容的提问来源于stack exchange,提问作者micah
相关产品推荐
相关产品推荐

