ELEC-C1220 Automaatio 2 - XML

Samankaltaiset tiedostot
Luento 4: XPath ja XLink

ELEC-C1220 Automaatio 2 - XML

Hohde Consulting 2004

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Luento 2: XML:n syntaksi

Luento 1: Johdanto merkintäkieliin

Luento 3: Tietorakenteiden esittäminen

Helsingin yliopisto/tktl XML-metakieli XPath

XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.

Hohde Consulting 2004

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

XML rakenteen suunnittelu. Jaana Holvikivi

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

8 XSLT-muunnoskieli XSLT-muunnoskieli

A TIETORAKENTEET JA ALGORITMIT

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Luento 7: XML-ohjelmointirajapinnat

CSE-A1200 Tietokannat

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

XPath. namespace nodes, processing instruction nodes, comment nodes. a root node, element nodes, text nodes, attribute nodes,

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

XML-datan kysely. Topi Sarkkinen. Seminaarityö. Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Web-teknologiat. XML-datan kysely Topi Sarkkinen

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

XML / DTD / FOP -opas Internal

Digitaalisen median tekniikat. JSP ja XML

Harjoitus 6 (viikko 42)

Harjoitus 2 (viikko 45)

Ohjelmoinnin perusteet Y Python

XML kielioppi. Elementtien ja attribuuttien määrittely. Ctl230: Luentokalvot Miro Lehtonen

P e d a c o d e ohjelmointikoulutus verkossa

Ctl160 Tekstikorpusten tietojenkäsittely p.1/15

ELEC-C1210 Automaatio 1 ELEC-C1220 Automaatio 2. Kurssien esittely lukukausi

Entiteetit erotetaan muusta tekstistä & ja puolipiste. esim. copyright-merkki näkyy sivulla

Extensible Stylesheet Language (XSL)

XPath. namespace nodes, processing instruction nodes, comment nodes. a root node, element nodes, text nodes, attribute nodes,

Datatähti 2019 loppu

Johdatus XML teknologioihin

Algoritmit 2. Luento 6 Ke Timo Männikkö

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

XSL-muunnokset. 9 XSL-muunnokset

Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta.

Algoritmit 2. Luento 6 To Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

2. PEHMEÄ XHTML XRAJAHTML

ITKP102 Ohjelmointi 1 (6 op)

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Luento 5. Timo Savola. 28. huhtikuuta 2006

Interfacing Product Data Management System

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tutoriaaliläsnäoloista

Luento 12: XML ja metatieto

Laajuus 5 op Luennot: 12 x 2t Harjoitukset: 7 viikkoharjoitusta harjoitusten tekemiseen saatavissa apua 2 ryhmää / harjoitus

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus

Tietojen toimittaminen Skeemat Käsittelypalautteen kysely Kansallisen tulorekisterin perustamishanke

Python-ohjelmointi Harjoitus 5

6 XML-työkalut 1. 6 XML-työkalut

Johdatus rakenteisiin dokumentteihin

7. Näytölle tulostaminen 7.1

Harjoitus 5 (viikko 48)

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Ohjelmointi 1 C#, kevät 2013,

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Paikkatiedot ja Web-standardit

DOORSin Spreadsheet export/import

3 Verkkosaavutettavuuden tekniset perusteet

Julkishallinnon XML-skeemat v0.5 JHS-suositus

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli (2011) Harri Laine 1. Jäsennys ja sarjallistaminen

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

XML merkintäkielten perusteet. Luento 2 - XSLT Pekka Aarnio

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

XML, XHTML ja CSS. T Hypermediadokumentin laatiminen. Mikko Pohja

Ohjelmoinnin peruskurssi Y1

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Harjoitus 6 (viikko 42)

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA341 Funktio-ohjelmointi 1, kevät 2008

ELEC-C1210 Automaatio 1 ELEC-C1220 Automaatio 2. Kurssien esittely lukukausi

Ohjelmoinnin perusteet Y Python

StanForD-XML. Juha-Antti Sorsa, Tapio Räsänen, Vesa Imponen

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssi Y1

9 XML perusteet

Ohjelmoinnin perusteet Y Python

Transkriptio:

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.