Seminární skupina 3, 4 PB138

Dotazovací jazyk XQuery (28. 3.)

FLWOR

  • FOR, RETURN
  • for $p in /people/person return $p (x)

    for $p in /people/person/name return $p (x)

  • zobrazení části dokumentu, formát výstupu

for $p in /people/person return $p/name  (x)

for $p in /people/person[@id='2'] return $p/name/text() (x)

for $p in /people/person[@id='2'] return <jmeno>{$p/name/text()}</jmeno> (x)

  • LET, přiřazení

 

let $persons := /people/person
for $p in $persons return $p/name 
(x)

 

let $id := '2'
let $persons := /people/person
for $p in $persons[@id=$id] return $p/name 
(x)

  • WHERE, podmínky

for $p in /people/person where contains($p/name, 'Pav') return $p/name  (x)

for $p in /people/person where count($p/cars/car)>0 return <zaznam><jmeno>{$p/name/text()}</jmeno><prijmeni>{$p/surname/text()}</prijmeni><pocet>{count($p/cars/car)}</pocet></zaznam>  (x)

for $p in /people/person let $c := $p/cars/car where $c/year < 2000 return <zaznam><prijmeni>{$p/surname/text()}</prijmeni>{$c/type}</zaznam>  (x)

  • ORDER, řazení

for $p in /people/person order by $p/surname descending return $p/surname  (x)

 

  • <data>{for $p in /people/person where count($p/cars/car)>0 return <zaznam><jmeno>{$p/name/text()}</jmeno><prijmeni>{$p/surname/text()}</prijmeni><pocet>{count($p/cars/car)}</pocet></zaznam>}</data> (x)
  • hodnota atributů - data($p/@id)
  • existuje X / pro všechna X
  • for $p in /people/person where (some $c in $p/cars/car satisfies ($c/year < 2000 and $c/country="cz")) return $p (x)
  • for $p in /people/person where (every $c in $p/cars/car satisfies (starts-with($c/@id,"Z") and $c/year>1990)) return $p (x)
  • nutné pro funkce, které pracují jen s jedním elementem:
  • for $p in /people/person where contains($p/note, 'pozn') return $p/note (x)
  • for $p in /people/person where some $n in $p/note satisfies contains(upper-case($n), upper-case('pozn')) return <r><prijmeni>{$p/surname/text()}</prijmeni>{$p/note}</r>  (x)
  •  
  • Úloha: Napište dotaz, který vypíše SPZ aut Škoda, která jsou starší než 1998.
  • Úloha: Vypište id a plat lidí, kteří nemají auto.
  • Úloha: Vypište součet platů.