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 | read 13582×
DISCUSSION
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ínus
E - Oddělovač mantisy a exponentu
V 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čno
NaN - ř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 XSLT
key()
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ů.