跳转到内容

SPARQL/UNION

来自维基教科书,开放世界中的开放书籍

假设集合 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 的两个更简单的例子是

最后一段代码可以使用属性路径 ?child wdt:P22|wdt:P25 ?parent. 简化。

所有类型联接的概述

维恩图 数学 SPARQL
还有 A.
B.
A.
FILTER NOT EXISTS{ B. }
A.
OPTIONAL{ B. }
{ A. } UNION { B. }


华夏公益教科书