Jazyk XPath není určen pouze na vybírání částí dokumentu, ale umožňuje nám provádět nejrůznější výpočty a zpracování, jejichž výsledky můžeme pomocí XSLT vkládat do výstupního dokumentu.
17.8.2004 15:00 | Aleš Hakl | czytane 14143×
RELATED ARTICLES
KOMENTARZE
Jazyk XPath používá několik datových typů, minule jsme se již
seznámili s výrazy vracejícími sadu uzlů, což je jeden z nich.
Sada uzlů se od ostatních typů liší tím, že ji nelze vytvořit
konverzí z jiného typu, ostatní datové typy můžeme vcelku volně
konvertovat. Dnes se tedy podíváme, jaké jazyk XPath zná datové
typy, a jaké operace s nimi můžeme provádět:
Začněme funkcemi souvisejícími se sadou uzlů:
-
count(sada uzlů) - vrací počet uzlů v sadě.
-
id(ID) - vrací sadu uzlů obsahující
element, jehož ID má danou hodnotu. Také můžeme zadat více
ID oddělených mezerami, pak funkce vrátí uzly, jejichž ID
odpovídá některé z hodnot. (pozn. ID je atribut určený v DTD)
-
local-name(sada uzlů) - vrátí lokální
název (část za dvojtečkou) prvního uzlu v sadě uzlů, nebo
(pokud sadu uzlů neurčíte) aktuálního uzlu.
-
namespace-uri(sada uzlů),
name(sada uzlů) - totéž, pouze vrací
URI jmenného prostoru respektive celé jméno.
boolean - Logická hodnota
Je jí možno vytvořit z
libovolného jiného typu prostřednictvím funkce
boolean() podle těchto pravidel:
-
Číslo je
true, pokud se nerovná nule nebo NaN
-
Prázdná sada uzlů nebo prázdný řetězec vrací
false
-
Výsledek pro jiné datové typy je závislý na datovém typu.
A také můžeme konkrétní hodnoty získat voláním funkcí
true() a false(). Většinu operací s
logickými hodnotami jsme probrali v minulém díle, vynechali jsme
jedinou funkci, kterou konsorcium W3C označuje za pracující s
logickou hodnotou:
Funkce lang(řetězec)
vrací true nebo
false podle toho je-li její argument stejný
nebo zaměnitelný (angličtina je zaměnitelná s americkou angličtinou,
nikoli už naopak)
za jazyk aktuálního uzlu (určený hodnotou atributu
xml:lang elementu, případně nejbližšího elementu
s tímto atributem směrem ke kořenu dokumentu).
number - Číslo
Konkrétně 64-bitové číslo s plovoucí
desetinnou čárkou (datový typ double ve většině
programovacích jazyků), opět můžeme konvertovat pomocí funkce
number():
-
Řetězec je převeden na číslo, pokud číslo reprezentuje, jinak
na
NaN
-
true je převedeno 1, false na 0.
-
Sada uzlů je převedena na řetězec a poté stejně jako řetězec.
-
A opět, jiné typy jsou převáděny v závislosti na datovém typu.
S čísly můžeme provádět aritmetické operace prostřednictvím
operátorů +, -, *,
div (dělení, / je použito na velké
množství jiných operací, jak již jsme se dozvěděli v minulém
díle) a mod (zbytek po celočíselném dělení).
Také máme k dispozici tyto funkce:
-
ceiling(číslo) - zaokrouhlování nahoru.
-
floor(číslo) - zaokrouhlování dolů.
-
round(číslo) - zaokrouhlování dle
běžných zvyklostí,
tj. na nejbližší celé číslo.
-
sum(sada uzlů) - vrátí součet všech
čísel získaných postupnou
konverzí uzlů v sadě na čísla.
string - Řetězec znaků
Řetezec znaků v kódování unicode je hned po sadě uzlů nejspíše
nejpoužívanější datový typ v jazyku XPath či XSLT. Řetězce můžeme
zapisovat mezi apostrofy (') či uvozovky
(").
Opět je možné řetězec zkonvertovat z jiného typu pomocí funkce
string():
-
Sada uzlů se převede na řetězec reprezentující obsah jejího
prvního uzlu (tj. textový obsah elementu, obsah textového uzlu
nebo hodnotu atributu)
-
Číslo se převede na jeho hodnotu v desítkové soustavě případně
na řetězec
"NaN", "+Infinity"
nebo "-Infinity".
-
Logická hodnota se převede na
"true" nebo
"false".
-
Jak se převádějí jiné datové typy snad nemá cenu zmiňovat ^_~
K práci s řetězci máme k dispozici poměrně velké množství funkcí,
a proto se jimi budeme zabývat až v příštím díle, spolu s
náležitým příkladem použití.