XPath 1.0. Jeszenszky Péter Debreceni Egyetem, Informatikai Kar Utolsó módosítás: szeptember 5.

Hasonló dokumentumok
XPath. dr. Paller Gábor. XML technológiák

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

XML és XSLT (a színfalak mögül)

XML sémanyelvek Jeszenszky, Péter

Általános lekérdezési feladatok

Java II. I A Java programozási nyelv alapelemei

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Adatkezelési mőveletek az XML nyelvben XQuery - XML dokumentumok lekérdezésére szolgáló lekérdezınyelv kifejezı ereje az OQL nyelvével egyenértékő.

Lekérdezések az SQL SELECT utasítással

Az XML dokumentumok adatmodellje

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Kifejezések. Kozsik Tamás. December 11, 2016

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Java II. I A Java programozási nyelv alapelemei

XML alapú adatbázis-kezelés. (Katona Endre diái alapján)

Szoftvertervezés és -fejlesztés I.

Programozási nyelvek (ADA)

Webes űrlapok és az XForms ajánlás

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

AWK programozás, minták, vezérlési szerkezetek

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Készítette: Nagy Tibor István

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

Assembly programozás: 2. gyakorlat

Occam 1. Készítette: Szabó Éva

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

XML technikák II Kovács, László

AWK programozás Bevezetés

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Aspektus-orientált nyelvek XML reprezentációja. Kincses Róbert Debreceni Egyetem, Informatikai Intézet

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

Komputeralgebra Rendszerek

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Komputeralgebra Rendszerek

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Komputeralgebra Rendszerek

Kifejezések. Kozsik Tamás. December 11, 2016

XSLT ( XSL Transformations)

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Apple Swift kurzus 3. gyakorlat

Lekérdezések az SQL-ben 1.rész

XML (DTD) (XSD) DOM SAX XSL. XML feldolgozás

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Felvételi tematika INFORMATIKA

Hardver leíró nyelvek (HDL)

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Algoritmizálás és adatmodellezés tanítása 1. előadás

BASH script programozás II. Vezérlési szerkezetek

Informatikai alapismeretek Földtudományi BSC számára

1. Bevezetés A C++ nem objektumorientált újdonságai 3

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA)

Logika és informatikai alkalmazásai

Készítette: Nagy Tibor István

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

A C# programozási nyelv alapjai

Dokumentumformátumok Jelölő nyelvek XML XML. Sass Bálint Bevezetés a nyelvtechnológiába 2. gyakorlat szeptember 20.

Bevezetés a C++ programozási nyelvbe

1. Egyszerű (primitív) típusok. 2. Referencia típusok

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

Kölcsönhatás diagramok

7. Gyakorlat A relációs adatmodell műveleti része

Adatbázismodellek. 1. ábra Hierarchikus modell

Komputeralgebra rendszerek

Adatbázisok elmélete 9. előadás

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Webprogramozás szakkör

ADATBÁZIS-KEZELÉS. Relációalgebra, 5NF

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Komputeralgebra rendszerek

Az R nyelv. Jeszenszky Péter Debreceni Egyetem, Informatikai Kar június 12.

Lekérdezések az SQL-ben 1.rész

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

2016, Funkcionális programozás

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Aritmetikai kifejezések lengyelformára hozása

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázisok* tulajdonságai

34. Elsődleges kulcs megadása XMLSchema-ban Idegen kulcs megadása XMLSchema-ban Típusok kategóriái és saját típus megadásának

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Interfészek. PPT 2007/2008 tavasz.

Programozás I gyakorlat

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Komputeralgebra Rendszerek

KOVÁCS BÉLA, MATEMATIKA I.

Web-fejlesztés NGM_IN002_1

Adatmodellezés. 1. Fogalmi modell

1. előadás: Halmazelmélet, számfogalom, teljes

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

5. Gyakorlat. 5.1 Hálós adatbázis modell műveleti része. NDQL, hálós lekérdező nyelv:

Átírás:

XPath 1.0 Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.hu Utolsó módosítás: 2017. szeptember 5. 1

XPath 1.0 XML Path Language (XPath) Version 1.0 (W3C ajánlás, 1999. november 16.) https://www.w3.org/tr/xpath/ Hibajegyzék (utolsó módosítás: 2005. november 2.): https://www.w3.org/1999/11/rec-xpath-19991116-errat a/ Célja, hogy lehetővé tegye XML dokumentumok részeinek megcímzését. Ehhez biztosítja karakterláncok, számok és logikai értékek kezelését is. Az XSLT és az XPointer szabványok használják (mindkettő kibővíti). 2

XPath 2.0 (1) XML Path Language (XPath) 2.0 (Second Edition) (W3C ajánlás, 2010. december 14.) https://www.w3.org/tr/xpath20/ Lényegesen fejlettebb az 1.0 verziónál. Szoros összefonódás az XSLT 2.0 és az XQuery 1.0 szabványokkal. Maga az XQuery 1.0 az XPath 2.0 kiterjesztése. 3

XPath 2.0 (2) Kapcsolódó szabványok: XQuery 1.0 and XPath 2.0 Data Model (XDM) (Second Edition) (W3C ajánlás, 2010. december 14.) https://www.w3.org/tr/xpath-datamodel/ XQuery 1.0 and XPath 2.0 Formal Semantics (Second Edition) (W3C ajánlás, 2010. december 14.) https://www.w3.org/tr/xquery-semantics/ XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition) (W3C ajánlás, 2010. december 14.) https://www.w3.org/tr/xquery-operators/ W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures (W3C ajánlás, 2012. április 5.) https://www.w3.org/tr/xmlschema11-1/ W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes (W3C ajánlás, 2012. április 5.) https://www.w3.org/tr/xmlschema11-2/ 4

XPath 3.0 XML Path Language (XPath) 3.0 (W3C ajánlás, 2014. április 8.) https://www.w3.org/tr/xpath-30/ Kapcsolódó szabványok: XQuery and XPath Data Model 3.0 (W3C ajánlás, 2014. április 8.) https://www.w3.org/tr/xpath-datamodel-30/ XPath and XQuery Functions and Operators 3.0 (W3C ajánlás, 2014. április 8.) https://www.w3.org/tr/xpath-functions-30/ XSL Transformations (XSLT) Version 3.0 (W3C ajánlás, 2017. június 8.) https://www.w3.org/tr/xslt-30/ 5

Jellemzők Tömör, nem-xml szintaxis (XPath kifejezések). XPath kifejezések használata URI-kban és attribútumok értékeiben. XML dokumentumokhoz a DOM-hoz hasonló módon egy logikai adatmodell definiálása, azonban vannak eltérések a DOM adatmodelljétől. Fa adatmodell, amelyben minden csomóponthoz definiált annak sztringértéke. Az XPath kifejezések egy részhalmaza alkalmas mintaillesztésre, éppen erre használja az XSLT. Az elnevezés onnan jön, hogy a '/' karakter éppen olyan módon használt egy hierarchikus szerkezetben való navigálásra, mint az állományrendszernél. 6

Adatmodell (1) XML dokumentumok modellezése olyan fákkal, melyekben az alábbi fajta csomópontok szerepelhetnek: Gyökércsomópont Elemcsomópont Szövegcsomópont Tulajdonság-csomópont Névtércsomópont Feldolgozási utasítás-csomópont Megjegyzéscsomópont 7

Adatmodell (2) Minden csomópontnak pontosan egy szülője van, kivéve a gyökércsomópontot, melynek nincs szülője. Gyermekei csak az elem- és gyökércsomópontoknak lehetnek. Minden csomópontnak van sztring-értéke. Bizonyos esetekben ez magának a csomópontnak része, más esetekben a leszármazottak sztring-értékeiből határozható meg. A csomópontoknak lehet kifejtett neve, ami egy lokális részből és egy névtér URI-ból álló pár, ahol a névtér URI lehet null. A csomópontokon egy rendezés definiált (dokumentumsorrend). 8

