Helsingin yliopisto/tktl XML-metakieli XPath

Samankaltaiset tiedostot
Hohde Consulting 2004

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

Luento 4: XPath ja XLink

A TIETORAKENTEET JA ALGORITMIT

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 6 To Timo Männikkö

CSE-A1200 Tietokannat

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Miten käydä läpi puun alkiot (traversal)?

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

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

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

XQuery tietokannan kyselykielenä

Algoritmit 2. Luento 2 To Timo Männikkö

Luento 5. Timo Savola. 28. huhtikuuta 2006

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

13. Loogiset operaatiot 13.1

8 XSLT-muunnoskieli XSLT-muunnoskieli

Algoritmit 2. Luento 5 Ti Timo Männikkö

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

Luento 3: Tietorakenteiden esittäminen

Yhteydettömät kieliopit [Sipser luku 2.1]

13. Loogiset operaatiot 13.1

XSL-muunnokset. 9 XSL-muunnokset

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Extensible Stylesheet Language (XSL)

Tietueet. Tietueiden määrittely

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Algoritmit 2. Luento 4 Ke Timo Männikkö

Kysymyksiä koko kurssista?

811120P Diskreetit rakenteet

ITKP102 Ohjelmointi 1 (6 op)

XML merkintäkielten perusteet. Luento 3 Pekka Aarnio

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Algoritmit 2. Luento 3 Ti Timo Männikkö

Taulukot. Jukka Harju, Jukka Juslin

XML rakenteen suunnittelu. Jaana Holvikivi

Ohjelmoinnin perusteet Y Python

4. Joukkojen käsittely

1.1 Tavallinen binäärihakupuu

Ohjelmointi 1 Taulukot ja merkkijonot

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

M. Merikanto 2012 XML. Merkkauskieli, osa 2

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

Omat Lähdöt ohjelmointirajapinta: Versio 1.01

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Java-kielen perusteita

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

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

ITKP102 Ohjelmointi 1 (6 op)

P e d a c o d e ohjelmointikoulutus verkossa

Helsingin yliopisto/tktl XML-metakieli XSLT XSL - extensible stylesheet language XSLT

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

Tekninen rajapinta Zip-tiedosto sovelluskehittäjälle Kansallisen tulorekisterin perustamishanke

Ohjelmoinnin perusteet Y Python

Ehto- ja toistolauseet

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

SÄHKE-hanke. Tekninen mallintaminen SÄHKE-metatietojen XML Schema

Tekninen rajapinta Zip-tiedosto sovelluskehittäjälle Kansallisen tulorekisterin perustamishanke

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Ohjelmoinnin perusteet Y Python

05/04/2004. Digitaalisen median tekniikat, k2004 HY/TKTL, javascript_1. Harri Laine 1. JavaScript

SELECT-lauseen perusmuoto

811120P Diskreetit rakenteet

Digitaalisen median tekniikat JavaScript

Digitaalisen median tekniikat JavaScript Harri Laine 1

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

Ensimmäiset XPath-lausekkeet

Ohjelmoinnin perusteet Y Python

Helsingin yliopisto/tktl XML-metakieli XML:n-käsittely. XML:n käsittely ohjelmallisesti. XML:n käsittely ohjelmallisesti

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Loppukurssin järjestelyt

HELIA 1 (14) Outi Virkki Tiedonhallinta

Datatähti 2019 loppu

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Hohde Consulting 2004

Loppukurssin järjestelyt C:n edistyneet piirteet

18. Abstraktit tietotyypit 18.1

Ohjelmoinnin jatkokurssi, kurssikoe

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ohjelmoinnin peruskurssi Y1

Ehto- ja toistolauseet

Transkriptio:

