sparql - 如何在 SPARQL 中执行“过滤器(x IN(...))”?
问题描述
我正在尝试在 Wikidata 中加载 Biota/Q2382433 的所有子分类单元(即 P271“父分类单元”指向 Q2382433 的实体)。
以下查询工作正常:
SELECT ?item ?itemLabel
(GROUP_CONCAT(DISTINCT ?class; SEPARATOR=", ") AS ?classes)
WHERE {
?class wdt:P171 ?item.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
BIND(wd:Q2382443 AS ?item)
}
GROUP BY ?item ?itemLabel
使用FILTER
而不是BIND
,它产生零结果:
SELECT ?item ?itemLabel
(GROUP_CONCAT(DISTINCT ?class; SEPARATOR=", ") AS ?classes)
WHERE {
?class wdt:P171 ?item.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
FILTER(?item in (wd:Q2382443))
}
GROUP BY ?item ?itemLabel
如何让查询使用FILTER
?
解决方案
由于 Wikidata 上的某些原因,当itemLabel
添加到 SELECT 子句时,过滤器将不起作用。但是,如果将其删除,则查询可以正常工作。
您还可以使用新变量名重新声明三元组模式并对其进行过滤:
SELECT ?item ?itemLabel
(GROUP_CONCAT(DISTINCT ?class; SEPARATOR=", ") AS ?classes)
WHERE {
?class wdt:P171 ?item .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
?class wdt:P171 ?parentTaxon .
FILTER(?parentTaxon IN (wd:Q2382443))
}
GROUP BY ?item ?itemLabel
编辑:VALUE
也有效:
SELECT ?item ?itemLabel
(GROUP_CONCAT(DISTINCT ?class; SEPARATOR=", ") AS ?classes)
WHERE {
?class wdt:P171 ?item .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
VALUES ?item { wd:Q2382443 }
}
GROUP BY ?item ?itemLabel
推荐阅读
- c# - Process.Start,从 WebMethod 读取进度?
- java - 家谱,不能解决孩子
- c# - 基于用户的数据表中 Razor 形式的 DropdownListFor
- javascript - React onclick 在非类组件上隐藏此组件
- dotfuscator - 有没有办法用 Dotfuscator 定义每个文件的输出文件夹?
- css - 使用节点代理的 CSS 链接
- laravel - Laravel Eager Loading 无法作为数据库查询正常工作
- java - 提高 Apache Spark 到 Redis 的写入性能
- rabbitmq - RabbitMQ Web Stomp -- 关闭非 TLS 连接?
- oracle - Oracle OSM - 履行状态