XML Schema Irena Mlýnková
Obsah XML – úvod, příklad, základní pojmy DTD – přehled XML Schema – podrobně
XML
Úvod XML = eXtensible Markup Language (W3C) Podmnožina SGML omezená pravidly Prvky: –Elementy = počáteční a koncová značka, prázdný –Atributy = část počátečního elementu, název + hodnota –XML deklarace = verze XML, znaková sada… –Komentáře –Sekce CDATA – znaky, &… –Instrukce pro zpracování – pro nadřazený program
Příklad O mé rodině a jiné zvířeně Gerald Durrell
Základní pojmy Správně strukturovaný (well-formed) dokument = splňuje základní syntaktická pravidla: –Neprázdné elementy uzavřeny mezi obě značky –Správné uzávorkování značek –Dokument má právě jeden kořenový element Přípustnou strukturu definujeme XML schématem (v různých jazycích – DTD, XML Schema) Poznámka: XML schéma vs. XML Schema Validní dokument = dokument odpovídající danému XML schématu
DTD
Definice a připojení k dokumentu – definice uvnitř dokumentu – připojení souboru s DTD k dokumentu <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" " – veřejný identifikátor
Elementy Název + model obsahu: –Jednoduchý – EMPTY (prázdný), ANY (libovolný), #PCDATA (textový) –Elementový – seznam (,) nebo výběr (|) z elementů + jejich četnosti (*, +, ?) –Jejich kombinace (závorky, smíšený obsah)
Atributy (1) Název + datový typ + výskyt + implicitní hodnota Datové typy: –CDATA (text) –ID (v rámci dokumentu jednoznačné id), IDREF, IDREFS, (odkaz / seznam odkazů na id) –ENTITY, ENTITIES (odkaz / seznam odkazů na entity) –NMTOKEN, NMTOKENS (jednoslovná hodnota / seznam hodnot z písmen, číslic a znaků ‘.’ ‘:’ ‘_’ atd.) –NOTATION (odkaz na deklarovanou notaci, tj. popis ne-XML dat) –Skupina přípustných hodnot
Atributy (2) Povinnost výskytu: –#REQUIRED (povinný), #IMPLIED (nepovinný, hodnotu doplní aplikace), #FIXED (fixní hodnota) Implicitní hodnota – pokud není #REQUIRED nebo #IMPLIED <!ATTLIST kniha typ (povídky|román|poezie) #REQUIRED cena CDATA #IMPLIED> <!ATTLIST obrázek src CDATA "unspecified.gif">
Entity (1) Textové: (interní x externí) … &program; … &kapitola; … Binární: (externí) –Odkazujeme přes atributy ENTITY, ENTITIES
Entity (2) Zabudované: < ( ) & (&) " (") ' (‘) Znakové: lib. znak – např. = mezera Parametrické: (interní x externí) <!ENTITY % společné-atributy "jazykCDATA #IMPLIED utajení (veřejné|tajné) "veřejné">
Další prvky Notace – deklarace ne-XML formátu, který smí být použit (odkazujeme přes atribut NOTATION nebo parametr NDATA binárních entit) Podmíněné sekce – vypuštění části textu, –nebo pomocí entit
XML Schema
Motivace (1) Nevyžaduje speciální syntaxi (XML schémata = XML dokumenty) Silná podpora datových typů, umožňuje specifikovat vlastní uživatelsky definované typy Je možné opakovaně využívat již definované prvky Umožňuje přesné vyjádření počtu výskytů Mnoho objektově-orientovaných prvků Umožňuje definovat elementy se stejným názvem, ale různým obsahem
Motivace (2) Umožňuje specifikovat unikátnost obsahu elementu, hodnoty atributu nebo jejich kombinace v rámci požadované části XML dokumentu Zachovává většinu prvků jazyka DTD
Úvod Elementy definujeme pomocí elementů: (–) Komplikace v pojmech (+) XML schéma v jazyce XML Schema = XML dokument validní vůči DTD jazyka XML Schema (+) Silný nástroj Využívá se jmenných prostorů Tutéž věc je možné definovat několika způsoby (+/–)
Jmenné prostory Jmenný prostor = prostor v němž jsou jména elementů / atributů unikátní Identifikovány svým URI XML schéma můžeme definovat pomocí různých sad značek (množin elementů a atributů) xmlns: >= >... Určení jmenného prostoru pro element a jeho podelementy >: >... Použití prvku Implicitní sada značek – bez prefixu
Příklad <ceník:nabídka xmlns:ceník=" xmlns:bib=" O mé rodině … Gerald Durrell …
Připojení k dokumentu <KorenovyElement xmlns=" xmlns:xsi=" xsi:schemaLocation=" schema1.xsd">... Nemá-li schéma cílový jmenný prostor, pak: xs:noNamespaceSchemaLocation="schema2.xsd"
Kořenový element (1) Globální elementy (na první úrovni v dokumentu) Globálně definované prvky (spec. použití – viz. dále) <xs:schema xmlns=" xmlns:xs=" targetNamespace="
Kořenový element (2) version – verze schématu targetNamespace – URI vytvářeného (cílového) jmenného prostoru finalDefault – implicitní hodnota atributu final v celém schématu (viz. dále) blockDefault – implicitní hodnota atributu block v celém schématu (viz. dále) elementFormDefault – implicitní hodnota atributu form všech elementů ve schématu (viz. dále) attributeFormDefault – implicitní hodnota atributu form všech atributů ve schématu (viz. dále)
Elementy (1)
Elementy (2) name – název elementu type – datový typ elementu (x podelementem) ref – odkaz na globálně deklarovaný element nillable – příznak, zda smí (tj. ne empty element) být instance elementu uvedena bez obsahu default – implicitní hodnota elementu uvedeného bez obsahu (pro elementy s jednoduchými typy) fixed – konstantní (jediná možná) hodnota elementu (pro elementy s jednoduchými typy)
Elementy (3) minOccurs – minimální nutný počet výskytů elementu na daném místě maxOccurs – maximální možný počet výskytů elementu na daném místě form – příznak, zda musí být název elementu uváděn s prefixem cílového jmenného prostoru (qualified) nebo ne (unqualified)
Atributy (1) Součástí definice složeného typu (viz. dále) elementu <xs:attribute name="Věk" type="xs:positiveInteger"/> Typ určujeme atributem type nebo podelementem Pouze jednoduché typy Globálně x lokálně definované
Atributy (2) name – název atributu type – datový typ atributu ref – odkaz na globálně definovaný atribut default – implicitní hodnota atributu, není-li uveden fixed – konstantní (jediná možná) hodnota atributu use – nepovinný (optional), povinný (required), nebo zakázaný (prohibited) výskyt atributu form – příznak zda musí být název atributu uváděn s prefixem cílového jmenného prostoru (qualified) nebo ne (unqualified)
Atributy (3) use="prohibited"... <xs:attribute name="radius" type="xs:nonNegativeInteger" use="prohibited"/>...
Jednoduché typy (1) Neobsahují elementy ani atributy Omezení řetězce na množinu přípustných hodnot Vestavěné x uživatelsky definované –Vestavěné = základní x odvozené Typy převzaté z DTD (ID, ENTITY…) – pouze pro atributy
Jednoduché typy (2) – vestavěné, základní string – Řetězec znaků boolean – Logické hodnoty true a false, popř. 1 a 0 decimal – Kladné nebo záporné reálné číslo float – 32-bitové kladné nebo záporné reálné číslo vyjádřené pomocí mantisy a exponentu double – 64-bitové číslo -//- duration – Časový úsek ve tvaru PnYnMnDTnHnMnS, kde P a T jsou oddělovače, nY znamená n let apod.
Jednoduché typy (3) – vestavěné, základní dateTime – Datum a čas ve tvaru YYYY-MM- DDThh:mm:ss.ss, T je oddělovač time – Čas ve tvaru hh:mm:ss.ss date – Datum ve tvaru YYYY-MM-DD gYearMonth – Měsíc v roce ve tvaru YYYY-MM gYear – Rok ve tvaru YYYY gMonthDay – Den v měsíci ve tvaru MM-DD gMonth – Měsíc ve tvaru MM gDay – Den ve tvaru DD
Jednoduché typy (4) – vestavěné, základní hexBinary – Hexadecimální číslo base64Binary – Binární data s kódováním Base64 anyURI – Absolutní nebo relativní URI QName – XML Qualified Name, tj. řetězec ve tvaru >: >, kde > je označení jmenného prostoru a > je prvek patřící do daného jmenného prostoru NOTATION – z DTD
Jednoduché typy (5) – vestavěné, odvozené od typu string normalizedString – Řetězec (string), který neobsahuje znaky CR, LF a tabulátor token – Řetězec (normalizedString), který nemá mezery na začátku ani na na konci a neobsahuje posloupnost mezer delší než jedna language – Identifikátor jazyka (např. en, en-GB) Name –XML Name, tj. řetězec, který smí obsahovat písmena, číslice, ‘-’ ‘_’ ‘:’ a ‘.’ NCName –XML Name, které nesmí obsahovat ‘:’ NMTOKEN, NMTOKENS, ID, IDREF, IDREFS, ENTITY, ENTITIES – z DTD
Jednoduché typy (6) – vestavěné, odvozené od typu decimal integer – Kladné nebo záporné celé číslo positiveInteger – Kladné celé číslo negativeInteger – Záporné celé číslo nonPositiveInteger – Nekladné celé číslo nonNegativeInteger – Nezáporné celé číslo long – Celé číslo z intervalu – 2^63, 2^63 – 1 int – Celé číslo z intervalu – 2^31, 2^31 – 1 short – Celé číslo z intervalu – 2^15, 2^15 – 1 byte – Celé číslo z intervalu – 2^7, 2^7 – 1
Jednoduché typy (7) – vestavěné, odvozené od typu decimal unsignedLong – Nezáporné číslo < 2^64 unsignedInt – Nezáporné číslo < 2^32 unsignedShort – Nezáporné číslo < 2^16 unsignedByte – Nezáporné číslo < 2^8
Jednoduché typy (8) – uživatelsky definované Odvozené restrikcí, seznamem nebo sjednocením (viz. dále) Definujeme pomocí elementu simpleType –name – název jednoduchého typu –final – z datového typu není možné odvozovat další typy restrikcí (restriction), seznamem (list), sjednocením (union) nebo libovolným způsobem (#all)
Jednoduché typy (9) – odvození restrikcí Nastavíme omezení hodnot pomocí parametrů (viz. dále) Původní typ určíme atributem base nebo podelementem Nový typ je podmnožinou původního
Jednoduché typy (10) – odvození restrikcí length, minLength, maxLength – Počet jednotek daného typu (např. znaků v řetězci) pattern – Regulární výraz enumeration – Explicitně vyjmenovaná množina povolených hodnot daného typu whiteSpace – Zpracování bílých znaků v řetězci – preserve (žádné změny), replace (znaky CR, LF a tabulátor jsou nahrazeny mezerou), collapse (navíc odstraněny mezery na začátku a na konci řetězce a posloupnosti mezer nahrazeny jednou mezerou)
Jednoduché typy (11) – odvození restrikcí maxInclusive, minInclusive, maxExclusive, minExclusive – Hodnoty datového typu musí být =, zadaná hodnota totalDigits – Maximální počet cifer fractionDigits – Maximální počet cifer za desetinnou čárkou
Jednoduché typy (12) – odvození restrikcí
Jednoduché typy (13) – odvození seznamem Vytvoření typu „seznam hodnot původního typu“ (který není seznamem) oddělených mezerami NMTOKENS, IDREFS, ENTITIES – vestavěné Původní typ určíme atributem itemType nebo podelementem
Jednoduché typy (14) – odvození sjednocením Vytvoření typu „sjednocení hodnot všech určených datových typů“ Sjednocované typy určíme atributem memberTypes nebo jako podelementy <xs:union memberTypes="xs:positiveInteger xs:negativeInteger"/>
Jednoduché typy (15) – odvození sjednocením
Složené typy (1) Vztahy element-podelement, element-atribut Varianty obsahu složeného typu: (viz. dále) –S jednoduchým obsahem –Se složeným obsahem –Posloupnost elementů –Množina elementů –Výběr z elementů –Modelová skupina
Složené typy (2) <xs:attribute name="Zeme" type="xs:NMTOKEN„ default="CZ"/>
Složené typy (3) name – název složeného datového typu mixed – příznak smíšeného obsahu abstract – příznak, zda složený typ smí být přiřazen elementu block – za element s tímto datovým typem není možné substituovat elementy odvozené restrikcí (restriction), rozšířením (extension) nebo libovolným způsobem (#all) final – z datového typu není možné odvozovat další typy rozšířením (extension), restrikcí (restriction) nebo libovolným způsobem (#all)
Složené typy (4) – s jednoduchým obsahem Rozšíření jednoduchého datového typu o atributy Restrikce jiného složeného typu s jednoduchým obsahem, tj. restrikci jeho obsahu
Složené typy (5) – s jednoduchým obsahem
Složené typy (6) – se složeným obsahem Obsahuje rozšíření nebo restrikci některého z následujících čtyř typů složeného typu –Restrikce znamená vytvoření nového složeného typu, který je podmnožinou typu původního (např. omezením hodnot, omezením počtu výskytů apod.) –Rozšířením vznikne složený typ, který obsahuje původní i nový typ (jeho prvky) v tomto pořadí
Složené typy (7) – se složeným obsahem (rozšíření) <xs:element name="Jmeno„ type="xs:string"/> <xs:element name="Prijmeni" type="xs:string"/> <xs:element name="Poznamka" type="xs:string" minOccurs="0"/> <xs:attribute name="Id" type="xs:ID"/> <xs:element name="Obor" type="xs:string"/> <xs:element name="Rocnik" type="xs:positiveInteger"/>
Složené typy (8) – se složeným obsahem (restrikce)
Složené typy (9) – posloupnost elementů Množina elementů, posloupností, výběrů… s pořadím Sekvence (i elementy) mohou mít dané počty výskytů
Složené typy (10) – výběr z elementů Výběr z elementů, posloupností, výběrů… V dokumentu se vyskytuje jedna možnost Prvky výběru mohou mít vícenásobný výskyt
Složené typy (11) – množina elementů Množina elementů (pouze) s libovolným pořadím Max. počet výskytů každého elementu je 1
Složené typy (12) –modelová skupina Jako podelement obsahuje posloupnost, výběr nebo množinu elementů Vždy deklarována globálně (= účel)
Složené typy (13) –modelová skupina name – název modelové skupiny ref – odkaz na globálně definovanou modelovou skupinu (totéž by šlo i pro elementy samotné) minOccurs, maxOccurs
Skupiny atributů (1) Asociace názvu s množinou atributů Umožňuje využít stejnou skupinu atributů opakovaně
Skupiny atributů (2) Totéž by šlo i pro atributy samotné
Substituční skupiny (1) <xs:element name="Kniha" type="TypKniha" substitutionGroup="Publikace"/> <xs:element name="Casopis" type="TypCasopis" substitutionGroup="Publikace"/>
Substituční skupiny (2) <Knihovna xmlns=" xmlns:xsi=" Illusions: The Adventures of a Reluctant Messiah Richard Bach Natural Health 1999 The First and Last Freedom J. Krishnamurti
Substituční skupiny (3) Elementy musí mít stejný typ nebo typ odvozený od typu vedoucího elementu Substituce elementů = řeší substituční skupiny, nahrazení celého elementu jiným –viz. předchozí příklad vs. Substituce typů = implicitně, nahrazení obsahu (typu) elementu odvozeným obsahem (typem) –viz. následující příklad
Substituční skupiny (4) <Knihovna xmlns=" xmlns:xsi=" Staying Young Forever Karin Granstrom Jordan, M.D Illusions The Adventures of a Reluctant Messiah Richard Bach
Substituční skupiny (5) block –substitution = za element nelze substituovat jiné elementy –extension / restriction = obsah elementu není možné nahradit žádným typem odvozeným rozšířením / restrikcí –#all = zakazuje všechny tři typy substitucí final – v substituční skupině vedoucího elementu se nesmí vyskytovat elementy, jejichž typy byly odvozeny rozšířením (extension), restrikcí (restriction) nebo libovolným způsobem (#all)
Omezení identity (1) Z DTD typy pro atributy: ID, IDREF, IDREFS XML Schema umožňuje: –Rozlišovat mezi pojmy unikátní a klíč –Definovat obsah elementu jako unikátní / klíč –Definovat unikátní neklíčové atributy –Definovat kombinaci elementu a atributu jako unikátní –Definovat část dokumentu v rámci níž je něco unikátní Asociace názvu s omezením na unikátnost / klíč Pro určování prvků a oblastí využívá jazyk XPath
Omezení identity (2) – key Klíč = je element/atribut/kombinace, pokud: –Je v dokumentu vždy obsažen (tj. minOccurs > 0) –Nemá příznak nillable="true" –Je unikátní......
Omezení identity (3) – key „V rámci elementu má každá a to je klíčem.“ Definice je vždy na konci elementu vybírá množinu jeho podelementů pro něž klíč platí (vždy právě jeden) vybírá element nebo atribut, který je klíčem (musí být alespoň jeden => daná kombinace je klíčem, např. a )
Omezení identity (4) – unique Použití stejné jako klíč Rozdíl je v tom, že pokud je hodnota v dokumentu obsažena, musí být unikátní
Omezení identity (5) – keyref
Omezení identity (6) – keyref „ z oblasti autoři/autor/nejlepšíKniha se musí odkazovat na ISBN daná klíčem PK“ Lze se odkazovat na i musí mít tolik polí kolik / se stejnými typy a pořadím Něco jako není
Zástupci – wildcards (1) Umožňují vložit na dané místo „libovolný“ element ( ) nebo atribut ( ) <xs:any namespace=" minOccurs="1" maxOccurs="unbounded" processContents="lax"/>
Zástupci (2) namespace – jmenný prostor přípustných elementů: –URI konkrétního jmenného prostoru / prostorů –Libovolný známý jmenný prostor (##any) –Cílový jmenný prostor schématu (##targetNamespace) –Prostor jiný než cílový jmenný prostor (##other) –Elementy bez prefixu jm. prostoru – libovolné (##local) processContents – způsob validace zástupců: –Přísná validace zástupců vůči jm. prostorům (strict) –Pouze vůči známým schématům jm. prostorů (lax) –Žádná validace (skip)
Externí schémata (1) Využití již definovaných schémat: – umožňuje využívat při vytváření XML schématu prvky z externího schématu – umožňuje tyto prvky předefinovat – umožňuje zahrnout do cílového jmenného prostoru prostor externího schématu Pouze jako přímé podelementy elementu
Externí schémata (2) – include schemaLocation – URI schématu, jehož prvky chceme používat Na prvky z odkazovaného schématu se lze odkazovat přes ref, type atd., jakoby byly součástí schématu Odkazovaná schémata musí mít stejný jmenný prostor jako aktuální schéma nebo žádný (tj. odkazujeme se prefixem aktuálního jmenného prostoru)
Externí schémata (3) – import Využití prvků z různých jmenných prostorů <xs:import namespace=" schemaLocation="Nikon.xsd"/> <xs:import namespace=" schemaLocation="Olympus.xsd"/>
Externí schémata (4) – redefine + prvky (simpleType, complexType, attributeGroup, group) lze předefinovat –Datové typy klasicky –Množiny => pod/nadmnožina
Anotace (1) Informace určená pro člověka / aplikaci zpracovávající dokument. Interpretace informace není definována. Hodnota A musí být větší než hodnota B
Anotace (2) source – URI externího zdroje xml:lang – jazyk externího zdroje (pro )
Větší příklad
Poznámky: Kořenový element v instancích dokumentu určit nejde (lze obejít definováním jediného globálního elementu). XML schéma v jazyce XML Schema (stejně jako DTD) pro jazyk XML Schema existuje. Čeština pro názvy elementů a atributů:
Zdroje XML 1.0 (Second Edition) XML Schema Part 0: Primer XML Schema Part 1: Structures XML Schema Part 2: Datatypes