1 Navigace v XML datech Obsah XPath ............................................................................................................................... 1 XPath - hlavní principy ............................................................................................... 1 XPath - aplikační oblasti .............................................................................................. 1 XPath - aplikační oblasti .............................................................................................. 2 XPath - aplikační oblasti .............................................................................................. 2 XPath - pojem cesty (paths) a lokace (locations) .............................................................. 2 XPath - syntaktická pravidla ......................................................................................... 2 XPath - osy (axes) ...................................................................................................... 3 Příklad osa child ........................................................................................................ 3 Příklad osa descendant ................................................................................................ 4 Příklad osa parent ....................................................................................................... 4 Příklad osa ancestor .................................................................................................... 4 Příklad osa following-sibling ........................................................................................ 5 Příklad osa preceding-sibling ........................................................................................ 5 Příklad osa following .................................................................................................. 5 Příklad osa preceding .................................................................................................. 6 XPath - predikáty (predicates) ...................................................................................... 6 XPath - výrazy ........................................................................................................... 6 XPath - zkrácená notace - Příklady ................................................................................ 6 XPath - zkrácená notace (2) ......................................................................................... 7 Informační zdroje k XPath ........................................................................................... 7 XPath 2.0 .................................................................................................................. 7 XPath 2.0 - příklady ................................................................................................... 8 XPath XPath - hlavní principy * 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 XPath - aplikační oblasti * Pokročilá navigace v XML datech Navigace v XML datech 2 * Vybrat třetí uzel b: //b[3] * Vybrat uzel b, který má potomka c: //b[./c] * Vybrat prázdný uzel b: //b[count(./*)=0] Příklad 1. //b[count(./*)=0] XPath - aplikační oblasti * Transformace (XSLT [http://www.w3.org/TR/xslt]) * slouží k výběru uzlů, které se mají zpracovávat Příklad 2. XPath - aplikační oblasti * V "selekční části" XML dotazovacích jazyků (XQuery [http://www.w3.org/XML/Query/]) * V některých modelovacích jazycích (Schematron [http://www.schematron.com/], XML Schema [http:// www.w3.org/XML/Schema]) * ... XPath - pojem cesty (paths) a lokace (locations) 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 relativní vyhodnocovány vůči kontextovému uzlu (KU), viz dále, nebo absolutní od kořene, ale výrazy (predikáty) také vyhodnocovány vůči KU XPath - syntaktická pravidla [20] PathExpr ::= AbsolutePathExpr | RelativePathExpr [22] AbsolutePathExpr ::= ("/" RelativePathExpr?) | ("//" RelativePathExpr) Navigace v XML datech 3 [23] RelativePathExpr ::= StepExpr (("/" | "//") StepExpr)* [24] StepExpr ::= AxisStep | GeneralStep [25] AxisStep ::= (Axis? NodeTest StepQualifiers) | AbbreviatedStep XPath - osy (axes) 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). Osami jsou: 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", atd. až 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 Příklad osa child Obrázek 1. //b/child::* Navigace v XML datech 4 Příklad osa descendant Příklad 3. //b/descendant::* Příklad osa parent Příklad 4. //d/parent::* Příklad osa ancestor Příklad 5. //d/ancestor::* Navigace v XML datech 5 Příklad osa following-sibling Příklad 6. //b/following-sibling::* Příklad osa preceding-sibling Příklad 7. //b/preceding-sibling::* Příklad osa following Příklad 8. /a/b/c/following::* Navigace v XML datech 6 Příklad osa preceding Příklad 9. /a/b/e/preceding::* XPath - predikáty (predicates) 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, tj. proti směru fyzického umístění v textové podobě dokumentu * Specifikaci pozice 3 možno nahradit výrazem position()=3 XPath - výrazy Určeny k použití v predikátech, k výpočtům, atd. Mohou obsahovat XPath funkce. Výrazy mohou být: * řetězcové * numerické (hodnotami jsou floating-point čísla) * logické (boolean) * uzly * sekvence XPath - zkrácená notace - Příklady * 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 Navigace v XML datech 7 * @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 - zkrácená notace (2) Nejpoužívanější zkracování je osy child : * tj. píšeme article/para místo child::article/child::para. * a atributu: píšeme para[@type="warning"] místo child::para[attribute::type="warning"] * Další používané zkracování je // místo /descendant-or-self::node()/ * a samozřejmě zkratky . a .. Poznámka Pro přehlednost někdy delší formu zachováváme: nebraňme se jí za každou cenu! Informační zdroje k XPath * 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 XPath 2.0 * 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ě Navigace v XML datech 8 * 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. XPath 2.0 - příklady * Řetězcové funkce [http://www.fi.muni.cz/~tomp/xml03/xpath20/string.html] * Numerické funkce [http://www.fi.muni.cz/~tomp/xml03/xpath20/numeric.html] * Funkce nad sekvencemi [http://www.fi.muni.cz/~tomp/xml03/xpath20/sequence.html] * Booleovské funkce [http://www.fi.muni.cz/~tomp/xml03/xpath20/boolean.html]