XML-perusrakenteen ympärille on kehitetty tekniikoita ja standardeja kuvaamaan XML-rakenteisen tiedon käsittelyä sekä tietojen välisiä kytkentöjä. Näissä keskeinen tarve on pystyä osoittamaan operaatioiden tai kytkentöjen kohteet. on standardi, joka määrittelee tavan osoittaa kohteisiin valita kohteita :n määrittelemää osoittamistekniikkaa käytetään esim. XML Schema:ssa määrittelemään elementin tunnisteita ja niihin perustuvia viittauksia. XSLT:ssä ja XQuery:ssä valitsemaan operaatioiden kohteet XPointer ja XLink-standardeissa kytkentöjen osapuolten osoittamiseen 1 -standardista on 2 versiota: 1.0: 16 Nov 1999: http://www.w3.org/tr/xpath useat työkalut käyttävät yhä tätä 2.0: 23 Jan 2007: http://www.w3.org/tr/xpath20/ huomattavasti laajempi kuin edeltäjänsä eroja myös keskeisissä toiminnoissa - kuten oletusnimiavaruuden käsittelyssä Seuraavassa tarkastellaan aluksi 1.0:n piirteitä ja sen jälkeen 2.0:n lisäominaisuuksia 2 -valintalausekkeiden avulla osoitetaan jokin tai joitakin solmuja XML-puussa, esim. //rcp:ingredient [@amount='0.5' and @unit='cup']/@name valitsee kohteeksi attribuutin name arvot sellaisista reseptikokoelman (nimiavaruus rcp) reseptien raakaaineista, joita resepteissä on käytetty puoli kupillista. valintalauseke (location path) muodostuu sarjasta valinta-askeleita (location step) Kukin askel tuottaa tuloksenaan järjestetyn solmujoukon, ja seuraava askel jatkaa valintaa edellisen askelen tulosjoukosta eteenpäin soveltamalla seuraavaa valintaehtoa kukin tulosjoukon solmu vuorollaan lähtökohtana skeleiden erottimena kauttaviiva (/) Jos kauttaviiva aloittaa lausekkeen, lähdetään liikkeelle puun juuresta simerkkien kohteena M&S:. reseptikokoelma 3 4 Valinta-askeleen valintaehto on kolmiosainen haara :: solmu [ehtolauseke 1 ] [ehtolauseke N ] haara (axis) rajaa valinnan lähtösolmun suhteen määriteltävään osaan puuta solmu (node) rajaa valinnan tiettyyn solmutyyppiin ehtolausekkeet (0-n kpl) asettavat lisävaatimuksia valittaville solmuille. child::rcp:recipe[attribute::id='r123'] recipe-elementti lapsielementeistä jonka attribuutilla id on arvo r123 /descendant:: /descendant:: / child:: D lähtökohta Jos valintalauseke alkaa kauttaviivalla (/) on lähtökohtana puun juuri 5 6 1

Solmujen järjestys: järjestysnumerot esijärjestyksen mukaisesti 5 4 3 6 7 1 2 8 9 10 11 D esijärjestys: käsittele juuri käsittele alipuut vasemmalta oikealle Solmut tuloskokoelmaan järjestysnumeronsa mukaisessa järjestyksessä Haaroja: child: lähtösolmun lapsisolmut (ei attribuuttisolmuja) descendant: lähtösolmuun alipuissa olevat solmut (ei attribuuttisolmuja) parent: isäsolmu, juuren kohdalla tyhjä ancestor: polku isäsolmusta juureen following-sibling: oikeanpuoleiset velisolmut (ei attr.) following: järjestyksessä solmun jälkeen olevat poislukien solmun jälkeläiset preceding: järjestyksessä solmua edeltävät, poislukien esivanhemmat 7 8 Haaroja lähtö D D D parent:: descendant:: following-sibling:: lähtö lähtö lähtö D D D following:: ancestor:: preceding:: 9 Muita haaroja: preceding-sibling self descendant-or-self ancestor-or-self attribute: attribuuttisolmuihin ei pääse käsiksi muiden haarojen kautta. ttribuuttisolmu voi kuitenkin olla lähtökohtana parent ja ancestor haaroille. 10 Solmurajaus text(): valitsee tekstidata solmut comment(): valitsee kommenttisolmut processing-instruction(): käsittelyohjesolmut node(): kaikki solmutyypit *: jos haara on 'attribute' niin kaikki attribuuttisolmut, muuten kaikki elementtisolmut name: nimetyn tyyppiset *:localname: nimetyn tyyppiset nimiavaruudesta riippumatta prefix:* kaikki nimiavaruuteen 'prefix' kuuluvat Huom: 1.0:ssa tulkitaan nimiavaruutta siten, että ilman etuliitettä olevat kuuluvat 'tyhjään nimiavaruuteen', joka määritellään xlmns=""; simerkiksi XML Schema:ssa ilman etuliitettä olevat tulkitaan kuuluviksi oletusnimiavaruuteen. 2.0 käyttää myös tätä tulkintaa 11 12 2

