XSLT zavádí do jazyka XPath několik nových funkcí, dnes se podíváme, co dělají.
30.9.2004 09:00 | Aleš Hakl | přečteno 13606×
Většina funkcí, kterými XSLT rozšiřuje jazyk XPath, slouží ke zjišťování různých parametrů XSLT procesoru. Ovšem pak zde nalezneme i jiné funkce, které rozšiřují jazyk XPath o funkcionalitu, která mu chybí a je pro použití v XSLT vhodná, a nebo o záležitosti nemající smysl mimo XSLT.
current()
Tato funkce vrací sadu uzlů obsahující jednu položku: takzvaný
nynější uzel ("current node", což je něco jiného než "context
node", který jsem v dřívějších dílech pro jednoduchost nazýval
aktuální). Například uvnitř xsl:for-each nebo
xsl:template vrací tato funkce uzel, který je právě
ve smyčce zpracováván, respektive způsobil vyvolání šablony.
document()Tato funkce nám umožní načíst sadu uzlů z dalšího vstupního dokumentu, podrobněji se jí budeme zabývat v příštím díle.
element-avaiable()Tato funkce patří do kategorie zjišťování informací o procesoru. Vrátí logickou hodnotu podle toho, je-li dostupný rozšiřující element, jehož jméno je udáno jako řetězec jejím jediným parametrem.
format-number()
Tato funkce je takový kanón na vrabce - slouží k pokročilému
formátování čísel. První parametr udává číslo, které se bude
formátovat, druhý formátovací řetězec a konečně třetí může obsahovat
jméno přiřazené použitému elementu xsl:decimal-format.
Formátovací řetězec má stejnou syntaxi jako formátovací řetězec používaný Javovou třídou DecimalFormat.
Formátovací řetězec se skládá ze dvou částí obsahujících prefix,
numerický formát a sufix: jedné pro kladné hodnoty a druhé pro
záporné, pokud část pro záporné hodnoty vynecháme, je použita první
čast, před kterou je dodán znak mínus (odpovídající národnímu
prostředí), pokud ovšem formát záporných čísel uvedeme, jsou v něm
brány v potaz pouze prefix a sufix, počet číslic je stejný jako pro
kladný formát. Obě části oddělíme znakem ; (středník).
Vlastní formát čísla může obsahovat několik speciálních znaků:
0 - Číslice# - Číslice, počáteční nuly jsou vynechány. - Desetinná tečka (nebo čárka...), - Oddělovač (v našich podmínkách typicky tisíců)- - MínusE - Oddělovač mantisy a exponentuV prefixu a sufixu též můžeme použít několik speciálních znaků:
% - Vynásobí číslo 100 a znak nahradí znakem procent dle národního prostředí‰ nebo ‰ - Vynásobí číslo 1000 a znak nahradí znakem promile dle národního prostředí¤ nebo ¤ - Vloží národní znak měny (Kč), pokud tento znak zadáme dvakrát, vloží mezinárodní znak měny (CZK)' - Používá se k vkládání znaků se speciálním významem do prefixu a sufixu například: "'ID#'", samotný znak ' vložíme tak, že ho zdvojíme: "''''"
Element xsl:decimal-format slouží k nastavení dalších parametrů formátování, umísťuje se přímo do elementu xsl:stylesheet a má tyto atributy:
decimal-separator - Znak použitý jako desetinná tečka(formátovací znak .), implicitně "."grouping-separator - Znak pro oddělení skupin číslic (formátovací znak ,), implicitně ","minus-sign - Znak použitý pro mínus.percent - Znak procent (ve formátu znak %), implicitně "%"per-mille - Znak promile (‰ jak ve formátu tak implicitně)zero-digit - Znak pro nulu, implicitně "0"digit - Tento atribut nám umožnuje změnit formátovací znak # na jinýpattern-separator - Tímto atributem můžeme změnit znak použitý pro oddělení dvou částí formátovacího řetězce na něco jiného než ;.infinity - Řetězec vyjadřující nekonečnoNaN - řetězec vyjadřující hodnotu NaNfunction-avaiable()
Podobně, jako funkce element-avaible() ověřuje
dostupnost elementů XSLT, můžeme pomocí této funkce ověřit
dostupnost nějaké rozšiřující funkce.
generate-id()Tato funkce, kterou jsme již použili v patnáctém dílu, vrací unikátní identifikátor uzlu zadaného jako její jediný parametr. Způsob, jakým je tento identifikátor získán, není nijak přesně specifikován a každý procesor používá jiný.
system-property()
Funkcí system-property() můžeme získat hodnotu nějaké
vlastnosti procesoru XSLT, název této vlastnosti předáme jako
její jediný parametr a návratová hodnota je hodnota dané vlastnosti.
Jsou definovány tyto vlastnosti:
"xsl:version" - Podporovaná verze jazyka XSLT"xsl:vendor" - Název dodavatele procesoru XSLT"xsl:vendor-uri" - URI dodavatele procesoru XSLTkey()
Pokud chceme vyhledat v dokumentu všechny uzly, u kterých se nějaký
výraz jazyka XPath rovná nějaké hodnotě, použijeme element xsl:key a související funkci key(). Funkci key() předáme jako parametry jméno odpovídajícícho elementu xsl:key a požadovanou hodnotu, jako návratovou hodnotu získáme sadu uzlů vyhovujících dané podmínce.
Element xsl:key umístíme přímo do elementu xsl:stylesheet. Tento element nemá žádný obsah, ale zato má tři atributy:
name - Název (použitý jako první parametr funkce key())match - Výraz (vzor), kterým vybereme uzly, které nás zajímají (podobně jako u xsl:template)use - Výraz určující hodnotu klíče
unparsed-entity-uri()Tato funkce slouží ke zjistění adresy URI systémové (nebo též neanalyzované) entity určené názvem předaným jako parametr funkce. Takovéto entity, definované v DTD, slouží většinou k připojení binárních dat k dokumentu XML. Jejich použití vyžaduje DTD a vůbec je zbytečně komplikované, a proto se příliš nepoužívají.
Zde jsme s výčtem funkcí XSLT skončili a příště se podíváme, jak pomocí XSLT zpracovávat více vstupních dokumentů, generovat více výstupních dokumentů nebo jak šablonu rozdělit do více souborů.