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 12942×
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 NaN
function-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ů.