ELEC-C1220 Automaatio 2 - XML XML merkintäkielten perusteet Luento1 Pekka Aarnio
Luento 1: OSA1 XML MERKINTÄKIELTEN PERUSTEET
Luennon sisältö OSA 1 1. XML ja Puut 2. XML Extensible Markup Language 3. XML-dokumentin rakenne OSA 2 1. XPath ja dokumentin osien osoittaminen 2. Xpath-funktiot 3. Xpath esimerkit
XML esimerkit MIKÄ XML?
Mitä on XML? XML (Extensible Markup Language) on tiedon tallentamista ja rakenteen kuvaamista koskeva määrittely. Kysymyksiä esim_1-1.xml dokumentista 1. Mitä tietoa dokumenttiin on tallennettu? 2. Minkälainen on tiedon rakenne? 3. Minkälaista merkkausta (tags) on käytetty tiedon rakenteen kuvaamiseen? 4. Entä selviääkö dokumentista tiedon merkitys? Kuva: esim_1-1.xml
Mitä on XML? Joitain vastauksia kysymyksiin dokumentista: 1. Dokumentti sisältää tietoa tästä kurssista. 2. Tiedot on esitetty hierarkkisena rakenteena, joka kertoo, että kurssitiedot koostuvat koodista, nimestä ja moduulitiedoista ja että Moduulien tiedot kertovat jotain luennoista ja harjoituksista 3. Tietojen ja sen rakenteen kuvaamiseen on luotu seuraavat merkinnät: kurssi, koodi, nimi, moduuli jne. 4. Tiedon merkitys selviää osittain ihmislukijalle, mikäli merkinnöissä käytetyt käsitteet ovat ymmärrettäviä. Tietokone ei ymmärrä käytettyjen käsitteiden merkitystä. Kuva: esim_1-1.xml Huomaa, että: Tässä XML-dokumentissa esitetyn tiedon rakenne vastaa osittain myös kohteen, kurssin, todellista sisäistä loogista rakennetta!
XML - Puurakenne XML-merkintäkielillä voidaan kuvata hierarkkisia puumuotoisia tietorakenteita (tree) Merkinnöillä nimetään puun solmut (node) Puun lehtisolmut (leaf nodes) sisältävät varsinainen tekstitiedon
XML - Puurakenne Puulla on vain yksi juurisolmu (root node) Solmuilla voi olla monta lapsi-solmua (child node) mutta vain yksi isä-solmu (parent node) Kaaret (branch) puun solmujen välillä (parent-child relation) voivat vastata mitä tahansa todellista relaatiota esitettävän kohteen osien/objektien välillä osa-kokonaisuus (tai kokonaisuus-osa); luokka-instanssi; ominaisuus; jokin assosiaatio; jne. Sama tietosisältö voidaan siis esittää monella erilaisella tavalla puurakenteena (aiheesta lisää attribuuttien yhteydessä) Kuva: Tuotantolinjan fyysisen rakenteen esitys kokonaisuus-osa hierarkiana.
XML - Puurakenne
XML - Esimerkki Tuoteluettelot esitetään usein yksinkertaisena listana Tuotteet listattu ja tuotteen ominaisuudet listattu Järjestämättömänä tai järjestettynä listana
XML - Esimerkki AutomationML InstanceHierarchy (parent-child/consists-of-relation)..prosessit koostuvat osa-prosesseista
XML - Esimerkki AutomationML Standard Library (osa toiminnallisuusluokista) Kuljetin-luokan aliluokat
PLCOpenXML XML - Esimerkki
XML merkintäkielet EXTENSIBLE MARKUP LANGUAGE
Merkintäkielet - yleisesti Merkintäkieli on tekstipohjainen kieli, jolla voidaan kuvata rikasta joukkoa tietoa hyvin yksinkertaisen säännöstön pohjalta Merkintäkielellä voidaan annotoida (=merkitä) tekstiä siten, että merkinnät ovat eroteltavissa tekstistä Yleensä merkintäkielen avulla luodaan tiedostoon haluttu rakenne koneet tulkitsevat tätä rakennetta ennalta määrättyjen sääntöjen avulla Yleisimmät merkintäkielet ovat XML:n määrittelyn mukaisia SGML, HTML ja JSON ovat myös merkintäkieliä HTML-kielellä merkataan miten tieto esitetään web-sivulla; se ei siis kuvaa itse tietosisällön rakennetta. JSON (JavaScript Object Notation) soveltuu tietosisällön kuvaamiseen selaimissa ja web-ympäristössä (Huom: JSON ei ole XML-kieli)
Extensible Markup Language XML Extensible Markup Language (XML) on World Wide Web Consortiumin (W3C) suositus elektronisen tiedon esitysmuodoksi (http://www.w3.org/tr/xml/) XML määrittelee ainoastaan tavan esittää tietoa (kieliopin, syntaksin) se ei ota kantaa itse esitettävään tietoon eikä myöskään määrittele primitiivijoukkoa (merkkien nimiä), jolla tietoa pitäisi kuvata XML on metakieli XML:lla voidaan määritellä uusia merkintäkieliä, joilla vasta kuvataan itse tietoa ja sen rakennetta puhuttaessa XML-dokumentista yms. tarkoitetaan dokumenttia, joka on XML-määritysten mukainen eli oikeamuotoinen (XML-määritysten mukaisella kielellä merkattu)
W3C - XML:n tavoitteet Mahdollisuus käyttää dokumentteja Internetissä Rakenne on formaali ja tiivis Laaja ohjelmistotuki XML:ää käyttävien sovellusten ohjelmointi on helppoa Dokumentit ovat lukukelpoisia myös ihmisille Dokumentin suunnittelu on nopeaa Dokumenttien laadinta on helppoa Vapaavalintaisten ominaisuuksien määrä on minimoitu XML:n ei tarvitse olla ytimekästä Yhteensopivuus SGML:n kanssa Kielten kompleksisuus on sopiva [Origin and Goals: http://www.w3.org/tr/rec-xml/]
XML:N KÄYTTÖSOVELLUKSET
XML Automaatiossa - Binääridata vs. XML Laitteiden mittaustietojen lukemisessa ja niiden suorassa ohjauksessa käytetään perinteisesti ns. binääristä datasiirtoa Tämä on mahdollista sillä ohjaussovellukset on ohjelmoitu juuri ko. tarkoitukseen ja ne tietävät miten datasekvenssit on koodattu binäärimuotoon ja missä järjestyksessä ne lähetetään Uusien älykkäiden mitta- ja toimilaitteiden dataa on kuitenkin tarve lukea useaan eri tietojärjestelmään, joiden sovellukset eivät voi tietää miten binääridata on koodattu OPC UA on uusi automaation tiedonsiirron rajapintastandardi, joka mahdollistaa laitetietojen siirron XML-muodossa, jolloin tieto on kaikkien tehtaan IT-järjestelmien luettavissa ja ymmärrettävissä 102 540 480 0,85 103 10111001 10111001 10001001 OPC UA binary OPC UA xml
XML:n käyttösovellukset tietosisältö XMLprosessori XMLdokum. Sovellus XML:n käytön perusperiaate: XML-dokumenttien käyttö on yleensä kaksivaiheista: 1. XML-prosessori lukee XML-dokumentin jostakin lähteestä 2. sovellus saa XML-prosessorilta XML-dokumentin sisällön käyttöönsä Näin on pyritty helpottamaan sovellusten laatijoiden työtaakkaa ja samalla pitämään huoli, että XML-dokumentteja käsitellään samalla tavalla sovelluksesta toiseen melkein kaikkiin ohjelmointikieliin löytyy yksi tai useampia rajapintoja XMLdokumenttien käsittelyyn näiden rajapintojen takana on yleensä XML-parseri (tai -jäsennin), joka lukee ja muokkaa XML-dokumentin johonkin ohjelmointikielelle sopivaan muotoon XML ei ota kantaa, mitä sovellus dokumentilla tekee
XML-DOKUMENTIN RAKENNE
XML:n rakenneosat XML-dokumentti voi sisältää seuraavia rakenteita: elementit muodostavat dokumentin rungon ja rakenteen attribuutit antavat lisämääreitä elementeille tekstisisältö/leipäteksti elementtien sisällä olevaa tekstiä kommentit kommentteja ihmisille tai koneilta väliaikaisesti piilotettuja osioita käsittelyohjeet ohjeita dokumentin koneelliseen käsittelyyn entiteetit erikoismerkkien esittämiseen ja dokumenttien liittämiseen toisiinsa XML 1.0 Spec: http://www.w3.org/tr/xml/
Rakenneosat: Elementit Dokumentti koostuu elementeistä (element) Jokaisella elementillä on nimi, joka kirjoitetaan kulmasulkujen ( < ja > ) sisään Elementillä on yleensä alkuosa <element> ja loppuosa </element>, joiden väliin kirjoitetaan elementin tekstisisältö/leipäteksti <Luento> XML-dokumentin rakenne </Luento> <Pvm> 2017-01-19 </Pvm> Yksiosaisia elementtejä kutsutaan tyhjiksi elementeiksi (empty element) merkitään lisäämällä kauttaviiva elementin nimen perään tai Alkuosa ja loppuosa välittömästi peräkkäin <Harjoitukset/> < Harjoitukset ></Harjoitukset > Huom: Elementtien sijaan puhutaan myös tageista (tag), joilla tarkoittaa välillä elementtiä, välillä elementin alku- tai loppuosaa (start/end tag)! Huom: Tyhjä elementti ei ole merkityksetön. Se ei siis ole sama kuin ei lainkaan ko. elementtiä!
Rakenneosat: Elementtien nimet Elementtien nimille on tiettyjä sääntöjä Nimi voi alkaa ainoastaan kirjaimella tai alaviivalla Nimessä on sallittu käyttää kirjaimia, numeroita, ala- ja tavuviivoja ja pisteitä (huom: ei välilyöntejä (white space)) Nimen kirjainten koolla on merkitystä (case sensitive) HUOM: Vaikka XML on unicodea, niin kannattaa välttää skandinaavisia merkkejä ja muita erikoiskirjaimia, sillä kaikki ohjelmat eivät välttämättä osaa tulkita niitä oikein!
Dokumentin rakenne: Elementtien sisäkkäisyys Elementit voivat sisältää toisia elementtejä ja/tai leipätekstiä Dokumentin ulointa elementtiä kutsutaan juurielementiksi (root element) Sisempiä elementtejä kutsutaan lapsielementeiksi (child element) ja ulompaa isäelementiksi (parent element) Sisäkkäisyydestä muodostuu dokumentin rakenne sisäkkäisyys ei voi mennä ristiin Esimerkki: < Moduuli > < Luennot > </Luennot > < Harjoitukset > </Harjoitukset > < /Moduuli>
Rakenneosat: Tekstisisältö Elementit voivat sisältää leipätekstiä sisällään lapsielementit ja leipäteksti/tekstisisältö voivat vaihdella vapaasti: <Moduuli> XML-moduuli <Luento/> Harjoitukset </Moduuli> Teknisesti, jokainen erillinen leipätekstisirpale sijoitetaan omaan leipätekstisolmuun XML-puussa yllä olevassa esimerkissä on kaikkiaan neljä solmua:» elementti Moduuli"» teksti XML-moduuli "» elementti Luento"» teksti Harjoitukset "
Rakenneosat: CDATA-alue Leipäteksti voi olla lähes mitä tahansa tekstiä ja erikoismerkkejä (kirjaimia, numeroita, merkkejä) Leipätekstissä ei voi kuitenkaan käyttää XML:n syntaksissa varattuja merkkejä: <, > ja & merkkejä EI SAA KÄYTTÄÄ näitä varten on olemassa korvausmerkinnät (<, > ja &), Entiteettejä &entiteetti; käytetään lyhennys- tai korvausmerkintänä tietylle merkille tai merkkijonolle Silloin kuin entiteettien käyttö ei ole mahdollista (ks. HUOM), voidaan käyttää CDATA-aluetta (CDATA section), joka voi sisältää mitä tahansa merkkejä alue aloitetaan merkeillä <![CDATA[ ja päätetään merkkeihin ]]> HUOM: Mikä tahansa merkki voidaan ilmoittaa entiteettinä muodossa missä luku on merkin Unicode heksadesimaalimuodossa! XML-prosessori ei jäsennä/parsi CDATA-aluetta (Unparsed Character Data) HUOM: XML-muotoinen koodi, jota ei haluta XMLprosessorin parsittavaksi, täytyy sisällyttää CDATA-alueeseen (XML-data, joka ei kuulu siirrettävän XML-dokumentin rakenteeseen vaan on sen datakuormaa)!
Rakenneosat: Tyhjät merkit Tyhjiksi merkeiksi (white spaces) luetaan välilyönnit, tabulaattorit, rivinvaihdot yms. XML-dokumentti yleensä tulostetaan siistiin muotoon jokainen elementti omalla rivillään tällöin elementtien väliin voi syntyä tyhjiä merkkejä sisältäviä leipätekstisirpaleita XML-käsittelijän voi ohjata hävittämään pelkästään tyhjistä merkeistä koostuvat leipätekstisirpaleet HUOM: Tyhjät merkit, erityisesti niiden ilmestyminen ja katoaminen, aiheuttavat useasti ongelmia dokumenttien käsittelyssä (XSL muunnokset)!
Rakenneosat: Attribuutit Elementteihin voidaan lisätä tietoa (tekstisisältöä) myös attribuuteilla Attribuutti on avain-arvopari attribuutin nimeä vastaa sille annettu arvo, joka esitetään lainaus- tai heittomerkeissä arvon sisältö voi olla mitä tahansa tekstiä ja entiteettejä jokin arvo on välttämätön; vähintäänkin tyhjä merkkijono: yhdessä elementissä voi olla useita attribuutteja nimen tulee olla yksikäsitteinen <empty-element attr1="value" attr2= value2 /> <Kurssi koodi= ELEC-C1220" jaksot= > Automaatio II </Kurssi>
Dokumentin rakenne: Attribuutti vs. lapsielementti Attribuutti voidaan aina korvata lapsielementillä attribuutin nimestä saadaan elementin nimi attribuutin arvosta saadaan elementin tekstisisältö Valinta attribuutin ja lapsielementin välillä on dokumentin rakennetta koskeva päätös (usein makukysymys) Elementin tietosisältöön liittyvä metatieto (=tietoa tiedosta) kannattaa esittää attribuutin arvona Lapsielementin käyttö mahdollistaa myöhemmän laajentamisen ja sallii useita arvoja Attribuuttiarvon esitysmuoto voidaan määritellä tarkasti (myös tyhjät merkit) Attribuuttien käsittely on yleensä helpompi ohjelmoijille XML-käsittelijä standardoi tyhjät merkit attribuuttien arvoissa (säilyttää), muttei elementeissä <kurssi koodi= ELEC-C1220" jaksot= III-IV > Automaatio II </kurssi> <kurssi> <koodi> ELEC-C1220 </koodi> <jaksot> III-IV <jaksot/> <nimi> Automaatio 2 </nimi> </kurssi>
Rakenneosat: Alkumäärittely, käsittelyohjeet ja kommentit XML-dokumentin alkumäärittely ei ole prosessointiohje vaikka se on samaa muotoa <?xml version="1.0" encoding="utf-8"?> Käsittelyohjeet vastaavat kommentteja koneelliselle käsittelijälle <?prosessori attr1=????> Niillä voidaan antaa ohjeita myös erilaisille koneelliselle käsittelijöille <?xml-stylesheet type="text/xsl ref= production_line_to_aml.xsl?> Kommentteihin voi kirjoittaa selventävää tietoa dokumentin lukijalle (ihmiselle) <!-- Dokumentti on päivitetty 2016-01-14 --> HUOM: Kommentti on näppärä tapa sulkea osa dokumentista konekäsittelyn ulkopuolelle!
%%Hyvämuotoinen XML XML-dokumentti on hyvämuotoista (well-formed), kun dokumentti alkaa XML-määrittelyllä isäelementeillä on alku- ja loppuosa tyhjät elementit on merkitty loppukauttaviivalla elementit ovat sisäkkäin, eivät ristikkäin dokumentissa on vain yksi juurielementti, jonka lapsia kaikki muut elementit ovat dokumentissa ei käytetä merkkejä < ja & kuin elementtien ja entiteettien alussa Jos dokumentti ei täyty em. vaatimuksia, se ei ole virallisesti XML:a Well-formed validator by w3c: http://validator.w3.org/#validate_by_input XML Well-formed Validator: http://www.w3schools.com/xml/xml_validator.asp
Luento 1: Osa 2 XPATH Online xpath tool: http://www.xpathtester.com/xpath
OSA 2: Sisältö XPath lausekkeet XPath joukko-oppi XPath askeleet XPath funktiot
XPathin tehtävä XPath (XML Path Language) on kyselykieli, jolla XMLdokumentista voidaan poimia yksittäisiä elementtejä, attribuutteja tai jopa dokumentin osia Näitä saatuja tuloksia joko käytetään hyväkseen suoraan tai lähtökohtana erilaisille toimenpiteille, esimerkiksi XSLT-muunnoksille (ks. XSLT luento) XPath on tärkeä koska monet XML-tekniikat hyödyntävät sitä
XPathin käyttökohteet XPath-lausekkeita käytetään laajalti hyväksi XSLT:ssa XSLT on kieli XML-dokumentin muuntamiseksi muodosta toiseen XSLT:ta ei voi käyttää ilman XPath-osaamista XPath on myös osa dokumenttien välistä linkitystä XPathilla voidaan linkittää dokumentin sisälle XPath-lausekkeet ovat näppäriä apuvälineitä ohjelmointikielissä yksinkertaisen valintalausekkeen toteuttaminen Javalla tai C:lla voi olla kymmeniä riviä koodia XPath-käsittelijäkirjastot ovat valmiiksi optimoituja ja testattuja kovassa käytössä Online xpath tool: http://www.xpathtester.com/xpath
XPath: rakenne XPath-lauseke koostuu joukosta askelia (step) askelista muodostuu polku (path) alkupisteestä (current node) loppujoukkoon askeleet erotetaan toisistaan kauttaviivoilla /step/step/step jokainen askel muokkaa valittua joukkoa (set)» jos askel päätyy tyhjään joukkoon, palautetaan tyhjä joukko askel määrää siirtymän (axis), solmutestin (node test) ja mahdollisesti joukon ehtoja (predicates) Rakenne: axis::node-test[predicates][predicates...] step Esim: child::title[attribute::lang='fi']
XPath: Lausekkeen evaluointi XPath-lauseke evaluoidaan aina puumuotoisessa XML:ssa Elementit, attribuutit ja tekstisisällöt ovat puun solmuja (node) Lauseke evaluoidaan askel askeleelta ensimmäinen askel otetaan esimerkiksi ns. nykyisestä elementistä (current node/ context node) tai juurielementistä seuraava askel otetaan siitä, mihin edellinen jäi (se on siis uusi kontekstisolmu) jos askelta ei pystytä ottamaan, lauseke palauttaa tyhjän joukon Production_line ESIM: /child::production_line/child::lift_module[attribute::id= LM01'] Name Päätynostin PN1 Lift_module @ Conveyor @ ID= LM01 @ type= BELT Lapsi akseli (child::) Attribuutti akseli (@ or attribute::) HUOM: Kannattaa heti totutella ajattelemaan XML-dokumenttia puurakenteena. Jos XML:a ajattelee tekstidokumenttina, XPath on hyvin monimutkainen asia! OUTOA MUTTA TOTTA: Attribuutti-solmu ei ole isä-elementtinsä lapsi-solu eikä myöskään jälkeläinen! Tämä kannattaa muistaa XPath-lausekkeita kirjoitettaessa.
XPath: Joukko-oppia XPath operoi joukoilla jokainen askel voi saada lähtökohdakseen useita solmuja XML-puussa solmujen tyyppien ei välttämättä tarvitse olla samoja Jokainen askel otetaan jokaisesta lähtöjoukon solmusta mikäli askelta ei voida ottaa, kyseinen haara sulkeutuu askel voi tuottaa useita solmuja, jotka kaikki ovat mukana seuraavassa askeleessa Viimeisen askeleen valitsemat solmut palautetaan XPathlausekkeen tuloksena
XPath: Lyhennetty syntaksi XPath-lausekkeista on laadittu erityinen lyhennetty syntaksi Lyhennettyä syntaksia voidaan käyttää normaalin syntaksin sijaan tai sen seassa Huom: kaikkea ei voida kuitenkaan toteuttaa lyhennetyllä syntaksilla Esimerkkejä peruslausekkeista: Nykyisen elementin title-lapsielementtien valinta child::title tai title huomaa, että nykyistä elementtiä ei tarvitse merkitä erikseen, sillä XPath aloittaa oletusarvoisesti nykyisestä elementistä nykyinen elementti voidaan toki merkitä alkuun self::node()/child::title tai./title Nykyisen elementin src-attribuutin valinta attribute::src tai @src Huomaa, että seuraavat lausekkeet palauttavat eri joukon: self::node()/child::node() palauttaa kaikki lapsisolmut, myös tekstisisällöt./* palauttaa vain lapsielementit
XPath: Askeleiden yhdistäminen Askeleet yhdistetään kauttaviivoilla / lauseke suoritetaan askel askeleelta child::chapter/child::paragraph -tai- chapter/paragraph child::paragraph/text() -tai- paragraph/text() HUOM: Kauttaviiva / on sekä askelten yhdistämismerkki että lyhennysmerkintänä lapsielementtiin siirtymä askel esim:./book
XPath: Siirtymät XML-puussa XPath mahdollistaa liikkumisen kaikkiin suuntiin XML-puussa: parent tai.. (kaksi pistettä) valitsee isäelementin child tai tyhjä valitsee lapsisolmut / valitsee dokumentin juuren descendant valitsee kaikki lapsielementit, myös lapsien lapset jne.» descendant-or-self tai // valitsee myös nykyisen solmun ancestor valitsee kaikki esi-isät» ancestor-or-self valitsee myös nykyisen solmun following ja preceding valitsevat kaikki dokumentissa seuraavat tai edeltävät solmut following-sibling ja preceding-sibling valitsevat seuraavat tai edeltävät sisarsolmut self tai. (piste) valitsee nykyisen solmun
XPath: Siirtymät esimerkki 1 ancestor followingsibling precedingsibling parent child Nykyinen solmu eli kontekstisolmu [Frosterus]
XPath: Siirtymät esimerkki 2 ancestor-or-self preceding following descendant Nykyinen solmu eli kontekstisolmu [Frosterus]
Solmutesti -Siirtymien tarkentaminen Siirtymälle voidaan asettaa ehtoja solmutestillä Askel valitsee ainoastaan ne solmut, jotka ovat siirtymän päässä nykyisestä joukosta ja jotka täyttävät solmutestin ehdot Solmutestillä voidaan valita: tietyt elementit, pelkkä leipäteksti, kommentit tai käsittelyohjeet following-sibling::image child::text() tai text() parent/child::comment() tai../comment() descendant-or-self::* tai //*
Ehdot Valintaa voidaan tarkentaa edelleen määrittelemällä haluttu määrä ehtoja valittaville solmuille (predicates) ehdot määritetään hakasuluissa solmutestin jälkeen [ehto] useita ehtoja voidaan määritellä peräkkäin, jokaisen on toteuduttava child::title[attribute::lang] tai title[@lang] child::title[attribute::lang='fi'] tai title[@lang='fi'] ancestor-or-self::node()[child::paragraph]/child::image tai ancestor-or-self::node()[paragraph]/image
Listing Xpath axis and node test types XPATH:N SIIRTYMÄ- JA SOLMUTESTITYYPIT
XPath: yleisimpiä polun askeleita Yleisiä polkulausekkeita: XPath lausekkeen ensimmäisenä merkkinä käytettäessä osoittaa dokumentin juureen (muuten polun askeleiden erotusmerkki). Ex:
XPath: siirtymäakselit
XPath:solmutesti (1)
XPath:solmutesti (2)
XPath: askeleet ( * ) [*Katso myös kalvo: solmu testi ]
XPATH OPERAATTORIT JA FUNKTIOT
www.w3schools.com - XPath Operaattorit XPath Operaattorit http://www.w3schools.com/xpath/xpath_operators.asp Lista Xpath-lausekkeissa käytettävistä operaattoreista: HUOM: Tässä verrataan priceelementin arvoa tekstikentässä lukuun 9.80 (ei itse elementtiä)
XPath: Funktiot XPath määrittää myös joukon funktioita, joita voidaan käyttää lausekkeiden ehdoissa tai lausekkeiden sijaan palauttamaan jotakin tietoa dokumentista funktiot ovat tyypitettyjä osa funktioista voi ottaa solmujoukon (node set) parametrikseen XPATH: /bookstore/book[@category = 'web']/title[string-length() > 12] RESULT: ------ <title lang="en">xquery Kick Start</title> [Frosterus]
XPath:Boolean-funktiot boolean(obj) muokkaa argumentin boolean-tyyppiseksi false() palauttaa aina false not(b) palauttaa b:n käänteisarvon true() palauttaa aina true [Frosterus]
XPath:Numerofunktiot ceiling(number) palauttaa pienimmän mahdollisen kokonaisluvun, joka on suurempi tai yhtä suuri kuin argumentti siis pyöristys ylöspäin floor(number) palauttaa suurimman mahdollisen kokonaisluvun, joka on pienempi tai yhtä suuri kuin argumentti siis pyöristys alaspäin number(obj) muuttaa argumentin numeroksi round(number) pyöristää argumentin lähimpään kokonaislukuun [Frosterus]
XPath:Merkkijonofunktiot concat(s1, s2,...) yhdistää argumentit yhdeksi merkkijonoksi argumenttien täytyy olla merkkijonoja contains(haystack, needle) palauttaa true, jos toinen argumentti löytyy ensimmäisestä esim: contains( XML, XM ) palauttaa: true normalize-space(s) poistaa argumentin alusta ja lopusta tyhjät merkit ja korvaa kaikki tyhjien merkkien ryhmät yhdellä välilyönnillä starts-with(s1, s2) palauttaa true, jos s1 alkaa s2:lla string(obj) muuttaa argumentin merkkijonoksi string-length(s1) palauttaa argumentin pituuden merkkeinä substring(s, start, len) palauttaa merkkijonon, joka alkaa kohdasta start merkkijonossa s ja jonka pituus on len merkkiä [Frosterus]
XPath:Merkkijonofunktiot substring-after(s1, s2) palauttaa merkkijonon, joka alkaa siitä kohdin, mistä s2 löytyy s1:stä esim. substring-after( Punainen, a ) palauttaa: inen substring-before(s1, s2) palauttaa merkkijonon, joka päättyy siihen, mistä s2 löytyy s1:stä esim. substring-before( Punainen, a ) palauttaa: Pun translate(s1, s2, s3) korvaa merkkijonossa s1 s2:n merkit s3:n merkeillä esim. translate( Punainen, P, p ) palauttaa: punainen [Frosterus]
Solmujoukkofunktiot count(ns) laskee solmujoukon solmujen lukumäärän id(idref) palauttaa solmun, jolla on ID-tyyppinen attribuutti, jonka arvo on idref local-name(n) palauttaa solmun paikallisen nimen (siis ilman nimiavaruutta) name(n) palauttaa solmun nimen, sisältäen nimiavaruuden namespace-uri(n) palauttaa solmun nimiavaruuden URI:n sum(ns) laskee solmujoukon summan, solmut muutetaan numeroiksi [Frosterus]
Nykyiseen solmuun liittyvät funktiot position() palauttaa nykyisen solmun järjestysnumeron nykyisessä solmujoukossa ei ole sama asia kuin elementin järjestysnumero dokumentissa» tätä ei ole itse asiassa mahdollista edes helposti laskea last() palauttaa nykyisen solmujoukon viimeisen solmun järjestysnumeron [Frosterus]
XPath:Funktioiden käyttö Attribuuttien arvojen yhdistäminen concat(@firstname, ' ', @surname) Vain ensimmäinen lapsielementti valitaan child::test[position()=1] tai test[position()=1] Lasketaan tiettyjen elementtien lukumäärä count(child::paragraph) + count(child::image[attribute::src]) tai count(paragraph) + count(image[@src]) [Frosterus]
XPath: Funktiot - Esimerkkejä XPATH>/bookstore/book[@category = 'web']/title[string-length() > 12] RESULT> <title lang="en">xquery Kick Start</title> XPATH> contains(/bookstore/book[@category = 'web']/title, 'XQuery') RESULT> true XPATH> //book[contains(./title, 'XQuery')] RESULT> <book category="web"> <title lang="en">xquery Kick Start</title> </book> XPATH> //book[substring-before(./year/text(), '5')][./price >=30.00]/title RESULT> <title lang="en">everyday Italian</title> XPATH> //book[position()=1]/price/text() + //book[position()=last()]/price/text() RESULT> 69.95 XPATH> sum(//book/price/text()) RESULT> 149.93 [KOKEILE: http://www.xpathtester.com/xpath]
www.w3school.org LISÄÄ XPATH ESIMERKKEJÄ
www.w3schools.com - XPath Examples Books.xml Selects the root of the document: / Selects the bookstore root element: /bookstore Selects all the book nodes: /bookstore/child::book /bookstore/book //book //book/. /bookstore/book/year/../../* Selects all the child-elements of all the books: /bookstore/book/year/../* NOTE: Remember to use the entity values of the <, > and & characters in xpath expressions in xml documents. http://www.w3schools.com/xpath/xpath_examples.asp
www.w3schools.com - XPath Examples Books.xml Selects all the title nodes: /bookstore/book/title /bookstore/child::book/child::title Selects the title of the first book node under the bookstore element: /bookstore/book[1]/title Selects the texts from all the price nodes: /bookstore/book/price/text() Selects all the title nodes with a price higher than 35: /bookstore/book[price>35]/title Selects the parent nodes of all the English title nodes, i.e. all book nodes /bookstore/book/child::title[@lang="en"]/parent:: node() RESULT: all the book nodes NOTE: Remember to use the entity values of the <, > and & characters in xpath expressions in xml documents. http://www.w3schools.com/xpath/xpath_examples.asp
www.w3schools.com - XPath Examples Books.xml Selects all the child nodes of the year element of the first book: /bookstore/book[1]/child::year/child::node() Result set: text-node: 2005 Selects all the child elements of the year element of the first book: /bookstore/book[1]/child::year/* Result set: NO RESULT, because /* selects only child elements and there is no child element. NOTE: Remember to use the entity values of the <, > and & characters in xpath expressions in xml documents. http://www.w3schools.com/xpath/xpath_examples.asp
www.w3schools.com - XPath Examples Books.xml Selects all descendant nodes of the first book: //book[1]/descendant::node() Result set: title-node; text-node: Everyday Italian author-node; text-node: Giada De Laurentiis year-node; text-node: 2005 price-node; text-node: 30.00 However, attributes do not belong to this set! OUTOA MUTTA TOTTA: Attribuutti-solmu ei ole isäelementtinsä lapsi-solu eikä siis myöskään jälkeläinen! Tämä kannattaa muistaa XPath-lausekkeita kirjoitettaessa. NOTE: Remember to use the entity values of the <, > and & characters in xpath expressions in xml documents. http://www.w3schools.com/xpath/xpath_examples.asp
www.w3schools.com XPath Function Examples Books.xml Selects all price or year elements //price //year Selects the title of the second last book node under the bookstore element: /bookstore/book[position()=last()-1]/title Counts the number of book nodes: count(/bookstore/book) = 4 Calculates max and average values: max((//price/text())) = 49.99 avg((//price)) = 37.4825 Selects the texts from all the price nodes: /bookstore/book/price/text() Selects all the title nodes with publication year different from 2005: /bookstore/book[not(./year/text()=2005)]/title NOTE: Remember to use the entity values of the <, > and & characters in xpath expressions in xml documents.
Lähdeviitteet Kurssikirjat (vaihtoehtoiset): Luentoon 1 liittyvät luvut 1, 3 ja 4 kirjasta: Goldberg, K.,H.2009. XML-Visual QuickStart Guide. 2.e. Peachpit Press XML. : Introduction, Ch1, Ch2, Ch3, Ch4 ja Ch9-Ch15. Luentoon 1 liittyvät luvut 1, 2 ja 7 ja Appendix B: XPath Functions kirjasta: E-book: Beginning XML, (5th ed.) by Fawcett, J., et al., John Wiley & Sons, Inc. Ch 1-3, Ch5, Ch7, Ch8. Muita lähteitä: Tutoriaalit: http://www.w3schools.com/ XPATH esimerkkejä: http://www.w3schools.com/xpath/xpath_examples.asp Well-formed validator by w3c: http://validator.w3.org/#validate_by_input W3C:n Määrittelyt: http://www.w3.org/xml/core/ http://www.w3.org/style/xsl/; http://www.w3.org/xml/schema#dev Tools Online tool: xpath, xslt, schema validate: http://www.xpathtester.com Online tool: Regular Expression Tester: http://www.freeformatter.com/regex-tester.html Command line tool: Xmlstarlet command line XML toolkit: Download for windows: http://xmlstar.sourceforge.net/download.php XML editors EditX Lite free version: http://www.freexmleditorsite.com/download.html MindFusion XML Viewer on Ilmainen editori. Sopii ainakin XSLT-muunnoksien harjoitteluun.