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:
    1. egyszerű érték
    2. csomópont

A csomópont fő típusai

  1. 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
  1. Elemcsomópontok: a tagek és a közöttük lévő dokumentumrészlet
  2. 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

  1. Egy vagy több for és/vagy let záradék.
  2. Ezek után opcionálisan egy where záradék.
  3. 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, a return 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; a for 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 a return 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

Források