1 / 36

T3MM65 RAKENTEISET DOKUMENTIT Pläjäys 4

T3MM65 RAKENTEISET DOKUMENTIT Pläjäys 4. Heikki Hietala HAAGA Ammattikorkeakoulu Helsingin liiketalousinstituutti Kevät 2010. XSLT alkaa tästä. http://www.xml.com/pub/a/2000/08/holman/index.html?page=4. Mitä on XSLT? eXtensible Stylesheet Transformations

neena
Download Presentation

T3MM65 RAKENTEISET DOKUMENTIT Pläjäys 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. T3MM65RAKENTEISET DOKUMENTITPläjäys 4 Heikki Hietala HAAGA Ammattikorkeakoulu Helsingin liiketalousinstituutti Kevät 2010

  2. XSLT alkaa tästä http://www.xml.com/pub/a/2000/08/holman/index.html?page=4 • Mitä on XSLT? • eXtensible Stylesheet Transformations • Muuntaa XML:n esitysmuotoon XSLT-prosessissa, jossa XML:ään lisätään halutun esitysmuodon mukainen tyyli:

  3. Mitä siis muunnetaan ja miksi? • Esimerkiksi XML:ää HTML:ksi tai puhtaaksi tekstiksi:

  4. Transformaatio voi tapahtua serverillä tai vasta asiakassovelluksessa • Server-side transformation on alla, client-side yllä

  5. Miltä XSLT näyttää? Tämä XML <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="hello.xsl"?> <greeting>Hello world.</greeting> *** ja tämä XSL **** <?xml version="1.0"?><!--hello.xsl--> <xsl:template match="/"> <b><i><u><xsl:value-of select="greeting"/></u></i></b> </xsl:template> tuottavat

  6. Osaset <?xml version="1.0"?> Julistus <xsl:template match="/"> Xpath – funktio joka vastaa juurielementtiä <b><i><u> muotoiluja <xsl:value-of select="greeting"/> Elementin ”greeting” arvo </u></i></b> muotoilut loppuvat </xsl:template> template loppuu

  7. Mistä XSLT:ssä on kyse? • XSLT on ohjelmointikieli, jolla tehdään datalle muunnoksia yhdestä muodosta toiseen. • xsl:template on kaiken perusta. Se on sääntöpohjaisen transformaation pohjana. • Prosessoidaan joko match- tai name-attribuutin pohjalta • Match käyttäää mallia liipaisimena • Name käyttää nimeä • Xsl:templatea kutsutaan xsl:apply-template –funktiolla • xsl:apply-template on aina templaten sisäpuolella • xsl:apply-template määrittää, mitä templaten solmua kutsutaan, eli se on ikään kuin aliohjelmakutsu

  8. Tässä on pätkä XML:ää <?xml version="1.0" ?> <?xml-stylesheet type="text/xsl" href="filmi1.xslt"?> <filmikirjasto> <filmi> <nimi>Blues Brothers</nimi> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <ensiesitys>1.1.1980</ensiesitys> <oscar>true</oscar> </filmi> <filmi> <nimi>Blues Brothers 2000</nimi> <ohjaaja>John Landis</ohjaaja> <kirjoittaja>Dan Aykroyd</kirjoittaja> <kirjoittaja>James Belushi</kirjoittaja> <ensiesitys>1.1.2000</ensiesitys> <oscar>false</oscar> </filmi> </filmikirjasto>

  9. Vastaava XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="filmi"> <html> <basefont face="Verdana" size="2" /> <body> <!--Käytetään kaikki templateja juurisolmusta alkaen--> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="filmi"> <!--kun vastaan tulee elementti "filmi"--> <p> <font face="verdana" color="steelblue" size="3"> <b>Filmi: <xsl:apply-templates /> </b> </font> </p> </xsl:template>

  10. Jatkuu… <xsl:template match="ohjaaja"> <!--kun vastaan tulee elementti "ohjaaja"--> <p> <font face="verdana" color="navy" size="2"> <xsl:apply-templates /> </font> </p> </xsl:template> <xsl:template match="kirjoittaja"> <!--kun vastaan tulee elementti "kirjoittaja"--> <p> <font face="verdana" size="1"> <xsl:apply-templates /> </font> </p> </xsl:template>

  11. Loppupala… <xsl:template match="ensiesitys"> <!--kun vastaan tulee elementti "ensiesitys"--> <font face="verdana" size="2"> <b>Ensiesitys: </b><xsl:apply-templates /></font><br/> </xsl:template> <xsl:template match="oscar"> <!--kun vastaan tulee elementti "oscar"--> <p>Oscar saatuna: <i> <xsl:value-of select="." /> </i></p> <hr></hr> </xsl:template> </xsl:stylesheet>

  12. XSLT käy läpi kaikki solmut, ja toimii sen mukaan, millainen elementti juuresta alkaen löytyy XSLT:hen voi liittää tekstiä (filmi) Muotoilut (hr) Ja miltä se näyttää?

  13. Otetaanpa pala kerrallaan. • XML-fileeseen tulee kirjata, mitä xsl-tyylitiedostoa käytetään. <?xml:stylesheet type="text/xsl" href=”filmi.xsl"?> • XSL-fileeseen tulee kirjata, mikä on namespace, alla uusin: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> • Jos lausekkeessa ei käytetä etuliitettä xsl:, parseri lataa sen tekstinä tulosteeseen • Näin käy HTML-datalle XSL:n sisällä.

  14. Sitten alkaa prosessointi <xsl:template match=" ... "> • Prosessointi alkaa XPath-lausekkeella joka valitsee sen XML-elementin, jota käsitellään. • Useimmiten valitaan solmu käyttäen operaattoria match • Jos valitaan koko dokumentti, valitaan juurisolmu sanomalla match="/" • Toinen mahdollisuus on valita dokumenttielementti match=”filmikirjasto"

  15. Tässä luodaan ensin taulukko ja sitten lähdetään silmukkarakenteeseen <table> <xsl:for-each select=”filmikirjasto/filmi”> <tr><td>   <xsl:value-of select=”nimi" /> </td> jne… </tr> </xsl:for-each> </tr></table> Jokaiselle elementille omansa Entäs jos halutaan tehdä taulukko?

  16. Valmis XSLT, osa 1 <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <HTML> <BODY> <TABLE BORDER="2"> <TR> <TD>Nimi</TD> <TD>Ohjaaja</TD> <TD>Kirjoittaja</TD> <TD>Kirjoittaja</TD> <TD>Ensi-ilta</TD> <TD>Oscar</TD> </TR> <xsl:for-each select=”filmikirjasto/filmi"> <TR> <TD> <xsl:value-of select=”nimi" /> </TD> <TD> <xsl:value-of select=”ohjaaja" /> </TD>

  17. Valmis XSLT, osa 2 <TD> <xsl:value-of select=”kirjoittaja" /> </TD> <TD> <xsl:value-of select="kirjoittaja" /> </TD> <TD> <xsl:value-of select=”ensi-ilta" /> </TD> <TD> <xsl:value-of select=”oscar" /> </TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template> </xsl:stylesheet>

  18. Hugo Bernier’s XSLT • Here are some tricks for trying to solve XML Transformation issues: • Start your XML file with <?xml-stylesheet type="text/xsl“ href="yourxslfilehere" ?> • You can then double-click on your XML file and view it in your browser. If the transformation works, you'll see HTML.

  19. Hugo Bernier’s XSLT 2 • Start from the root: When I design XSL files, I always start with the root node (/) and work down the tree. In other words, I'll start with: <xsl:template match="/"> It works! </xsl:template> • then, I change the template's match parameter to get to the node I want... <xsl:template match="/blog"> It still works! </xsl:template> • ...and continue doing so until I get the results I want. Doing so will not only avoid you lots of headaches, but could result in significant performance improvements.

  20. Hugo Bernier’s XSLT 3 • Add HTML: to get the pretty results I want • Add Code: now that I got the XSLT I want, producing the output I want, I'll add the code to display it (in your case, the ASP file). • By using the browser's ability to display XML/XSL Tranformations, I can produce fancy XSL without needing a fancy development tool.

  21. Hugo Bernier’s XSLT 4 • Add Parameters: one last bit I'll do is add XSL parameters. • For example, you could use one XSLT file with a language parameter, and use an xsl:choose statement to display the right results... • I'll also create XSLT Extensions, which are bits of compiled code (e.g. C#) that get passed as parameters to the XSLT document. • For example, you could have an XSLT Extension that formats dates, or calculate the answer to life, the universe, and everything.

  22. XPathin perusteet • XPath on se systeemi, joka sallii XML-puussa kiipeilyn. • XPath ja XSLT ovat molemmat W3C:n luomia standardeja, mutta käytännössä on vaikea erottaa niitä toisistaan • Periaatteessa XPath vie jonnekin ja siellä perillä XSLT tekee jotakin. • Käsite ’konteksti’ tarkoittaa sitä solmua tai elementtiä XML-puussa, jota käsitellään • Konteksti xsl:template match=”/” on siis juurielementin käsittelyä varten

  23. XPathia lisää • Sijaintipolulla tarkoitetaan XML-elementin kontekstia XML-puussa • Aloitetaan juuren kontekstista ”/” • Sijaintipolun voi koodata joko lyhennettynä tai lyhentämättömänä • Lyhennetty on helpompi ja yleisempi.

  24. XPath 3 • Jos esimerkissä lisätään uusia tasoja xml-rakenteeseen, esim. <filmikirjasto> <ulkomaalaiset> <filmi>…</filmi> • Esimerkin for-each, filmikirjasto/filmi lakkaa toimimasta. • Lyhentämätön sijaintipolku olisi <xsl:for-each select="child::filmikirjasto/descendant::filmi"> • Lyhennetty on <xsl:for-each select=”filmikirjasto//filmi”>

  25. Kertaukseksi siis polusta: • ”element” valitsee kaikki kontekstisolmun lapset, jotka kuuluvat elementtiin ”element” • ”/” valitsee juurisolmun kontekstin • ”/filmi” valitsee juurisolmun lapsen ”filmi” • ”filmikirjasto/filmi” valitsee kaikki filmikirjasto-elementin filmi-lapset • ”//filmi” valitsee filmi-elementin, oli se sitten kuinka syvällä xml:n rakenteessa tahansa • ”Filmikirjasto//filmi” valitsee filmi-elementit, riippumatta siitä, montako tasoa on filmikirjasto- ja filmi-elemettien välissä.

  26. Axis ja Predicate • Axis on luettelo solmuista kontekstin varrella • Predicate on axisin määre, jolla voi valita solmuja jonkin arvon perusteella

  27. Node-set • Node-sets eli solmujoukot saadaan kyselyistä filmi[kirjoittaja=”Mika Waltari" and kirjoittaja=”Bo Carpelan"]

  28. … lisää … • Count-funktio laskee solmujoukon ehdot täyttävien solmujen määrän, eli alla niiden filmien määrän, joilla elementti oscar on tosi <xsl:template match=”/”> <xsl:value-of select="count(filmikirjasto/filmi[oscar=true])"/> </xsl:template> • Jos tässä konteksti on filmikirjasto, voidaan sanoa <xsl:value-of select="count(filmi[oscar=true])"/>

  29. Position • Position palauttaa solmun paikan suhteessa kontekstiin • Kätevä esim. jos on lisättävä solmu tiettyyn kohtaan elementissä tai varmistettava onko kontekstin solmu ylemmän tason elementin viimeinen solmu (eli onko position() sama kuin last() <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    <xsl:template match="/">          <xsl:for-each select=”filmikirjasto/filmi">             <p><xsl:number value="position()"/>. <xsl:value-of select="name"/></p>          </xsl:for-each>    </xsl:template></xsl:stylesheet> • tuottaa • Blues Brothers • Blues Brothers 2000 • Sinuhe Epyktiläinen

  30. Position • Position palauttaa solmun paikan suhteessa kontekstiin • Kätevä esim. jos on lisättävä solmu tiettyyn kohtaan elementissä tai varmistettava onko kontekstin solmu ylemmän tason elementin viimeinen solmu (eli onko position() sama kuin last() <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    <xsl:template match="/">          <xsl:for-each select=”filmikirjasto/filmi">             <p><xsl:number value="position()"/>. <xsl:value-of select="name"/></p>          </xsl:for-each>    </xsl:template></xsl:stylesheet> • tuottaa • Blues Brothers • Blues Brothers 2000 • Sinuhe Epyktiläinen

  31. Substring • Substring palauttaa halutun määrän merkkejä elementistä <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">    <xsl:template match="/">        <xsl:for-each select=”filmikirjasto/filmi">        <p><xsl:number value="substring(name, 1, 7)"/></p>        </xsl:for-each>    </xsl:template></xsl:stylesheet> • tuottaa Blues B Blues B Sinuhe • XPath-funktioita on vaikka kuinka paljon lisää.

  32. XSLT: value-of • xsl:value-oftuottaa elementin arvon muunnoksen tulostettavaan muotoon • xsl:apply-templatestulostaa myös tekstiä, mutta se tutkii myös kontekstin node-setin jos ei erikseen kielletä niin tekemästä • xsl: value-oftuottaa vain kyseisen elementin arvon tulostuksen. • Tekstiä voidaan myös tehdä :  - kirjoittamalla tekstiä tyylisivulle:<p> tämä on tekstiä </p>  - <xsl:copy>  - <xsl:copy-of>

  33. XSLT: for-each <xsl:for-each select=“filmikirjasto/filmi"> <TR> <TD><xsl:value-of select=“nimi"/></TD> <TD><xsl:value-of select=“ohjaaja"/></TD> <TD><xsl:value-of select=“kirjoittaja"/></TD> <TD><xsl:value-of select=“kesto"/></TD> <TD><xsl:value-of select=“oscar"/></TD> </TR> </xsl:for-each> • Lykkää taulukkoon omiin soluihinsa kaikki tiedot • Taulukon avaus ja sulkeminen tehdään juurisolmun apply-templatessa

  34. XML ja CSS <?xml stylesheet type=”text/css” hrf=”filmi.css”?> • liittää XML-tiedostoon CSS-tiedoston FILMI { font-family:sans-serif;} NIMI { display:block; Font-size:2em; Text-align:center} OHJAAJA{ Display:block; Font-size:1.1em; Padding:0.5em; Text-align;center; } jne • Tuottaa aivan normaalin HTML CSS-tyylin mukaiset esitykset

  35. Backup

  36. XSLT: value-of=”.” • xsl:value-of=”.” tuottaa kontekstin elementin sisällön. • Jos elementillä on lapsia, ne tulostetaan myös <xsl:template match=”filmi"> <p>   <xsl:value-of select="." /> </p> </xsl:template> • tuottaa kaikki tekstiarvot peräkkäin.

More Related