PRG036 – Technologie XML Přednáší: Irena Mlýnková (
[email protected]) Martin Nečaský (
[email protected]) LS 2010 Stránka přednášky: http://www.ksi.mff.cuni.cz/~mlynkova/prg036/
1
Osnova předmětu
Úvod do principů formátu XML, přehled XML technologií, jazyk DTD Datové modely XML, rozhraní DOM a SAX Úvod do jazyka XPath Úvod do jazyka XSLT XPath 2.0, XSLT 2.0 Úvod do jazyka XML Schema Pokročilé rysy jazyka XML Schema Přehled standardních XML formátů Úvod do jazyka XQuery Pokročilé rysy jazyka XQuery, XQuery Update Úvod do XML databází, nativní XML databáze, číslovací schémata, structural join Relační databáze s XML rozšířením, SQL/XML
2
Dotazovací jazyky nad XML daty Cíle: dotazování, pohledy, transformace, případně aktualizace XML dat Od r. 1998 XML-QL, XQL, … Vývoj v konsorciu W3C se ustálil/pokračuje v jazycích XSLT 1.0, XSLT 2.0, XPath 1.0, XPath 2.0, XQuery 1.0 XSLT je jazyk pro transformace, využívá XPath, zápis transformací hodně využívá XML XQuery vhodnější pro dotazování – uživatelsky orientováná syntaxe
Pz.: XPath 2.0
XQuery
3
Co je XPath? XPath je základní jazyk pro dotazování nad XML dokumenty Výběr částí XML dokumentů
Základní myšlenka se podobá navigaci v systému souborů Notace XPath není vyjádřena v XML Na XPath je založen XSLT, XPointer, XQuery
4
Model XML dat v XPath
Martin Nečaský <polozky> <polozka kod="48282811"> <mnozstvi>5 22 <polozka kod=“929118813"> <mnozstvi>1 91934 modra
5
Model XML dat v XPath
Martin Nečaský <polozky> document <polozka kod="48282811"> <mnozstvi>5 22 <polozka kod=“929118813"> <mnozstvi>1 91934 modra
6
Model XML dat v XPath
Martin Nečaský <polozky> document <polozka kod="48282811"> <mnozstvi>5 22 <polozka kod=“929118813"> <mnozstvi>1 91934 modra
7
Model XML dat v XPath
Martin Nečaský <polozky> document <polozka kod="48282811"> <mnozstvi>5 22 <polozka kod=“929118813"> <mnozstvi>1 91934 modra
8
Model XML dat v XPath
Martin Nečaský <polozky> document <polozka kod="48282811"> <mnozstvi>5 22 objednavka <polozka kod=“929118813"> <mnozstvi>1 91934 modra
9
Model XML dat v XPath
Martin Nečaský <polozky> document <polozka kod="48282811"> <mnozstvi>5 objednavka 22 <polozka kod=“929118813"> datum stav <mnozstvi>1 "10/10/2008""expedovana" 91934 modra
10
Model XML dat v XPath
Martin Nečaský <polozky> <polozka kod="48282811"> document <mnozstvi>5 22 objednavka <polozka kod=“929118813"> <mnozstvi>1 datum stav zakaznik 91934 "10/10/2008""expedovana" modra cislo text() "C992" "Martin Nečaský" 11
Model XML dat v XPath document objednavka datum
polozky
"10/10/2008"
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo "C992"
kod
mnozstvi cena
barva
"929118813"
text() "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Model XML dat v XPath Typy uzlů v modelu
kořenový uzel uzly elementů textové uzly atributové uzly uzly pro komentáře uzly proveditelných instrukcí uzly jmenných prostorů
Co tam není: sekce CDATA, odkazy na entity a DTD 13
Model XML dat v XPath Specifika Atributy nejsou zařazeny do seznamu dětí a potomků daného uzlu Atributy ze jmenného prostoru xmlns jsou chápány jako speciální uzly Kořenový uzel nereprezentuje kořenový element ale celý XML dokument Kořenový element je reprezentován jako dítě kořenového uzlu
14
Výrazy v XPath Výrazem v jazyce XPath je cesta Cesta se skládá z kroků Absolutní cesta: /Krok1/Krok2/…/KrokN
Relativní cesta: Krok1/Krok2/…/KrokN
15
Výrazy v XPath - Příklady /
document objednavka
datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka
document objednavka
datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka/polozky/polozka document objednavka datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka/polozky/polozka/@kod document objednavka datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka/polozky/polozka/cena/text() document objednavka datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka/polozky/polozka/barva document objednavka datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka/zakaznik/jmeno document objednavka datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady /objednavka/seznam-polozek/polozka document objednavka datum
polozky
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
kod
mnozstvi cena
barva
"929118813"
text()
"C992" "Martin Nečaský"
text() "5"
text() "22"
text() "1"
text()
text()
"91934"
"modra"
Výrazy v XPath - Příklady cena/text()
Relativní cesta sama o sobě nemůže být vyhodnocena Nemá to žádný smysl, protože nevíme odkud máme začít Vstupem musí být kromě samotné cesty také jeden a více uzlů v XML dokumentu, ze kterých máme vyhodnocení začít tzv. Kontextová množina 24
Výrazy v XPath - Příklady cena/text() document objednavka datum polozky
"10/10/2008"
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
text()
"C992" "Martin Nečaský"
kod
mnozstvi barva
"929118813"
text() text() "5"
"22"
text() text() "1"
"modra"
Výrazy v XPath - Příklady cena/text() document objednavka datum polozky
"10/10/2008"
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
text()
"C992" "Martin Nečaský"
kod
mnozstvi barva
"929118813"
text() text() "5"
"22"
text() text() "1"
"modra"
Výrazy v XPath - Příklady cena/text() document objednavka datum polozky
"10/10/2008"
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
text()
"C992" "Martin Nečaský"
kod
mnozstvi barva
"929118813"
text() text() "5"
"22"
text() text() "1"
"modra"
Výrazy v XPath - Příklady cena/text() document objednavka datum polozky
"10/10/2008"
stav "expedovana"
polozka
polozka
zakaznik kod
mnozstvi cena
"48282811"
cislo
text()
"C992" "Martin Nečaský"
kod
mnozstvi barva
"929118813"
text() text() "5"
"22"
text() text() "1"
"modra"
Vyhodnocení XPath výrazu Nechť P je XPath cesta, kde S je její první krok a P’ je zbytek cesty Nechť C značí kontextovou množinu uzlů pro vyhodnocení P Pokud je P absolutní, pak C obsahuje pouze a jen kořenový uzel dokumentu Pokud je P relativní, musí být C specifikována explicitně Pokud je P prázdná, pak výsledkem vyhodnocení je C Prázdná = 0 kroků Jinak je P vyhodnocena vzhledem k C následovně: C’ = {} Pro každý uzel u z C vyhodnoť S a výsledek přidej do C’ Vyhodnoť P’ vzhledem k C’
29
Vyhodnocení XPath výrazu Pozor, návratová hodnota cesty je množina uzlů Množina je neuspořádaná Tedy ani výsledek nelze očekávat uspořádaný (např. v pořadí, ve kterém se vyskytují uzly v XML dokumentu, viz. dále)
30
XPath cesty formálně XPath krok je formálně následující výraz osa::test-uzlu predikát1 ... predikátN
Osa, test uzlu a seznam predikáty Osa a predikáty jsou nepovinné Zatím jsme viděli pouze použití test-uzlu Seznam predikátů byl prázdný Osa byla defaultní
31
XPath osy osa::test-uzlu predikát1 ... predikátN
Osa specifikuje, v jaké relaci mají být uzly vybrané v tomto kroku vzhledem k uzlu u z kontextové množiny child
Vybrané uzly jsou děti (přímí potomci) uzlu u Defaultní osa /objednavka/zakaznik /child::objednavka/child::zakaznik 32
XPath osa self
Vybraný uzel je samotný uzel u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 33
XPath osa parent
Je vybrán rodič uzlu u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 34
XPath osa ancestor
Jsou vybrány všichni předci uzlu u
Tj. uzly ležící na cestě od u ke kořenovému uzlu document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 35
XPath osa ancestor-or-self
Jsou vybrány všichni předci uzlu u včetně uzlu u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 36
XPath osa child
Jsou vybráni přímí potomci (děti) uzlu u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 37
XPath osa descendant
Jsou vybráni potomci uzlu u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 38
XPath osa descendant
Jsou vybráni potomci uzlu u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 39
XPath osa descendant-or-self
Jsou vybráni potomci a samotný uzel u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 40
Průchod stromu do hloubky 0 document
1 objednavka
4
datum polozky
"10/10/200 8" stav
5
"expedovana"
2
10 polozka
zakaznik
3 cislo "C992"
kod
"Martin Nečaský"
8
6
mnozstvi
"48282811" text()
polozka
7 text() "5"
cena
11 kod
mnozstvi
"929118813 " text() text()
9
"22"
12
"1"
13 barva
14 text() "modra"
41
XPath osa preceding-sibling
Jsou vybráni sourozenci uzlu u, které mu předcházejí v průchodu do hloubky 0
document
1 objednavka
4
datum polozky
"10/10/200 8" stav
5
"expedovana"
2
10 polozka
zakaznik
3 cislo "C992"
kod
"Martin Nečaský"
8
6
mnozstvi
"48282811" text()
polozka
7 text() "5"
cena
11 kod
mnozstvi
"929118813 " text() text()
9
"22"
12
"1"
13 barva
14 text() "modra" 42
XPath osa preceding
Jsou vybráni všechny uzly, které předcházejí uzlu u v průchodu do hloubky (kromě předků) 0
document
1 objednavka
4
datum polozky
"10/10/200 8" stav
5
"expedovana"
2
10 polozka
zakaznik
3 cislo "C992"
kod
"Martin Nečaský"
8
6
mnozstvi
"48282811" text()
polozka
7 text() "5"
cena
11 kod
mnozstvi
"929118813 " text() text()
9
"22"
12
"1"
13 barva
14 text() "modra" 43
XPath osa following-sibling
Jsou vybráni sourozenci uzlu u, které ho následují v průchodu do hloubky 0
document
1 objednavka
4
datum polozky
"10/10/200 8" stav
5
"expedovana"
2
10 polozka
zakaznik
3 cislo "C992"
kod
"Martin Nečaský"
8
6
mnozstvi
"48282811" text()
polozka
7 text() "5"
cena
11 kod
mnozstvi
"929118813 " text() text()
9
"22"
12
"1"
13 barva
14 text() "modra" 44
XPath osa following
Jsou vybráni všechny uzly, které následují uzel u v průchodu do hloubky (kromě potomků) 0 document
1 objednavka
4
datum polozky
"10/10/200 8" stav
5
"expedovana"
2
10 polozka
zakaznik
3 cislo "C992"
kod
"Martin Nečaský"
8
6
mnozstvi
"48282811" text()
polozka
7 text() "5"
cena
11 kod
mnozstvi
"929118813 " text() text()
9
"22"
12
"1"
13 barva
14 text() "modra" 45
XPath osa attribute
Vybere atributy uzlu u document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 46
XPath osa namespace
Vybere atributy ze jmenného prostoru xmlns uzlu u
47
XPath - osy
preceding-sibling
ancestor
following-sibling
parent
self child
preceding
following
attribute namespace descendant
XPath test uzlu osa::test-uzlu predikát1 ... predikátN
Testuje uzly vybrané osou
Typ uzlu a případně název
49
XPath test uzlu osa::node() predikát1 ... predikátN
Testem projde jakýkoliv uzel vybraný osou
50
XPath test uzlu descendant::node() document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 51
XPath test uzlu osa::text() predikát1 ... predikátN
Testem projde textový uzel vybraný osou
52
XPath test uzlu descendant::text() document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 53
XPath test uzlu osa::* predikát1 ... predikátN
Testem projde jakýkoliv uzel vybraný osou, který má jméno
jméno má každý element a atribut •
Ale pozor: neexistuje osa, která najednou vybere elementy i atributy
54
XPath test uzlu descendant::* document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 55
XPath test uzlu osa::comment() osa::processing-instruction() osa::processing-instruction(“php”)
56
XPath osy a testy uzlů - zkratky
Pro nejpoužívanější osy a testy uzlů jsou zavedeny zkratky
P/zakaznik P/child::zakaznik P/@kod P/attribute::kod P/../zakaznik P/parent::*/zakaznik P//zakaznik P/descendant-or-self::node()/zakaznik
//zakaznik vybere všechny elementy zakaznik v XML dokumentu
57
XPath predikáty osa::test-uzlu predikát1 ... predikátN
Predikát umožňuje specifikovat pokročilejší podmínky na uzly, které byly vybrány osou a prošly testem uzlu Pro kontextový uzel u jsou nalezeny všechny uzly ležící na dané ose z uzlu u, na výstup jdou ale pouze ty, které splňují test-uzlu a všechny predikáty
predikát ::= „[„ podmínka „]„ podmínka ::= „not(„ podmínka „)„ | podmínka „and„ podmínka | podmínka „or„ podmínka
58
Testování existence uzlu
Podmínkou může být relativní XPath cesta P
Pro daný uzel u se vyhodnotí true, pokud množina uzlů zacílená cestou P z u je neprázdná
59
Testování existence uzlu //polozka[@kod] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 60
Testování existence uzlu //polozka[cena] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 61
Testování existence uzlu //polozka[../../@stav] document
objednavky
objednavka
stav
objednavka
polozky
polozka
...
polozky
polozka
polozka
polozka
62
Testování existence uzlu //polozka[ancestor::objednavka/@stav] document
objednavky
objednavka
stav
objednavka
polozky
polozka
...
polozky
polozka
polozka
polozka
63
Testování existence uzlu //objednavka[@stav]//polozka document
objednavky
objednavka
stav
objednavka
polozky
polozka
...
polozky
polozka
polozka
polozka
64
Testování hodnoty
Podmínkou může být porovnání dvou operandů
Operandy jsou XPath výrazy
Cesta, hodnota ...
Operátor je
= != < > <= >= &eq; ≠ < > ≤ ≥
65
Testování hodnoty //polozka[barva = "modra"] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 66
Testování hodnoty //polozka[cena > 30] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
text() "modra" 67
Testování hodnoty //objednavka[@stav = "expedovana"]//polozka document
objednavky
objednavka
stav "expedovana" polozka
objednavka
polozky
...
polozky
polozka
polozka
polozka
68
Testování hodnoty
Operátory = != ...
Operátory &eq; &neq; ...
Operandy jsou množiny hodnot/uzlů Vyhodnotí se jako true pokud existuje hodnota/uzel v levém a hodnota/uzel v pravém operandu, pro něž je operátor true Operandy nesmějí být množiny
Pokud je operandem uzel/množina uzlů, je/jsou převeden(y) na textovou hodnotu
atomizace 69
Testování hodnoty //polozka[barva = "modra"] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra"
"zluta" 70
Testování hodnoty //polozka[barva != "modra"] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra"
"zluta" 71
Testování hodnoty //polozka[barva &eq; "modra"]
CHYBA! document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra" "zluta" 72
Vestavěné funkce
Testování pozice každý uzel v kontextové množině má přiřazenu pozici (určena pozicí v dokumentu a směrem osy) position()
Vrací pozici uzlu v kontextové množině
last()
Vrací počet uzlů v kontextové množině
73
Vestavěné funkce //polozky/polozka[position() = 1] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra"
"zluta" 74
Vestavěné funkce //polozky/polozka[position() = last()] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra" "zluta" 75
Vestavěné funkce //polozky/polozka[1] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra" "zluta" 76
Vestavěné funkce //polozky/polozka[last()] document
objednavka datum polozky
"10/10/200 8" stav "expedovana"
polozka
polozka
zakaznik kod cislo "C992"
mnozstvi
"48282811" text() "Martin Nečaský"
text() "5"
cena
kod
mnozstvi
"929118813 " text() text() "22"
"1"
barva
barva
text()
text()
"modra" "zluta" 77
Vestavěné funkce count(expression)
Vrací počet uzlů vrácených XPath výrazem expression
78
Vestavěné funkce //polozky[count(polozka) > 2] document
objednavky
objednavka
stav "expedovana"
polozky
polozka
polozka
objednavka
...
polozky
polozka
polozka
polozka
79
Vestavěné funkce
id(value)
Vrátí element s value jako id
concat, starts-with, contains, substring-after, substringbefore, substring(value), ... sum, floor, ceiling, ...
80
Konec
81