è è è XSL-muunnokset 9 XSL-muunnokset

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

XSL-muunnokset. 9 XSL-muunnokset

XSL-muunnokset. 9 XSL-muunnokset

XSLT - ohjelmoinnin perusteet. Jaana Holvikivi Metropolia

Hohde Consulting 2004

Extensible Stylesheet Language (XSL)

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

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

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

Helsingin yliopisto/tktl XML-metakieli XPath

XSL Formatting Objects

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

XSLT - ohjelmaesimerkkejä. Jaana Holvikivi Metropolia

Ensimmäiset XPath-lausekkeet

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

3 Verkkosaavutettavuuden tekniset perusteet

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

XML Technologies and Applications - harjoitustyö -

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

XML johdanto, uusimmat standardit ja kehitys

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

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

Luento 4: XPath ja XLink

Hohde Consulting 2004

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

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

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

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

Luento 3: Tietorakenteiden esittäminen

7 DTD ja entiteetit: dokumentin fyysinen rakenne

8 XSLT-muunnoskieli XSLT-muunnoskieli

2. PEHMEÄ XHTML XRAJAHTML

Paikkatiedot ja Web-standardit

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

3 Verkkosaavutettavuuden tekniset perusteet

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

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

Helsingin yliopisto Tietojenkäsittelytieteen laitos XML-metakieli

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

3 XHTML-dokumenttien anatomia

XML / DTD / FOP -opas Internal

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

Hohde Consulting 2004

W3C-teknologiat ja yhteensopivuus

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

XML - perusteet. Ctl230: Luentokalvot Miro Lehtonen

XML rakenteen suunnittelu. Jaana Holvikivi

Interfacing Product Data Management System

812336A C++ -kielen perusteet,

3.27 "Tuotantoesimerkkien" rakenne ja viittaukset (1/2)

Web-teknologiat. XML-datan kysely Topi Sarkkinen

5 XML Query Language. Skeemojen opiskelun myötä olemme polulla joka luontevasti johtaa ajatukseen XMLdokumenteista

Johdatus rakenteisiin dokumentteihin

A TIETORAKENTEET JA ALGORITMIT

CSE-A1200 Tietokannat

Digitaalisen median tekniikat. Luento 3: CSS

5 Merkkaus: XML protokollana

5 XML Query Language. Skeemojen opiskelun myötä olemme polulla joka luontevasti johtaa ajatukseen XMLdokumenteista

XML-merkkaus. Merkkidata, prosessointikomennot, kommentit

valitsin on useimmiten html-elementti, jolle tyyli halutaan luoda

5 Merkkaus: XML protokollana

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

4. Lausekielinen ohjelmointi 4.1

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

Luento 11: XSL-FO & SVG

W3C, Web-teknologiat ja XML

XML standardeja. nimiavaruudet, namespaces XHTML XML Schema linkitys Jaana Holvikivi 1

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

Choose Finland-Helsinki Valitse Finland-Helsinki

Luento 12: XML ja metatieto

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

Cascading Style Sheets

HTML ja CSS. Tästä se lähtee: portfolio-sivusto. Sivuston pääkansio, jonka sisällä on kaikki sivustoon kuuluvat alikansiot ja tiedostot.

C++11 seminaari, kevät Johannes Koskinen

Luento 7: XML-ohjelmointirajapinnat

XQuery tietokannan kyselykielenä

Digitaalisen median tekniikat css tyylimääritykset

Julkishallinnon XML-skeemat v0.5 JHS-suositus

2.17 Esimerkki järkevän relaatiotietokannan rakenteesta

Aulikki Hyrskykari. CSS Taustaa CSS syntaksi CSS Valitsimet Kuvat verkkosivulla

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Java-kielen perusteita

SIMULINK S-funktiot. SIMULINK S-funktiot

Semanttinen Web. Ossi Nykänen Tampereen teknillinen yliopisto (TTY), DMI / Hypermedialaboratorio W3C Suomen toimisto

Helsingin yliopisto / TKTL XML-Metakieli XML Schema

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

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

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

