Pojmenované šablony plní podobnou funkci jako funkce a procedury
v klasických jazycích. XSLT instrukce, které se často opakují, můžeme
uložit do zvláštní šablony, která se volá svým jménem. Šablona
samozřejmě může používat parametry, jako všechny ostatní šablony.
Pojmenovaná šablona má navíc atribut name
, kterým určujeme název
šablony.
<xsl:template name="název
">tělo šablony
</xsl:template>
K vyvolání šablony slouží instrukce <xsl:call-template>
. Název
odpovídající šablony se opět předává v atributu name
.
Příklad 5.4. Využití pojmenovaných šablon pro modularizaci stylu –
paticka.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <head> <title>Testovací stránka</title> </head> <body> <h1>Testovací stránka</h1> <!-- Volání šablony --> <xsl:call-template name="paticka"/> </body> </html> </xsl:template> <!-- Pojmenovaná šablona, kterou budou volat jiné části stylu --> <xsl:template name="paticka"> <div> <hr/> Copyright (c) 2008 Jehlička a Větvička, s.r.o.<br/> Lesní 13, Borová Lada<br/> e-mail: jehlicka-vetvicka@example.org </div> </xsl:template> </xsl:stylesheet>
Pojmenované šabloně můžeme samozřejmě předávat i parametry. Lze tak vytvářet parametrizovatelné šablony, které nám mohou ušetřit mnoho opakující se práce.
Příklad 5.5. Pojmenované šablony s parametry –
pojmenovana-sablona.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- Pojmenovaná šablona se dvěma parametry --> <xsl:template name="kontakt"> <xsl:param name="jmeno"/> <xsl:param name="email"/> <xsl:value-of select="$jmeno"/> <xsl:if test="$email != ''"> <xsl:text> (e-mail: </xsl:text> <a href="mailto:{$email}"><xsl:value-of select="$email"/></a> <xsl:text>)</xsl:text> </xsl:if> </xsl:template> <xsl:template match="/"> <html> <head> <title>Kontakty</title> </head> <body> <h1>Kontakty na vedení firmy</h1> <p>Ředitel: <xsl:call-template name="kontakt"> <xsl:with-param name="jmeno">Jan Novák</xsl:with-param> <xsl:with-param name="email">novak@example.org</xsl:with-param> </xsl:call-template> </p> <p>Skladník: <xsl:call-template name="kontakt"> <xsl:with-param name="jmeno">Josef Procházka</xsl:with-param> </xsl:call-template> </p> </body> </html> </xsl:template> </xsl:stylesheet>
Poslední příklad pak ukazuje, že pojmenované šablony mohou být použity zcela jako náhrada funkcí z klasických programovacích jazyků a v jazyce XSLT tak lze provádět například i matematické výpočty.
Příklad 5.6. Využití pojmenovaných šablon k výpočtu faktoriálu –
faktorial.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:param name="cislo" select="5"/> <xsl:template match="/"> <xsl:call-template name="fakt"> <xsl:with-param name="n" select="$cislo"/> </xsl:call-template> </xsl:template> <xsl:template name="fakt"> <xsl:param name="n"/> <xsl:variable name="m"> <xsl:if test="$n<=1"> <xsl:text>1</xsl:text> </xsl:if> <xsl:if test="$n>1"> <xsl:call-template name="fakt"> <xsl:with-param name="n" select="$n - 1"/> </xsl:call-template> </xsl:if> </xsl:variable> <xsl:value-of select="$m*$n"/> </xsl:template> </xsl:stylesheet>
Důležitý je zde koncept zachycení výstupu pojmenované šablony do
proměnné. Návratová hodnota pojmenované šablony se generuje pomocí
instrukcí jako je <xsl:value-of>
, které generují
přímo výstup skriptu. Pokud však volání pojmenované šablony umístíme
dovnitř instrukce <xsl:variable>
, nezapíše se
výsledek pojmenované šablony přímo na výstup, ale uloží se do proměnné
a my s ním můžeme dál pracovat.
U pojmenované šablony můžeme použít i atribut match
. Šablona pak může být použita oběma
způsoby – buď je vyvolána procesorem pro obsluhu určité části
dokumentu, nebo je přímo zavolána pomocí <xsl:call-template>
.