1 XPath; validace a schémata XML dat Obsah XPath ............................................................................................................................... 2 XPath - hlavní principy ............................................................................................... 2 XPath - aplikační oblasti .............................................................................................. 2 XPath - aplikační oblasti .............................................................................................. 3 XPath - aplikační oblasti .............................................................................................. 3 XPath - pojem cesty (paths) a lokace (locations) .............................................................. 3 XPath - syntaktická pravidla ......................................................................................... 3 XPath - osy (axes) ...................................................................................................... 3 Příklad osa child ........................................................................................................ 4 Příklad osa descendant ................................................................................................ 4 Příklad osa parent ....................................................................................................... 5 Příklad osa ancestor .................................................................................................... 5 Příklad osa following-sibling ........................................................................................ 5 Příklad osa preceding-sibling ........................................................................................ 6 Příklad osa following .................................................................................................. 6 Příklad osa preceding .................................................................................................. 6 XPath - predikáty (predicates) ...................................................................................... 7 XPath - výrazy ........................................................................................................... 7 XPath - zkrácená notace - Příklady ................................................................................ 7 XPath - zkrácená notace (2) ......................................................................................... 8 Informační zdroje k XPath ........................................................................................... 8 XPath 2.0 .................................................................................................................. 8 XPath 2.0 - příklady ................................................................................................... 8 Specifikace a validita XML .................................................................................................. 9 Aktuální specifikace XML ........................................................................................... 9 Jakou verzi použít? ..................................................................................................... 9 Validita XML dokumentů ............................................................................................. 9 XML Schema .................................................................................................................... 9 XML Schema - základní zdroje informací ....................................................................... 9 XML Schema - motivace ........................................................................................... 10 XML Schema - hlavička definice schématu ................................................................... 10 XML Schema - přiřazení typu elementu s daným názvem ................................................. 10 XML Schema - definice jednoduchého typu .................................................................. 10 XML Schema - definice jednoduchého typu - příklad 1 .................................................... 10 XML Schema - definice jednoduchého typu - příklad 2 .................................................... 10 XML Schema - jednoduché typy - "union" .................................................................... 11 XML Schema - jednoduché typy - seznam hodnot .......................................................... 11 XML Schema - definice složeného typu ........................................................................ 11 XML Schema - definice složeného typu - skupiny .......................................................... 12 XML Schema - definice složeného typu - skupiny atributů ............................................... 12 XML Schema - použití skupin .................................................................................... 12 XML Schema - kompozitor "sequence" ........................................................................ 12 XML Schema - kompozitor "choice" ............................................................................ 13 XML Schema - kompozitor "all" ................................................................................. 13 XML Schema - jednoduchý obsah elementu .................................................................. 13 XML Schema - smíšený obsah elementu ....................................................................... 14 XML Schema - další možnosti .................................................................................... 14 XPath; validace a schémata XML dat 2 XML Schema - anotace schémat ................................................................................. 14 XML Schema - znovupoužití definice schématu ............................................................. 14 XML Schema - abstraktní a konečné typy ..................................................................... 15 XML Schema - jmenné prostory .................................................................................. 15 XML Schema - nespecifikované elementy a atributy ....................................................... 15 XML Schema - odkaz na definici schématu ................................................................... 15 Relax NG ........................................................................................................................ 16 Relax NG - motivace ................................................................................................ 16 Relax NG - základní zdroje informací .......................................................................... 16 Jazyky schémat používající vzory ........................................................................................ 16 Schematron .............................................................................................................. 16 Examplotron ............................................................................................................ 16 Ostatní jazyky schémat ...................................................................................................... 16 DSD 2.0 .................................................................................................................. 16 Vyjadřovací síla těchto modelů, jejich nedostatky ........................................................... 16 Nástroje na validaci XML dat modelovaných podle těchto standardů .................................. 17 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 * Vybrat třetí uzel b: //b[3] * Vybrat uzel b, který má potomka c: XPath; validace a schémata XML dat 3 //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) [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!!! XPath; validace a schémata XML dat 4 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::* Příklad osa descendant Příklad 3. //b/descendant::* XPath; validace a schémata XML dat 5 Příklad osa parent Příklad 4. //d/parent::* Příklad osa ancestor Příklad 5. //d/ancestor::* Příklad osa following-sibling Příklad 6. //b/following-sibling::* XPath; validace a schémata XML dat 6 Příklad osa preceding-sibling Příklad 7. //b/preceding-sibling::* Příklad osa following Příklad 8. /a/b/c/following::* Příklad osa preceding Příklad 9. /a/b/e/preceding::* XPath; validace a schémata XML dat 7 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 * @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 XPath; validace a schémata XML dat 8 * .. 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ě * 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] XPath; validace a schémata XML dat 9 * Booleovské funkce [http://www.fi.muni.cz/~tomp/xml03/xpath20/boolean.html] Specifikace a validita XML Aktuální specifikace XML * Původní specifikace (W3C Recommendation) XML 1.0 na W3C: http://www.w3.org/XML/ * 4th Edition (aktualizace, opravy, ne změny) na Extensible Markup Language (XML) 1.0 (Fourth Edition) [http://www.w3.org/TR/2006/REC-xml-20060816/] * výborná komentovaná verze téhož na XML.COM (Annotated XML): http://www.xml.com/pub/a/axml/ axmlintro.html * XML 1.1 (Second Edition) [http://www.w3.org/TR/2006/REC-xml11-20060816/] - změny indukované zavedením UNICODE 3, lepší možnosti normalizace, upřesnění postupu manipulace se znaky ukončení řádku. XML 1.1 není už vázaný na konkrétní verzi UNICODE, ale vždy na verzi poslední. Jakou verzi použít? Jakou verzi specifikace bychom měli v nových aplikacích používat? Odpověď dává W3C XML Core Working Group [http://www.w3.org/XML/Core/#Publications]: * nepíšeme-li parser, ale aplikaci, která generuje nebo vytváří XML (editor), používejme XML 1.0 (zpětná kompatibilita) * nové parsery by měly umět XML 1.1 Validita XML dokumentů * Opakování: každý XML dokument MUSÍ být správně utvořený (well formed) * Nové: XML dokument může být platný (valid) dokument: Platný podle specifikace znamená přísnější omezení než správně utvořený. Obvykle se validitou myslí soulad s DTD (Document Type Definition) dokumentu nebo (moderněji) - soulad s XML Schematem, případně jinými schématy (RelaxNG, Schematron). XML Schema XML Schema - základní zdroje informací Specifikace XML Schema - http://www.w3.org/XML/Schema Tutoriál Using W3C XML Schema: http://www.xml.com/pub/a/2000/11/29/schemas/part1.html - stručný XML Schema Tutorial - http://www.w3schools.com/schema/default.asp - obsáhlejší vynikající komplexní tutoriál na http://www.xfront.com XPath; validace a schémata XML dat 10 XML Schema - motivace Dát silnější prostředek pro specifikaci modelu XML dat než je DTD; mít možnost: * Oddělit koncept typu (např. typu elementu) od jeho výskytu (instance, např. elementu s určitým názvem) - to DTD neumí * Poskytnout bohatší škálu primitivních datových typů * Umožnit použití jmenných prostorů * Umožnit jemnější specifikaci modelu obsahu (elementů) * Umožnit odvozování nových typů (dědičností) * Umožnit modularizaci a znovupoužitelnost schémat * Zapisovat schéma v XML XML Schema - hlavička definice schématu .../... XML Schema - přiřazení typu elementu s daným názvem ... definice typu - je přímo zde - tzv. "local" nebo daná odkazem - tzv. "global XML Schema - definice jednoduchého typu * Neobsahuje dceřinné elementy, lze použít jako typ obsahu elementu nebo atributu * Lze definovat restrikcí z existujícího typu ... XML Schema - definice jednoduchého typu - příklad 1 Restrikce délky obsahu XML Schema - definice jednoduchého typu - příklad 2 Restrikce obsahu regulárním výrazem XPath; validace a schémata XML dat 11 XML Schema - jednoduché typy - "union" Zhruba odpovídá konceptu "union" v C Výsledkem je jednoduchý typ Lze spojovat bázový typ a výčet hodnot Příklad: XML Schema - jednoduché typy - seznam hodnot Lze definovat typ jako seznam hodnot oddělených bílými znaky Dalším odvozením lze omezit počet prvků seznamu Příklad XML Schema - definice složeného typu XPath; validace a schémata XML dat 12 ... Místo sekvence lze použít a XML Schema - definice složeného typu - skupiny při definici složeného typu lze použít skupiny (group) Skupina elementů: ... Místo sekvence lze použít a XML Schema - definice složeného typu - skupiny atributů Skupina atributů: ... Může být uvedena povinnost výskytu (use=required) XML Schema - použití skupin Příklad použití skupin elementů a atributů XML Schema - kompozitor "sequence" Předepisuje výskyt dceřinných elementů v určitém pořadí XPath; validace a schémata XML dat 13 .../... .../... sequence označuje model obsahu připouštějící výskyt dané posloupnosti (sekvence) dceřinných elementů xs je prefix vázaný na NS s URL http://www.w3.org/2001/XMLSchema Místo lze použít nebo XML Schema - kompozitor "choice" Předepisuje výskyt jednoho z dceřinných elementů nebo skupin elementů .../... .../... XML Schema - kompozitor "all" Předepisuje výskyt dceřinných elementů bez určeného pořadí Smí být jen na nejvyšší úrovni definice obsahu Dceřinné elementy nesmí mít kardinalitu větší než 1 Příklad: XML Schema - jednoduchý obsah elementu Příklad: XPath; validace a schémata XML dat 14 XML Schema - smíšený obsah elementu Nelze validovat textový obsah (textové dceřinné uzly) Lze validovat dceřinné elementy Příklad: XML Schema - další možnosti Možnost specifikace integritních omezení:hodnota je jedinečná - xs:uniquehodnota je klíčem xs:keyhodnota je odkazem na klíč - xs:keyref XML Schema - anotace schémat Anotace je (lidsky čitelná) poznámka-komentář ke schématu Může též obsahovat informace pro zpracování - viz příklad - xs:appinfo Další obsah není předepsán (omezen) - viz příklad - bind, class Příklad Top level element. Element racine. XML Schema - znovupoužití definice schématu Přímo: XPath; validace a schémata XML dat 15 S předefinováním: XML Schema - abstraktní a konečné typy abstract - nelze instanciovat, pouze jako zákad k odvozování dědičností final - nelze rozšiřovat/odvozovat dědičností XML Schema - jmenné prostory Příklad .../... XML Schema - nespecifikované elementy a atributy Umožní připustit i něco, co předem neznáme Příklad Pro atributy - xs:anyAttribute XML Schema - odkaz na definici schématu Relax NG Relax NG - motivace XML Schema: * Je (zbytečně) složité (specifikace má přes 200 stran) * Může vést v jistých situacích k nejednoznačnostem. * Snaží se o pokrytí všech aplikačních oblastí (dokumentové i databázové použití XML a všechno mezi tím). * Obtížně (úplně) implementovatelné. * Dále viz http://www.xml.com/lpt/a/2002/01/23/relaxng.html Relax NG - základní zdroje informací Vznikl z RELAXu při skupině OASIS-OPEN: * http://www.oasis-open.org/committees/relax-ng Jazyky schémat používající vzory Schematron Schematron home page [http://www.ascc.net/xml/resource/schematron/schematron.html] Examplotron Examplotron home page [http://examplotron.org] Ostatní jazyky schémat DSD 2.0 Vznikl na Univerzitě v Aarhusu, DK Podobně jako RELAX NG je jednodušší než XML Schema viz http://www.brics.dk/~amoeller/XML/ Spíše akademický charakter, skutečnými soupeři zůstávají XML Schema a RELAX NG Vyjadřovací síla těchto modelů, jejich nedostatky viz http://www.xml.com/lpt/a/2001/12/12/schemacompare.html XPath; validace a schémata XML dat 17 Nástroje na validaci XML dat modelovaných podle těchto standardů Nástroje na validaci XML dat modelovaných podle těchto standardů