维基数据返回 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". }
}
我正在尝试使用其 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". }
}