Proseduraalinen dokumentti: sisältö, rakenne ja ulkoasu yhdessä, esim. worddokumentti

Ohjelmoinnin peruskurssien laaja oppimäärä

Digitaalisen median tekniikat css tyylimääritykset

Digitaalisen median tekniikat css tyylimääritykset Harri Laine 1

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

Ohjelmoinnin peruskurssien laaja oppimäärä

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Digitaalisen median tekniikat xhtml - jatkuu

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Transkriptio:

9 XSL-muunnokset XML-dokumenttien keskeinen rooli on välittää tietoa sovellusten välillä. Yksinkertaisimmillaan tämä tarkoittaa sitä että tieto tuotetaan suoraan tietyn sovelluksen tekstiformaattiin. Lähestymistavan huono puoli on tekstiformaateista sopimisen vaiva ja pahimmassa tapauksessa sitoutuminen "köyhään" tietorakenteeseen. Yleisemmin parempi ratkaisu on tuottaa tietoa kohdesovellukseen muunnosten avulla. Tällöin tietoa kuvataan sovellusten välillä ohjelmallisesti, mikä helpottaa (XML-)sovellusten yhdistämistä. Yksinkertaisimmillaan muunnos on "tyylipohja" joka esittää tietyn tietosisällön esim. XHTML-sivuna. 165

9.1 Konseptiesimerkki A Tiedon ohjelmallinen kuvaaminen sanastosta toiseen on tyypillinen XML-sovellusten yhdistelyyn liittyvä tehtävä Case (huom. sis. monikanavajulkaisun ja käärimisen): - asiakashallintaohjelma A tuottaa tekstimuotoisia raportteja joita halutaan katsella/tulostaa/siirtää toisiin järjestelmiin raportti XSLTprosessori XHTML - sen sijaan että A ohjelmoitaisiin tuottamaan raporttinsa esim. XHTMLformaatissa, ohjelmoidaan tuloste omassa XML-formaatissa raportti - kirjoitetaan muunnos (tiedosto a2h.xsl) T: raportti XHTML a2h.xsl -...näin raportista voidaan helposti tuottaa muitakin esitystapoja, (raportin tietomallia ei tarvitse valita XHTML:n rajoitusten mukaan), jos XHTMLversio halutaan vaihtaa, muokataan vain muunnosta, kokonaan uusi kohdesovellus? ei edellytä A:n muokkaamista, vain uudentyyppisen muunnoksen kirjoittamista, jne. 166

9.2 Extensible Stylesheet Language: Transformations XML-perheen suositus XSLT (1.0) määrittelee ns. XSLT-prosessorin tai muuntimen toiminnallisuuden Muunnos on tietokoneohjelma joka kuvaa lähdedokumentin jäsennyspuun toiseen muotoon kohdedokumentin (tai tulosdokumentin) jäsennyspuuna - muunnos voi hyödyntää kaikkea XML-dokumentista löytyvää informaatiota (loogisen rakenteen osalta), mukaan lukien kommentit ja prosessointiohjeet 167

9.3 Esimerkki: yksinkertainen muunnos <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:output method="html" indent="yes" encoding="iso-8859-1" doctype-public="-//w3c//dtd HTML 4.0 Transitional//EN" /> <xsl:template match="/music"> <html> <head> <title>esimerkki</title> <style type="text/css"> body { background: yellow;} </style> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="album"> <h2> <xsl:value-of select="@artist"/> </h2> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> 168

9.4 Tekniikkaa XSLT tarjoaa kielen muunnosten kuvaamiseen se ei vielä yksin riitä Suositus XPath (XML Path Language (XPath) 1.0) tarjoaa kielen jäsennyspuiden osiin viittaamiseksi - "osoitin- ja ohjelmointikieli" (vrt. CSS2-valitsimet) Kohdesovellus voi olla mikä tahansa XML-tekstiformaatti - nimiavaruuksia tarvitaan erottamaan XSL kohteesta - lähdedokumentti (puu) on mv. XML-dokumentti - tulosdokumentti (puu) on mv. XML/HTML/tekstidokumentti (tai tekstientiteetti) XSLT:tä voidaan luonnehtia mallipohjaiseksi tai funktionaaliseksi ohjelmointikieleksi 169

