Obsah
XPath je syntaxe pro specifikaci částí XML dokumentů (uzly, množiny uzlů, sekvence uzlů; nelze specifikovat části textových uzlů).
XPath používá syntaxi obdobnou jako cesty 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 (bylo by příliš "upovídané")
XPath 1.0 i 2.0 jsou doporučeními W3C (W3C Recommendation) - http://www.w3.org/TR/xpath
Transformace (XSLT)
slouží k výběru uzlů, které se mají zpracovávat
V "selekční části" XML dotazovacích jazyků (XQuery)
V některých modelovacích jazycích (Schematron, XML Schema)
...
Cesta (path) určuje (tj. „naviguje nás na“) lokaci v dokumentu. Cesty jsou konstruovány podobně jako cesty v systému souborů, tj. jako
[20] PathExpr ::= AbsolutePathExpr | RelativePathExpr [22] AbsolutePathExpr ::= ("/" RelativePathExpr?) | ("//" RelativePathExpr) [23] RelativePathExpr ::= StepExpr (("/" | "//") StepExpr)* [24] StepExpr ::= AxisStep | GeneralStep [25] AxisStep ::= (Axis? NodeTest StepQualifiers) | AbbreviatedStep
Osy (jedn. číslo axis, množné axes) jsou množiny prvků dokumentu, vymezené (obvykle relativně) vůči kontextu.
Kontext je tvořen především dokumentem a aktuálním (kontextovým) uzlem (KU).
obsahuje dceřinné uzly kontextového (aktuálního) uzlu
obsahuje všechny potomky kontextového (aktuálního) uzlu (dále jen KU). Nepočítají se mezi ně atributy!!!
obsahuje rodičovský uzel KU (existuje-li)
obsahuje všechny předky - rodiče, "prarodiče", atd. až kořenový element (pokud KU není sám kořenový)
obsahuje všechny následující sourozence KU (pro NS a atributy je tato osa prázdná)
dtto, ale obsahuje předchozí sourozence
obsahuje všechny uzly nacházející se po KU (mimo atributů, potomků a NS uzlů
dtto, ale obsahuje předchozí uzly (ale mimo předky, attributy, NS!)
obsahuje atributy (jen pro uzly - elementy)
obsahuje všechny NS uzly KU (jen pro uzly - elementy)
obsahuje samotný KU
obsahuje sjednocení os descendant
a
self
obsahuje sjednocení os ancestor
a
self
Příklad 6. //b/following-sibling::*
<?xml version="1.0"?> <a> <b/> <b> <c> <d/> </c> </b> <b> <c/> </b> </a>
Příklad 7. //b/preceding-sibling::*
<?xml version="1.0"?> <a> <b/> <b> <c> <d/> </c> </b> <b> <c/> </b> </a>
Příklad 8. /a/b/c/following::*
<?xml version="1.0"?> <a> <b/> <b> <c> <d/> </c> <e/> </b> <b> <c/> </b> </a>
Příklad 9. /a/b/e/preceding::*
<?xml version="1.0"?> <a> <b/> <b> <c> <d/> </c> </b> <b> <d/> <e/> </b> </a>
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
para
vybere všechny dceřinné
elementy kontextového uzlu jmenující se para
*
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
vybere všechny
element para, jež jsou následníky chapter
//para
vybere všechny elementy
para z dokumentu
//olist/item
vybere všechny
elementy item, které mají za rodiče olist.
vybere kontextový uzel
.//para
vybere všechny
elementy-potomky kontextového uzlu, které nesou značku
para
..
vybere rodičovský uzel od
kontextového
../@lang
vybere atribut lang
rodičovského uzlu od kontextového
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
Již finální specifikace - 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://www.saxonica.com/, kde nalezneme i XPath/XSLT/XQuery procesor Saxon.