SPARQL/UNION
外观
< SPARQL
假设集合 A:欧盟的 28 个首都 SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?country wdt:P36 ?city. # capital
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
|
假设集合 B:欧盟的 3 个百万人口城市。 SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?city wdt:P17 ?country. # city in a (European) country
?city wdt:P31 wd:Q1637706. # city with millions of inhabitants
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
|
A 和 B 的交集,即欧盟的大型首都,可以通过组合所有三元组轻松实现。这将导致 1 个城市。
SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?country wdt:P36 ?city. # capital
?city wdt:P17 ?country. # city in a (European) country
?city wdt:P31 wd:Q1637706. # city with millions of inhabitants
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
欧盟的所有首都,不包括大城市,可以通过过滤使用 FILTER NOT EXISTS { }
来实现。这将导致另外 27 个首都。
SELECT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
?country wdt:P36 ?city. # capital
?city wdt:P17 ?country. # city in a (European) country
FILTER NOT EXISTS{ ?city wdt:P31 wd:Q1637706. } # NOT a city with millions of inhabitants
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
最后,首都和大型城市的 UNION
导致 30 个城市,其中一个由 DISTINCT
去重。
SELECT DISTINCT ?city ?cityLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
{ ?country wdt:P36 ?city. } # capital
UNION
{ ?city wdt:P17 ?country. # city in a (European) country
?city wdt:P31 wd:Q1637706. # a city with millions of inhabitants
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
请注意,联合的两个部分都应在方括号内 { ... } UNION { ... }
。
UNION
的两个更简单的例子是
{?a wdt:P27 wd:Q55. } UNION { ?a wdt:P27 wd:Q29999. }
国籍 (P27) for 荷兰 (Q55) 或 荷兰王国 (Q29999).{?child wdt:P22 ?parent. } UNION {?child wdt:P25 ?parent. }
父亲 (P22) 或 母亲 (P25).
- 最后一段代码可以使用属性路径
?child wdt:P22|wdt:P25 ?parent.
简化。
所有类型联接的概述
维恩图 | 数学 | SPARQL | |
---|---|---|---|
还有 | A. B. | ||
A. FILTER NOT EXISTS{ B. } | |||
A. OPTIONAL{ B. } | |||
或 | { A. } UNION { B. } |