XML

XML KOULUTUSTA VUONNA 2025

Kysy myös tuotekohtaisia koulutuksia, kuten Altova XMLSpy. Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.

XSL ja XSLT: XML:n muuntaminen ja esittäminen

XSLT (Extensible Stylesheet Language Transformations) on XML-pohjainen ohjelmointikieli, jota käytetään XML-muotoisen datan muuntamiseen muihin formaatteihin. Tässä artikkelissa tarkastelemme miten XSL ja XSLT mahdollistavat XML-datan muuntamisen HTML-muotoon. Tutustumme myös XSLT-muunnosten syntaksiin ja toteutamme käytännön esimerkin, joka voidaan suorittaa selaimessa.

XSL vs XSLT – mitä eroa niillä on?

XSL (Extensible Stylesheet Language) on kokoelma teknologioita, joita käytetään XML-datan muuntamiseen, esittämiseen ja hakemiseen. Se muodostuu kolmesta osasta: XSLT vastaa muunnoksista toisiin formaatteihin, kuten HTML- tai PDF-dokumenteiksi, XSL-FO keskittyy ulkoasun ja tyylien määrittelyyn, ja XPath tarjoaa tavan navigoida XML-rakenteessa ja poimia siitä tietoa.

XSLT (Extensible Stylesheet Language Transformations) on ehkä tunnetuin osa XSL-kokonaisuutta. Sen avulla voidaan muuntaa XML-data haluttuun muotoon sekä selaimessa että palvelinympäristössä. Sitä käytetään esimerkiksi, kun halutaan esittää XML-dokumentti verkkosivulla HTML-muodossa.

Vaikka termejä XSL ja XSLT käytetään usein toistensa synonyymeina, XSLT on vain yksi osa XSL:ää. XSL on laajempi määrittelykokonaisuus, johon sisältyvät myös dokumenttien ulkoasun hallinta ja hakutoiminnot.

XSLT:stä on julkaistu useita versioita, joista ensimmäinen sukupolvi on edelleen ainoa, jota selaimet tukevat natiivisti. Uudemmat versiot, kuten 2.0 ja 3.0, tarjoavat huomattavasti monipuolisempia ominaisuuksia, mutta niiden käyttö edellyttää palvelinpuolen ratkaisuja tai ohjelmointirajapintoja.

Miksi käyttää XSLT-muunnosta CSS:n sijaan?

Artikkelisarjan edellisessä osassa tarkastelimme, kuinka XML-muotoinen data voidaan esittää selaimessa CSS:n avulla. Vaikka CSS mahdollistaa XML-datan visuaalisen muotoilun, data säilyy edelleen XML-muodossa. Tämä rajoittaa mahdollisuuksia muokata itse dataa.

XSLT sen sijaan tarjoaa keinoja muuttaa myös datan rakennetta. Sen avulla voidaan suodattaa, järjestää ja yhdistellä tietoa sekä muuntaa XML kokonaan toiseen formaattiin, esimerkiksi HTML- tai PDF-dokumentiksi. Tämän joustavuuden ansiosta XSLT on huomattavasti monipuolisempi ratkaisu kuin pelkkä CSS, joka keskittyy ainoastaan ulkoasun hallintaan

Kaavio: Kuinka XSL muunnokset toimivat.

Miten XML-parseri vaikuttaa XSLT-muunnoksen lopputulokseen?

XSL- tai XSLT-muunnosten lopputulos riippuu olennaisesti käytetystä XML-parserista. Jos muunnos tapahtuu selaimessa, käytetty XML-parseri voi vaihdella selaimen ja käyttöjärjestelmän mukaan — eikä kehittäjällä ole suoraa kontrollia siihen, miten muunnos tarkalleen toteutuu. Palvelinpuolen parserin valinta sen sijaan on täysin kehittäjän hallussa, mikä takaa yhtenäisen ja ennakoitavan lopputuloksen kaikille käyttäjille. Tästä syystä tuotantokäytössä onkin suositeltavaa suorittaa XSLT-muunnokset aina palvelinpuolella.

XSL/XSLT-muunnosten perussyntaksi

XSLT on pohjimmiltaan XML-muotoinen tyylitiedosto, jonka avulla määritellään säännöt XML-datan muuntamiseksi toiseen formaattiin. Seuraavissa osioissa esitellään yleisimmät XSLT-rakenteet.

Miten liität XSL-tyylitiedoston XML-dokumenttiin?

XSL-tyylimäärittelyn liittäminen tapahtuu lisäämällä seuraava prosessointikäsky XML-dokumenttin alkuun:


<?xml-stylesheet type="text/xsl" href="tyyli.xsl"?>


Tämä prosessointikäsky antaa XML-parserille käskyn käsitellä ja muuntaa XML-dokumentti linkitetyn XSL-tyylitiedoston mukaisesti.

XSL-tyylitiedoston rakenne

XSL-tyylitiedosto on XML-muotoinen dokumentti, jossa määritellään muunnoslogiikka. Tyylitiedoston juurielementtinä toimii stylesheet-elementti:


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <!-- XSL tiedoston sisältö -->
</xsl:stylesheet> 


Kuinka XPath toimii valitsimena ja kohdentaa tyylin?

XPath (XML Path Language) on kieli, jonka avulla pääset käsiksi XML-dokumentin solmuihin ja attribuutteihin. Xpathin avulla voit navigoida ja liikkua XML:n dokumenttipuussa, ja valita tietyt solmut tai attribuutit niiden sijainnin tai arvon perusteella:

