Download - XML Spletne tehnologije
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XMLSpletne tehnologije
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
Primerjava relacijskih in XML podatkov
{ row: { name: “John”, phone: 3634 }, row: { name: “Sue”, phone: 6343 }, row: { name: “Dick”, phone: 6363 }}
name phone
J ohn 3634
Sue 6343
Dick 6363
row row row
name name namephone phone phone
“John” 3634 “Sue” “Dick”6343 6363
Relacija … v XML
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
Primerjava relacijskih in XML podatkov Relacija je v osnovi drevo, ki ima:
– Neomejeno število vozlišč na prvem nivoju(poljubno število vrstic)
– Vozlišča prvega nivoja imajo natančno določeno stopnjo oz. število potomcev (natančno določeno število polj)
XML podatkovna struktura je v osnovi poljubno drevo, ki ima:– Neomejeno število vozlišč na vseh nivojih– Poljubno število nivojev– Spremenljivo število potomcev posameznih vozlišč – Spremenljivo dolžino poti
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
Poizvedovalni jezik za XML Mora biti visoko nivojski “SQL za XML” Mora biti skladen z XSchema:
– Delovati mora tudi v primerih, ko informacij o shemi ni. Podpirati mora enostavne in kompleksne
(gnezdene) podatkovne tipe. Podpirati mora univerzalne in eksistencialne
kvantifikatorje ter agregacijo. Omogočati mora izvajanje operacij nad sekvencami
in hierarhičnimi strukturami dokumentov. Omogočati mora pretvorbo in izdelavo XML
struktur.
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery Vplivi: XML-QL, Lorel, Quilt, YATL Prebere sekvenco XML fragmentov ali pa
atomarne vrednosti in vrne sekvenco XML fragmentov ali atomarne vrednost.– Vhodi/izhod so objekti, ki so definirani z XML-Query
podatkovnim modelom in ne z nizi iz XML sintakse.
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Pregled Izrazi za pot (Path expressions) Konstruktorji (Element constructors) FLWOR izrazi (For-Let-Where-Order-Return expressions):
– FOR, LET, WHERE, ORDER, RETURN stavek– Vključujejo tudi nekatere druge izraze, kot so na primer
pogojni izrazi, izpisi, kvantifikatorji itd. – Generalizacija SELECT, FROM, HAVING, WHERE stavkov iz SQL
Kontekstno odvisni izrazi:– Element (trenutno vozlišče),– Pozicija (v nizu, ki ga obdelujemo),– Velikost (niza, ki ga obdelujemo),– Vključujejo tudi imenske prostore , spremenljivke, funkcije,
datume itd.
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Izraz za pot (Path Expressions)
Primer:– Bib/paper– Bib/book/publisher– Bib/paper/author/lastname
V XML dokumentu je vrednost poti p množica objektov, ki so dostopni po tej poti
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Primer poti
Doc =
&o1
&o12 &o24 &o29
&o43
&o70 &o71
&96
&243 &206
&25
“Serge” “Abiteboul”
1997
“Victor” “Vianu” 122 133
paper book paper
references
references referencesauthortitle year http
authorauthor
authortitlepublisher
authorauthor
titlepage
firstname lastname firstname lastnamefirst last
Bib
&o44 &o45 &o46
&o47&o48&o49&o50&o51
&o52
Bib/paper = <&o12,&o29>Bib/book/publisher = <&o51>Bib/paper/author/lastname = <&o71,&206>
Zaporedje elementovje pomembno
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Konstruktorji (Element Construction)
Z XQuery izrazi lahko sestavimo nove vrednosti in strukture.
Primer: če pogledamo poti, ki smo jih definirali na prejšnjem diapozitivu:– Vsaka pot opredeljuje nov niz elementov– Tvorimo lahko nove poljubne strukture
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: FLWOR izrazi
FOR-LET-WHERE-ORDERBY-RETURN = FLWOR
FOR/LET stavek
WHERE stavek
ORDERBY/RETURN stavek
Seznam n-teric
Seznam n-teric
Instanca (primerek) XQuerypodatkovnega modela
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: FOR vs. LET… FOR $x IN list-expr
– Poveže $x s posameznimi vrednostmi v seznamu.
LET $x = list-expr – Poveže $x s celotnim seznamom– Uporaben je za gnezdenje izrazov in agregacijo
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: FOR vs. LET… FOR obdela vsak element vhodnega
zaporedja in rezultate združi v izhodno zaporedje– V običajnih primerih obstaja en izhodni element za
vsak vhodni… Primer:
– Vhod (vhodno zaporedje): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10– Izhod (izhodno zaporedje): 1, 4, 9, 16, 25, 36, 49, 64,
81, 100
for $n in (1 to 10)return $n * $n
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: FOR vs. LET… Z XQuery LET stavkom deklariramo
spremenljivko in ji priredimo vrednost Primer:
– Vsako pojavitev reference na spremenljivko zamenjamo z vrednostjo spremenljivke
– Rezultat je ekvivalenten spodnjemu izrazu:
let $maxCredit := 3000let $overdrawnCustomers := //customer[overdraft >
$maxCredit]return count($overdrawnCustomers)
count(//customer[overdraft > 3000])
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: FOR vs. LETFOR $x IN document("bib.xml")/bib/bookRETURN <result> $x </result>
Izhod:
LET $x IN document("bib.xml")/bib/bookRETURN <result> $x </result>
Izhod:
FOR vrne seznam kjer je $x združen z vsakim elementom book znotraj datoteke bib.xml
LET vrne rezultat kjer je $x združen s celotnim seznamom elementov book iz datoteke bib.xml.
<result> <book>...</book> <book>...</book> <book>...</book> ...</result>
<result> <book>...</book></result><result> <book>...</book></result><result> <book>...</book></result>...
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Primer (1) Poišči vse naslove knjig, ki so bile izdane
po letu 1995:
FOR $x IN document("bib.xml")/bib/bookWHERE $x/year > 1995RETURN $x/title
Izhod: <title> abc </title> <title> def </title> <title> ghi </title>
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Primer (2) … Za vsakega avtorja knjige, ki jo je izdala
založba Morgan Kaufmann, izpišite vse njegove izdane knjige
FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result>
distinct je funkcija, ki izloči duplikate (vhodni podatki se najprej pretvorijo v atomarne vrednosti, nato se izločijo duplikati)
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Primer (2)
Ugnezdena struktura elementov rezultata je določena z ugnezdeno strukturo poizvedbe
FOR $t IN /bib/book[author=$a]/title
<result> <author>Jones</author> <title> abc </title> <title> def </title></result><result> <author> Smith </author> <title> ghi </title></result>
Izhod:
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: WHERE WHERE stavek opravlja podobno vlogo kot
v SQL– določa selekcijski pogoj (filter)– je opcijski– pojavi se lahko samo enkrat in sicer takoj po FOR ali
LET stavkufor $genre in //genre/choicefor $video in //videofor $actorRefs in $video/actorReffor $actor in //actorwhere $video/genre = $genre and $actor/@id = $actorRefsreturn concat($genre, ": ", $actor)
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Primer (3)
count je funkcija, ki vrne število elementov
<big_publishers> FOR $p IN distinct(document("bib.xml")//publisher) LET $b := document("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers>
Izpišite vse založnike, ki so izdali več kot 100 knjig:
Za vsakega založnika p V b shrani seznam objavljenih knjig p-jaPreštej število knjig v b in vrni p, če je število knjig > 100
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Primer (4) Izpišite vse knjige, ki imajo višjo ceno od
povprečne:LET $a=avg(document("bib.xml")/bib/book/price)FOR $b in document("bib.xml")/bib/bookWHERE $b/price > $aRETURN $b
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Zbirke (Collections) … Urejena zbirka
– /bib/book/author Neurejena zbirka
– distinct(/bib/book/author)
LET $a = /bib/book
$a je stavek, ki iterira skozi vse knjige v zbirki
RETURN <result> $b/author </result>
Stavek vrne eno zbirko!
<result> <author>...</author> <author>...</author> <author>...</author> ...</result>
Izhod:
$b/author tudi zbirka (več avtorjev…)
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Zbirke (Collections) … Zbirke v izrazih:
Izraz je veljaven samo v primeru, da imata oba niza največ en elementAtomatizacija
$b/price seznam n cen
$b/price * 0.7
$b/price * $b/quantity
seznam n številk ??
seznam n x m številk ??
/book1/author eq “Kennedy“
Primerjava vrednosti
Splošna primerjava/book1/author = “Kennedy“
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: ORDERBY Order by stavek uredi rezultate poizvedbe
Primer: Video posnetke uredi oz. izpiši naraščajoče glede ne leto nastanka, znotraj posameznega leta pa padajoče glede na oceno gledalcev.FOR $x in //videoORDERBY $x/year ascending, number($x/user-rating) descendingRETURN $x/title
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: RETURN Vsak XQuery FLWOR izraz vsebuje return
stavek Return stoji vedno na koncu izraza S stavkom določimo strukturo oz. zgradbo
rezultata (Kaj vse bo vključeno v rezultat?)
Izpišite vse igralce, ki igrajo v komedijah.FOR $v in //video[genre="comedy"]RETURN //actor[@id = $v/actorRef]
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Urejanje<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) ORDERBY $p RETURN <publisher> <name> $p/text() </name>, FOR $b IN document("bib.xml")//book[publisher = $p] ORDERBY $b/price DESCENDING
RETURN <book> $b/title, $b/price </book> </publisher></publisher_list>
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: If-Then-ElseFOR $h IN //holding ORDERBY $h/titleRETURN <holding> $h/title, IF $h/@type = "Journal" THEN $h/editor ELSE $h/author </holding>
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Eksistenčni kvantifikator… Eksistenčni kvantifikator je XQuery SOME
operator.– Ali podanemu pogoju zadošča vsaj eno vozlišče
znotraj množice vozlišč?
some $price in document("data/items.xml")//reserve_pricesatisfies $price > 1000
Ali obstaja vsaj ena cena, ki je višja od 1000?Vrni vrednost, če obstaja vsaj ena cena, ki je višja od 1000.
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Eksistenčni kvantifikatorFOR $b IN //bookWHERE SOME $p IN $b//para SATISFIES contains($p, "sailing") AND contains($p, "windsurfing")RETURN $b/title
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Univerzalni kvantifikator
FOR $b IN //bookWHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing")RETURN $b/title
Univerzalni kvantifikator je XQuery EVERY operator– Ali podanemu pogoju zadoščajo vsa vozlišča znotraj
podane množice vozlišč?
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XQuery: Razno Before in After:
– Urejanje vhodnih podatkov. Filter:
– Omejevanje izhodnega drevesa. Rekurzivne funkcije, Imenski prostori (Namespaces) Reference, povezave … …
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XML-Query Podatkovni model Opis XML podatkov v obliki drevesa
http://www.w3.org/TR/query-datamodel/2/2001
Node ::= DocNode | ElemNode | ValueNode | AttrNode | NSNode | PINode | CommentNode | InfoItemNode | RefNode
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XML-Query Podatkovni model Elementarno vozlišče (poenostavljena
definicja)Daj mi značko, nabor atributov, seznam elementov/vrednosti in jaz ti bom vrnil element
elemNode : (QNameValue, {AttrNode }, [ ElemNode | ValueNode]) ElemNodeQNameValue je naziv značke
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
XML-Query Podatkovni model<book price = “55” currency = “USD”> <title> Foundations … </title> <author> Abiteboul </author> <author> Hull </author> <author> Vianu </author> <year> 1995 </year></book>
book1= elemNode(book, {price2, currency3}, [title4, author5, author6, author7, year8])price2 = attrNode(…) /* next */currency3 = attrNode(…)title4 = elemNode(title, string9)…
PODATKOVNE BAZEModul: XML©Laboratorij za podatkovne tehnologije
Dodatno gradivo: Dodatne informacije so dostopne na spodnjih
povezavah:– http://www.w3.org/TR/xquery
Specifikacije– http://www.w3.org/XML/Query#products
Implementacije– http://xml.coverpages.org/xmlQuery.html
XQuery (povzetki in povezave)– http://www.xmlstarterkit.com/
Software AG’s XML server s podporo XQuery– http://www.xquery.com
Tutoriali – http://www.saxonica.com
Odprtokodna XQuery implementacija