XSLT

**XSLT** () on XML-pohjainen merkintäkieli XML-tiedostojen muunnoksiin. Kielen perusperiaatteisiin kuuluu, että alkuperäistä dokumenttia (tässä tapauksessa XML-dokumenttia) ei muuteta, vaan pikemminkin pinnoitetaan aivan kuten Cascading Style Sheets tekee hypertekstille (HTML- ja XHTML-dokumenteille). XSLT-kuvauskieli ei ota myöskään kantaa ulosantiin, jolloin yhdestä ja samasta XML-dokumentista on mahdollista saada ulos niin HTML-taittoinen, ihmisluettava sivu kuin konekielinen, esimerkiksi CSV-tiedostokin.

World Wide Web Consortium kehitti XSLT:n aikaisemman, *[[XSL|Extensible Stylesheet Languagen]]* seuraajaksi vuosien 1998 ja 1999 aikana. Tuolloin kehitettiin myös XSL Formatting Objects sekä XPath. Nykyisin yleisimmin käytössä on versio 1.0, mutta 3. lokakuuta 2005 W3C myönsi alustavan suosituksen XSLT 2.0:lle.

## XML-dokumentin muuntaminen


```xml
<?xml version="1.0" encoding="iso-8859-1"?>
<henkilot>
   <henkilo id="1234-A">
      <etunimi>Matti</etunimi>
      <sukunimi>Meikäläinen</sukunimi>
   </henkilo>
   <henkilo id="5678-C">
      <etunimi>Maija</etunimi>
      <sukunimi>Meikäläinen</sukunimi>
   </henkilo>
</henkilot>
```


Yllä oleva dokumentti sisältää siis kaksi henkilöä, *Matti Meikäläisen* sekä *Maija Meikäläisen*. Kun mietitään selkokielisempää esitystapaa, voitaisiin dokumentti esittää esimerkiksi HTML-taulukkona XSL-tyylisivun kautta:


```xslt
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns="http://www.w3.org/1999/xhtml">

   <xsl:output method="xml" indent="yes" encoding="iso-8859-1"
       doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
       doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    
    
   <xsl:template match="/">
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
         <head>
            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8951-1" />
            <title>Meikäläiset</title>
         </head>
         <body>
            <xsl:apply-templates/>
         </body>
      </html>
   </xsl:template>
    
   
   <xsl:template match="henkilot">
      <h1>Henkilöt</h1>
      <table>
         <tr>
            <th>id</th>
            <th>Etunimi</th>
            <th>Sukunimi</th>
         </tr>
         <xsl:apply-templates/>
      </table>
   </xsl:template>

   
   <xsl:template match="henkilo">
      <tr>
         <td><xsl:value-of select="@id"/></td>
         <td><xsl:value-of select="etunimi"/></td>
         <td><xsl:value-of select="sukunimi"/></td>
      </tr>
   </xsl:template>
    
</xsl:stylesheet>
```


Toisaalta CSV-tiedoston tuottaminen samasta tiedostosta tapahtuisi taas:


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

   <xsl:output method="text"/> 

   <xsl:template match="/henkilot">
      <xsl:text>"id","Etunimi","Sukunimi"&amp;#10;</xsl:text>
      <xsl:apply-templates select="henkilo"/>
   </xsl:template>

   <xsl:template match="henkilo">
      <xsl:value-of select="concat('&amp;quot;', @id, '&amp;quot;,&amp;quot;',
                    etunimi, '&amp;quot;,&amp;quot;', sukunimi, '&amp;quot;&amp;#10;')"/>
   </xsl:template>
   
</xsl:stylesheet>
```


## XSLT:n ominaisuudet

XSLT sisältää valintalauseissa täydellisen tuen XPath:lle, ja sisältää itsessään seuraavat valitsimet:

* ***'
** Käytetään mallineiden luomiseen
* ***'
** Käytetään tietojen noutamiseen xml-tagista
* ***'
** Käytetään tietojen läpikäymiseen moniulotteisessa xml-datataulukossa
* ***'
** Käytetään lajittelemaan moniulotteisen xml-datataulukon tietoja
* ***'
** Käytetään toteuttamaan tietyn ehdon täyttävä kohde
* ***' ja ****
** Käytetään toteuttamaan moniulotteinen JA-TAI ehtolauseke

Valitsimien lisäksi XSLT:lla on joitakin omia funktioita. Näitä ovat:

* **current()**
* **document()**
* **element-available()**
* **format-number()**
* **function-available()**
* **generate-id()**
* **key()**
* **system-property()**
* **unparsed-entity-uri()**

## Katso myös
* XML
**XPath
**XSL-FO
**XForms

## Aiheesta muualla
* W3Schools lyhyt opastus XSLT:hen 
* XSLT opetusohjelma 
* XSLT 2.0 viittaus 
* XSLT ja XPath viite