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

Samankaltaiset tiedostot
Hohde Consulting 2004

Ensimmäiset XPath-lausekkeet

XSL-muunnokset. 9 XSL-muunnokset

Extensible Stylesheet Language (XSL)

XSLT - ohjelmaesimerkkejä. Jaana Holvikivi Metropolia

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat. JSP ja XML

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

XSL-muunnokset. 9 XSL-muunnokset

è è è XSL-muunnokset 9 XSL-muunnokset

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

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

Ylläpitodokumentti. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

XSL Formatting Objects

Helsingin yliopisto/tktl XML-metakieli XSL-FO XSL-FO. XSL-FO sivut

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

Helsingin yliopisto/tktl XML-metakieli XPath

XML Technologies and Applications - harjoitustyö -

8 XSLT-muunnoskieli XSLT-muunnoskieli

Hohde Consulting 2004

XML / DTD / FOP -opas Internal

Web-teknologiat. XML-datan kysely Topi Sarkkinen

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

Algoritmit 2. Luento 2 To Timo Männikkö

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

Algoritmit 1. Luento 8 Ke Timo Männikkö

Paikkatiedon esittäminen XML-muodossa: Oracle Spatial, SVG ja GML

Algoritmit 2. Luento 6 Ke Timo Männikkö

Hohde Consulting 2004

Rinnakkaistietokoneet luento S

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

Esimerkki uudelleenohjauksen teknisestä toteutuksesta

Digitaalisen median tekniikat css tyylimääritykset

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Algoritmit 2. Luento 10 To Timo Männikkö

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Datatähti 2019 loppu

Digitaalisen median tekniikat css tyylimääritykset Harri Laine 1

Digitaalisen median tekniikat css tyylimääritykset

Digitaalisen median tekniikat. Luento 4: JavaScript

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

XML JA SEN MUUNTAMINEN XSL-MUUNNOSTEN AVULLA

Harjoitus 6 ( )

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Harjoitus 6 ( )

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

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

M. Merikanto 2012 XML. Merkkauskieli, osa 2

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Rakenteisen oppimateriaalin tuottaminen verkossa esimerkki Rhaptos. Antti Auer Koordinaattori, HT Jyväskylän yliopisto Virtuaaliyliopistohanke

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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.

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

1. Skannaus ja tekstintunnistus (OCR) verkkoskannerilta

Malliratkaisut Demot

Interfacing Product Data Management System

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

Algoritmit 2. Luento 6 To Timo Männikkö

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

DOORS 7.1 Test Tracking Toolkit

3 Verkkosaavutettavuuden tekniset perusteet

A TIETORAKENTEET JA ALGORITMIT

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

eperusteet julkiset rajapinnat

Sisältö. 2. Taulukot. Yleistä. Yleistä

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

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

Luento 4: XPath ja XLink

Johdatus XML teknologioihin

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Digitaalisen median tekniikat Harri Laine 1

Muotoilutoliot. XSL:n muotoiluoliot. Muotoiluolio. Muotoilualueet. Lohkoalueiden sijoittelu. Muotoilualueiden sijoittelu. Rivialueiden ominaisuuksia

2 Rakenteisten dokumenttien perusteet

Stabilointi. Marja Hassinen. p.1/48

in condition monitoring

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

Johdatus rakenteisiin dokumentteihin

Stabilointi. arvosana. arvostelija. Marja Hassinen

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

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

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa:

Sosiaalihuollon asiakirjastandardi kehittyy. Konstantin Hyppönen Erikoissuunnittelija Tietojenkäsittelytieteen laitos Kuopion yliopisto

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Algoritmit 2. Luento 11 Ti Timo Männikkö

Tietorakenteet ja algoritmit

Ohje - Kuntien ilmoitukset

Transkriptio:

