Article Index

Extensible Markup Language - XSL

Je stylovací a transformační prostředek pro značkovací jazyky, primárně pro XML. Rozděluje se na dva hlavní jazyky:

  • XSLT - transformace
  • XSL:FO - formátovací objekty

Začněme s XLST. Hlavní funkcí je transformace jednoho datového souboru na druhý. Příkladem je převod XML souboru na HTML výstup. XSL umožňuje nejenom převádět, ale také vybírat to, co chceme zobrazit.

XSL využívá XPath adresování částí XML dokumentu. Pomocí XPath lze vybírat jednotlivé elementy nebo atributy a určovat, na kterou značku či atribut budou transformovány. XSLT využívá namespace "xsl:".

Ukázkové XML:

<mereni id="001">
  <datum>2017-02-01</datum>
 
<teplota>-3.6</teplota>
</mereni>

Prostřednictvím XSL můžeme z tohoto datového souboru udělat přehledný výstup do HTML tabulky:

ID Datum Teplota
001 2017-02-01 -3.6

Šablony

Základní součástí XSLT jsou šablony - každá šablona definuje reakci (transformaci) na určitou značku či element. Případně šablonu reagující na celý dokument. Ta je právě základem pro výše uvedný příklad - XML -> HTML.

Šablona pro reakci na element teplota vypadá následovně:

<xsl:template match="teplota">
  <!-- zápis transformace daného prvku (značka, atribut) -->
</xsl:template>

Takže jak vypadá XSLT pro výše uvedený příklad?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs"
                version="2.0">
<!-- hlavička -->

<!-- Zde si můžeme připravit parametry - dílčí hodnoty budou zadávány na jednom místě. -->


<!-- Definujeme parametr pojmenovaný bgcolor s hodnotou lightgreen. -->

<xsl:param name="bgcolor" select="lightgreen" />

<!-- šablona pro celý dokument - obsahuje osnovu HTML + pevnou hlavičku tabulky - první řádek -->
<xsl:template match="/">
    <html>
        <head>
            <title>Měření teploty</title>
            <meta charset="UTF-8" />
        </head>
        <body>
            <h1>Měření teploty</h1>
            <table border="1">
              
<tr>
<!-- Pro použití barvy z parametru bgcolor jej zde aplikujeme. -->
                <td bgcolor="{$bgcolor}">ID</td>
                <td bgcolor="{$bgcolor}">Datum</td>
                <td bgcolor="{$bgcolor}">Teplota</td>

              </tr>           
<!-- Sem se aplikují všechny šablony pod touto. -->
              <xsl:apply-templates/>
            </table>            
        </body>        
    </html>   
</xsl:template>


<!-- pro kontakt uděláme cyklus, který vypíše řádek tabulky HTML - atribut, jmeno, prijmeni -->
<xsl:template match="mereni">

    <xsl:for-each select=".">
    <tr>
        <td>
            <xsl:value-of select="./@"/>
        </td>

        <td>
            <xsl:value-of select="datum"/>
        </td>

        <td>
            <xsl:value-of select="teplota"/>
        </td>
    </tr>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Takže jak na to celé? Pojďme postupně, kdo chce komplení přehled najde ho zde: W3C recommendation - XSLT2.0.