Az XML dokumentumok kezeléséhez a legfontosabb az XPath ismerete. Adjunk meg néhány XPath alapú lekérdezést -> lásd EXTRACT(XMLType, XPath) függvény XPath kifejezésekben használható dolgok: (. , .. , /, *, @attr, csúcsnév, [felt], // <- tetszőleges szinttel lejjebb ) [felt or felt] [felt and felt] [not(felt)] Xpath_kif | Xpath_kif A feltételben tesztelni lehet attribútum értékét vagy létezését -> [@att="..."], [@att] csomópont tartalmát -> [text()="..."] gyermek csomópont tartalmát vagy létezését -> [Csnev="..."], [Csnev] Tengelyek, függvények -- Adjuk meg a teljes dokumentumot (3 féle megadást is adunk) SELECT EXTRACT(kolcs_spec, '/').getStringVal() FROM kolcsonzes; (A gyökér elemet adtuk meg.) SELECT EXTRACT(kolcs_spec, '*').getStringVal() FROM kolcsonzes; (A gyökérnek az egyetlen gyermek csomópontja maga a teljes dokumentum.) SELECT EXTRACT(kolcs_spec, '/*').getStringVal() FROM kolcsonzes; (A teljes dokumentum a gyökérnek gyermeke.) A fenti lekérdezések nem formázzák meg az eredményt, hanem string típusúként adják azt vissza. Ezért abból nem is látszik a fa szerkezete. Ha az EXTRACT tagfüggvényt (MEMBER) használjuk az alábbi módon, az megformázza az outputját. SELECT k.kolcs_spec.EXTRACT('/').getStringVal() FROM kolcsonzes k; -- Adjuk meg az összes csúcsot (az összes létező részfát) SELECT EXTRACT(kolcs_spec, '//*').getStringVal() FROM kolcsonzes; -- Adjuk meg az összes második csúcsot (az összes létező részfák 2. csúcsait) SELECT EXTRACT(kolcs_spec, '//*[2]').getStringVal() FROM kolcsonzes; SELECT EXTRACT(kolcs_spec, '//*[position()=2]').getStringVal() FROM kolcsonzes WHERE azon=1; -- Adjuk meg az első kölcsönző nevét. ----------- Gipsz Jakab -- Adjuk meg azokat a csomópontokat, amelyeknek van 'ar' attribútuma ---------------------------------------------------------------------------------------- JegkorszakShrekUvegtigris -- Adjuk meg a DVD csomópontok szöveges tartalmát nyitó és záró tagek nélkül ------------------------- JegkorszakShrekUvegtigris A fenti esetben az EXTRACT a szöveges tartalmakat összevonja egyetlen szöveges dokumentumtöredékké. -- Adjuk meg az összes előadót -------------- ZoranABBAZoran --Adjuk meg a 2600-nál olcsóbb vagy 3800-nál drágább DVD-ket -------------------------------------------------------------- JegkorszakUvegtigris --Adjuk meg azokat a csomópontokat, amelyeknek van 'eloado' vagy 'szerzo' attributuma SELECT EXTRACT(kolcs_spec, '//*[@eloado or @szerzo]').getStringVal() FROM kolcsonzes; --Adjuk meg azokat a csomópontokat, amelyeknek van 'cim' és 'szerzo' attributuma SELECT EXTRACT(kolcs_spec, '//*[@cim and @szerzo]').getStringVal() FROM kolcsonzes; -- Adjuk meg azokat a csomópontokat, amelyeknek nincs attribútuma SELECT EXTRACT(kolcs_spec, '//*[not(@*)]').getStringVal() FROM kolcsonzes WHERE azon=1 -- Adjuk meg a Shrek DVD csomópontját ----------------------------------------- Shrek -- Adjuk meg a 'Szep Holnap' című CD árát ------------- 3000 -- Adjuk meg azoknak a CD-knek a címeit, amelyeknek ára legalább 3000 -------------------------------------------- Szep HolnapIgy alakult -- Adjuk meg a 'Shrek' DVD árát ---- 3500 --Adjuk meg a Gipsz Jakab által kölcsönzött konyvek szerzőit ------------------------- Michael EndeFekete Istvan -- Adjuk meg azoknak a CD-knek az előadóit, amelyeket nem Gipsz Jakab kölcsönzött SELECT EXTRACT(kolcs_spec, '//Kolcsonzo[not(@nev="Gipsz Jakab")]//CD/@eloado').getStringVal() FROM kolcsonzes; --Adjuk meg azoknak a nevét, akik kölcsönöztek Zorán CD-t -------------------- Gipsz JakabKis Virag -- Adjuk meg azok nevét, akik kölcsönöztek könyvet ----------- Gipsz Jakab -- Adjuk meg azok nevét, akik kölcsönöztek könyvet vagy CD-t -------------------- Gipsz JakabKis Virag -- Adjuk meg a Gipsz Jakab utáni kölcsönzők nevét SELECT EXTRACT(kolcs_spec, '//Kolcsonzo[@nev="Gipsz Jakab"]/following-sibling::*/@nev').getStringVal() FROM kolcsonzes; ----------------- Kis ViragNagy Pal -- Adjuk meg a Gipsz Jakab utáni kölcsönző nevét SELECT EXTRACT(kolcs_spec, '//Kolcsonzo[@nev="Gipsz Jakab"]/following-sibling::*[1]/@nev').getStringVal() FROM kolcsonzes; --------- Kis Virag -- Adjuk meg az utolsó kölcsönző nevét (-> Nagy Pal) -- Kik azok, akik 2 könyvet kölcsönöztek (-> Gipsz Jakab) -- Kik azok, akik csak 1 féle dolgot kölcsönöztek (-> Nagy Pal) -- Mely csomópontok nevében van 'r' betű? ----------------------------------------------------------------- 20002500300020003200 -- Mely csomópontnevek hossza 2? A EXTRACTVALUE függvény annyiban különbözik az EXTRACT-tól, hogy ez csak egyetlen elemre vagy attribútumra működik, és annak eredményét VARCHAR2-ként adja vissza. -- A Nagy Pal által kölcsönzött egyetlen DVD elem szöveges gyermekét adja vissza SELECT EXTRACTVALUE(kolcs_spec, '//*[@nev="Nagy Pal"]//DVD') FROM kolcsonzes; ---------- Uvegtigris Maga a csomópont így néz ki: SELECT EXTRACT(kolcs_spec, '//*[@nev="Nagy Pal"]//DVD').getstringval() FROM kolcsonzes; ------------------------------- Uvegtigris