Példa (1) <?xml version="1.0"?> <!DOCTYPE movies SYSTEM "movies.dtd"> <!-- Forrás: http://www.imdb.com/ --> <movies> <movie id="0054215"> <title>psycho</title> <year>1960</year> <rating>8.6</rating> </movie> </movies> 9

Példa (2) 10

Dokumentumsorrend (1) Egy csomópont dokumentumsorrendben megelőz egy másikat, ha az általános egyedek helyettesítése után az XML reprezentációjának első karaktere megelőzi a másikét a dokumentumban. A gyökércsomópont az első a sorrendben. Az elemcsomópontok így értelemszerűen megelőzik a gyermekeiket a sorrendben. Az elemcsomópontok rendezése tehát a nyitócímkék előfordulásának sorrendjében történik. 11

Dokumentumsorrend (2) A tulajdonság- és névtércsomópontok megelőzik azt a csomópontot, melyhez tartoznak. Egy elemcsomóponthoz tartozó névtércsomópontok megelőzik a tulajdonságcsomópontokat. A tulajdonság- és névtércsomópontok relatív elrendezése implementációfüggő. Fordított dokumentumsorrend (értelemszerű). 12

Dokumentumsorrend szemléltetése 13

Gyökércsomópont A fa gyökere. Gyermekei a dokumentum gyökérelemét reprezentáló elemcsomópont, valamint a dokumentumban azt megelőző és követő megjegyzéseket és feldolgozási utasításokat ábrázoló csomópontok. Nincs kifejtett neve. Sztring-értéke az összes leszármazott szövegcsomópont sztring-értékének dokumentumsorrendben történő összefűzésével adódik. 14

Elemcsomópontok Minden a dokumentumban szereplő elemnek egy elemcsomópont felel meg a fában. Van kifejtett nevük (értelemszerű). A sztring-érték úgy határozandó meg, mint a gyökércsomópont esetében. 15

Tulajdonság-csomópontok Nem gyermekei az elemcsomópontoknak. A tulajdonság-csomópontoknak szülői azok az elemcsomópontok, melyekhez tartoznak. Van kifejtett nevük (értelemszerű). Sztring-értékük a normalizált tulajdonságérték. A névtér-deklarációk nem tulajdonságcsomópontokként jelennek meg. 16

Névtércsomópontok (1) Minden elemcsomóponthoz hozzárendelt névtércsomópontok egy halmaza. Minden egyes olyan névtér-előtaghoz, amelynek hatáskörében van az elem, egy névtércsomópont megfeleltetése. Ha az elem alapértelmezett névtér-deklaráció hatáskörébe esik, annak is egy névtércsomópont megfeleltetése. 17

Névtércsomópontok (2) Nem gyermekei az elemcsomópontoknak. Viszont a névtércsomópontoknak szülői azok az elemcsomópontok, melyekhez tartoznak. Van kifejtett nevük: A lokális rész a névtér-előtag (alapértelmezett névtérnél az üres sztring). A névtér URI null. Sztring-értékük a megfelelő névtér URI. Ha a névtér-deklarációban adott URI relatív, akkor ez a sztring-érték implementációfüggő! 18

Szövegcsomópontok Szövegcsomópontot soha nem előz meg vagy követ másik szövegcsomópont. Nincs kifejtett nevük. A sztring-érték értelemszerű (legalább egy karakterből áll). A dokumentumelemen (gyökérelemen) kívüli whitespace karakterek nem jelennek meg szövegcsomópontokként. 19

További fajta csomópontok Feldolgozási utasítás-csomópontok: A dokumentumban szereplő feldolgozási utasításokat ábrázolják (a DTD-ben lévő feldolgozási utasítások nem jelennek meg a modellben). Van kifejtett nevük, bennük a lokális rész a feldolgozó alkalmazás neve, a névtér URI null. Sztring-értéküket a feldolgozási utasításban az alkalmazás nevét a whitespace karakterek után követő karakterek adják meg. Megjegyzéscsomópontok: A dokumentumban szereplő megjegyzéseket ábrázolják (a DTDben lévő megjegyzések nem jelennek meg a modellben). Nincs kifejtett nevük. Sztring-értékük a tartalmazott megjegyzés szöveg. 20

