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 13460×
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í.