htolausekkeet ovat -lausekkeita, jotka evaluoidaan totuusarvoiksi Voivat sisältää funktioita, muuttujia, vertailuja, versiossa 2.0 myös kontrollirakenteita kokonaisluku (esim. [1]): tosi, jos solmun järjestysnumero kokoelmassa on tuo kokonaisluku [position()=1] merkkijono: tosi, jos pituus>0 kokoelma: tosi, jos kokoelma ei ole tyhjä Usein ehtolausekkeena käytetään alipuuta (tai muuta ympäristöä) tutkivaa valintalauseketta reseptit, joiden raaka-aineena on käytetty sokeria: /descendant::rpc:recipe [descendant::rcp:ingredient[attribute::name='sugar']] tosi, jos ei tyhjä - kaikki sokerin käyttöä kuvaavat raaka-ainesolmut /descendant::rcp:recipe / descendant::rcp:ingredient[attribute::name='sugar'] ylemmässä yksi valinta-askel jälkimmäisessä 2 13 14 Xpath esimerkkejä ehtolausekkeet evaluoidaan esiintymisjärjestyksessään (yleensä tällä ei ole merkitystä) - seuraavassa esimerkissä kuitenkin on /descendant::rpc:ingredient[position()=3][position()=1] kolmas ingredient elementti /descendant::rpc:ingredient[position()=1][position()=3] tyhjä (yhden solmun kokoelmasta ei löydy kolmatta) Kuten valinta-askeleessakin on evaluonnissa lähtökohtana (kontekstina) vuorossaoleva tulosjoukon solmu /descendant::rcp:recipe/child::rcp:title kaikkien reseptien title-solmut /descendant::rcp:recipe/descendant::rcp:ingredient/ attribute::name jokaisen ingredient elementin name-attribuutttia vastaava solmu /descendant:rcp:*/child::text() kaikki puun tekstisolmut 15 16 esimerkkejä funktioita htolausekkeita [attribute::amount] elementillä on jokin arvo attribuutilla amount [attribute::name='sugar'] elementin attribuutilla name on merkkijonoarvo sugar [position()<5] viisi ensimmäistä [descendant::rpc:ingredient] liittyy vähintään yksi raaka-aine position(): paikka kokoelmassa last(): kokoelman viimeinen count(kokoelma): alkioiden lukumäärä /descendant::rcp:recipe[descendant::preparation [count(child::step)<5]] contains(string1,string2): tosi jos string1 sisältää string2:n /descendant::rcp:recipe[child::rcp:title='lehtipihvi'] /descendant::rcp:recipe[child::rcp:title[contains(text(),'pihvi')]] substring(string,start,len), upper-case, lowercase,round,ceiling, floor,. 17 18 3

lyhennemerkinnät lyhennemerkinnät :ssa on määritelty joukko lyhennemerkintöjä, joita käytetään yleisesti haaran oletusarvona on 'child', joten sen voi jättää pois /descendant::rcp:recipe/child::rcp:title => /descendant::rcp:recipe/rcp:title /descendant-or-self::node()/ voidaan korvata //:lla //rcp:recipe/rcp:title Mitä tuottaa tulokseksi //rcp:ingredient[1] 19 20 lyhennemerkinnät lyhennemerkinnät Mitä tuottaa tulokseksi //rcp:ingredient[1] ukikirjoitettuna /descendant-or-self::node()/child::rcp:ingredient [1] ensimmäinen askel valitsee kaikki puun solmut toinen askel valitsee recipe tai ingredient solmujen kohdalla niiden alapuolella olevat ingredient solmut ehtolauseke valitsee kustakin kokoelmasta ensimmäisen saadaan siis lista ensimmäisiä raaka-aineita /descendant::rcp:ingredient[1] attribute:: voidaan korvata merkillä @ /descendant::rcp:recipe / descendant::rcp:ingredient[attribute::name='sugar'] => //rcp:ingredient[@name='sugar'] parent::node() voidaan lyhentää '..' //rcp:nutrition[@calories=350]/../rcp:title 350 kilokaloristen reseptien title:t self::node() voidaan lyhentää '.' valitsee vain esijärjestyksessä ensimmäisen 21 22 2.0 2.0 2.0:ssa on 1.0:aan verrattuna lisäfunktioita, mm. palautettavien kokoelmien muokkaamiseen, funktioita on yleistetty Lisäoperaatioita (>>(seuraa),<< (edeltää),+,-,/, (vaihtoehtoisten polkujen yhdistäminen) operaatioiden evaluointitapa osittain muuttunut muuttujia toistolause ehtolause Muutamia funktioita: fn:doc(uri): lukee ulkoisen XML-tiedoston ja palauttaa sen juurielementin fn:distinct-values(kokoelma): palauttaa kokoelman erilaiset arvot vrt. SQL:n distinct fn:insert-before(kokoelma, kohta,kokoelma) lisää alkioita kokoelmaan fn:insert-before((1,3,5),2,(2,4)) =>(1,2,4,3,5) 23 24 4

