Wikidata SPARQL 按语言过滤字段值
Wikidata SPARQL filter field values by language
所以我有这个获取美元信息的 SparQL 查询
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
这输出:
现在,当我查看 USD 的 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) 能让你掌握这门语言。
所以我有这个获取美元信息的 SparQL 查询
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
这输出:
现在,当我查看 USD 的 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) 能让你掌握这门语言。