问题描述
SELECT
?currency ?page_title ?currencyLabel ?currencyIso4217
(GROUP_CONCAT(distinct ?shortName; separator = ',') as ?shortNames)
{
?currency wdt:P498 ?currencyIso4217 .
OPTIONAL {?currency wdt:P1813 ?shortName} .
?article schema:about ?currency ; schema:isPartOf <https://en.wikipedia.org/>; schema:name ?page_title
SERVICE wikibase:label { bd:serviceParam wikibase:language 'nl' }
{
BIND(wd:Q4917 AS ?currency).
OPTIONAL {
SERVICE wikibase:label
{
?shortName rdfs:label ?shortNameLabel .
bd:serviceParam wikibase:language 'nl'
}
}
}
}
group by ?currency ?currencyLabel ?currencyIso4217 ?page_title
这输出:
现在,当我查看美元的 WikiData 页面,然后到“简称”部分时,我看到了:
它们在括号之间都有一个语言属性。现在我的问题是:我想要在查询中只包含短名称的“英文”版本并过滤掉所有其他语言。我该怎么做?
解决方法
您的查询奇怪地令人费解,并且我相信由于在这种情况下 GROUP_CONCAT 的长期错误,您已经被引导到了这条道路上(至少我似乎记得类似的事情 - 现在无法完全查明).
无论如何,至少在理论上,我认为这里有一些东西对您有用。实际上,没有足够的“短名称”来说明问题。
SELECT DISTINCT ?currency ?page_title ?currencyLabel ?currencyIso4217 ?shortName WHERE
{
?currency wdt:P498 ?currencyIso4217 .
?article schema:about ?currency ; schema:isPartOf <https://en.wikipedia.org/>; schema:name ?page_title .
OPTIONAL {
?currency wdt:P1813 ?shortName .
FILTER(LANG(?shortName) = "en") .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' }
}
你会注意到我剪掉了很多东西。但我认为您一直在抓住的一个想法就是 FILTER 的线条。也许 LANG(?string) 能让你掌握语言。