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