如何在 SPARQL 中执行 `FILTER (x IN ( ... ) )`?
How to do `FILTER (x IN ( ... ) )` in SPARQL?
我正在尝试加载维基数据中 Biota/Q2382433 的所有子分类单元(即 P271 "parent taxon" 指向 Q2382433 的实体)。
以下查询works fine:
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
,它会产生 zero results:
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
使查询正常工作?
由于维基数据的某些原因,当 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
我正在尝试加载维基数据中 Biota/Q2382433 的所有子分类单元(即 P271 "parent taxon" 指向 Q2382433 的实体)。
以下查询works fine:
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
,它会产生 zero results:
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
使查询正常工作?
由于维基数据的某些原因,当 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