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 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 172
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> 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 173
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> 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 174
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ä) 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 175
9.20 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 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 176
9.21 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) 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 177
9.22 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> 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 178
9.23 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 kehitteillä 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) 7307015 RAKENTEISET DOKUMENTIT (kevät 2005) - ON 179