XSLT a jmenné prostory Doplňková prezentace Roman Malo
XSLT a jmenné prostory Při využití XSLT nad XML s jmennými prostory je potřeba jednotlivé názvy uzlů (elementy a atributy) uvádět včetně prefixu Prefix musí být asociován se stejným identifikátorem Při použití implicitních jmenných prostorů v XML je nutné v rámci XSLT specifikovat prefix XML aplikace 2
XML bez jmenných prostorů <osoba id="1446"> <titul>ing.</titul> <jmeno>roman</jmeno> <prijmeni>malo</prijmeni> <titul>ph.d.</titul> <ulice>zemědělská</ulice> <cp>1</cp> <mesto>brno</mesto> <psc>61300</psc> <stat>česká republika</stat> XML aplikace 3
XSLT pro XML bez jmenných prostorů <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output indent="yes" method="xml" encoding="windows-1250" /> <xsl:template match="osoba"> <xsl:variable name="jmeno"> <xsl:value-of select="jmeno"/> <xsl:variable name="prijmeni"> <xsl:value-of select="prijmeni"/> <osoba jmeno="{$jmeno}" prijmeni="{$prijmeni}" cislo="{@id}"> <xsl:for-each select="adresa/*"> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> XML aplikace 4
XML s jmennými prostory <o:osoba id="1446" xmlns:o="urn:osoba" > <o:titul>ing.</o:titul> <o:jmeno>roman</o:jmeno> <o:prijmeni>malo</o:prijmeni> <o:titul>ph.d.</o:titul> <ulice>zemědělská</ulice> <cp>1</cp> <mesto>brno</mesto> <psc>61300</psc> <stat>česká republika</stat> </o:osoba> XML aplikace 5
XSLT pro XML s jmennými prostory <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:o="urn:osoba"> <xsl:output indent="yes" method="xml" encoding="windows-1250" /> <xsl:template match="o:osoba"> <xsl:variable name="jmeno"> <xsl:value-of select="o:jmeno"/> <xsl:variable name="prijmeni"> <xsl:value-of select="o:prijmeni"/> <osoba jmeno="{$jmeno}" prijmeni="{$prijmeni}" cislo="{@id}"> <xsl:for-each select="adresa/*"> <xsl:value-of select="."/><xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> XML aplikace 6
XML s jmennými prostory (defaultní) <o:osoba id="1446" xmlns:o="urn:osoba" > <o:titul>ing.</o:titul> <o:jmeno>roman</o:jmeno> <o:prijmeni>malo</o:prijmeni> <o:titul>ph.d.</o:titul> <adresa xmlns="urn:adresa" > <ulice>zemědělská</ulice> <cp>1</cp> <mesto>brno</mesto> <psc>61300</psc> <stat>česká republika</stat> </o:osoba> XML aplikace 7
XSLT pro XML s jmennými prostory (defaultní) <xsl:stylesheet version="1.0 xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:o="urn:osoba" xmlns:a="urn:adresa" > <xsl:output indent="yes" method="xml" encoding="windows-1250" /> <xsl:template match="o:osoba"> <xsl:variable name="jmeno"> <xsl:value-of select="o:jmeno"/> <xsl:variable name="prijmeni"> <xsl:value-of select="o:prijmeni"/> <osoba jmeno="{$jmeno}" prijmeni="{$prijmeni}" cislo="{@id}"> <xsl:for-each select="a:adresa/*"> <xsl:value-of select="."/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> XML aplikace 8
XML s jmennými prostory (defaultní, atribut) <o:osoba i:id="1446" xmlns:o="urn:osoba" xmlns:i="urn:identifikace" > <o:titul>ing.</o:titul> <o:jmeno>roman</o:jmeno> <o:prijmeni>malo</o:prijmeni> <o:titul>ph.d.</o:titul> <adresa xmlns="urn:adresa" > <ulice>zemědělská</ulice> <cp>1</cp> <mesto>brno</mesto> <psc>61300</psc> <stat>česká republika</stat> </o:osoba> XML aplikace 9
XSLT pro XML s jmennými prostory (defaultní, atribut) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:o="urn:osoba" xmlns:a="urn:adresa" xmlns:i="urn:identifikace"> <xsl:output indent="yes" method="xml" encoding="windows-1250" /> <xsl:template match="o:osoba"> <xsl:variable name="jmeno"> <xsl:value-of select="o:jmeno"/> <xsl:variable name="prijmeni"> <xsl:value-of select="o:prijmeni"/> <osoba jmeno="{$jmeno}" prijmeni="{$prijmeni}" cislo="{@i:id}"> <xsl:for-each select="a:adresa/*"> <xsl:value-of select="."/><xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> XML aplikace 10
Výsledek transformace zákaz vložení jmenných prostorů <osoba jmeno="roman" prijmeni="malo" cislo="1446" xmlns:a="urn:adresa" xmlns:o="urn:osoba" xmlns:i="urn:identifikace"> Zemědělská 1 Brno 61300 Česká republika Použité jmenné prostory se nám defaultně vkládají do výstupního XML (HTML) Zakázat vkládání lze atributem exclude-resultprefixes, jehož hodnotou jsou prefixy, které nechceme uvést ve výstupu (oddělené mezerou) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:o="urn:osoba" xmlns:i="urn:identifikace" xmlns:a="urn:adresa" exclude-resultprefixes="a i o"> XML aplikace 11