14.4 Uživatelsky definované funkce

V XSLT 2.0 si můžeme pomocí nové instrukce <xsl:function> definovat nové funkce, které pak můžeme volat přímo z výrazu XPath. U funkce můžeme pomocí atributu as určit typ její návratové hodnoty. Podobně můžeme typy určit i pro jednotlivé parametry. Můžeme tak XSLT 2.0 používat jako silně typový jazyk, kde se při volání funkce kontrolují typy předávaných hodnot.

Funkce musí být definována v nějakém jmenném prostoru. Návratová hodnota funkce se většinou určuje pomocí instrukce <xsl:sequence>. Tato nová instrukce může vracet libovolnou posloupnost (reflektuje tedy nový datový typ XPathu 2.0) – tato posloupnost může obsahovat jak hodnoty, tak uzly. Není problém mít posloupnost, která má jen jednu hodnotu. Výhodou této instrukce je právě to, že může vracet otypované hodnoty nebo uzly původního dokumentu. Pokud jsme funkce simulovali v XSLT 1.0 pomocí pojmenovaných šablon, výsledkem byl vždy nový fragment výstupního dokumentu.

Příklad 14.7. Definice uživatelských funkcí v XSLT 2.0 – faktorial3.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:muj="http://example.com/muj"
                version="2.0">

<xsl:output method="text"/>

<xsl:param name="cislo" select="5" as="xs:integer"/>

<xsl:template match="/">
  <xsl:value-of select="muj:faktorial($cislo)"/>
  <xsl:text>&#xA;</xsl:text>
</xsl:template>

<xsl:function name="muj:faktorial" as="xs:integer">
  <xsl:param name="n" as="xs:integer"/>
  
  <xsl:choose>
    <xsl:when test="$n > 1">
      <xsl:sequence select="$n * muj:faktorial($n - 1)"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:sequence select="1"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:function>

</xsl:stylesheet>

© Jiří Kosek 2007

Tento dokument je určen výhradně pro osobní potřebu seznámení s jazykem XSLT. Jakékoliv jiné použití, včetně dalšího šíření, pořizování kopií, použití při školeních a výuce apod. je výslovně zakázáno a bude považováno za porušení autorských práv.


Copyright © 2000-2011 Jiří Kosek