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ů