Ty nejdůležitější XSLT instrukce pro generování stromu výstupního dokumentu jsme již probrali. K dispozici máme navíc několik instrukcí a parametrů, které ovlivňují způsob, jakým se vygenerovaný strom dokumentu zapíše do souboru.
U tohoto elementu musíme vždy použít atributy version
a xmlns:xsl
, které označují verzi XSLT a
jednoznačně spojí prefix xsl
se
jmenným prostorem pro XSLT. Pokud chceme použít jiný prefix než
xsl
, stačí změnit jméno prefixu
v deklaraci jmenného prostoru.
Synonymem k <xsl:stylesheet>
je instrukce <xsl:transform>
.
Stylu můžeme přiřadit jednoznačný identifikátor pomocí atributu
id
. To se hodí v případech,
kdy máme v jednom souboru více stylů, nebo je styl obsažen ve
stejném souboru jako dokument. V instrukci pro připojení stylu
nebo jako parametr XSLT procesoru pak za URL adresu stylu uvedeme
#id
, a tím určíme, který styl
se má použít. Ve stylu musíme rovněž atribut id
definovat tak, aby jeho typ byl ID. Ne
všechny XSLT procesory však tuto vlastnost podporují.
Příklad 4.1. Styl obsažený přímo v dokumentu XML –
self.xml
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="#style" type="text/xsl"?> <!DOCTYPE katalog [ <!ATTLIST xsl:stylesheet id ID #REQUIRED> ]> <katalog> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" id="style"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="xsl:stylesheet"/> <xsl:template match="/"> <HTML> <HEAD> <TITLE>Katalog <xsl:value-of select="katalog/info/firma"/></TITLE> </HEAD> <BODY> <H1>Katalog <xsl:value-of select="katalog/info/firma"/></H1> <TABLE WIDTH="100%" BORDER="1"> <xsl:apply-templates select="//polozka"/> </TABLE> <xsl:apply-templates select="//polozka" mode="detailni"/> </BODY> </HTML> </xsl:template> <xsl:template match="polozka"> <TR> <xsl:apply-templates select="nazev|kategorie|cena"/> </TR> </xsl:template> <xsl:template match="nazev"> <TH><xsl:apply-templates/></TH> </xsl:template> <xsl:template match="kategorie"> <TD align="right"><xsl:apply-templates/></TD> </xsl:template> <xsl:template match="cena"> <TD align="right"><xsl:apply-templates/> Kč</TD> </xsl:template> <xsl:template match="polozka" mode="detailni"> <xsl:apply-templates mode="detailni"/> <HR/> </xsl:template> <xsl:template match="nazev" mode="detailni"> <H2><xsl:apply-templates mode="detailni"/></H2> <xsl:if test="../foto/@href"> <IMG src="{../foto/@href}" alt="{.}" align="right"/> </xsl:if> </xsl:template> <xsl:template match="kategorie" mode="detailni"> <EM><xsl:apply-templates mode="detailni"/></EM> </xsl:template> <xsl:template match="cena" mode="detailni"> <STRONG> - <xsl:apply-templates mode="detailni"/> Kč</STRONG> </xsl:template> <xsl:template match="popis" mode="detailni"> <P><xsl:apply-templates mode="detailni"/></P> </xsl:template> <xsl:template match="br" mode="detailni"> <BR/> </xsl:template> </xsl:stylesheet> <info> <firma>Sony</firma> <adresa>Nedůležitá, NěkděTown</adresa> <obdobi>zima 2001</obdobi> </info> <polozka kod="mxd-d4"> <nazev>MiniDisc kombinovaný s CD přehrávačem</nazev> <kategorie>MiniDisc</kategorie> <cena>14990</cena> <popis>Kombinace MD a CD pro pohodlné nahrávání z CD<br/> přepis <b>vysokou rychlostí</b> z CD<br/>nahrávání v LP režimu (4x)<br/> 20 bitový A/D převodník<br/>funkce Time Machine Recording<br/> funkce sf Edit<br/> nízká spotřeba v pohotovostním režimu</popis> </polozka> <polozka kod="mds-ja555es_n"> <nazev>MiniDisc rekordér řady ES</nazev> <kategorie>MiniDisc</kategorie> <cena>34990</cena> <popis>plné editační možnosti<br/> zásuvková mechanika pro vkládání MD<br/> Pitch Control<br/> proudový pulsní D/A převodník<br/> 24bitový A/D převodník<br/> digitální filtr s proměnným koeficientem<br/> dvojitý transformátor s kruhovým jádrem (R-Core)<br/> systém DSP ATRAC typu R<br/> digitální ovládání záznamové úrovně<br/> dva optické digitální výstupy + koaxiální digitální vstup<br/> ovládání A1 (Control A1)<br/> provedení <b>ve zlaté barvě</b></popis> <foto href="MDSJA555ES_N.jpg"/> </polozka> <polozka kod="str-de135"> <nazev>Stereo receiver a zesilovač</nazev> <kategorie>Receiver</kategorie> <cena>5990</cena> <popis>2 x 60W (DIN 4 Ohm)<br/> 3 audiovstupy<br/>tuner RDS/EON<br/>30 předvoleb, korekce tónu a vyvážení<br/>digitální zpracování signálu - DSP<br/> systémový dálkový ovladač </popis> <foto href="STRDE135.jpg"/> </polozka> <polozka kod="mz-r90"> <nazev>MD Walkman</nazev> <kategorie>MiniDisc</kategorie> <cena>12990</cena> <popis>MD Walkman s možností záznamu<br/> <b>nejmenší na světě</b><br/> tělo přístroje z magnézia - výjimečně nízká hmotnost<br/> Pop Up Eject mechanismus<br/>až 14,5 hodin záznamu / 29 hodin reprodukce (Ni-MH + AA baterie)<br/> 40 sec. ESP, Mega Bass<br/> dálkové ovládání s podsvětleným LCD displejem (9 znaků) s editovacími funkcemi<br/>možnost pojmenování skladeb a disku během záznamu<br/> možnost monofonního záznamu v LP režimu (až 160 min.)<br/> LCD displej na přístroji<br/> paměť pro často užívaná slova (cca 40 výrazů po 10 znacích)<br/>možnost kopírování CD textu<br/>linkový vstup / výstup, optický vstup, vstup pro mikrofon<br/>zásuvka pro napájení ze sítě, AC adaptér, dobíjecí Ni-MH baterie</popis> <foto href="MZR90.jpg"/> </polozka> <polozka kod="ss-mb215"> <nazev>3pásmové reproduktory</nazev> <kategorie>Reproduktory</kategorie> <cena>3990</cena> <popis>párové, regálové, 3pásmové<br/> max. zatížitelnost 120W<br/>impedance 8 Ohm<br/> bassreflex<br/>magneticky stíněné<br/> odnímatelné mřížky<br/> rozměry: 220 x 518 x 230 mm</popis> </polozka> <polozka kod="ss-cr490"> <nazev>Sada AV reproduktorů</nazev> <kategorie>Reproduktory</kategorie> <cena>5990</cena> <popis>2 x zadní, 1 x centrální, 2 pásmové<br/> maximální zatížitelnost zadní: 120 W, centrální: 150 W<br/> impedance 8 Ohm</popis> </polozka> </katalog>
Některé procesory nabízejí rozšiřující instrukce. Aby se tyto
instrukce nemíchaly dohromady s XSLT instrukcemi, musí používat
vlastní jmenný prostor. Musíme však XSLT procesoru nějak říci, že pod
daným prefixem se skrývají rozšíření. K tomu slouží atribut
extension-element-prefixes
. Jako
jeho hodnota se uvádí seznam prefixů jmenných prostorů, které má
procesor rozeznávat jako prefixy pro rozšiřující instrukce.
Příklad 4.2. Definice prefixů použitých pro rozšiřující instrukce –
ext.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:saxon="http://icl.com/saxon" extension-element-prefixes="saxon"> <xsl:output method="html"/> <xsl:template match="/"> <html> <body> <saxon:entity-ref name="nbsp"/> <saxon:entity-ref name="copy"/> </body> </html> </xsl:template> </xsl:stylesheet>
Tento styl na výstupu vygeneruje následující HTML kód (pro libovolný vstupní dokument):
<html> <body> ©</body> </html>
Kdybychom extension-element-prefixes
nepoužili,
dostaneme výstup, který jsme rozhodně asi nechtěli:
<html xmlns:saxon="http://icl.com/saxon"> <body> <saxon:entity-ref name="nbsp"></saxon:entity-ref> <saxon:entity-ref name="copy"></saxon:entity-ref> </body> </html>
XSLT procesor v něm elementy s prefixem saxon
nerozeznal jako instrukce, které má
zpracovávat.
Poslední atribut, který lze u <xsl:stylesheet>
použít, má také mnoho
společného se jmennými prostory. Jako hodnotu atributu exclude-result-prefixes
můžeme uvést seznam
prefixů jmenných prostorů. Deklarace těchto jmenných prostorů budou
vypuštěny z generovaného dokumentu.
Příklad 4.3. Vynechání deklarací jmenných prostorů z výstupu –
extns.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:some="http://www.some.org/ns" exclude-result-prefixes="some"> <xsl:output method="html"/> <xsl:template match="/"> <html> <body>Ahoj <xsl:value-of select="/some:osoba/some:jmeno"/></body> </html> </xsl:template> </xsl:stylesheet>
Po spuštění tento styl vygeneruje následující výstup:
<html> <body>Ahoj xxx</body> </html>
Kdybychom jmenný prostor some
nevynechali z výstupu, dostaneme:
<html xmlns:some="http://www.some.org/ns"> <body>Ahoj xxx</body> </html>
Samotný obsah elementu xsl:stylesheet
mohou tvořit následující
instrukce:
pokud se použijí, musí být na začátku všechny instrukce <xsl:import>
;
v libovolném pořadí pak můžeme použít následující instrukce:
<xsl:attribute-set>
<xsl:include>
<xsl:key>
<xsl:decimal-format>
<xsl:namespace-alias>
<xsl:output>
<xsl:preserve-space>
<xsl:strip-space>
<xsl:template>
<xsl:param>
–
instrukci můžeme používat i jinde, než jen jako instrukci na nejvyšším
místě
<xsl:variable>
–
instrukci můžeme používat i jinde, než jen jako instrukci na nejvyšším
místě