或者在 sparql 查询中
OR in sparql query
This sparql query on wikidata 显示德国 (Q183) 中名称以 -ow 或 -itz 结尾的所有地点。
我想扩展它以查找德国和奥地利的地方。
我尝试将第 8 行修改为:
wdt:P17 (wd:Q183 || wd:Q40);
为了查找奥地利 (Q40) 的地点,但这不是有效的查询。
有什么方法可以将查询扩展到包括其他国家/地区?
据我所知,没有这么简单的语法。但是,您可以使用 UNION
来达到同样的效果:
SELECT ?item ?itemLabel ?coord
WHERE
{
?item wdt:P31/wdt:P279* wd:Q486972;
rdfs:label ?itemLabel;
wdt:P625 ?coord;
{?item wdt:P17 wd:Q183}
UNION
{?item wdt:P17 wd:Q40}
FILTER (lang(?itemLabel) = "de") .
FILTER regex (?itemLabel, "(ow|itz)$").
}
或者作为替代方案,使用 VALUES
:
创建一个包含两个国家的新变量
SELECT ?item ?itemLabel ?coord
WHERE
{
VALUES ?country { wd:Q40 wd:Q183 }
?item wdt:P31/wdt:P279* wd:Q486972;
wdt:P17 ?country;
rdfs:label ?itemLabel;
wdt:P625 ?coord;
FILTER (lang(?itemLabel) = "de") .
FILTER regex (?itemLabel, "(ow|itz)$").
}
This sparql query on wikidata 显示德国 (Q183) 中名称以 -ow 或 -itz 结尾的所有地点。
我想扩展它以查找德国和奥地利的地方。
我尝试将第 8 行修改为:
wdt:P17 (wd:Q183 || wd:Q40);
为了查找奥地利 (Q40) 的地点,但这不是有效的查询。
有什么方法可以将查询扩展到包括其他国家/地区?
据我所知,没有这么简单的语法。但是,您可以使用 UNION
来达到同样的效果:
SELECT ?item ?itemLabel ?coord
WHERE
{
?item wdt:P31/wdt:P279* wd:Q486972;
rdfs:label ?itemLabel;
wdt:P625 ?coord;
{?item wdt:P17 wd:Q183}
UNION
{?item wdt:P17 wd:Q40}
FILTER (lang(?itemLabel) = "de") .
FILTER regex (?itemLabel, "(ow|itz)$").
}
或者作为替代方案,使用 VALUES
:
SELECT ?item ?itemLabel ?coord
WHERE
{
VALUES ?country { wd:Q40 wd:Q183 }
?item wdt:P31/wdt:P279* wd:Q486972;
wdt:P17 ?country;
rdfs:label ?itemLabel;
wdt:P625 ?coord;
FILTER (lang(?itemLabel) = "de") .
FILTER regex (?itemLabel, "(ow|itz)$").
}