Pokročilá navigace v XML datech
Transformace (XSLT)
V "selekční části" XML dotazovacích jazyků
V některých modelovacích jazycích - Schematron
XPath je syntaxe pro specifikaci částí XML dokumentů (uzly, množiny uzlů, nelze specifikovat části textových uzlů)
XPath používá syntaxi obdobnou jako cesta v souborovém systému
XPath používá knihovnu standardních funkcí (evt. uživatelsky definovaných - v XPath 2.0 nebo i XPath 1.x, ale proprietárně - podle procesorů)
XPath je od v 1.0 základem pro XSLT, od 2.0 i pro XQuery
XPath syntaxe není XML
XPath 1.0 je W3C Recommendation - http://www.w3.org/TR/xpath
Cesta určuje lokaci v dokumentu
Cesty jsou konstruovány podobně jako cesty ve FS, tj.
relativní - vyhodnocovány vůči KU
absolutní - od kořene, ale výrazy (predikáty) také vyhodnocovány vůči KU
Syntaktická pravidla: [20] PathExpr ::= AbsolutePathExpr | RelativePathExpr [22] AbsolutePathExpr ::= ("/" RelativePathExpr?) | ("//" RelativePathExpr) [23] RelativePathExpr ::= StepExpr (("/" | "//") StepExpr)* [24] StepExpr ::= AxisStep | GeneralStep [25] AxisStep ::= (Axis? NodeTest StepQualifiers) | AbbreviatedStep
Osy jsou množiny prvků dokumentu, vymezené (obvykle relativně) vůči kontextu.
Kontext je tvořen především dokumentem a aktuálním uzlem.
Jako osy je možné použít:
child - obsahuje dceřinné uzly kontextového (aktuálního) uzlu
descendant - obsahuje všechny potomky kontextového (aktuálního) uzlu (dále jen KU). Nepočítají se mezi ně atributy!!!
parent - obsahuje rodičovský uzel KU (existuje-li)
ancestor - obsahuje všechny předky - rodiče, "prarodiče"... kořenový element (pokud KU není sám kořenový)
following-sibling - obsahuje všechny následující sourozence KU (pro NS a atributy je tato osa prázdná)
preceding-sibling - dtto, ale obsahuje předchozí sourozence
following - obsahuje všechny uzly nacházející se po KU (mimo atributů, potomků a NS uzlů
preceding - dtto, ale obsahuje předchozí uzly (ale mimo předky, attributy, NS!)
attribute - obsahuje atributy (jen pro uzly - elementy)
namespace - obsahuje všechny NS uzly KU (jen pro uzly - elementy)
self - obsahuje samotný KU
descendant-or-self - obsahuje sjednocení os descendant a self
ancestor-or-self - obsahuje sjednocení os ancestor a self
Určeny k selekci (výběru) z uzlů specifikovaných např. cestou
př.: /article/para[3] - vybere třetí odstavec v článku
Nejjednodušším výrazem v predikátu je specifikace pozice (blízkosti) (proximity position) - viz výše
pozor u reverzních os (ancestor, preceding...) - pozice se počítá v rámci množiny uzlů vždy OD KONTEXTOVÉHO UZLU!
specifikaci pozice 3 možno nahradit výrazem position()=3
Určeny k použití v predikátech, k výpočtům, atd.
Výrazy mohou být:
řetězcové
numerické (hodnotami jsou floating-point čísla)
logické (boolean)
uzly a množiny uzlů
para selects the para element children of the context node
* selects all element children of the context node
text() selects all text node children of the context node
@name selects the name attribute of the context node
@* selects all the attributes of the context node
para[1] selects the first para child of the context node
para[last()] selects the last para child of the context node
*/para selects all para grandchildren of the context node
/doc/chapter[5]/section[2] selects the second section of the fifth chapter of the doc
chapter//para selects the para element descendants of the chapter element children of the context node
//para selects all the para descendants of the document root and thus selects all para elements in the same document as the context node
//olist/item selects all the item elements in the same document as the context node that have an
. selects the context node
.//para selects the para element descendants of the context node
.. selects the parent of the context node
../@lang selects the lang attribute of the parent of the context node
Nejpoužívanější zkracování je osy child:
tj. typu article/para místo child::article/child::para.
a atributu: píšeme para[@type="warning"] místo child::para[attribute::type="warning"]
Další použíané zkracování je // místo /descendant-or-self::node()/
a samozřejmě zkratky . a ..
Pro přehlednost někdy delší formu zachováváme
XPath na W3C: http://www.w3.org/TR/xpath
Zvon XPath Tutorial: http://zvon.org/xxl/XPathTutorial/Output/index.html
XPath Tutorial na W3Schools: http://www.w3schools.com/xpath/xpath_intro.asp
zatím jako PRACOVNÍ NÁVRH - http://www.w3.org/TR/xpath20/
Změna pohledu na hodnoty vrácené XPath výrazem: vše jsou sekvence (byť jednoprvkové)
->odstraňuje problémy s "pořadím" uzlů v množině
Zavádí podmíněné výrazy a cykly
Zavádí možnost uživatelských funkcí (psaných jako dynamicky vyhodnocované výrazy v XPath)
Lze použít existenční a obecné kvantifikátory, např. exist student/name="Fred" nebo all student/@id
Dále viz např. http://saxon.sourceforge.net/saxon7.0/index.html
Řetězcové funkce - xpath20/string.html
Numerické funkce - xpath20/numeric.html
Funkce nad sekvencemi - xpath20/sequence.html
Booleovské funkce - xpath20/boolean.html