Eltérések a DOM adatmodelltől (1) A DOM adatmodellel ellentétben nem követhetik egymást szövegcsomópontok. Névterek eltérő módon történő kezelése. A DOM adatmodellben elemcsomópontoknál csak az explicit módon megadott névtér-deklarációk jelennek meg, és közönséges tulajdonságokként. A DOM adatmodellben a tulajdonságcsomópontoknak nincs szülője. A DOM adatmodellel ellentétben a CDATAszakaszok szövegcsomópontokként jelennek meg. 21

Eltérések a DOM adatmodelltől (2) Az XPath adatmodellben valamennyi egyedhivatkozás helyettesítésre került, így azok nem jelennek meg önálló csomópontokként. Nem jelenik meg az adatmodellben a dokumentumtípus-deklaráció sem. 22

XPath kifejezések (1) XPath kifejezések értéke az alábbi típusú lehet: csomóponthalmaz (node-set) logikai szám (lebegőpontos) sztring A kifejezések kiértékelése adott kontextusban történik, melynek meghatározását az XSLT és az XPointer szabványok definiálják. 23

XPath kifejezések (2) A kontextus az alábbiakat jelenti: kontextus-csomópont kontextusméret és -pozíció (pozitív egészek) változó-kötések érvényben lévő névtér-deklarációk függvénykönyvtár Egy kifejezés részeinek kiértékelésekor más-más lehet a kontextus-csomópont, a kontextusméret és -pozíció! 24

XPath kifejezések (3) Fennáll a kontextus-pozíció kontextusméret reláció (jelentésüket lásd később). A változó-kötések változónevekhez értékeket rendelnek. A függvénykönyvtár függvénynevekhez függvényeket rendel. A névtér-deklarációk előtagokhoz névtér URI-kat rendelnek. 25

XPath kifejezések (4) XML dokumentumokban (tulajdonságértékekben) előforduló kifejezésekben speciális karakterek helyett a megfelelő egyedhivatkozásokat kell használni. A kifejezéseket alkotó tokenek között whitespace karakterek szabadon elhelyezhetők. 26

Függvények A szabvány részeként egy olyan függvénykönyvtár definiálása, melyet minden implementáció kell, hogy támogasson. Ezt az XSLT és az XPointer is kibővíti. A könyvtár mind a négy adattípus kezeléséhez biztosít függvényeket. Változó argumentumszámú függvények használata. A függvényhívás módja a szokásos, a paraméterátadás során sorrendi kötés van, a paraméterek átalakítása automatikusan történik a megfelelő típusúvá (automatikus típuskonverziók). 27

Csomóponthalmazok Elérési útvonalak kiértékelésének eredményeként adódnak. A halmazoktól elvárt viselkedésnek megfelelően rendezetlenek és ismétlődés sem megengedett az elemek között. Csomóponthalmazok uniójának képzésére használható a ' ' operátor. Más típusú objektumokat nem lehet csomóponthalmazokká konvertálni. 28

