PB138cv/Cv10
Z FI WIKI
Obsah
Dotazovací jazyky
- XML dokument
- dokument, ve kterém značkujeme strukturu
- struktura, sloužící k plnění dat
- obé potřebuje dotazovací jazyk pro nalezení,získání, transformaci obsahu
- XPath - ten používá i XSLT - jednoduchý (jednoduché podmínky, jeden soubor)
- XQL, XMLQL, XQueryX, XQuery
XQuery
- vychází z SQL, předchozích XML dotazovacích jazyků
- není XML. (existuje i syntax v XML)
- pro výběr podstruktury užívá XPath
- pro typy dat používá XML Schema
Tutoriály:
- v SAXONu
- http://www.brics.dk/~amoeller/XML/querying
- http://www.ipedo.com/html/xquery/xquery_tutorial
- tutoriál na W3Schools
- http://cafeconleche.org/slides/xmlsig/xquery/XQuery.html
- http://www.w3.org/TR/xquery
- http://www.w3.org/TR/xquery-use-cases
- http://www.w3.org/TR/xquery-semantics
"Rozšířený" XPath
- adresace v množině dokumentů (
doc(URL)
)
doc("data/soubor.xml")/auta/automobil[dveri < 5]
- Výsledek - jeden či více XML fragmentů. Pořadí fragmentů je dáno pořadím v dokumentu (!)
- můžeme používat
- XML - "chytne" se na něj jen samotná taková struktura
- v transformační části - definice návratové struktury
- proměnné - značíme $jmeno
- XML - "chytne" se na něj jen samotná taková struktura
FLWOR = For Let Where Order Return
Obecná struktura dotazu v XQuery
for $d in doc("oddeleni.xml")//cislo let $e := doc("zamestnanci.xml")//zamestnanec[cisloodd = $d] where count($e) >= 10 order by avg($e/plat) descending return <oddeleni> { $d, <zamestnancu>{count($e)}</zamestnancu>, <prumplat>{avg($e/plat)}</prumplat> } </oddeleni>
- for $prom in LIST vybírá seznam dokumentů či elementů, ve kterých chceme vyhledávat.
- let $prom := XPath vybírá (pro dané přiřazení) další přiřazení - ale jedno
- where PODMINKA určuje podmínku, kterou musí splňovat vybrané skupiny,
- order by definuje seřazení
- return definuje návratovou hodnotu - tj. XML strukturu
- let a for se v dokumentu může vyskytovat víc (pokud chceme vybrat větší skupinu, n-tici elementů/podstromů pro práci s nimi.
- LIST - buď nejednoznačné XPath, nebo seznam oddělený čárkami, může se omezovat ještě funkcemi
- PODMINKA - může používat i existenční some() či absolutní all() kvantifikátory
- FUNKCE - uživatel může definovat své vlastní fce
- IF/THEN/ELSE - v části definice návratové hodnoty můžeme rozhodovat na základě hodnot proměných
Využití
- XML databáze (struktura naplněná daty)
- nativní (eXist - včetně XQuery pluginu JEditu, DBXML, Berkeley DB XML, Apache Xindice, IBM Cloudscape ...)
- relační schopné přijímat dotazy v XQuery (např. DBDOM - rozhraní nad relačními databázemi (Postgresql), DB2, oracle...)
V Javě
- např. Saxon
java -classpath saxon9.jar net.sf.saxon.Query -o [cesta k vystupnimu souboru] [cesta k souboru s XQuery dotazem]
Příklad
Na této adrese je seznam mnoha receptů. Vytvořte XQuery dotaz, který:
- Vybere všechny tituly (title) receptů a vrátí je uzavřené v dokumentu s kořenovým elementem <recepty>
- Vybere taková jídla, která obsahují více než 0,2 lžičky másla a vrátí pro ně záznamy s titulkem a nutriční hodnotou (element jidlo, podelementy title a nutricnihodnota - bude mít atribut cal s hodnotou kalorií (v původním XML atribut calories).
XUpdate [1]
- Jazyk pro úpravu XML
- Není standard W3C, ale XML:DB
- struktura podobná XSL-stylesheetu
- kořen - xupdate:modifications
- upravovací šablony (např. xupdate:insert-before, xupdate:insert-after, xupdate:append..., které pomocí XPath určí co se mění a jejich obsah určuje na co).
- kořen - xupdate:modifications
- Javová implementace