9.5 Muunnoksen yleisrakenne Kärjistäen, tyypillinen XSL-muunnos sisältää seuraavat osat: output-osa kertoo tulospuun sarjallistuksen (ja esim. kohdedokumentin tyypin) Säännöt (template) määrittelevät muunnoksen loogisen sisällön (tiedon kuvaus lähdepuusta tulospuuksi) Parametrit tarjoavat keinon ohjata muunnoksia ulkoapäin, lähdedokumenttien ohella (esim. kytkiminä XSLT-prosessorille) Muunnokseen voidaan myös sisällyttää (include ja import) osia toisista muunnostiedostoista (modulaariset muunnokset) Suurin osa opiskelusta on sääntöjen ja näihin liittyvien "lauserakenteiden" ja komentojen opiskelua (...ja kohdesovellusten opiskelua...) 170

9.6 Sääntöjen anatomia Säännöt kirjoitetaan mallipohjien (template) avulla Sääntö aktivoituu lähdepuun aktiivisen kontekstin perusteella, säännön hahmon (pattern) ohjaamana Aktivoitunut sääntö tuottaa tulospuun ko. kohtaan sisältönsä, komentojen ohjaamana Sääntöjen (rekursiivinen) ketjutus ja oletussäännöt 171

9.7 XSLT-jäsennyspuun osat Muunnos näkee lähdedokumentin esiintymäosan solmuista koostuvana puuna - juurisolmu - elementtisolmut, attribuuttisolmut, prosessointiohjesolmut, tekstisolmut, - kommenttisolmut, nimiavaruussolmut Jokaista loogista elementtiä kohti löytyy rakenteensa XPath-kielestä sekä komentoja ko. tyyppisen tiedon käsittelyyn ja generoimiseen Solmun (suhteellinen) sijainti puussa osoitetaan ns. akselin avulla (vrt. CSS) - ancestor, ancestor-or-self, attribute, child, descendant, descendant-or-self, following, following-sibling, namespace, parent, preceding, precedingsibling, self 172

9.8 Hahmojen kielioppi (XPath & lokaatiopolku) Lokaatioaskelten kolmiosainen rakenne (akseli::solmutesti[predikaatti]): child::kirja/child::luku[position()=5]/child::kappale[position()=2] Käytössä on lyhennemerkintöjä. Esimerkkejä: para matches any para element * matches any element chapter appendix matches any chapter element and any appendix element olist/item matches any item element with an olist parent appendix//para matches any para element with an appendix ancestor element / matches the root node text() matches any text node processing-instruction() matches any processing instruction node() matches any node other than an attribute node and the root node id("w11") matches the element with unique ID W11 para[1] matches any para element that is the first para child 173

element of its parent *[position()=1 and self::para] matches any para element that is the first child element of its parent para[last()=1] matches any para element that is the only para child element of its parent items/item[position()>1] matches any item element that has a items parent and that is not the first item child of its parent item[position() mod 2 = 1] would be true for any item element that is an odd-numbered item child of its parent. div[@class="appendix"]//p matches any p element with a div ancestor element that has a class attribute with value appendix @class matches any class attribute (not any element that has a class attribute) @* matches any attribute 174

Vastaavasti esimerkkejä täydellisten lausekkeiden avulla child::para selects the para element children of the context node child::* selects all element children of the context node child::text() selects all text node children of the context node child::node() selects all the children of the context node, whatever their node type attribute::name selects the name attribute of the context node attribute::* selects all the attributes of the context node descendant::para selects the para element descendants of the context node ancestor::div selects all div ancestors of the context node ancestor-or-self::div selects the div ancestors of the context node and, if the context node is a div element, the context node as well descendant-or-self::para selects the para element descendants of the context node and, if the context node is a para element, the context node as well 175