2.0 2.0 for $muuttuja in lauseke return tulos for $r in //rcp:recipe return fn:count($r//rcp:ingredient[fn:not(rcp:ingredient)]) Kultakin reseptiltä lukumäärä perusraaka-aineista ts. sellaisista, jotka eivät koostu muista for-lauseita käytetään esim. Xquery-kielessä for-lauseet voivat olla sisäkkäisiä If (lauseke) then lauseke2 else lauseke2 fn:avg( for $r in //rcp:ingredient return if ($r/@unit= cup ) then xs:double($r/@amount)*237 else if ($r/@unit= teaspoon ) then xs:double($r/@amount)*5 else if ($r/@unit= tablepoon ) then xs:double($r/@amount)*15 else () ) Keskiarvo määristä millilitroiksi muunnettuna Tietotyyppimuunnos Vastaavia muillekin tyypeille 25 26 XML Schemassa XML Schemassa Viittaus elementtien välillä voidaan määritellä XML Schema:ssa käyttämällä ID ja IDR tietotyyppejä Viittaus perustuu aina yhteen attribuuttiin i voida määritellä, mihin kohteisiin on luvallista viitata Vaihtoehtoisena tapana tarjolla avaimiin (key) perustuva viittausmekanismi <element name="w:widget" xmlns:w="http://www.widget.org"> <complextype>... vaimena määriteltävän elementin </complextype> component alielementin part <key name="my_widget_key"> attribuutti manufacturer yhdessä <selector xpath="w:components/w:part"/> lielementin info attribuutin productid kanssa <field xpath="@manufacturer"/> <field xpath="w:info/@productid"/> </key> <keyref name="annotation_references" refer="w:my_widget_key"> <selector xpath=".//w:annotation"/> <field xpath="@manu"/> <field xpath="@prod"/> </keyref> </element> vaimeenviitataan alielementin annotationattribuuteilla manu ja prod 27 28 XML Schema:ssa ja XPointer <element name="collection"> <complextype> <sequence> <element name="description" type="string"/> <element ref="r:recipe" minoccurs="0" maxoccurs="unbounded"/> </sequence> </complextype> <unique name="recipe-id-uniqueness"> <selector xpath=".//r:recipe"/> <field xpath="@id"/> </unique> <keyref name="recipe-references" refer="r:recipe-id-uniqueness"> <selector xpath=".//r:related"/> <field xpath="@ref"/> </keyref> </element> XHTML standardissa dokumentin sisäisiin kohtiin voidaan osoittaa id-attribuutin arvon avulla http://dokuurl.html#id Tämä edellyttää, että paikkojen identifiointiin on käytetty id-attribuutteja ja ne ovat viittaajan tiedossa. XPointer on standardi, joka mahdollistaa monipuolisemman paikan osoittamisen dokumentin sisällä käyttämällä -polkuun perustuvaa viittaamista Reseptiesimerkissä ei käytetty ID ja IDR tietotyyppejä, vaan määriteltiin viittaukset unique-määreellä Unique kuten key, mutta eivät pakollisia 29 30 5

ja XPointer simerkiksi http://www.cs.helsinki.fi/u/laine/xml/k08/kurssikuvaus.shtml#xpointer (//h1) Viittaisi tämän kurssin sivuston kurssikuvauksen pääotsikkoon. Viittaus siis ilmaistaan polkumääreenä. Viittaus voi kohdistua useaan elementtiin...#xpointer(//img) Valitsee kaikki sivun kuvat #xpointer(//h3[text()= Tavoitteet ]) Valitsee kohdan, jossa tason 3 otsake on Tavoitteet 31 6