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 <![CDATA[, ]]> znaky <, >, & Instrukce pro zpracování <?,?> pro nadřazený program
Příklad <?xml version="1.0"encoding="utf-8"?> <kniha typ="povídky" cena="127 Kč"> <název>o mérodině a jinézvířeně</název> <autor>gerald Durrell</autor> <obrázeksrc="o_me_rodine.gif"/> </kniha>
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émavs. XML Schema Validní dokument = dokument odpovídající danému XML schématu
DTD
Definice a připojení k dokumentu <!DOCTYPE koř_elem[ ]> definice uvnitř dokumentu <!DOCTYPE koř_elemsystem "mojedtd.dtd"> připojenísouboru s DTD k dokumentu <!DOCTYPE koř_elemsystem "mojedtd.dtd" [ rozšířeníprvků DTD ]> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/dtd/wml_1.1.xml"> 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) <!ELEMENT kniha (název, autor+, obrázek?)> <!ELEMENT název #PCDATA> <!ELEMENT autor #PCDATA> <!ELEMENT obrázek EMPTY>
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 srccdata "unspecified.gif">
Entity (1) Textové: (interníx externí) <!ENTITY program "SuperSoft6.0"> <!ENTITY kapitola SYSTEM "kap1.xml"> &program; &kapitola; Binární: (externí) <!ENTITY logo SYSTEM "logo.eps" NDATA "EPS"> Odkazujeme přes atributy ENTITY, ENTITIES
Entity (2) Zabudované: < (<) > (>) & (&) " (") ' ( ) Znakové: lib. znak např. = mezera Parametrické: (interníx externí) <!ENTITY % společné-atributy "jazyk CDATA #IMPLIED utajení (veřejné tajné) "veřejné"> <!ATTLIST článek %společné-atributy;>
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) <!NOTATIONTiffSYSTEM "showtiff.exe"> <!NOTATIONTeXPUBLIC " veřejný identifikátor "> Podmíněnésekce vypuštění části textu <![INCLUDE[ ]]>, <![IGNORE[ ]]> 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:<<prefix>>=<<uri sady značek>>... Určení jmenného prostoru pro element a jeho podelementy <<prefix>>:<<název prvku>>... Použitíprvku Implicitní sada značek bez prefixu
Příklad <ceník:nabídka xmlns:ceník="www.cen.cz/e-cenik" xmlns:bib="www.knihy.cz/bibliografie"> <ceník:položka ceník:dph="22%"> <bib:kniha> <bib:název>o mérodině </bib:název> <bib:autor>gerald Durrell</bib:autor> </bib:kniha> </ceník:položka> </ceník:nabídka>
Připojení k dokumentu <?xml version="1.0"encoding="utf-8"?> <KorenovyElement xmlns="http://www.mff.cuni.cz/mojeschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.mff.cuni.cz/mojeschema schema1.xsd">... </KorenovyElement> 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) <?xml version="1.0"encoding="utf-8"?> <xs:schema xmlns="http://www.mff.cuni.cz/mojeschema" xmlns:xs="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.mff.cuni.cz/mojeschema">... </xs:schema>
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) <xs:schema > <xs:element name="objednávka" type="typobjednávky"/> <xs:element name="dárek"> <xs:complextype> <xs:sequence> <xs:element name="narozeniny" type="xs:date"/> <xs:element ref="objednávka" maxoccurs= "5" /> </xs:sequence> </xs:complextype> </xs:element> </xs:schema>
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. neemptyelement) 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:complextype name="shape"> <xs:attribute name="length" type="xs:nonnegativeinteger"/> <xs:attribute name="height" type="xs:nonnegativeinteger"/> <xs:attribute name="width" type="xs:nonnegativeinteger"/> <xs:attribute name="radius" type="xs:nonnegativeinteger"/>... </xs:complextype> <xs:complextype name="box"> <xs:complexcontent> <xs:restriction base="shape"> <xs:attribute name="length" type="xs:nonnegativeinteger"/> <xs:attribute name="height" type="xs:nonnegativeinteger"/> <xs:attribute name="width" type="xs:nonnegativeinteger"/> <xs:attribute name="radius" type="xs:nonnegativeinteger" use="prohibited"/>... </xs:restriction> </xs:complexcontent> </xs:complextype>
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é, string Řetězec znaků základní boolean Logickéhodnotytrueafalse, 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,nyznamená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 tvaruhh: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 XMLQualified Name, tj. řetězec ve tvaru <<prefix>>:<<místní část>>, kde <<prefix>> je označení jmenného prostoru a <<místní část>> 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 XMLName, tj. řetězec, kterýsmí obsahovat písmena, číslice, - _ : a. NCName XMLName, 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 <xs:simpletype name="neprázdnýřetězec"> <xs:restriction base="xs:string"> <xs:minlength value="1"/> </xs:restriction> </xs:simpletype>
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í <xs:simpletype name="tvar"> <xs:restriction base="xs:string"> <xs:enumeration value="kruh"/> <xs:enumeration value="trojúhelník"/> <xs:enumeration value="čtverec"/> </xs:restriction> </xs:simpletype>
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 atributemitemtypenebo podelementem <xs:simpletype name="seznamreálnýchčísel"> <xs:list itemtype="xs:float"/> </xs:simpletype>
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:simpletype name="nenulovacelacisla"> <xs:union membertypes="xs:positiveinteger xs:negativeinteger"/> </xs:simpletype>
Jednoduchétypy (15) odvození sjednocením <xs:simpletype name="sjednocenítypù"> <xs:union> <xs:simpletype> <xs:restriction base="xs:positiveinteger"> <xs:mininclusive value="8"/> <xs:maxinclusive value="72"/> </xs:restriction> </xs:simpletype> <xs:simpletype> <xs:restriction base="xs:string"> <xs:enumeration value="small"/> <xs:enumeration value="large"/> </xs:restriction> </xs:simpletype> </xs:union> </xs:simpletype>
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:complextype name="adresa"> <xs:sequence> <xs:element name="ulice" type="xs:string"/> <xs:element name="cdomu" type="xs:integer"/> <xs:element name="mesto" type="xs:string"/> </xs:sequence> <xs:attribute name="zeme" type="xs:nmtoken default="cz"/> </xs:complextype>
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 Restrikcejiného složeného typu s jednoduchým obsahem, tj. restrikci jeho obsahu <xs:complextype name="typ"> <xs:simplecontent> <xs:extension base="xs:string"> <xs:attribute name="podtyp" type="xs:string"/> </xs:extension> </xs:simplecontent> </xs:complextype>
Složenétypy (5) s jednoduchým obsahem <xs:complextype name="typauta"> <xs:simplecontent> <xs:restriction base="typ"> <xs:enumeration value="audi"/> <xs:enumeration value="golf"/> <xs:enumeration value="bmw"/> <xs:attribute name="podtyp" type="xs:string"/> </xs:restriction> </xs:simplecontent> </xs:complextype>
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:complextype name="osoba"> <xs:sequence> <xs:element name="jmeno type="xs:string"/> <xs:element name="prijmeni" type="xs:string"/> <xs:element name="poznamka" type="xs:string" minoccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:id"/> </xs:complextype> <xs:complextype name="student"> <xs:complexcontent> <xs:extensionbase="osoba"> <xs:sequence> <xs:element name="obor" type="xs:string"/> <xs:element name="rocnik" type="xs:positiveinteger"/> </xs:sequence> </xs:extension> </xs:complexcontent> </xs:complextype>
Složenétypy (8) se složeným obsahem (restrikce) <xs:complextype name="publikace"> <xs:sequence> <xs:element name="název" type="xs:string"/> <xs:element name="autor" type="xs:string"maxoccurs="unbounded"/> <xs:element name="datum" type="xs:gyear"/> </xs:sequence> </xs:complextype> <xs:complextype name="publikacesjednimautorem"> <xs:complexcontent> <xs:restriction base="publikace"> <xs:sequence> <xs:element name="nazev" type="xs:string"/> <xs:element name="autor" type="xs:string"/> <xs:element name="datum" type="xs:gyear"/> </xs:sequence> </xs:restriction> </xs:complexcontent> </xs:complextype>
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ů <xs:complextype name="osoba"> <xs:sequence> <xs:element name="jmeno" type="xs:string" maxoccurs="5"/> <xs:element name="prijmeni" type="xs:string"/> <xs:element name="datumnar" type="xs:date"/> <xs:element name="poznamka" type="xs:string" minoccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:id"/> </xs:complextype>
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 <xs:complextype name="dopravniprostredek"> <xs:choice> <xs:element name="auto" type="xs:string"/> <xs:element name="vlak" type="xs:string"/> <xs:element name="letadlo" type="xs:string"/> </xs:choice> </xs:complextype>
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 <xs:complextype name="kniha"> <xs:all> <xs:element name="nazev" type="xs:string"/> <xs:element name="autor" type="xs:string"/> <xs:element name="vydani" type="xs:date"/> <xs:element name="isbn" type="xs:string"/> </xs:all> </xs:complextype>
Složenétypy (12) modelová skupina Jako podelement obsahuje posloupnost, výběr nebo množinu elementů Vždy deklarována globálně (= účel) <xs:group name="elementypropublikaci"> <xs:sequence> <xs:element name="nazev" type="xs:string"/> <xs:element name="autor" type="xs:string"/> <xs:element name="datum" type="xs:date"/> </xs:sequence> </xs:group>
Složenétypy (13) modelová skupina <xs:complextype name="kniha"> <xs:sequence> <xs:group ref="elementypropublikaci"/> <xs:element name="isbn" type="xs:string"/> <xs:element name="vydavatel" type="xs:string"/> </xs:sequence> </xs:complextype> 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ě <xs:attributegroup name="spolecneatributy"> <xs:attribute name="vypujcen" type="xs:boolean"/> <xs:attribute name="id" type="xs:id"/> </xs:attributegroup>
Skupiny atributů (2) <xs:complextype name="kniha"> <xs:sequence> <xs:element name="nazev" type="xs:string"/> <xs:element name="vydavatel" type="xs:string"/> </xs:sequence> <xs:attributegroup ref="spolecneatributy"/> </xs:complextype> Totéž by šlo i pro atributy samotné
Substituční skupiny (1) <xs:element name="publikace" type="typpublikace"/> <xs:element name="kniha" type="typkniha" substitutiongroup="publikace"/> <xs:element name="casopis" type="typcasopis" substitutiongroup="publikace"/> <xs:element name="knihovna"> <xs:complextype> <xs:sequence> <xs:element ref="publikace" maxoccurs="unbounded"/> </xs:sequence> </xs:complextype> </xs:element>
Substituční skupiny (2) <?xml version="1.0"?> <Knihovnaxmlns="http://www.books.org" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <Kniha> <Nazev>Illusions: The Adventures ofareluctant Messiah</Nazev> <Autor>Richard Bach</Autor> <ISBN>0-440-34319-4</ISBN> </Kniha> <Casopis> <Nazev>Natural Health</Nazev> <Datum>1999</Datum> </Casopis> <Kniha> <Nazev>The First and Last Freedom</Nazev> <Autor>J. Krishnamurti</Autor> <ISBN>0-06-064831-7</ISBN> </Kniha> </Knihovna>
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) <?xml version="1.0"?> <Knihovnaxmlns="http://www.books.org" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <Publikace> <Nazev>Staying Young Forever</Nazev> <Autor>Karin Granstrom Jordan, M.D.</Autor> <Datum>1999</Datum> </Publikace> <Publikacexsi:type="BookType"> <Nazev>Illusions The Adventures ofareluctant Messiah</Nazev> <Autor>Richard Bach</Autor> <Datum>1977</Datum> <ISBN>0-440-34319-4</ISBN> </Publikace> </Knihovna>
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í <xs:element name="knihovna"> <xs:element name="kniha" maxoccurs="unbounded">... <xs:element name="isbn" type="xs:string"/>... </xs:element> <xs:key name="primarniklic"> <xs:selector xpath="./kniha"/> <xs:field xpath="./isbn"/> </xs:key> </xs:element>
Omezení identity (3) key V rámci elementu <knihovna> mákaždá<kniha> <ISBN> a to je klíčem. Definice je vždy na konci elementu <selector> vybírámnožinu jeho podelementů pro něžklíč platí (vždy právě jeden) <field> vybíráelement nebo atribut, kterýje klíčem (musí být alespoň jeden => daná kombinace je klíčem, např. <jméno> a <příjmení>)
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í <xs:key name="primarniklic"> <xs:selector xpath="./kniha"/> <xs:field xpath="./isbn"/> </xs:key>
Omezení identity (5) keyref <xs:element name="knihovna"> <xs:element name="kniha" maxoccurs="unbounded">... <xs:element name="isbn" type="xs:string"/>... </xs:element> <xs:element name="autor" maxoccurs="unbounded">... <xs:element name="nejlepsikniha">... <xs:element name="isbn" type="xs:string"/>... </xs:element>... </xs:element> <xs:key name="primarniklic"> <xs:selector xpath="./kniha"/> <xs:field xpath="./isbn"/> </xs:key> <xs:keyref name="ciziklic"refer="primarniklic"> <xs:selector xpath="./autor/nejlepsikniha"/> <xs:field xpath="./isbn"/> </xs:keyref> </xs:element>
Omezení identity (6) keyref <ISBN> z oblasti autoři/autor/nejlepšíkniha se musí odkazovat na ISBN daná klíčem PK Lze se odkazovat na <key> i <unique> <keyref> musí mít tolik polí<field> kolik <key>/<unique> se stejnými typy a pořadím Něco jako <keyrefs> není
Zástupci wildcards (1) Umožňují vložit na danémísto libovolný element (<any>) nebo atribut (<anyattribute>) <xs:complextype name="libovolnyhtmltext"> <xs:sequence> <xs:any namespace="http://www.w3.org/1999/xhtml" minoccurs="1" maxoccurs="unbounded" processcontents="lax"/> </xs:sequence> </xs:complextype>
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: <include> umožňuje využívat při vytváření XML schématu prvky z externího schématu <redefine> umožňuje tyto prvky předefinovat <import> umožňuje zahrnout do cílového jmenného prostoru prostor externího schématu Pouze jako přímé podelementy elementu <schema>
Externí schémata (2) include <xs:include schemalocation="librarybook.xsd"/> 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="http://www.nikon.com" schemalocation="nikon.xsd"/> <xs:import namespace="http://www.olympus.com" schemalocation="olympus.xsd"/> <xs:element name="camera"> <xs:complextype> <xs:sequence> <xs:element name="body" type="nikon:body_type"/> <xs:element name="lens" type="olympus:lens_type"/> </xs:sequence> </xs:complextype> </xs:element>
Externí schémata (4) redefine <include> + prvky (simpletype,complextype, attributegroup,group) lze předefinovat Datové typy klasicky Množiny => pod/nadmnožina <xs:redefine schemalocation="jineschema2.xsd"> <xs:simpletype name="neprázdnýřetězec"> <xs:restriction base="neprázdnýřetězec"> <xs:minlength value="5"/> </xs:restriction> </xs:simpletype> </xs:redefine>
Anotace (1) Informace určenápro člověka / aplikaci zpracovávající dokument. Interpretace informace není definována. <xs:annotation> <xs:documentation>hodnota A musí být větší než hodnota B</xs:documentation> <xs:appinfo><assert test="a > B"/></xs:appinfo> </xs:annotation>
Anotace (2) <xs:documentation source="http://www.xfront.com/bookreview.txt" xml:lang="fr"/> <xs:appinfo source="http://www.xfront.com/assertions.xml"/> source URI externího zdroje xml:lang jazyk externího zdroje (pro <documentation>)
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ů: <?xml version="1.0"encoding="utf-8"?>
Zdroje XML 1.0 (Second Edition) http://www.w3.org/tr/rec-xml XML Schema Part 0:Primer http://www.w3.org/tr/xmlschema-0/ XML Schema Part 1:Structures http://www.w3.org/tr/xmlschema-1/ XML Schema Part 2: Datatypes http://www.w3.org/tr/xmlschema-2/