XML perustaiset teknologiat

| KOTISIVU | KURSSIKUVAUS | OHJELMA JA HARJOITUKSET |

Lataa itsellesi pikaohje XSLT:n ja XPathin syntaksista.

Harjoitus 5a: XSLT -perusteet: muunnosesimerkkejä

Esimerkki 1: Tee itse seuraavat kaksi tiedostoa, joihin sijoitat omaa dataa. Katsele tulosta IE:lla tai Firefoxilla (tai Operalla, Chromella ei ole xslt-prosessoria). Muista tarkistaa, ettei tiedostossasi ole kirjoitusvirheitä, väärinpäin meneviä heittomerkkejä tms.

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="message.xsl"?>

<viesti tyyppi="lopullinen">
<tervehdys>So long and thanks for all the fish!</tervehdys>
</viesti>

Yllä siis pieni XML-tiedosto ja alla sen muunnosohjelma.

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>

<xsl:template match="/">

<html>
<xsl:apply-templates/>
</html>

</xsl:template>

<xsl:template match="viesti">

<head><title>
<xsl:value-of select="@tyyppi"/>
viesti
</title></head>
<body><p><xsl:value-of select="."/></p></body>

</xsl:template>

</xsl:stylesheet>

Tyylitiedoston nimiavaruus on valittu niin, että uusi selain osaa näyttää muunnoksen, joten se siis tapahtuu asiakaskoneella.

XML dokumentti-ilmentymä, esimerkki 2

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="tiny.xsl"?>

<tiny>
    <line>
        Tässä tulostuu lyhyt rivi
     </line>
 </tiny>

Transformaatio: tiny.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="line">
    <html>
       <head><title>
           pikkuinen esimerkki apply-templates käytöstä
       </title></head>
    <body>
        <xsl:apply-templates/>
     </body></html>
   </xsl:template>
 </xsl:stylesheet>

Sama esimerkki edelleen kehitettynä on tiedostoissa: tiny2.xml and tiny2.xsl.

Esimerkki 3: XML dokumentti-ilmentymä: animals.xml

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="animals.xsl"?>

<creatures>
    <animal>
        <name>Penny</name>
        <species>kissa</species>
        <picture>penny.jpg</picture>
    </animal>
<animal>
        <name>Mette</name>
        <species>koira</species>
        <picture>mette.jpg</picture>
    </animal>
</creatures>

Transformaatio: animals.xsl

<?xml version="1.0" ?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
    <html>
       <head><title>Animals  - for-each</title></head>
    <body><table border="1">
    <xsl:for-each select="creatures/animal">
    <tr><td><xsl:value-of select="name"/></td>
        <td><xsl:value-of select="species"/></td>
        <td><xsl:value-of select="picture"/></td></tr>
</xsl:for-each>
</table></body></html>
</xsl:template>
</xsl:stylesheet>

Harjoitus 5b-c: lisää XSLT -muunnosesimerkkejä, XT muunnin

9b Luennolla esiteltiin myös kirjasta "Beginning XML" otettu esimerkki XSLT-tyylitiedostosta,  joka muuntaa yhden yrityksen tietokantamallin mukaisen tuotetiedoston toisen yrityksen järjestelmän ymmärtämään muotoon. Tuotetiedosto on nimeltään CompanyA.xml, ja muunnoksen suorittava tiedosto order.xsl.

Linuxissa on asennettuna muunnosohjelma xsltproc, jota voi suoraan ajaa edunix.metropolia.fi -koneella. Tiedostot mainitaan seuraavassa järjestyksessä

$xsltproc -o CompanyB.xml order.xsl CompanyA.xml

Voit kokeilla muunnosta myös Microsoftin muunnosohjelmalla msxsl.exe, joka löytyy tämän ohjeen kanssa saman hakemiston alihakemistosta aineisto. Kopioi se omalle levyllesi sellaiseen hakemistoon, jonka nimi on helppo kirjoittaa komentotulkkiin. Tutki ensin tiedostoja ja aja sitten ohjelma komentoikkunassa (em. hakemistossa) kirjoittamalla komentoriville

D:\temp\msxsl   CompanyA.xml order.xsl

Muunnostiedosto tulee tulokseksi. Jotta muunnostiedosto tallentuisi, aja uudelleen:

D:\temp\msxsl   CompanyA.xml order.xsl -o CompanyB.xml

ja tutki tulostiedostoa.

