维基数据返回 Id 的多个结果

Wikidata Returning Multiple Results For Id

我正在尝试使用其 ID 获取维基数据项的标签。我的 sparql 看起来像:

SELECT ?label
WHERE
{
  wd:Q245068 rdfs:label ?label .
  FILTER (langMatches( lang(?label), "EN" ) )
}

当我 运行 这样做时,我得到 3 个结果都是“喜剧演员”。

为什么这个 return 同一个 language/id 有多个结果?

是的,这很有趣...

如果你只检查the item

,原因就很明显了

“英语”表示三种不同的事物(这里用德语标示,这是高级喜剧的国际语言):加拿大英语、英国英语和美国英语。你得到所有三个。

以下是避免它的方法:

SELECT DISTINCT ?label
WHERE {
    wd:Q245068 rdfs:label ?label .
    FILTER (langMatches( lang(?label), "EN" ) )
}

或者,使用更具体的语言代码:

FILTER (langMatches( lang(?label), "EN-GB" ) )

但是,如果标签未设置在您选择的特定品种中,则存在不返回任何标签的风险。您可以解决这个问题,但实际上您最终只是重新实现了为此目的而存在的标准服务:

# just ad "Label" to get the label in the SELECT
SELECT ?item ?itemLabel
WHERE {
    ?item wet:P31 Q5. 

    # WITH THIS SERVICE 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}