self::para selects the context node if it is a para element, and otherwise selects nothing child::chapter/descendant::para selects the para element descendants of the chapter element children of the context node child::*/child::para selects all para grandchildren of the context node / selects the document root (which is always the parent of the document element) /descendant::para selects all the para elements in the same document as the context node /descendant::olist/child::item selects all the item elements that have an olist parent and that are in the same document as the context node child::para[position()=1] selects the first para child of the context node 176

child::para[position()=last()] selects the last para child of the context node child::para[position()=last()-1] selects the last but one para child of the context node child::para[position()>1] selects all the para children of the context node other than the first para child of the context node following-sibling::chapter[position()=1] selects the next chapter sibling of the context node preceding-sibling::chapter[position()=1] selects the previous chapter sibling of the context node /descendant::figure[position()=42] selects the forty-second figure element in the document 177

/child::doc/child::chapter[position()=5]/child::section[position()=2] selects the second section of the fifth chapter of the doc document element child::para[attribute::type="warning"] selects all para children of the context node that have a type attribute with value warning child::para[attribute::type='warning'][position()=5] selects the fifth para child of the context node that has a type attribute with value warning child::para[position()=5][attribute::type="warning"] selects the fifth para child of the context node if that child has a type attribute with value warning child::chapter[child::title='introduction'] selects the chapter children of the context node that have one or more title children with stringvalue equal to Introduction 178

child::chapter[child::title] selects the chapter children of the context node that have one or more title children child::*[self::chapter or self::appendix] selects the chapter and appendix children of the context node child::*[self::chapter or self::appendix][position()=last()] selects the last chapter or appendix child of the context node 179

9.9 Laajempi esimerkki: music HTML(4) Tuotetaan musictiedoista Web-sivu Esimerkissä esille nousevia tyypillisiä pulmia/tehtäviä: - ohjelmoinnin pulmat idref id music.xml copy.xml bandinfo.xml XSLT-prosessori m2h.xsl out.html - mallintamisen pulmat, erityisesti: miten tieto jaetaan eri dokumenttien kesken (normalisointi, avaimet, asiasisältö vs. tyyli, yms.) - teknisen kirjoittamisen pulmat -...tyypitys, kieliversiointi, lokaalit, tiedon ylläpito, virhetilanteiden hallinta, suorituskyky, yms. 180

9.10 Takaisin perusteisiin: oletussäännöt Prosessoinnin jatkaminen (kaikilla moodeilla) <xsl:template match="* /"> <xsl:apply-templates/> </xsl:template> <xsl:template match="* /" mode="m"> <xsl:apply-templates mode="m"/> </xsl:template> Tekstin tuottaminen <xsl:template match="text() @*"> <xsl:value-of select="."/> </xsl:template> Prosessointiohjeiden ja kommenttien sivuuttaminen <xsl:template match="processing-instruction() comment()"/> Myös oletussäännöt voi määritellä uudelleen 181

9.11 Output XSL-muunnos käsittelee lähinnä tiedon loogista kuvaamista lähdepuusta kohdepuuksi, tiedon sarjallistus on kuitenkin useissa sovelluksissa keskeistä <!-- Category: top-level-element --> <xsl:output method = "xml" "html" "text" qname-but-not-ncname version = nmtoken encoding = string omit-xml-declaration = "yes" "no" standalone = "yes" "no" doctype-public = string doctype-system = string cdata-section-elements = qnames indent = "yes" "no" media-type = string /> Huomioita: XML vs. HTML vs. teksti 182

9.12 XSLT-komennot (1/2) Kohdesolmujen tuottaminen (ns. literaalien ohella): - xsl:element, xsl:attribute (ja xsl:attribute-set), xsl:text, xsl:processinginstruction, xsl:comment - vrt. erot literaalien kanssa (attribuutit ja kommentit!) Lähdepuun kopiointi - xsl:copy, xsl:copy-of Tekstin tuottaminen - xsl:value-of Numerointi - xsl:number 183

