XPath
T. Pitner, L. Bártek, A. Rambousek. L Grolich FI MU Brno 2020
XPath – základní principy
●
XPath je syntaxe pro specifikování částí dokumentů v XML
–
Primitivních hodnot, uzlů a sekvencí uzlů a hodnot
●
XPath neumožňuje specifikovat části textových uzlů Jméno je odvozeno od path expression poskytující hierarchické adresování uzlů v XML stromu. Syntax je podobná cestám v souborovém systému. XPath poskytuje standardní knihovnu funkcí, stejně jako uživatelsky definované funkce v procesorech pro XPath 2.0 resp. i XPath 1.x. XPath nepoužívá XML syntaxi.
–
●
●
●
●
Zápis by byl dlouhý.
XPath - specifikace
●
XPath 1.0 (revize ze 7. 9. 2015) XML Path Language (XPath) 2.0 a XML Path Language (XPath) 3.0 – doporučení W3C (8.4. 2014) XPath 3.1 – doporučení W3C (21.3. 2017) Zpětná kompatibilita: téměř všechny XPath 1.0 výrazy poskytují stejný výsledek s XPath 3.0
–
●
●
●
●
Výjimky viz kapitola Zpětná kompatibilita ve specifikaci.
XPath v jiných technologiích
● ●
XPath se využívá jako základ pro XSLT od verze 1.0 a V XQuery od XPath verze 2.0.
Základní zdroje pro studium
● ●
XPath tutoriál na W3Schools Zvon XPath 1.0 Tutorial to learn step by step (by Miloslav Nič) PathEnq - XPath 2.0 online evaluator - nice for try&see Online XPath Tester - Evaluator by ExtendsClass
● ●
Doména XPath: Pokročilá navigace v XML
●
Select the 3rd node _b_: `//b[3]` Select a node "b", which has a child node "c": `//b[./c]` Select an empty (eg. no child elements) node b: `//b[count(./*)=0]
●
●
Doména XPath - Transformation (XSLT)
●
Výběr zpracovávaného uzlu
●
Výběr hodnoty
Doména XPath: Selekční část XQuery
●
Část (F)or:
–
for $para in $doc//para – vybere všechny části para Let $mypara := $doc//para[@author=’myself’] where $para[@class='task'] order by $para/@created
●
Část (L)et:
–
●
Část (W)here:
–
●
Část (O)rder:
–
Doména XPath: Modelovací jazyky
● ●
XML Schema Schematron
XPath – cesty a navigace
●
Cesta popisuje (naviguje) k místu v XML dokumentu.
–
Její konstrukce je podobná cestám na souborovém systému. Relativní – vztažené ke kontextovému uzlu. Absolutní – vztažené ke kořenu dokumentu
●
●
Cesty jsou:
– –
Predikáty jsou vyhodnocovány relativně
Datové typy v XPath
●
Od Xpath 3.0 sjednoceno s datovými typy XMLSchmatu a XQuery Viz doporučení W3C XQuery and XPath Data Model 3.0, 8.4. 2014
●
Osy
●
Osy – množiny elementů dokumentu
–
Většinou vztažené ke kontextovému uzlu.
●
Kontext je tvořen dokumentem a aktuálním kontextovým uzlem.
Seznam os
● ● ● ● ●
child – přímí potomci kontextového uzlu (CN). descendant – následníci CN s výjimkou atributů. parent – rodičovský element CN. ancestor – předci CN, rodiče, prarodiče, …, až ke kořenovému uzlu. following-sibling – následující sourozenci
–
Je prázdná pro jmenné prostory a atributy.
●
preceding-sibling – dtto, ale předcházející sourozenci.
Seznam os
●
following
–
Obsahuje všechny následující uzly CN s výjimkou atributů, dceřiných uzlů a uzlů jmenného prostoru (NS). Dtto s výjimkou atributů, předků a NS. Obsahuje atributy (pouze pro elementy). Obsahuje všechny uzly NS daného CN. Pouze CN Obsahuje sjednocení os self a descendant. Obsahuje sjednocení os self a ancestor.
●
preceding
–
●
atribute
–
●
namespace
–
●
self
–
●
descendant-or-self
–
●
ancestor-or-self
–
Predikáty
●
Příklad:
/article/para[3] – výběr 3. odstavce (element para) v článku (elemnt article)
●
Nejjednodušší predikát – přiblížná specifikace pozice (viz preceding). Pozor u reverzních os (preding, ancestor, ...)
–
●
Pozice se počítá od kontextového uzlu.
●
Pozici 3 lze nahradit pomoci position()=3
Výrazy
●
Používají se v predikátech pro výpočty.
–
Mohou používat funkce z knihovny Xpath. Textovými řetězci Čísly (v pohyblivé čárce) Logickými hodnotami (boolean) Uzly Sekvencemi
●
Výrazy mohou pracovat s:
– – – – –
Zkrácený zápis
●
para – vybere všechny dceřiné elementy CN s názvem para * – vybere všechny dceřiné elementy CN text() – vybere všechny textové potomky CN @name – atribut name CN @* – všechny atributy CN para[1] – první přímý potomek para para[last()] - poslední přímý potomek para */para – všichni vnuci para CN
●
●
●
●
●
●
●
Zkrácený zápis
●
/doc/chapter[5]/section[2] - druhá section páté chapter elementu doc chapter//para - všichni potomci elementu chapter se jménem para //para – všechny elementy para v dokumentu //olist/item – všechny elementy item s rodičem olist .//para – všichni potomci CN se jménem para .. – rodičovský uzel CN ../@lang – atribut lang rodiče CN Používá se article/para místo child::article/child::para. U atributu se používá para[@type="warning"] místo child::para[attribute::type="warning"] Další často používaný zkrácený zápis je // místo /descendant-or-self::node()/ A samozřejmě . a .. Pro lepší čitelnost je vhodné použít nezkrácený zápis.
●
●
●
●
●
●
●
●
●
●
●
XPath 2.0
●
Jiný úhel pohledu:
–
Vše je sekvence – odstraněn problém s pořadím prvků v množině. podmíněné výrazy a cykly, Uživatelsky definované funkce
●
●
Zavádí:
– –
dynamicky vyhodnocované XPath výrazů. exist student all student/@id
–
Obecný existenční kvantifikátor
● ●
–
Více viz www.saxonica.com
XPath 2.0 - ukázky
● ● ● ●
Řetězcové funkce Numerické funkce Funkce nad sekvencemi Boolovské funkce
Další zdroje k XPath
● ●
Programming in XPath 3.0 (D. Novatchev) XPath functions (Mozilla)
On-line nástroje pro testování XPath
●
XPath výrazy můžete otestovat on-line bez nutnosti instalovat na počítač např. na:
– – –
http://codebeautify.org/Xpath-Tester PathEnq - XPath 2.0 on-line vyhodnocovač. XPath on-line tester - umožňuje také vyhodnocovat XPath proti nahranému dokumentu.