let $max := max(//country/population)
let $c := //country[population = $max]
return
{$c/name}
{$c/population}
for $o in //organization
let $sum := sum($o/members/id(@country)/population[1])
order by $sum descending
return
3)
let $seq :=
(
let $l := number(//city[name='Dakar']/longitude)
for $c in //city[longitude<$l]
order by number($c/longitude) descending
return $c
)
return $seq[1]
let $l := number(//city[name='Dakar']/longitude)
let $max := max(//city[longitude<$l]/longitude)
return //city[longitude = $max]/name
4)
//river[id(@country)/name="Russia" and count(id(@country)) = 2]/name
union
//lake[id(@country)/name="Russia" and count(id(@country)) = 2]/name
union
//sea[id(@country)/name="Russia" and count(id(@country)) = 2]/name
(//river | //lake | //sea)[id(@country)/name="Russia" and count(id(@country)) = 2]/name
for $water in (//river | //lake | //sea)
where $water/id(@country)/name="Russia"
and count(id($water/@country)) = 2
return $water/name
5)
SQL style:
for $c1 in //country[encompassed/id(@continent)/name="Europe"],
$c2 in //country[encompassed/id(@continent)/name="Europe"]
let $seas1 := //sea[id(@country)/name = $c1/name]/name,
$seas2 := //sea[id(@country)/name = $c2/name]/name
where $c1/name < $c2/name
and not (some $s1 in $seas1 satisfies (not($s1 = $seas2)))
and not (some $s2 in $seas2 satisfies (not($s2 = $seas1)))
return
{$seas1}
{$seas2}
.. towards more XML style:
for $c1 in //country[encompassed/id(@continent)/name="Europe"],
$c2 in //country[encompassed/id(@continent)/name="Europe"]
let $seas1 := {//sea[id(@country)/name = $c1/name]/name},
$seas2 := {//sea[id(@country)/name = $c2/name]/name}
where $c1/name < $c2/name
and $seas2 = $seas1
return
{$seas1}
{$seas2}
... use deep equality:
for $c1 in //country[encompassed/id(@continent)/name="Europe"],
$c2 in //country[encompassed/id(@continent)/name="Europe"]
let $seas1 := {//sea[id(@country)/name = $c1/name]/name},
$seas2 := {//sea[id(@country)/name = $c2/name]/name}
where $c1/name < $c2/name
and deep-equal($seas2,$seas1)
return
{$seas1}
{$seas2}
note: deep-equal is not broken down to element-wise application
for $c1 in //country[encompassed/id(@continent)/name="Europe"],
$c2 in //country[encompassed/id(@continent)/name="Europe"]
let $seas1 := //sea[id(@country)/name = $c1/name]/name,
$seas2 := //sea[id(@country)/name = $c2/name]/name
where $c1/name < $c2/name
and deep-equal($seas2,$seas1)
return
{$seas1}
{$seas2}
6)
sum(//sea[contains(name,'Caribbean')]/id(@country)/@area)
7)
basis: (some europ country)
//organization[members/id(@country)/encompassed/id(@continent)/name="Europe"]
no europ members:
//organization[not(members/id(@country)/encompassed/id(@continent)/name="Europe")]
only europ. members:
for $o in //organization
where every $c in $o/members/id(@country)
satisfies $c/encompassed/id(@continent)/name="Europe"
return $o
all europs are members:
for $o in //organization
where every $c in //country[encompassed/id(@continent)/name="Europe"
and count(id(@memberships)) > 1]
satisfies $c = $o/members/id(@country)
return $o
8)
for $c in //country
return
{$c/name}
{sum($c/border/id(@country)/population[1])}
9)
for $c in //country[count(.//city) >= 3]
let $bigc := (for $city in $c//city
order by number($city/population[1]) descending
return $city)
let $bigc3 := $bigc[position()<4]
return
{$c/name}
{sum($bigc3/population[1])}
10)
for $c in //country
let $avg := avg($c//city/population[1])
for $x in $c//city[population > $avg]
return $x