XML lekérdezőnyelvek
Az XPath/XQuery adatmodell
- A relációk megfelelője ebben a környezetben
- Ez azt jelenti, hogy a bemenetet, a köztes lépések eredményeit és a végeredményt is tételek listájaként kezeljük.
- Egy tétel lehet:
- egyszerű érték
- csomópont
A csomópont fő típusai
- A dokumentum-csomópontok a teljes dokumentumot reprezentálják
- A
doc(url)
parancs hatására jön létre - Minden XPath (és XQuery) lekérdezés hivatkozik egy dokumentum-csomópontra
- Elemcsomópontok: a tagek és a közöttük lévő dokumentumrészlet
- Attribútumok: a nyitó tagekben szerepelnek és ott kapnak értéket
Utak az XML dokumentumban
- Az XPath segítségével az XML dokumentumokat járhatjuk be. Más szóval utakat adhatunk meg.
- Az utak mindig tételek egy listáját választják ki.
Út kifejezések
- Egyszerű formájában az utak perjel és tagek
sorozatából állnak. A kifejezés perjellel kezdődik.
- Példa: /teázók/teázó/ár
- Informális jelentés: a dokumentum csomópontból kiindulva balról-jobbra haladva kövessük a tageket sorra.
- Attribútumok az utakban: @-jel jelöli
Utak, melyek akárhol kezdődhetnek
- Ha az út a dokumentum pontból indul, akkor a //X útkifejezés megtalálja az összes X gyerekelemet a beágyazottság bármely szintjén, és visszaadja abban a sorrendben, ahogy az a dokumentumban megjelenik,
- illetve ha ez a útkifejezés folytatódik: //X/…, akkor bármely olyan részelemből fog indulni, aminek a tagje X.
- Wildcard: *-karakter
Szűrési feltétel
- A tageket feltételek követhetik.
- Ilyenkor csak azok az útkifejezésre illeszkedő utak kerülnek be az eredménybe, melyek a feltételt is kiekégítik.
Tagek atomi értékű törzsének kiválasztása:
- Ehhez a text() függvényt kell használni
- A hivatalos XPath specifikációban [text()] kifejezést kell írni, a text() függvény igazzal tér vissza, ha a tétel atomi érték.
Tengelyek:
- Általánosan: az útkifejezésekben minden egyes lépésnél tengelyekkel (axes) adhatjuk meg a következő lépésnél feldolgozandó pontok listáját.
- A default tengely a child:: – ami az összes gyermekét veszi az aktuális pontoknak.
XQuery
- Az XQuery egy SQL-hez hasonló lekérdezőnyelv, ami XPath kifejezéseket használ.
- Ugyanúgy a tételek listája adatmodellt használja.
- Az XQuery egy funkcionális nyelv.
Tételek listája
- Az XQuery-ben előfordulhat, hogy listák listája generálódik.
- Az ilyen listákat a rendszer "sima" listává alakítja át. (flatten)
FLWR kifejezések
- Egy vagy több
for
és/vagylet
záradék. - Ezek után opcionálisan egy
where
záradék. - Végül egy
return
záradék.
- Mindegyik
for
egy ciklust generál. - a
let
a cikluson belüli hozzárendeléseket adja meg. - Minden iterációjánál a beágyazott ciklusnak, ha
van ilyen, ki kell értékelni a
where
záradékot. - Ha a
where
záradék IGAZ, areturn
záradéknak megfelelő értéket a végeredményhez kapcsoljuk.
FOR záradék
for <változó> in <kifejezés>, . . .
- A változók
$
jellel kezdődnek. - A
for
változója egy ciklusban sorra bejárja a kifejezés eredményének összes tételét. - A
for
után megadott részek tehát minden egyes tételre végrehajtódnak egyszer.
LET záradék
let <változó> := <kifejezés>, . . .
- A változó értéke tételek listája lesz, ez a lista a kifejezés eredménye.
- A
let
záradék hatására nem indul el egy ciklus; afor
záradék hatására igen.
Order-By záradék
- Az FLWR valójában FLWOR, ahol egy
order-by
záradék előzheti meg areturn
záradékot. - Alakja:
order by <kifejezés>
- A kifejezés a változók minden hozzárendelésére kiértékelődik.
- A végeredmény listájának sorrendjén változtat.
Predikátumok
- A feltételekben a "létezést" követeljük meg.
- Példa: ```/teázók/teázó[@név]`` jelentése "az összes olyan teázó, aminek létezik neve."
- Példa:
/teázók/tea[@árulja = ”JoeTeázója”]
azon teázók listáját adja vissza, melyeket Joe teázójában megkaphatunk.
Az elemek adatainak kinyerésére
- Tegyük fel, hogy elemek értékeit szeretnénk összehasonlítani.
- Az $E$ elem értékét a data függvény használatával kaphatjuk meg:
data(E)
.
Ismétlődések kiszűrése
- Használjuk a distinct-values függvényt, aminek a paramétere: elemek listája.
- Finomság: a függvény a tagek nélkül veszi az értékeket és ezek szöveges értékét hasonlítja össze.
Halmazműveletek
- A union, intersect, except itt is alkalmazhatóak pontok listájára.
- A jelentés hasonló SQL-beli jelentéshez.
- Az ismétlődések itt is törlődnek.
- Az eredmény elemei dokumentum sorrendben jelennek meg.
Összesítések
- Összesítő függvények:
count, sum, max, min, avg
itt is megvannak - Ezek bemenete tételek listája
- Ez lehet üres lista is, viszont ennek a kezelésében már eltérő viselkedést mutatnak
Összekapcsolások
- Az XQueryben össze lehet kapcsolni két dokumentumot
- Változók kellenek a megfelelő dokumentumokra
- A for záradék kell egy dokumentum elemeinek előállítására