9.13 XSLT-komennot (2/2) Toistolauseet - xsl:for-each - vrt. sääntöjen suorittaminen Ehtolauseet - xsl:if, xsl:choose, xsl:when, xsl:otherwise Järjestäminen - xsl:sort Muuttujien käsittely - xsl:variable, xsl:param Muuta: Viestit ja laajennukset 184

9.14 Lausekkeet ja funktiot (XPath ja XSLT) XPath-kieli sisältää ohjelmoinnissa tyypillisesti tarvittavat rakenteet - tietotyypit (node-set, boolean, number, string) - muuttujat ($v), liukuluvuilla laskeminen (+, -, *, div, mod) ehtolausekkeet (or, and, =,!=, <=, <, >=, >) ja funktioiden kutsuminen (concat($v,$x)) - huomaa < ja '/""-merkkien käyttö merkkijonoissa (XML-tekstiä!) Kuten yleensä ohjelmoinnissa, lisäksi tarvitaan aliohjelmakirjastoja (joista osa olisi periaatteessa kuitenkin mahdollista kirjoittaa esim. sääntöinä) XSL-muunnosten yhteydessä käytössä ovat - Node Set Functions, String Functions, Boolean Functions, Number Functions, XSLT:n omat funktiot (erit. node-set document(object, nodeset?) ja node-set key(string, object)) Mahdolliset laajennukset 185

9.15 Muuttujien käsittelystä Funktionaalisen ohjelmoinnin hengessä muuttujat (muotoa $nimi) instantioidaan kerran ilman "päällekirjoittamisen" mahdollisuutta (tämä ei yleensä ole ongelma koska sääntöjä kutsutaan funktionaalisesti) Muuttujia tarvitaan esim. sääntöjen paloitteluun, merkkijonojen käsittelyyn (funktioiden käyttö) ja viittausrakenteiden kokoamiseen Keskeinen käyttö on myös parametrien välittäminen muunnoksille (päätason komentona) <xsl:param name="year" select="."/> Attribuuttien arvoina muuttujien evaluointi onnistuu myös sijoitusoperaation avulla ({ }-notaatio ja ns. attribute value template) <xsl:variable name="image-dir">/images</xsl:variable> <xsl:template match="photograph"> <img src="{$image-dir}/{href}" width="{size/@width}"/> </xsl:template> 186

9.16 XSLT ja nimiavaruudet (1/3): literaali oletusnimiavaruus XSL-muunnos voi tietenkin tuottaa myös tiettyyn nimiavaruuteen liittyviä kohdedokumentteja (tarvitaan aina jo esim. XHTML-sovelluksissa!) Helpoimmillaan tämä tarkoittaa vain xmlns-attribuutin käyttöä literaalina: <xsl:template match="/music"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>esimerkki</title> </head> <body> <h1>dokumentin tietoja</h1> <p><xsl:value-of select="album[1]/name" /> </p> </body> </html> </xsl:template> Oletusnimiavaruus ei kuitenkaan välity säännöstä toiseen (ts. asetettava joka säännössä erikseen) Mieti miksi mallipohja ja XSL-komennot tulkitaan oikein 187

9.17 XSLT ja nimiavaruudet (2/3): kvalifioidut literaalit Myös kvalifioitujen nimien käyttö on mahdollista: <!--... --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0" xmlns:xh="http://www.w3.org/1999/xhtml"> <!--... --> <xsl:template match="/music"> <xh:html> <xh:head><xh:title>esimerkki</xh:title></xh:head> <!--... --> </xh:html> </xsl:template>...tällöin lopputulos ei kuitenkaan ole aina toivottu! (joskin se on "oikea") <?xml version="1.0" encoding="iso-8859-1"?> <xh:html xmlns:xh="http://www.w3.org/1999/xhtml"> <xh:head> <xh:title>xslt-komentodemo</xh:title> </xh:head> <!--... --> </xh:html> 188