XSL - extensible stylesheet language XSL kehitettiin xml aineistojen esitysmuodon määrittelyyn (T ~ Transformations) dokumentin rakenteen tai sisällön muunnokset 1.0 (http://www.w3.org/tr/xslt) 1999 2.0 (http://www.w3.org/tr/xslt20/) 2007 XSL ( :n lisäksi XSL-FO = Formating objects) ladonta ja muotoilu XSL 1.1 (http://www.w3.org/tr/xsl/) (2006) Yhden tai useamman XML-lähdedokumentin muuntaminen yhdeksi tai useammaksi tulosdokumentiksi Tulosdokumentti voi olla XML-rakenteinen, mutta myös muuta muotoa esim. HTML, RTF, jne Tyypillisiä tulosmuotoja (XML tai XHTML) + CSS XLS-FO (joka edelleen tuottaa vaikka pdf-muodon) 1 2 Muunnos: puunjalostusta lähtöpuusta tulospuuhun Muunnossääntöjen liittäminen XML-materiaaliin hoidetaan materiaaliin liitetyllä käsittelyohjeella <?xml-stylesheet type="text/xsl" href= jokuxsl.xsl"?> Muunnossääntöjä sisältävä resurssi 3 4 on rakenteeltaan XML-kieli juurielementtinä stylesheet <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0">... Monet selaimet ja XML prosessorit kelpuuttavat 2.0 versionkin 5 XSL:n perustana ovat muunnossäännöt (templateelementti) Attribuutilla match: määritellään kohde, johon muunnossääntöä sovelletaan name: annetaan säännölle nimi. Nimeä käytetään aktivoitaessa sääntö nimellä. Silloin ei tarvita match attribuuttia. mode: nimeää ympäristön, jossa sääntöä sovelletaan. Valinnainen, käyttöä esim. tilanteissa, joissa on useita säännöstöjä valittavana priority:konfliktoivien sääntöjen valinnassa käytettävä painoarvo, valinnainen Elementin sisältönä kuvataan muunnos ja eteneminen puurakenteessa. 6 1

Sääntöjen kohteena olevat solmut määritellään rajoitetuilla XPath-valintalausekkeilla Kohdejoukko voi olla usean valintalausekkeen tulosten yhdistelmä match="h1 h2 h3 h4 h5" kaikki tasojen 1-5 otsakesolmut, jos lähtödokumentti on XHTML Valintalausekkeessa voidaan edetä elementtisolmuissa vain alaspäin puussa. Attribuuttisolmuihin viittaaminen on myös sallittua Sääntöä voidaan soveltaa solmuun, jos solmu on saavutettavissa valintalausekkeessa annetun polun kautta jostain lähtösolmusta 7 Muunnoksessa XML-rakenteen läpikäynnille on määritelty muutama oletussääntö: <xsl:template match="/ * "> <xsl:apply-templates /> Käsittele lapsisolmut Eli puu käydään läpi esijärjestyksessä ja kullekin solmulle sovelletaan siihen liittyvää muunnossääntöä Tässä on kuitenkin huomattava, että solmuun liittyvä sääntö voi katkaista etenemisen puussa alaspäin 8 Toinen oletussääntö <xsl:template match="text() @*"> <xsl:value-of select="."/> solmu itse märittelee, että tekstisolmun sisältö ja attribuutin arvo viedään tulosdokumenttiin. On kuitenkin syytä huomata, että edellisen sivun oletussäännön avulla ei päästä attribuuttisolmuihin. Oletusarvoisesti siis: alkuperäisen XML-puun tekstisolmujen sisällöt viedään esijärjestyksessä yhdeksi tekstipötköksi tulosdokumenttiin. Säännöillä on prioriteetti, jonka perusteella sovellettavan säännön valinta tapahtuu siinä tapauksessa, että useita kilpailevia sääntöjä sopii käsittelyvuorossa olevaan solmuun Prioriteetti voi olla laskettu tai eksplisiittisesti annettu priority-attribuutilla. Useampi samanarvoinen sääntö samaan kohteeseen on virhetilanne. Oletussäännöillä on alhaisin prioriteetti ja ne syrjäytyvät, jos solmuun liittyy muita sääntöjä yleensä: mitä mutkikkaampi ja spesifisempi valintalauseke sitä korkeampi prioriteetti 9 10 Edellä jo esiintynyt apply-templates elementti ohjaa lähtöpuun käsittelyn etenemistä Oletusarvoisesti (jos apply-templates on mukana) käsitellään vuorossa olevan solmun lapsisolmut elementin puuttuminen katkaisee etenemisen Apply-templates -elementtiin voidaan liittää käsittelyyn vaikuttavia valinnaisia attribuutteja: mode: nimeää ympäristön missä käsittelyä jatketaan select: valitsee solmujoukon jatkokäsittelyn kohteeksi solmujoukko valitaan XPath-lausekkeella, eikä sen tarvitse rajoittua solmun alipuuhun tai edes samaan dokumenttiin apply-templates apply-templates select=".//b" A B B A 11 12 2

<xsl:template match:recipe> <h1><xsl:value-of select="./title" /></h1> <div class="ingr"> <h2>ingredients></h2> <xsl:apply-templates select="./ingredient" /> </div> <div class="nuts"> <xsl:apply-templates select="./nutrition" /> </div> <div class="prep"> <xsl:apply-templates select="./preparation" /> </div> sellaisenaan tulospuuhun käsittely jatkuu Jatkokäsittelyelementin apply-templates sisältöelementeiksi voidaan upottaa sort-elementtejä. Sort-elementit määrittävät käsiteltävien solmujen järjestyksen puujärjestyksestä poikkeavaksi Kukin sort-elementti määrittelee järjestysavaimen osan, merkitsevin ensin select-attribuutti määrittää XPath lausekkeena attribuutin tai elementin, jonka perusteella järjestetään, järjestäminen voidaan määritellä merkkikoodiin tai numeroarvoon pohjautuvaksi ja järjestys nousevaksi tai laskevaksi 13 14 <xsl:template match="//recipe" /> <h3>similar recipes:</h3> <ul><xsl:apply-templates select="./related"> <xsl:sort select="." data-type="text" order="ascending" /> </xsl:apply-templates></ul> </xls:template> 'Muuttuja' <xsl:template match="related" /> <xsl:variable name="x" select="@ref" /> <li><xsl:value-of select="//recipe[@id=string($x)]/title" /></li> Koko puusta :ssä voidaan globaalisti stylesheet - elementin sisällä tai lokaalisti muunnossääntöjen sisällä määritellä muuttujia (oikeastaan nimettyjä vakioita, koska muuttujan arvoa ei voi muuttaa) Nämä määritellään xsl:variable -elementteinä Voi käyttää esimerkiksi tilanteissa, joissa aiemman elementin attribuutti pitää saada käyttöön (aiempi esimerkki) Variable elementissä muuttujalle annetaan nimi (esim. nimi), viitattaessa nimen eteen $ (esim. $nimi) 15 16 Suoraan literaaleina kirjoitettavan sisällön sijaan voi käyttää sisällönmuodostuselementtejä xsl:element xsl:attribute <xsl:template match:recipe> <xsl:element name="h1"> <xsl:value-of select="./title" /> </xsl:element> <xsl:element name="div"> <xsl:attribute name="class" select="'ingr'" /> <xsl:element name="h2"> Ingredients </xsl:element> <xsl:apply-templates select="./ingredient" /> </xsl:element>. 17 18 3

XSL-esimerkki XSL-esimerkki <students> <student id="100026"> <name">joe Average</name> <age>21</age> <major>biology</major> <results> <result course="math 101" grade="c-"/> <result course="biology 101" grade="c+"/> <result course="statistics 101" grade="d"/> </results> </student> <student id="100078"> <name>jack Doe</name> <age>18</age> <major>physics</major> <major>xml Science</major> <results> <result course="math 101" grade="a"/> <result course="xml 101" grade="a-"/> <result course="physics 101" grade="b+"/> <result course="xml 102" grade="a"/> </results> </student> </students> 19 <xsl:apply-templates select="student"/> <xsl:template match="student"> <grades> <xsl:apply-templates select=".//@grade"/> <xsl:template match="@grade"> <grade> <xsl:value-of select="."/> </grade> 20 XSL-esimerkki [tulos] <grades id="100026"> <grade>c-</grade> <grade>c+</grade> <grade>d</grade> <grades id="100078"> <grade>a</grade> <grade>a-</grade> <grade>b+</grade> <grade>a</grade> Aineisto voidaan muunnoksessa käydä läpi useaan kertaan ja tuottaa eri kerroilla erilaisia tuloksia Seuraavassa esimerkissä opiskelija-aineisto käydään läpi kahdesti Usein, kun käytetään useita apply-templates määreitä, näillä on eri vaikutusalue 21 22 -esimerkki -esimerkki <xsl:apply-templates mode="names" select="student"/> <xsl:apply-templates mode="grades" select="student"/> <xsl:template mode="grades" match="student"> <grades> <xsl:apply-templates select=".//@grade"/> <xsl:template mode="names" match="student"> <name> <xsl:value-of select="name"/> </name> <xsl:template match="@grade"> <grade> <xsl:value-of select="."/> </grade> 23 24 4

-esimerkki [tulos] -silmukat <name id="100026">joe Average</name> <name id="100078">jack Doe</name> <grades id="100026"> <grade>c-</grade> <grade>c+</grade> <grade>d</grade> <grades id="100078"> <grade>a</grade> <grade>a-</grade> <grade>b+</grade> <grade>a</grade> Apply-templates rakenteen vaihtoehtona etenemistä puussa voidaan kontrolloida for-each -rakenteella. Läpikäytävät solmut määritellään rakenteen selectattribuutilla. Sisäkkäisten silmukoiden laatiminen on mahdollista for-each -rakenteen sisään voidaan sijoittaa sort-elementtejä kuten apply-templates rakenteeseen 25 26 -silmukat -ehdolliset <xsl:apply-templates select="student"/> <xsl:template match="student"> <grades> <xsl:for-each select=".//@grade"> <grade><xls:value-of select="." /></grade> </xsl:for-each> Tulos sama kuin sivulla 21. 27 Ehdollisesti suoritettavat toiminnot ovat myös mahdollisia. Tarjolla kaksi rakennetta: <xsl:if test="ehto" > do_something </xsl:if> ja <xsl:choose> <xsl:when test="ehto > do_something</xsl:when> <xsl:otherwise> do_otherthing </xsl:otherwise> </xsl:choose> 28 -ehdolliset -ehdolliset <slist> <xsl:apply-templates select="student"/> </slist> <xsl:template match="student"> <xsl:if test="age > 25 and count(.//result)<5"> <std name="{name}"/> </xsl:if> attribute-rakenteelle vaihtoehtoinen tapa atribuuttien määrittelyyn: xmlns:b="http://businesscard.org" <xsl:template match="b:card"> <contact> <xsl:choose> <xsl:when test="b:email"> <xsl:value-of select="b:email"/> </xsl:when> <xsl:when test="b:phone"> <xsl:value-of select="b:phone"/> </xsl:when> <xsl:otherwise> No information available true, jos on </xsl:otherwise> olemassa </xsl:choose> - Ensimmäinen tosi </contact> katkaise evaluoinnin tässä arvoksi elementin name arvo 29 30 5

nimetyt muunnossäännöt nimetyt muunnossäännöt Jos muunnossäännölle on annettu nimi, voidaan sääntöä kutsua suoraan nimellä Nimetyille muunnossäännöille voidaan kutsun yhteydessä välittää myös parametreja xsl:withparam elementillä Muunnossäännön sisällä parametri esitellään xsl:param elementillä <xsl:apply-templates select="student"/> <xsl:template match="student"> <grades> <xsl:for-each select=".//@grade"> <xsl:call-template name="listgrade"/> </xsl:for-each> 31 32 nimetyt muunnossäännöt - rekursiivinen sääntö ja parametrit <xsl:template name="listgrade"> <grade> <xsl:value-of select="."/> </grade> kontekstina kutsun perusteella @grade xsl:stylesheet version="1.0" <xsl:template name="fib"> <xsl:param name="n"/> <xsl:choose> <xsl:when test="$n <= 1 "> <xsl:value-of select="1"/> </xsl:when> 33 Fibonaccin luvut 34 - rekursiivinen sääntö ja parametrit - rekursiivinen sääntö ja parametrit <xsl:otherwise> Kutsuparametrin arvo <xsl:variable name="f1"> <xsl:call-template name="fib"> <xsl:with-param name="n" select="$n -1"/> </xsl:call-template> </xsl:variable> <xsl:variable name="f2"> <xsl:call-template name="fib"> <xsl:with-param name="n" select="$n -2"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="$f1+$f2"/> </xsl:otherwise> </xsl:choose> Huom: Tässä täytyy olla väli Edellisen säännön kutsu voisi olla muotoa <xsl:template match="/"> <xsl:call-template name="fib"> <xsl:with-param name="n" select="10"/> </xsl:call-template> 35 36 6

-automaattinen numerointi - automaattinen numerointi number-elementti mahdollistaa tuloselementtien automaattisen numeroinnin count-attribuutti ilmaisee, miltä puun tasolta laskenta aloitetaan format-attribuutti ilmoittaa tuloksen muodon level-attribuutti mahdollistaa elementin sisäisen yksitasoisen (single) monitasoisen (multiple) tai tasojen yli ulottuvan (any) numeroinnin Seuraavassa esimerkissä tehdään reseptiaineistosta kopio, jossa valmistusvaiheisiin (step) on lisätty attribuutti seqno:n arvona vaiheen numero 37 xmlns:rcp="http://www.brics.dk/ixwt/recipes" <xsl:template match="rcp:step"> <rcp:step> <xsl:attribute name="seqno"> <xsl:number level="single" count="rcp:preparation"/> </xsl:attribute> <xsl:apply-templates select="@* *"/> </rcp:step> <xsl:template match="@*"> <xsl:copy/> <xsl:template match="*"> <xsl:copy><xsl:apply-templates/></xsl:copy> 38 xsl:copy kopioi solmun ja siihen liittyvän nimiavaruustiedon, ei kuitenkaan kopioi attribuutteja eikä alipuita automaattisesti xsl:copy-of kopioi solmun attribuutteineen, nimiavaruustietoineen ja alipuineen Muunnossääntöjen XPath lausekkeissa on mahdollista viitata muihin dokumentteihin document(uri) Jos uri on tiedostotason osoite saadaan osoitin dokumentin juurisolmuun Jos uri osoittaa johonkin dokumentin solmujoukkoon (XPointer-osa mukana) saadaan jäljittyvien solmujen kokoelma Jos URI on suhteellinen, se evaluoidaan suhteessa viittaavaan tyylitiedostoon. Ulkoisia elementtejä voidaan käsitellä samoin kuin sisäisiä 39 40 -esimerkki Ulkoisten tiedostojen käsittelyä tuotetietoja http://www.cs.helsinki.fi/u/laine/xml/tuotteet.xml hintatietoja http://www.cs.helsinki.fi/u/laine/xml/hinnat.xml erillinen runko tyylitiedoston kytkemiseksi http://www.cs.helsinki.fi/u/laine/xml/test1.xml xslt-muunnossäännöt http://www.cs.helsinki.fi/u/laine/xml/test1.xsl Muunnosssääntöjoukko voidaan jakaa moduuleihin. Moluulit ladataan xsl:include tai xsl:import elementeillä kummassakin parametrina URI ja sisältönä täydellinen stylesheet elementti xsl:import:lla ladatut voi ylikirjoittaa (samalla prioriteetillä) 41 42 7

esimerkkejä Reseptit 1: http://www.brics.dk/ixwt/examples/recipes.xsl Reseptit 2: Tuottaa uuden XML-tiedoston http://www.brics.dk/ixwt/examples/nutrition.xsl Reseptit 3: Muuntaa edellisen XML:n html:lle http://www.brics.dk/ixwt/examples/nutritiontable. xsl 43 8