160 likes | 332 Views
Technol ógie XML. XQuery ( XML Query Language ) September , 2011. Vznik X Query. Vznikol ako dopytovací jazyk pre extrakciu XML dát Možné použitie: extrakcia dát z XML dokumentu extrakcia dát z XML databáz generovanie XML dát transformácia XML súborov
E N D
Technológie XML XQuery (XML Query Language) September, 2011 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Vznik XQuery • Vznikol ako dopytovací jazyk pre extrakciu XML dát • Možné použitie: • extrakcia dát z XML dokumentu • extrakcia dát z XML databáz • generovanie XML dát • transformácia XML súborov • XQuery je pre svet XML tým, čím je SQL pre relačné databázy Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Vlastnosti XQuery • Nie je XML aplikáciou – má vlastnú syntax • XQueryX – XML syntax pre XQuery • Založený na • XPath – adresovanie častí dokumentu • XML Schema – dátové typy • Otázka – výraz, ktorý vracia sekvenciu XML fragmentov alebo atomických hodnôt • Používa logickú štruktúru XML dokumentov ako stromu uzlov • sedem typov uzlov: element, atribút, text, menný priestor, komentár, inštrukcia pre spracovanie, dokumentový uzol Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Stav XQuery • Spravovaný W3C (http://www.w3.org) • XML Query Language 1.0 (štandard v 2.edícii) • W3C working draft – máj 2003 • W3C recommendation – január 2007 • W3C recommendation – 2.edícia – december 2010 • XML Syntax for XQuery 1.0 (štandard v 2. edícii) • W3C working draft – september 2005 • W3C recommendation – január 2007 • W3C recommendation – 2.edícia – december 2010 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Syntax • XPath syntax doc("kniznica.xml")//kniha[rok="2010"]/nazov • FLWOR výrazy for $x in doc("kniznica.xml")//kniha where $x/rok = "2010" order by $/autor return $x/nazov <nazov alt="Kubko a Maťko">Pásli ovce valasi</nazov> <nazov>Slovenské rozprávky</nazov> <nazov>Hlava 22</nazov> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
FLWOR • FLWOR je akronym (FLW a O sú voliteľné): • For – viaže premennú na každý z vybraných prvkov • Let – viaže premennú na vybrané prvky • Where – špecifikuje výberové kritériá pre filtráciu vyberaných uzlov • Order by – určuje spôsob zotriedenia výstupu • Return – špecifikuje čo má byť vrátené vrátane výplňových textov • Používa premenné • premenná je daná ako znak $ nasledovaný menom • meno premennej by malo byť prípustným XML menom Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
FLWOR - for • Klauzula vedie na iteráciu pre každý jeden z vybraných prvkov for $x at $i in doc("kniznica.xml")//kniha/autor return <spisovatel>{$i}. {$x}</spisovatel> • Alternatívy: • for$x in (1 to 3) • for $x in (100, 200) • for $x in (1 to 3), $y in (100, 200), $z in doc(…)/… <spisovatel>1. <autor>Pavol Dobšinský</autor></spisovatel> <spisovatel>2. <autor>Elena Čepčeková</autor></spisovatel> <spisovatel>3. <autor>Jozef C. Hronský</autor></spisovatel> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
FLWOR - let • Klauzula nevedie na iteráciu, je to jednorázové naviazanie všetkých vybraných prvkov naraz let $x := (1 to 5) return <cislo>{$x}</cislo> • Alternatívy: • let $x := document(…)/… • let $x := count(…) • let $x := …, $y := … <cislo>1 2 3 4 5</cislo> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
FLWOR - where • Klauzula poskytuje filter založený na jednej alebo viacerých podmienkach for $x in (1 to 5) where $x > 3 return <cislo>{$x}</cislo> • Alternatívy: • where $x/cena > 10 and $x/cena < 40 • where not($x/cena > 100) <cislo>4</cislo> <cislo>5</cislo> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
FLWOR – order by • Zotriedenie hodnôt priradzovaných premenným klauzulou for for $x in (1 to 2) order by $x descending return <cislo>{$x}</cislo> • Alternatívy: • order by $x/@typ ascending • order by $x/rok descending, $x/autor • order by $x/cena ascending empty least (greatest) <cislo>2</cislo> <cislo>1</cislo> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
FLWOR – produkovaný výstup • Výstup zostavený z vrátených uzlov dokumentu a výplňového textu definovaný klauzulou return • FLWOR môže byť vnorený do textu <ul> { for $x in doc("kniznica.xml")//kniha/autor return <li>{data($x)}</li> } </ul> <ul> <li>Pavol Dobšinský</li> <li>Elena Čepčeková</li> <li>Jozef C. Hronský</li> </ul> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Príklady – podmienené výrazy • Pri vytváraní výstupu je možný alternatívny výstup podľa podmienok • Je možné aj vnáranie podmienených výrazov for $x in doc("kniznica.xml")/kniznica/kniha return if ($x/@typ="rozpravka") then <rozpravka>{data($x/nazov)}</rozpravka> else <ine>{data($x/nazov)}</ine> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Príklady – kvantifikované výrazy • Aspoň jeden prvok spĺňa podmienky for $x in doc("kniznica.xml")/kniznica/kniha where some $c in $x/obsah/cast satisfies contains($c,"O ") return <o-rozpravka>{data($x/nazov)}</o-rozpravka> Alternatívy: some $c in …, $x in … satisfies $c = $x • Všetky prvky spĺňajú podmienky for $x in doc("kniznica.xml")/kniznica/kniha where every $c in $x/obsah/cast satisfies contains($c,"O ") return <o-rozpravka>{data($x/nazov)}</o-rozpravka> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Príklady – viacnásobné použitie for • Vnorenie for $x in (1995 to 2011) return <rok>{$x} -- {count(for $y in doc("kniznica.xml")//kniha where $y/rok=$x return $y)}</rok> • Reťazenie for $s in doc(“spisovatelia.xml")//osoba[rodisko="Košice"] for $k in doc("kniznica.xml")//kniha[autor=$s/meno] where $s/meno = $k/autor return <kniha>{data($k/nazov)}</kniha> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Príklady – viacnásobné použitie let • Statické / dynamické let $zdroj := doc("kniznica.xml") for $k in $zdroj//kniha let$s := doc(“spisovatelia.xml")//osoba[meno=$k/autor] where $k/rok - $s/rok-narodenia < 20 return <mlady-spisovatel>{$k/autor}</mlady-spisovatel> • Dynamické for $k in doc("kniznica.xml") //kniha let $a := $k/autor let $n := $k/nazov return <kniha autor="{data($a)}" nazov="{data($n)}"/> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Príklady – použitie funkcií • Top pozícia avg( for $y in doc("kniznica.xml")//kniha where $y/rozsah/@jednotka="strana" return $y/rozsah ) • Vnútri FLWOR výrazu for $y in doc("kniznica.xml")//kniha let $c := avg(doc("kniznica.xml")//kniha[autor=$y/autor]/cena) where $y/cena > $c and $y/cena mod 10 = 0 order by count($y/cast) descending return <kniha>{upper-case($y/nazov/text())}</kniha> Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach