Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

XQuery Dotazovací jazyk nad XML dokumenty Jan Vávra, Přemysl Volf 7. ledna 2004

Podobné prezentace


Prezentace na téma: "XQuery Dotazovací jazyk nad XML dokumenty Jan Vávra, Přemysl Volf 7. ledna 2004"— Transkript prezentace:

1 XQuery Dotazovací jazyk nad XML dokumenty Jan Vávra, Přemysl Volf 7. ledna 2004

2 2 Úvod zdatový model XML dokumentu ytříděný strom zvýrazy v XQuery ycesta, iterace, podmínka, funkce ztypy yXSchema, validace zdodatek yXML a relační db, DIS, schémata

3 3 Datový model XML dokument: zsekvence - tříděný seznam uzlů nebo atomických proměnných yatomická hodnota: číslo, řetězec, datum yuzel: xdokument xelement xatribut xtext xkomentář xinstrukce xdeklarace namespace (jmenného prostoru)

4 4 Datový model - uzel Má: zidentita yrozlišení dvou uzlů stejného jména a hodnot ypořadí v dokumentu v dané úrovni zanoření uzlu ykonzistence pořadí Může mít: zjiné uzly jako potomky (rekurzivní definice stromu) zjméno (název elementu, atributu, …) zhodnotu nějakého typu (XSchema) ysekvence 0 nebo více atomických hodnot

5 5 Datový model - dodatek zSekvence yseznam heterogenních prvků ysekvence délky 1 ~ jednomu prvku ysekvenence délky 0 povoleny ~ NULL v SQL zValidace XML proti schématu yuzlu nebo atomu přiřadí typ ynení ve schématu: xuzel <- anyType xatomická hodnota <- anySimpleType

6 6 Datový model - příklad

7 Smith obraz 5000 ……… ………

8 8 Výrazy v XQuery zXQuery - funkcionální jazyk ysestaven z výrazů yvýrazy bez vedlejších efektů zVýrazy: yliterál yproměnná yvolání funkce ycesta (path expression) ypredikát ypodmínka yFLWR yfunkce

9 9 Literál zjednoduchý yčíslo: 47 integer, 4.7 decimal, 4.7E3 double  řetězec: ‘xquery’, “xquery” string zsložitější yvytvoření pomocí konstruktoru datum: date(“ ” ) zsekvence ytvoří se pomocí operátoru čárka nebo to y1,2,3 = (1,2,3) = ( (1,2), (), 3) = 1 to 3

10 10 Proměnná zzačíná $:$tohle_je_promenna zpřiřazení:LET $a := 15 zhodnotou proměnné může být i uzel zžádné vedlejší efekty zhodnotu proměnné nelze měnit

11 11 Aritmetika z+, -, *, div, mod zsum(), avg(), count(), max(), min() yfunkce pracuje na sekvenci zdiv : odlišit od / (cesta v xml) z- : musí začínat mezerou - odlišit od názvu elementu

12 12 Výraz cesty zzaloženo na syntaxi XPath 2.0  série kroků oddělených ‘/’ zvyhodnocení v rámci kontextového uzlu zsměr (osa) cesty - XQuery podporuje: y/ child (přímý potomek) y// descendant (potomek ~ existuje cesta rodič-potomek délky >=1) y.. parent (rodič) y. self (ukazatel sám na sebe) atribut (ukazatel na atribut) ydescendant-or-self (podstrom určený uzlem self) zvyhodnocení probíhá po krocích zelement vs. atribut - jméno atributu před jménem

13 13 Výraz cesty – příklad 1 zVypiš popis všech položek k prodeji od pana Smithe document(‘zboží.xml’)/*/položka[prodejce = ‘Smith’]/popis zPrůběh vyhodnocení: ydocument() - vrátí uzel typu dokument y/* - vrátí všechny potomky a uzlu dokument  /položka - vrátí potomky b uzlů a s názvem položka y/položka[prodejce = ‘Smith’] - omezí potomky b na ty, které mají potomka prodejce s hodnotou Smith y/popis - vrátí potomky c uzlů b s názvem popis

14 14 Výraz cesty – příklad 2 zVypiš všechny elementy popis v dokumentu document(‘zboží.xml’)//popis zNajdi atribut status položky, která je rodič daného popisu

15 15 Predikáty zvýraz XQuery ohraničený [ ], který se používá pro filtrování sekvence uzlů  položka[prodejce = ‘Smith’] yVybere pouze ty položky, které obsahují element prodejce s hodnotou Smith zpoložka[ cena > 1000 ] ytestuje se položka/cena > 1000 zpoložka [5] y5. položka v sekvenci zpoložka [cena] ytest na existenci podelementu cena elementu položka

16 16 Porovnávací operátory hodnoty, obecné zporovnání hodnoty yeq, ne, lt, le, gt, ge yskalární hodnoty nebo sekvence délky 1, jinak výjimka zobecné porovnání y=, !=,, >= zrozdíl? - v kardinalitě ypoložka [cena gt 1000] xexistuje právě jeden element cena xmá hodnotu větší než 1000 ypoložka [cena > 1000] xexistuje alespoň jeden element cena xmá hodnotu větší než 1000

17 17 Porovnávací operátory uzel, pořadí, logické zuzel yis, isnot yporovnání identity zpořadí y > y$uzel1 << $uzel2 - $uzel1 před $uzel2 zlogické yand, or ypoložka [ prodejce = ‘Smith’ and cena ] znegace ynot() yspíše funkce než operátor

18 18 Konstruktor elementů zvýraz cesty yumí pouze vybrat určité uzly yneumí vytvořit nový element zjednoduchý konstruktor elementu - element zkonstruktor s vyhodnocením yvýraz XQuery ohraničený { } yhodnotou výrazu může být sekvence atomických hodnot, elementů, atributů ypříklad: { max ( $nabídky [ číslo-položky = $i]/ počet-nabídek ) }

19 19 Dynamický konstruktor zelement { $název } { $atributy, $obsah } zattribute { $název } { $hodnota-atributu} z element { name($e) } { data($e)*2 } z attribute { if $p/pohlaví=‘M’ then ‘muž’ else ‘žena’ } { $p/jméno} yz elementu vytvoří atribut zcomputed element | atribute constructor zpředchozí konstruktor - jen obsah, neumí název nového elementu

20 20 Podmínka a kvantifikace zif … then … else … yMusí být obě větve, část if v závorkách zkvantifikované výrazy: some $a in (5,7,9,11) satisfies $a > 10 - true every $a in (5,7,9,11) satisfies $a > 10 - false

21 21 Iterace  for $a in (2,3) return $n +1 zhodnotou tohoto výrazu je (3,4) zvnořené cykly: for $m in (2,3), $n in (5,10) return {$m} * {$n} = {$m * $n} 2*5 = 10 2*10 = 20 3*5 = 15 3*10 = 30

22 22 FLWR (flower) zfor - iterace prvků podle sekvence zlet - přiřazení hodnot pomocných proměnných, volitelná zwhere - filtrace výsledné sekvence, volitelná zreturn - konstrukce výsledku for $i in (1, 5) let $sq= $i * $I where $i < 4 return $sq 1 4 9

23 23 FLWR - dokumenty 4456 Smith obraz ……… ……… 4456 Rice ……… ………

24 24 FWLR – příklad 1 zPro každou položku, která má více než deset nabídek, vytvoř element oblíbená-položka s číslem položky, popisem, počtem nabídek for $i in document(“zboží.xml”)/*/položka let $b := document(“nabídky.xml”) /*/nabídka[číslo-položky = $i/číslo-položky] where count($b) > 10 return { $i/číslo-položky $i/popis { count ($b) } } ~ SQL: zspojení: -dva xml soubory zGROUP BY číslo- položky

25 25 FWLR – příklad 2 zVytvoř zprávu obsahující stav nabídek pro různé položky. Označ každou nabídku stavem ‘OK’, ‘příliš málo’, ‘příliš pozdě’ for $I in document (“položky.xml”)/*/položka return { $i/číslo-položky, for $b in document (“nabídky.xml”)/*/nabídka[číslo-položky = $i/číslo-položky] return { $b/zájemce, $b/cena, { if ($b/datum > $i/datum) then “příliš pozdě” else if ($b-cena < $i/cena) then “příliš málo” else “OK” } } }

26 26 Operace na sekvencích 1 zA union B ~ A u B zA intersect B ~ A n B zA except B~ A \ B zpříklad: document(“a.xml”)//položka[cena > 1000] intersect document(“a.xml”)//položka[datum-výroby > date(“ ”)] ylépe: predikát1 and predikát2  sortby sekvence ascending | descending

27 27 Operace na sekvencích 2 zNemá význam kombinovat sekvence uzlů z různých dokumentů zNE: document(”zboží.xml“)//číslo-položky except document(”poptávky.xml“)//číslo-položky  porovnávání identit, které nejsou shodné, různé dokumenty mají různé identity zANO: for $i in document( ”zboží.xml“)//položka where empty( document(”poptávky.xml“) //položka[číslo-položky eq $i/číslo-položky] ) return $i/číslo-položky yporovnání obsahu

28 28 Funkce zknihovní funkce - document(), avg(), … zuživatelsky definované funkce: define function nejvyšší_poptávka( element $položka) returns decimal { max(document(“poptávky.xml”)// poptávka[číslo-položky = $položka/číslo-položky]/počet-poptávek ) } ypříklad volání nejvyšší_poptávka(document(“zboží.xml”)//položka[číslo-položky = “1234”]) ynemusí být specifikovány typy parametrů ani návratová hodnota

29 29 Funkce - možnosti zpřetížení jména funkce (overloading) - jen u knihovních fcí - string(), … zproměnný počet parametrů yfunkce(element? e, anySimpleType $d ) yfunkce(element* e) yfunkce(element+ e) zrekurze, nepřímá rekurze define function hloubka( element $e) returns integer { if (empty($e/*)) then 1 else 1 + max (for $c in $e/* return depth($c)) }

30 30 Struktura XQuery dotazu zdvě části: yprolog - definice prostředí xpřiřazení proměnných, xdefinice namespace namespace xyz = ‘http://xien.jikos.cz/eshop’ default element namespace = ‘...’ default function namespace = ‘...’ schema namespace xhtml = ‘…’ ytělo - vyhodnocení dotazu

31 31 Typy zatomické typy ydefinované v XSchema - čísla, řetězce,... - xs:integer, xs: string … zelementy ~ třídy v OOP ytyp definován v uživatelském schéma: abc:adresa zklíčová slova: yelement xelement cena xelement of type abc:adresa yattribute zinstance of operátor, typeswitch zpřetypování: cast, treat zvalidace - přiřazení typů: funkce validate()

32 32 Závěr zfunkcionální jazyk s procedurálními prvky (FLWR) zdatový model yn-ární tříděný strom (les) s uzly různých „specifikačních“ typů zvýrazy cesty (XPath) // ~ /descendant - spojení cesty (path join) zuživatelsky definované funkce zWorking Draft W3C XML Working Group Co přináší nového? yOproti OQL dotaz do větší hloubky + /descendant Co nelze vyjádřit? yDotaz na podobnost dokumentů x DIS na XML xodvození podobnosti na základě hierchie tříd (typů) definovaných ve schema = RDF Reasonig

33 33 XQuery - implementace XML nativní databáze zX-Hive/DB:http://www.x-hive.com/xquery zMicrosoft:http://xqueryservices.com zCerisent:http://www.cerisent.com/use-cases.html zXML Global:http://www.xmlglobal.com zeXist:http://www.exist.org zXindice:http://xml.apache.org/xindice

34 34 Literatura z1. D. Chamberlin - XQuery: An XML query language, IBM SYSTEMS JOURNAL, VOL 41, NO 4, 2002, z2. XQuery: A Query Language for XML, W3C, zJ. Savolskyte - XQuery, zA. Eiseinberg - An Early Look at Xquery, IBM, Westford zK. Howard - An Introduction to Xquery, 106.ibm.com/deleveloperworks/xml/library/x-xquery.html 106.ibm.com/deleveloperworks/xml/library/x-xquery.html zA quick intro to Xquery,

35 35 Dotaz zNapište funkci, která přejmenuje názvy podelementů na velká písmena. define function upcaseSubelement(element $e) { for $i in (0, count ($e/*)) return { element { upcase( name( $e[$i])) } { data($e) } }

36 36 Dodatek 1.Relační databáze a XML ymodel uložení XML v relační DB 2.Path join algoritmus yschéma číslování ypopis algoritmu (eXist) 3.Fulltext na XML yXIRQL – XML Information Retrieval Query Language yváhy, relevance, typy 4.RDF Reasoning

37 37 Relační DB a XML Jan Vávra IDElementIsAttributeParentChildNumText 1kontaktNoNULL3 2jménoNo12 3typYes20plné 4No20Jan Vávra 5telefonNo12 6domaNo kancelářNo No11 matfyz.cz

38 38 Schéma číslování Jan Vávra zpro efektivní zjištění rodiče uzlu zdíry pro přidávání parent(i) = [ (i-2)/k +1 ] k - arita stromu, resp. k(d), arita úrovně d

39 39 Path join – 1/2 zTříděné seznamy ancestors list al, descendants list dl zget_parent_set( seznam_x) : seznam_x := seznam předků v seznam_x, return false ~ délka nového seznamu 0 ● ● ● ● ● ● ● ● ● aldl dl_orig get_parent_set()... ?=?=

40 40 Path join – 2/2 zAlgorithm ancestor_descendant_join (al, dl) dl_orig = copy of dl; // get_parent_set() – nahradí každé id uzlu, id jeho rodiče while (get_parent_set(dl)) { ax = 0; dx = 0; while (dx < dl.length) { //některý uzel neměl předka if (dl[dx] = null) dx++; //přejdi na dalšího předka.. ax++ else if (dl[dx] > al[ax]) { if (ax < al.length - 1) ax++; else break; } //přejdi na dalšího přímého předka.. dx++ else if (dl[dx] < al[ax]) dx++; else { //shoda: předek al[ax] je přímý předek dl_orig[dx] output(al[ax], dl_orig[dx]); dx++; }}}

41 41 XIRQL – váhy yvážené termy v dokumentu yvážené termy v dotazu ( //položka[ 0.8 * název = “háček“) yv daném kontextovém uzlu (např. //položka) se vyhledává ploše – fulltextovým vyhledáváním s váhami

42 42 XIRQL – relevance zpodpora tradičních dotazů DIS ynezohledňují strukturu => problém: term v kořeni má menší váhu zzohlednění struktury: ypronásobení číslem < 1 y? celou cestu, jen jedenkrát

43 43 XIRQL – typy zoperátory na základě datových typů ynapř. ‘=‘ pro string, typ operandů zjistí sám stroj XIRQL zklasifikační schémata, thesaurus zatributy vs. elementy – to samé

44 44 zpotomci elemenentu jako položky struktury dané elementem zodvozování (reasoning) na základě typů položek třídy yHomePhoneType -> PhoneType RDF Reasoning class Clovek { HomeAddressType adresa; HomePhoneTypetelefon; Integervek; }

45 45 Literatura - dodatek 1.Systém pro správu a dotazování rozsáhlých slovníků ve formátu XML, Diplomová práce - Josef Kořenek, FI - Masarykova univerzita, Brno 2002, 2.eXist: An Open Source Native XML Database – W. Meier, Darmstadt University of Technology, 2002, 3.XIRQL: A Query Language for Information Retrieval in XML Documents – N. Fuhr, Kai Groβjohann, University of Dortmund, 2001 zhttp://ls6-www.informatik.uni-dortmund.de/bib/fulltext/ir/Fuhr_Grossjohann:02.pdfhttp://ls6-www.informatik.uni-dortmund.de/bib/fulltext/ir/Fuhr_Grossjohann:02.pdf zhttp://www.is.informatik.uni-duisburg.de/projects/carmen/ sigir01.pdfhttp://www.is.informatik.uni-duisburg.de/projects/carmen/ sigir01.pdf 4.Jena SemWeb Toolkit, HP Labs,


Stáhnout ppt "XQuery Dotazovací jazyk nad XML dokumenty Jan Vávra, Přemysl Volf 7. ledna 2004"

Podobné prezentace


Reklamy Google