**XSLT** (lyhenne sanoista *Extensible Stylesheet Language Transformations*) 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, *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 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:

```
<?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"/>
    
   <!-- XHTML-dokumentin ylätunniste --> 
   <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>
    
   <!-- taulukko -->
   <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>

   <!-- henkilörivit -->
   <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:

```
<?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:

* **<xsl:template>**
	+ Käytetään mallineiden luomiseen
* **<xsl:value-of>**
	+ Käytetään tietojen noutamiseen xml-tagista
* **<xsl:for-each>**
	+ Käytetään tietojen läpikäymiseen moniulotteisessa xml-datataulukossa
* **<xsl:sort>**
	+ Käytetään lajittelemaan moniulotteisen xml-datataulukon tietoja
* **<xsl:if>**
	+ Käytetään toteuttamaan tietyn ehdon täyttävä kohde
* **<xsl:choose>** ja **<xsl:otherwise>**
	+ 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 (englanniksi)
* XSLT opetusohjelma (saksaksi)
* XSLT 2.0 viittaus (saksaksi)
* XSLT ja XPath viite (Arkistoitu – Internet Archive) (saksaksi)