Jos asetat parametrin -v käskyn loppuun, se vaihtaa arvon validateOnParse asentoon True, jolloin dokumentti myös validoidaan siinä olevaan DTD- tai schema -viittaukseen nähden.

Muita prosessoreita:

Saxon, asennusohje ja käyttö. Tätä käytetään myös XQuery muunnoksissa, joten jos toimit omalla läppärillä, kannattaa se ottaa käyttöön nyt.

Toinen vaihtoehtoinen muunnosohjelma on xt, jonka uusia versioita löytyy netistä osoitteesta http://www.blnz.com/xt/.

5c Oheisesta muumitiedostosta voit tehdä vaikkapa yksinkertaisen salakirjoitustoteutuksen, jonka muunnosperiaate löytyy luentokalvoista. Ohessa muutetaan isot kirjaimet pieniksi, tee muunnoksesta erilainen. Tee XML-tiedosto, ja sille muunnokset, jotka salakirjoittavat ja purkavat salatun tekstin. Tarvitset tähän xt- tai msxml-ohjelman.

<?xml version="1.0" encoding="UTF-8"?>
<perhe>
<jäsen>Mamma</jäsen>
<jäsen>Pappa</jäsen>
<jäsen>Muumi</jäsen>
</perhe>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/perhe">
<SUKU>
<xsl:apply-templates/>
</SUKU>
</xsl:template>
<xsl:template match="jäsen">
<OLENTO>
<xsl:value-of select="translate(current(),
'abcdefghijklmnopqrstuvwxyzåäö',
'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ')"/>
</OLENTO>
</xsl:template>
</xsl:stylesheet>

Muita esimerkkejä (opiskelu vapaaehtoista mutta erittäin suotavaa):
Jos haluat vielä käydä läpi muunnoksen tekemisen askel askeleelta, tutustu Roger Costellon (PowerPoint-)oppaisiin:

XML to HTML

XML to XML

XML to text

Harjoitus 5 d- f: XSLT -muunnokset, yritä itse

Nyt voit lähteä yrittämään omien muunnosten tekemistä käyttäen annettuja esimerkkejä pohjana. Valitse vähintään 2 tehtävää alla olevista.

5d Lajittelu: tee muunnos, joka lajittelee XML-tiedoston elementit aakkosjärjestykseen. Valitse käsittelyyn jokin suhteellisen yksinkertainen XML-tiedosto. Käytettävä käsky on muotoa:
<xsl:sort select="." data-type="text" order="ascending"/>

eli ohjelmanpätkä näyttää seuraavanlaiselta:
<xsl:template match="//elementit">
<ul>
<xsl:for-each select="elementti"
<xsl:sort select="." data-type="text" order="ascending"/>
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
</xsl:template>

5 e  Voit myös koostaa yhden tulosdokumentin joukosta XML-tiedostoja. Alla on käytetty muumitiedostoa ensisijaisena lähdedokumenttina. Käytä tätä esimerkkiä hyväksesi ja muokkaa siitä oma versio.

<?xml version="1.0"
<perhe>
<jäsen varusteet="mamman.xml">Mamma</jäsen>
<jäsen varusteet="papan.xml">Pappa</jäsen>
<jäsen>Muumi</jäsen>
</perhe>

ja mamman.xml voisi sisältää vaikkapa
<varusteet>
käsilaukku
</varusteet>

Muunnos voisi näyttää seuraanlaiselta:

<?xml version="1.0” ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" />

<xsl:template match=”jäsen">
<suku>
<olento>
<xsl:value-of select=”.”/>
</olento>
<xsl:if test="@varusteet">
<xsl:apply-templates select="document(@varusteet)"/>
</xsl:if>
</suku>
</xsl:template>

<xsl:template match=”varusteet">
<varusteet>
<xsl:value-of select=”.”/>
</varusteet>
</xsl:template>

</xsl:stylesheet>

Tiedosto ei aukea selaimessa! Korjaa koodia niin, että siitä tulee hyvinmuodostettu XML dokumentti tulokseksi.

5f.    Tee XSLT-tyylitiedosto joka muuntaa tiedoston catalog.xml HTML-kieliseksi. Käytä XML-tietoista selainta tuloksesi tarkistamiseen. Huom: tämä on melko vaikea tehtävä.

| KOTISIVU | KURSSIKUVAUS | OHJELMA JA HARJOITUKSET |
Päivittänyt: Jaana Holvikivi
Muutettu 15.4.2015