Esimerkiksi XPath-viittaus:


/artikkelidata/dokumentti/kappale[1]

hakee artikkelidata-juuren alta ensimmäisen kappale-elementin, jonka vanhempi (parent) on dokumentti.

XPath sisältää useita DOM- ja CSS-maailmasta tuttuja käsitteitä, kuten akselit (esimerkiksi child::, parent::, descendant::, following-sibling::), joilla navigoidaan solmupuun rakenteessa, sekä funktiot, kuten starts-with(), position() ja last().

Miten käytät xsl:template ja xsl:apply-templates -rakenteita?

xsl:template määrittelee säännön siitä, mitä tehdään, kun tietynlainen XML-solmu kohdataan. Tämä tapahtuu match-attribuutin avulla, joka ottaa arvokseen XPath valitsimen:


<xsl:template match="xPathPolku">
   <!-- halutut toiminnot ja datan esittäminen -->
</xsl:template>
   

Kun malli halutaan sisällyttää (tai ottaa käyttöön) määrätyssä yhteydessä, tapahtuu se kutsulla:

<xsl:apply-templates select ="xPathPolku"/>

Eli xsl:template ja xsl:apply-templates toimivat yhdessä: ensimmäinen määrittelee, jälkimmäinen aktivoi. Erikseen käytettynä kumpikaan ei suorita muunnoksia.

Template-rakenteet sopivat erityisesti XML-dokumentteihin, joissa on selkeästi toistuva hierarkinen rakenne.

Kuinka haet yksittäisiä arvoja xsl:value-of rakenteella?

Jos XML-datan rakenne on epäsäännöllinen, sen prosessointi kannattaa tehdä elementti kerrallaan. Tässä apuna ovat xsl:value-of-rakenne sekä XPath.

xsl:value-of hakee ja tulostaa yhden solmun arvon. Käytännössä se yhdistää muotoilun ja tiedon poiminnan yhdeksi riviksi:

<xsl:value-of select="xPathPolku" /> 


Alla oleva esimerkki hakee juurielementin artikkeli attribuutin pvm arvon:

 <xsl:value-of select="/artikkeli/@pvm"/>  

Esimerkki XSLT-muunnoksesta: Miten muunnat XML-datan HTML-muotoon XSLT:llä?

Vaihe 1. Liitä XSL/XSLT-tyylimäärittely XML-dokumenttiin seuraavalla koodilla:

<?xml-stylesheet type="text/xsl" href="projekti.xsl"?> 

Jos XML-tiedostossa on aiempi linkitys CSS-tyylitiedostoon, se kannattaa poistaa. Jos XML-tiedostossa on jo linkitetty CSS-tyylitiedosto, on suositeltavaa poistaa tämä linkitys. Vanhat tai päällekkäiset tyylit voivat aiheuttaa odottamattomia ongelmia ja vaikeuttaa vianmääritystä.

Vaihe 2. Luo uusi XML-tiedosto ja tallenna se nimellä projekti.xsl


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

<!-- lisätään XHTML DOCTYPE ja PI tulosteeseen -->
<xsl:output version="1.0" omit-xml-declaration="no" method="xml" />

<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
 method="xml" /> 



<!-- juurielementin template -->
<xsl:template match="/">     
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
	<head>
	<!-- noudetaan otsikon arvo suoralla viittauksella 
    otsikko-atribuuttiin -->
	<title><xsl:value-of select="artikkelidata/dokumentti/@otsikko"/></title>
	</head>
    <body>
      <h1>Esimerkki XML/XSL muunnoksesta</h1>
	  <!-- kutsutaan artikkelidata templatea-->
	  <xsl:apply-templates select="//artikkelidata" />
    </body>
  </html>
</xsl:template>
 


<!-- artikkelidatan template --> 
<xsl:template match="artikkelidata">
    <div style="width: 500px;">
	<!-- kutsutaan dokumentti templatea-->
    <xsl:apply-templates select="dokumentti" />
   </div>
</xsl:template>
 
 

<!-- dokumentti template --> 
<xsl:template match="dokumentti">
  <h1><xsl:value-of select="@otsikko"/></h1>
  <em><xsl:value-of select="@kirjoittaja"/> /<xsl:value-of select="@pvm"/>    </em>
<!-- kutsutaan kappale templatea-->
  <xsl:apply-templates select="kappale" />
</xsl:template>


<!-- kappale template --> 
<xsl:template match="kappale">
   <p><xsl:value-of select="." /></p>
</xsl:template>  

</xsl:stylesheet>

Vaihe 3. Muunnoksen esikatseleminen selaimessa.
Kun projektin XML-tiedostoa avataan selaimessa, se toimii kuten tavallinen HTML-sivu. Myös Developer Console näyttää, että sen dokumenttipuu muistuttaa HTML:ää. Selaimen lähdekoodinäkymässä sisältö näkyy edelleen alkuperäisessä XML-muodossa. Tämä johtuu siitä, että muunnos suoritetaan selaimessa vasta sivun latausvaiheessa. XSL-muunnos toimii siis samankaltaisesti kuin JavaScript selaimessa.

Jos muunnos suoritetaan palvelimella lopputulos on 100% HTML-standardin täyttävä sivu lähdekoodia myöten. Tällöin muunnos tehdään palvelimella, ja asiakas vastaanottaa valmiin HTML-muotoisen sivun.