sparql - Wikidata SPARQL 按语言过滤字段值
问题描述
所以我有这个获取美元信息的 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
现在,当我查看美元的 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) 能让你掌握语言。
推荐阅读
- python - 错误:“urljoin”的类型变量“AnyStr”的值在 mypy 中不能是“Optional[str]”
- visual-studio - 为什么xamarin无法连接调试器?
- amazon-web-services - 控制从 SQS 到 Lambda 的流程
- azure - 在 Azure Devops CI/CD 管道中为 MS Edge 浏览器运行量角器 E2E 测试
- r - 计算给定预期基尼指数的值向量
- unit-testing - 在单元测试中评估多个断言——不要在第一个失败的时候停止
- r - Travis CI - knitr 和依赖项
- class - Android BLE ScanResult List 处理
- python - 汇总多个数据帧的特定列
- gerrit - Gerrit 获得 2 次提交之间的差异