V některých případech potřebujeme pomocí stylu generovat elementy, které patří do jmenného prostoru, který koliduje se jmenným prostorem používaným při transformaci. Typickým případem je styl, který na základě XML dokumentu generuje jiný styl. XSLT procesor přitom všechny elementy z jmenného prostoru pro XSLT zpracovává, jak je tedy dostat na výstup?
My si v rámci stylu můžeme vytvořit alias mezi prefixy jmenných prostorů. Ve výstupním dokumentu se použije prefix stejný jako ve stylu, ale URI identifikátor se správně zamění. Vše nám osvětlí jednoduchá ukázka.
Dejme tomu, že chceme vytvořit jednoduchý jazyk pro definování transformací z jednoho XML do druhého. Budou se přitom mapovat jen elementy jednoho jména na nějaké jiné. Předpis transformace bude zachycen v jednoduchém souboru.
Příklad 4.12. Soubor s definicí jednoduché transformace –
remap.xml
<remap> <rule from="clanek" to="html"/> <rule from="nazev" to="h1"/> <rule from="autor" to="h2"/> <rule from="para" to="p"/> <rule from="perex" to="p"/> </remap>
My vytvoříme jednoduchý styl, který vygeneruje další styl s řadou jednoduchých šablon, které přemapují jednotlivé elementy.
Příklad 4.13. Použití aliasů jmenných prostorů – remap2xsl.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xslo="http://www.w3.org/1999/XSL/TransformAlias" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:namespace-alias stylesheet-prefix="xslo" result-prefix="xsl"/> <xsl:template match="/"> <xslo:stylesheet version="1.0"> <xsl:for-each select="//rule"> <xslo:template match="{@from}"> <xslo:element name="{@to}"> <xslo:apply-templates/> </xslo:element> </xslo:template> </xsl:for-each> </xslo:stylesheet> </xsl:template> </xsl:stylesheet>
Tento styl pro náš vstupní dokument vygeneruje následující výstup (který je platným XSL stylem):
<?xml version="1.0" encoding="utf-8"?> <xslo:stylesheet version="1.0" xmlns:xslo="http://www.w3.org/1999/XSL/Transform"> <xslo:template match="clanek"> <xslo:element name="html"> <xslo:apply-templates/> </xslo:element> </xslo:template> <xslo:template match="nazev"> <xslo:element name="h1"> <xslo:apply-templates/> </xslo:element> </xslo:template> <xslo:template match="autor"> <xslo:element name="h2"> <xslo:apply-templates/> </xslo:element> </xslo:template> <xslo:template match="para"> <xslo:element name="p"> <xslo:apply-templates/> </xslo:element> </xslo:template> <xslo:template match="perex"> <xslo:element name="p"> <xslo:apply-templates/> </xslo:element> </xslo:template> </xslo:stylesheet>
Všimněte si, že URL adresa s identifikací jmenného prostoru je už správná.