9.18 XSLT ja nimiavaruudet (3/3): kvalifioidut hahmot Muunnoksen lähdedokumenttikin voi tietenkin kuulua tiettyyn nimiavaruuteen...tällöin XSLT sotkee merkkausprefiksit ja hahmojen sisällön, vrt. oheinen XHTML-dokumenttiin kohdistuva muunnos: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0" xmlns:xh="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xh"> <!-- ei haluta kohteeseen! --> <xsl:output method="xml" indent="yes" encoding="iso-8859-1" /> <xsl:template match="/xh:html/xh:head"> <foo> <xsl:value-of select="xh:title" /> </foo> </xsl:template> <xsl:template match="text()" /> </xsl:stylesheet> 189

9.19 Lyhennemerkintä: literaalista koostuva XSL-muunnos XSLT määrittelee lyhennemerkinnän yksinkertaisten muunnosten kirjoittamiseen - perusidea: muunnosdokumentti vastaa yhden implisiittisen säännön mallipohjaa jossa hahmona on "/" <html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns="http://www.w3.org/tr/xhtml1/strict"> <head> <title>expense Report Summary</title> </head> <body> <p>total Amount: <xsl:value-of select="expense-report/total"/></p> </body> </html> Muunnoksen syntaksi on tällöin kuitenkin rajoittunut (ei muita sääntöjä eikä päätason elementtejä) 190

9.20 Yksinkertaisia XSLT-esimerkkejä (ks. kotisivu) Yksi vs. monta sääntöä Viittaukset, järjestäminen Ulkoiset lähdedokumentit (lokaalit vs. globaalit viittaukset) Parametrit ja funktiot Prosessorisovellukset (SVG) Käyttö osana muita teknologioita työkaluja (Open Office, WRML) Yms. 191

9.21 Pari sanaa XSL-perheestä XSL-perhe sisältää (hieman määrittelytavasta riippuen) tekniikat XSLT, XPath ja XSL-FO (XSL Formatting Objects) XSL-FO määrittelee (ideatasolla) hieman Postscriptiä muistuttavan XMLpohjaisen formatointikielen -...taitollisesti ja sommitelmallisesti tarkkaa tulostusta silmälläpitäen (vrt. HTML toisena ääripäänä) -...XSL-FO-prosessori 192

9.22 XSL-FO, perusidea XSL-FO hyödyntää CSSkäsitteistöä (formatointiominaisuuksien osalta) mutta tarjoaa huomattavasti monipuolisemman formatointimallin (sis. esim. sivutuksen, ylä- ja alaotsikot, mallipohjan yms. käsitteet) XSL-FO:ta on (raskaasti) kritisoitu semantiikan puutteesta (vrt. HTML & font-elementti) 193

9.23 XSL-FO, esimerkki (ks. zvon.org) lähdedokumentti ja formatoitu tulosdokumentti (esim. PDF-muodossa) <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format" > <fo:layout-master-set> <fo:simple-page-master mastername="simple" page-height="15cm" pagewidth="15cm"> <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="simple"> <fo:flow flow-name="xsl-region-body"> <fo:block>square page 15cm x 15cm</fo:block> </fo:flow> </fo:page-sequence> </fo:root> 194

9.24 Lopuksi Web-selaimet eivät tue XSL-muunnoksia luotettavasti -...käytännön vaihtoehtoja ovat muunnokset osana esim. sisällöntuotantojärjestelmiä tai palvelinpäässä Monimutkaiset muunnokset ovat kuitenkin melko hitaita ja saattavat kuluttaa paljon muistia - heikosti optimoitu muunnin pitää yhtä aikaa työmuistissa koko lähde- ja tulospuun yms. XPath ja XSLT -tekniikoista on jo julkaistu kakkosversiot - XPath 2 kehittyy esim. XQueryn "suuntaan", XSLT 2 puolestaan mahdollistaa sääntöjen kohdistamisen myös tulospuuhun sekä usean tulospuun tuottamisen yhdellä ajolla (XSLT:tä on kritisoitu tämän ohella myös mm. sääntöjen kömpelöstä kirjoitusasusta) 195