Sztringek Unicode karakterek alkotják. Sztring literálok megadásánál a '"' és ''' határoló karaktereket is lehet használni. Csomóponthalmazok, számok és logikai értékek sztringgé konvertálása az alábbi módon történik: Csomóponthalmaz esetén a konverzió eredménye a halmaz dokumentumsorrendben első csomópontjának sztring-értéke, üres halmaz esetén üres sztring. Logikai értékek sztringgé konvertálása során a true és false sztringeket kapjuk eredményül. Például a pozitív végtelen érték sztringgé konvertálásának eredménye az Infinity karakterlánc. 29

Számok (1) Dupla pontosságú, 64-bites lebegőpontos számok (IEEE 754) Van pozitív és negatív nulla, pozitív és negatív végtelen, valamint NaN érték. Aritmetikai operátorok: +, - (unáris és bináris), *, div, mod Az osztást div jelöli a '/' karakter speciális szerepe miatt, a többi operátor a megszokott. Az operátorok automatikusan számokká alakítják az operandusokat. A következő numerikus függvények állnak rendelkezésre: ceiling(), floor(), number(), sum(), round(). 30

Számok (2) Számmá konvertálás: Sztringek számmá konvertálása értelemszerű módon történik. Ha a konverzió nem végezhető el, akkor az eredmény NaN érték. Igaz logikai érték számmá konvertálása során az eredmény 1, hamis érték esetén 0. Csomóponthalmaz számmá konvertálása során a halmaz először sztringgé konvertálódik, az így kapott eredmény pedig számmá (lásd fenn). 31

Logikai értékek (1) Igaz és hamis értékek. Logikai operátorok (precedencia szerint növekvő sorrendben): or and =!= <= < > = > Valamennyi logikai operátor balról asszociatív. Az or és and logikai műveletek rövidzár műveletek, az operandusok értékét automatikusan logikai típusúvá alakítják. 32

Logikai értékek (2) Negálás a not() függvénnyel lehetséges. Nincsenek logikai konstansok, az igaz és hamis értékek előállítására szolgálnak a true() és false() beépített függvények. 33

Logikai értékek (3) Logikai értékké konvertálás: Negatív nulla, pozitív nulla és NaN értékek konvertálása hamis értékké, az összes többi szám konvertálása igaz értékké. Nem üres csomóponthalmaz konvertálása igaz értékké, üres csomóponthalmaz konvertálása hamis értékké. Nem üres sztring konvertálása igaz értékké, üres sztring konvertálása hamis értékké. 34

Logikai műveletek (1) Ha a!= és = logikai összehasonlító műveletek operandusai csomóponthalmazok: Az eredmény igaz akkor, és csak akkor, ha létezik egyegy olyan csomópont mindkét csomóponthalmazban, amelyek sztring-értékére teljesül a megfelelő reláció. Ha a <=, <, >, >= logikai összehasonlító műveletek operandusai csomóponthalmazok: Az eredmény igaz akkor, és csak akkor, ha létezik egyegy olyan csomópont mindkét csomóponthalmazban, melyek számmá konvertált sztring-értékére teljesül a megfelelő reláció. 35

Logikai műveletek (2) Ha a <=, <, =,!=, >, >= logikai összehasonlító műveletek egyik operandusa csomóponthalmaz, a másik szám: Az eredmény igaz akkor, és csak akkor, ha a csomóponthalmazban van olyan csomópont, melynek számmá konvertált sztring-értéke és a szám operandus között teljesül a megfelelő reláció. 36

Logikai műveletek (3) Ha a!= és = logikai összehasonlító műveletek egyik operandusa csomóponthalmaz, a másik pedig sztring: Az eredmény igaz akkor, és csak akkor, ha a csomóponthalmazban van olyan csomópont, melynek sztringértéke és a sztring operandus között fennáll az adott reláció. Ha a <=, <, >, >= logikai összehasonlító műveletek egyik operandusa csomóponthalmaz, a másik pedig sztring: Az eredmény igaz akkor, és csak akkor, ha a csomóponthalmazban van olyan csomópont, melynek számmá konvertált sztring-értéke és a számmá konvertált sztring operandus között fennáll az adott reláció. 37

Logikai műveletek (4) Ha a!= és = logikai összehasonlító műveletek egyik operandusa csomóponthalmaz, a másik logikai érték: Az eredmény igaz akkor, és csak akkor, ha a logikai operandus és a logikai értékké konvertált csomóponthalmaz között fennáll az adott reláció. Ha a <=, <, >, >= logikai összehasonlító műveletek egyik operandusa csomóponthalmaz, a másik logikai érték: Az eredmény igaz akkor, és csak akkor, ha fennáll a megfelelő reláció a logikai típusú operandus és logikai típusúvá konvertált csomóponthalmaz számokká alakítása során nyert értékek között. 38

Logikai műveletek (5) Ha a!= és = logikai összehasonlító műveletek egyik operandusa sem csomóponthalmaz, akkor egy megfelelő közös típusra konvertálás során kapott értékek összehasonlítása: ha az egyik operandus logikai érték, akkor a másik operandus logikai típusúvá konvertálása. egyébként ha az egyik operandus szám, akkor a másik operandus számmá konvertálása. egyébként mindkét operandus sztringgé konvertálása. Azonos típusú értékek összehasonlítása a!= és = operátorokkal már értelemszerűen történik. 39

Logikai műveletek (6) Ha a <=, <, >, >= logikai összehasonlító műveletek egyik operandusa sem csomóponthalmaz, akkor mindkét operandus számmá konvertálása és a konverzió eredményeként kapott értékek összehasonlítása. 40

Egy minta XML dokumentum <?xml version="1.0"?> <books> <book> <title>a Mester és Margarita</title> <publisher>európa</publisher> <year>1991</year> </book> <book> <title>a Pendragon legenda</title> <publisher>magvető</publisher> <year>2001</year> </book> <book> <title>a Foucault-inga</title> <publisher>európa</publisher> <year>2004</year> </book> <book> <title>száz év magány</title> <publisher>magvető</publisher> <year>1994</year> </book> </books> 41

Példa Igaz értékű a book[publisher='európa']/year > book[publisher='magvető']/year logikai kifejezés, ha a books elemcsomópont a kontextus-csomópont. Ugyancsak igaz értékű a book[publisher='európa']/year < book[publisher='magvető']/year logikai kifejezés, ha a books elemcsomópont a kontextus-csomópont. 42

Elérési útvonalak (location paths) A kifejezések egyik fajtáját alkotják, ezek a legfontosabbak. Feladatuk csomópontok kiválasztása a kontextuscsomóponthoz képest relatív módon. Értékeik csomóponthalmazok. Rövidítések lehetségesek (rövidített szintaxis). 43

Példák elérési útvonalakra (1) child::p A kontextus-csomópont p nevű elemcsomópont gyermekeinek kiválasztása dokumentumsorrendben. child::* A kontextus-csomópont összes elemcsomópont gyermekének kiválasztása dokumentumsorrendben. child::text() A kontextus-csomópont összes szövegcsomópont gyermekének kiválasztása dokumentumsorrendben. 44

Példák elérési útvonalakra (2) attribute::href A kontextus-csomóponthoz tartozó href tulajdonságcsomópont kiválasztása. attribute::* A kontextus-csomóponthoz tartozó összes tulajdonságcsomópont kiválasztása. descendant::img A kontextus-csomópont img nevű elemcsomópont leszármazottainak kiválasztása dokumentumsorrendben. 45

Példák elérési útvonalakra (3) child::p[position()=1] A kontextus-csomópont dokumentumsorrendben első p nevű elemcsomópont gyermekének kiválasztása. child::p[position()=last()] A kontextus-csomópont dokumentumsorrendben utolsó p nevű elemcsomópont gyermekének kiválasztása. child::div[attribute::class="footer"] A kontextus-csomópont azon div nevű elemcsomópont gyermekeinek kiválasztása dokumentumsorrendben, melyek class tulajdonságának értéke "footer". 46

Példák elérési útvonalakra (4) child::table[child::caption] A kontextus-csomópont azon table nevű elemcsomópont gyermekeinek kiválasztása dokumentumsorrendben, melyeknek van caption nevű elemcsomópont gyermeke. /descendant::h1[position()=10] Kiválasztja a dokumentumot ábrázoló adatszerkezetben a dokumentumsorrend szerinti tizedik h1 elemcsomópontot. 47

Elérési útvonalak felépítése Az elérési útvonalak lehetnek abszolút és relatív elérési útvonalak. A relatív elérési útvonalak '/' karakterekkel elválasztott lépésekből állnak, a lépések feldolgozása balról jobbra haladva történik. Az abszolút elérési útvonalak '/' karakterrel kezdődnek, melyet egy opcionális relatív elérési útvonal követ. 48

Relatív elérési útvonalak kiértékelése 1)Az első lépésben adott kifejezés kiértékelése a kontextus-csomóponthoz relatív módon, ilyen módon bizonyos csomópontok kiválasztása. 2)A nyert csomóponthalmaz minden elemére mint kontextus-csomópontra ki kell értékelni az elérési útvonal soron következő lépést, és az így kapott csomóponthalmazok unióját kell venni. 3)A eredményül kapott csomóponthalmazra ismételni a 2. pontban leírtakat, egészen addig, míg minden lépés feldolgozásra nem került. 49

Példa A child::b/child::c/child::e elérési útvonal által kiválasztott csomópontok (a kontextus-csomópontot szaggatott vonal jelöli): 50

Abszolút elérési útvonalak A / abszolút elérési útvonal kiválasztja a gyökércsomópontot. Ha egy abszolút elérési útvonalban a kezdő '/' karaktert egy relatív útvonal követi, akkor annak kiértékelése során a kontextus-csomópont a gyökércsomópont. Azaz a '/' karaktert követő relatív elérési útvonal kiértékelése a gyökércsomóponthoz relatív módon történik. 51

Elérési útvonal lépések A lépések 3 részből állnak: Irány (axis): célja csomópontok kiválasztása a kontextuscsomóponthoz képest. Csomópont-teszt (node test): az irány által kijelölt csomópontok közül továbbiak kiválasztása típus és név alapján. Feltételes kifejezés (predicate): olyan opcionális rész, melyből tetszőleges sok megadható, további szűrést valósít meg az irány és a csomópont-teszt által kiválasztott csomópontokon. Szinaxiusuk az alábbi: irány '::' csomópont-teszt ('[' feltételes_kif ']')* 52

Irányok child descendant parent ancestor following-sibling preceding-sibling following preceding attribute namespace self descendant-orself ancestor-or-self 53

A child irány 54

A descendant irány 55

A parent irány 56

Az ancestor irány 57

A following-sibling irány 58

A preceding-sibling irány 59

A following irány 60

A preceding irány 61

A self irány 62

A descendant-or-self irány 63

Az ancestor-or-self irány 64

Irányok Az ancestor, descendant, following, preceding és self irányok diszjunkt módon osztják fel a dokumentumot. Az általuk kiválasztott csomóponthalmazok diszjunktak, valamint a névtér- és tulajdonság-csomópontok kivételével tartalmaznak minden csomópontot. 65

Előre haladó és fordított irányok Az irányok mindegyike előre haladó (forward) vagy fordított (reverse). Előre haladó irány csak a kontextus-csomópontot és a dokumentumsorrendben azt követő csomópontokat választhatja ki. Fordított irány csak a kontextus-csomópontot és a dokumentumsorrendben azt megelőző csomópontokat választhatja ki. Fordított az ancestor, ancestor-or-self, preceding, preceding-sibling irány, az összes többi előre haladó. Mivel a self irány egyetlen csomópontot választ ki, ennél nem lényeges, hogy a kettő közül milyennek definiált. 66

Szomszédsági pozíció Csomóponthalmazok elemeinél az adott iránynak megfelelő szomszédsági pozíció (proximity position) értelmezése. Egy csomóponthalmaz egy elemének az iránynak megfelelő szomszédsági pozíciója: Előre haladó irány esetén a csomópont pozíciója a dokumentumsorrendbe rendezett csomóponthalmazban. Fordított irány esetén a csomópont pozíciója a fordított dokumentumsorrendbe rendezett csomóponthalmazban. A pozíciók számozása mindkét esetben 1-től történik. A szomszédsági pozíció szolgáltatja a kontextuspozíciót az elérési útvonalak kiértékelése során. 67

Csomópont-tesztek (1) Minden irányhoz definiált egy úgynevezett elsődleges csomóponttípus (principal node type): Az attribute irány esetében ez tulajdonság, mivel az irány tulajdonságcsomópontokat választ ki. A namespace irány esetében ez névtér, mivel az irány névtércsomópontokat választ ki. Az összes többi irány esetében az elsődleges csomópont-típus elem, mivel ezek ki tudnak választani elemcsomópontokat is. Egy minősített név, mint csomópont-teszt igaz egy adott irány által kiválasztott csomópontra, ha a csomópont típusa megegyezik az irány elsődleges csomópont-típusával, a kifejtett neve pedig a csomópont-tesztben adott névnek megfelelő kifejtett névvel. Például a child::p elérési útvonal lépés a kontextus-csomópont p nevű elemgyermekeit választja ki. 68

Csomópont-tesztek (2) A * csomópont-teszt igaz minden olyan csomópontra, melynek típusa megegyezik az irány elsődleges csomópont-típusával. Például child::* kiválasztja a kontextus-csomópont összes elemgyermekét, attribute::* pedig kiválasztja a kontextuscsomóponthoz tartozó összes tulajdonság-csomópontot. Az előtag:* csomópont-teszt igaz egy csomópontra, ha annak típusa megegyezik az irány elsődleges csomóponttípusával, valamint kifejtett nevének URI-ja megegyezik az adott előtaghoz tartozó URI-val. Például child::xslt:*, attribute::xml:* módon használható. 69

Csomópont-tesztek (3) További csomópont-tesztek: text(): igaz a szövegcsomópontokra comment(): igaz a megjegyzéscsomópontokra processing-instruction(): igaz a feldolgozási utasítás-csomópontokra node(): igaz minden csomópontra 70

Feltételes kifejezések (1) A kifejezés kiértékelése megtörténik minden egyes előzőleg az irány és a csomópont-teszt vagy egy előző feltételes kifejezés által kiválasztott csomópontra, mint kontextus-csomópontra, ez alapján történik a kiválasztás. A [] karakterek között adott kifejezés értékének logikai értékké konvertálása. Ha a kifejezés értéke szám, akkor a konverzió eredménye igaz logikai érték, ha a szám egyenlő a kontextus-pozícióval, hamis egyébként. Ha a kifejezés értéke nem szám, akkor az adott típusú érték logikai értékké konvertálása történik (a konverziós szabályokat lásd a típusoknál). 71

Feltételes kifejezések (2) Azoknak a csomópontoknak a kiválasztása történik, melyekre a kifejezés igaz. A kifejezés-kiértékelés során a kontextusméret annak a csomóponthalmaznak az elemeinek száma, melynek minden egyes elemére ki kell értékelni a kifejezést. Az előbbi csomóponthalmaz egy elemének kontextus-pozíciója a csomópont szomszédsági pozíciója annak az iránynak megfelelően, mely kiválasztotta a csomóponthalmazt. Egy elérési útvonal lépésben akár több feltételes kifejezés is megadható. Minden egyes feltételes kifejezés egy újabb szűrést végez az előző feltételes kifejezés által kiválasztott csomópontokon. 72

Rövidített szintaxis (1) child:: elhagyható az elérési útvonal lépésekből attribute:: helyett használható @ /descendant-or-self::node()/ helyett használható // self::node() helyett használható. Hasznosan kombinálható a // konstrukcióval parent::node() helyett használható.. 73

Rövidített szintaxis (2) Például a child::div/child::h1 kifejezés röviden div/h1 módon írható. Az attribute::class kifejezés @class módon rövidíthető. A child::img/attribute::src kifejezés ekvivalens rövid alakja img/@src. A child::title[attribute::xml:lang="hu"] kifejezés röviden title[@xml:lang="hu"] módon írható. A parent::node()/attribute::style kifejezés tömörebb alakja../@style. 74