XPath

Wikipedia
Loikkaa: valikkoon, hakuun

XPath (lyhenne sanoista XML Path Language) on ei-XML-pohjainen kieli XML-dokumenttien osien osoittamiseen ja XML-dokumentin rakenteeseen perustuvan tiedon luontiin[1]. XPath-kieli perustuu XML-dokumentin puumuotoiseen esitystapaan ja antaa siten mahdollisuuden poimia eri osia dokumentista tietyillä valintakriteereillä. XPath kehitettiin halusta saada yhtenäinen syntaksi ja käyttäytymismalli XPointerin ja XSL:n välille. Kehittäjät ovat nopeasti ottaneet XPathin käyttöönsä pienenä kyselykielenä.

Merkintätapa[muokkaa | muokkaa wikitekstiä]

Yleisin XPath-lauseke on polkulauseke, josta kieli on saanut nimensä. Polkulauseke koostuu peräkkäisistä askeleista, joilla päästään XML-solmusta yhteen tai useampaan toiseen solmuun. Askeleet erotetaan toisistaan vinoviivalla, ”/”. Jokaisessa askeleessa on kolme komponenttia:

  • Akselimäärittely (axis specifier)
  • Solmutesti (node test)
  • Predikaatti (predicate)

Tarjolla on kaksi eri merkintätapaa. Lyhennetty syntaksi on tiiviimpi ja usein helpompi lukea ja kirjoittaa – usein tutuilla merkeillä ja rakenteilla. Täysi syntaksi on monisanaisempi, mutta sen avulla voi määritellä enemmän asetuksia.

Lyhennetty syntaksi[muokkaa | muokkaa wikitekstiä]

Tiivis merkintätapa sallii useita oletuksia ja lyhenteitä. Yksinkertaisin XPath-lauseke on muotoa /A/B/C, joka valitsee XML-juurielementin A lapsielementtien B lapsielementit C. XPathin syntaksi on suunniteltu muistuttamaan URI:n ja tiedostopolkujen syntaksia.

Monimutkaisempia lausekkeita voi muodostaa muun muassa määrittelemällä:

  • akselin, joka on jokin muu kuin oletusarvoinen lapsiakseli,
  • solmutestin, jossa testataan jotain muuta kuin nimeä tai
  • predikaatin, jonka voi kirjoittaa minkä tahansa askeleen perään hakasuluissa ”[]”.

Täysi syntaksi[muokkaa | muokkaa wikitekstiä]

Lyhentämättömässä syntaksissa yllä olevat esimerkit näyttävät tältä:

  • /child::A/child::B/child::B ja
  • child::A/descendant-or-self::node()/child::B[1].

Jokaisessa askeleessa akseli on määritelty eksplisiittisesti: child tai descendant-or-self). Akselia seuraa :: ja solmutesti, kuten A tai node() yllä olevissa esimerkeissä.

Akselimäärittelyt[muokkaa | muokkaa wikitekstiä]

Akselimäärittely ilmaisee liikkumissuuntaa XML-dokumentin puumaisessa esitystavassa. Mahdolliset akselimäärittelyt lyhennetyssä ja täydessä syntaksissa ovat:

child 
oletus, jota ei tarvitse määritellä lyhennetyssä syntaksissa
attribute 
@
descendant 
ei vastinetta lyhennetyssä syntaksissa
descendant-or-self 
//
parent 
..
ancestor 
ei vastinetta lyhennetyssä syntaksissa
ancestor-or-self 
ei vastinetta lyhennetyssä syntaksissa
following 
ei vastinetta lyhennetyssä syntaksissa
preceding 
ei vastinetta lyhennetyssä syntaksissa
following-sibling 
ei vastinetta lyhennetyssä syntaksissa
preceding-sibling 
ei vastinetta lyhennetyssä syntaksissa
self 
.
namespace 
ei vastinetta lyhennetyssä syntaksissa


Solmutestit[muokkaa | muokkaa wikitekstiä]

Solmutestit voivat koostua solmun nimen testauksesta tai yleisemmistä lausekkeista. Jos XML-dokumentissa on määritelty nimiavaruus gs, niin //gs:enquiry löytää kaikki enquiry-solmut siitä nimiavaruudesta.

Muita yleisiä testejä ovat:

comment() 
löytää XML-kommenttisolmun: <!-- Comment -->
text() 
löytää tekstisolmun <k>tereve</k>
processing-instruction() 
löytää XML-käsittelyohjeita, kuten <?php echo $a ?>. Tässä tapauksessa processing-instruction('php') olisi tarkempi lauseke mainitun solmun löytämiseen.
node() 
löytää minkä tahansa solmun.

Predikaatit[muokkaa | muokkaa wikitekstiä]

Vapaamuotoisia lisälausekkeita voidaan määritellä hakasulkeiden sisällä elementtitestin yhteydessä jolloin lauseke pitää täsmätä ennen kuin testi on positiivinen jonkin tietyn elementin kohdalla. Esimerkiksi //a[@href='apua.php'], poimii a elementin jolla on href attribuuttina arvo apua.php.

Predikaattien määrälle ei ole rajoituksia eikä niiden tarvitse sijaita polkulausekkeen lopussa. Niitä voi sijoittaa myös sisäkkäin. Predikaatin sisällä käytettävä mahdollinen polku alkaa elementistä, jolle predikaatti alun perin määriteltiin eikä se vaikuta predikaatin ulkopuolella olevaan kontekstiin.

Esimerkki: //a[@href='apua.php'][../div/@luokka='otsikko']/@kohde poimii kohde attribuutin a elementiltä edellyttäen että sillä on href attribuuttina arvo apua.php ja että a elementti on div elementin sisällä jolla puolestaan on luokka attribuuttina arvo otsikko.

Funktiot ja operaattorit[muokkaa | muokkaa wikitekstiä]

XPath v1.0 määrittelee neljä tietotyyppiä: solmukokoelma, merkkijono, numero sekä boolean-tyyppi.

Käytettävissä olevat operaattorit ovat:

  • "/", "//" ja "[...]" operaattorit, joita käytetään polkulausekkeissa edellä kuvatulla tavalla.
  • Unioni, "|", joka muodostaa kahden solmukokoelman yhdistelmän.
  • Boolean-operaattorit "and" ja "or", sekä funktio "not()"
  • Aritmeettiset operaattorit "+", "-", "*", "div" (jakolasku), ja "mod" (modulo)
  • Vertailuoperaattorit "=", "!=", "<", ">", "<=", ">="

Funktioihin kuuluu:

  • Merkkijonoja käsittelevät funktiot: concat(), substring(), contains(), substring-before(), substring-after(), translate(), normalize-space(), string-length()
  • Numeroita käsittelevät funktiot: sum(), round(), floor(), ceiling()
  • Funktiot, joilla saa lisätietoja solmuista: name(), local-name(), namespace-uri()
  • Funktiot, joilla saa lisätietoa prosessoinnin kontekstista: position(), last()
  • Tyyppimuunnosfunktiot: string(), number(), boolean()

Katso myös[muokkaa | muokkaa wikitekstiä]

Lähteet[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]