Obsah
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)
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) - 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 specifikace bychom měli v nových aplikacích používat?
Odpověď dává W3C XML Core Working Group:
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).
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
Dát silnější prostředek pro specifikaci modelu XML dat než je DTD; mít možnost:
<xs:element name="element_name"> ... definice typu - je přímo zde - tzv. "local" nebo daná odkazem - tzv. "global" </xs:element>
Neobsahuje dceřinné elementy, lze použít jako typ obsahu elementu nebo atributu
Lze definovat restrikcí z existujícího typu
<xs:simpleType name="TypeName"> <xs:restriction base="BaseTypeName"> ... </xs:restriction> </xs:simpleType>
<xs:simpleType name="nameType"> <xs:restriction base="xs:string"> <xs:maxLength value="32"/> </xs:restriction> </xs:simpleType>
Restrikce obsahu regulárním výrazem
<xs:simpleType name="isbnType"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{10}"/> </xs:restriction> </xs:simpleType>
Zhruba odpovídá konceptu "union" v C
Lze spojovat bázový typ a výčet hodnot
<xs:simpleType name="isbnType"> <xs:union> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{10}"/> </xs:restriction> </xs:simpleType> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="TBD"/> <xs:enumeration value="NA"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType>
Lze definovat typ jako seznam hodnot oddělených bílými znaky
Dalším odvozením lze omezit počet prvků seznamu
<xs:simpleType name="isbnTypes"> <xs:list itemType="isbnType"/> </xs:simpleType> <xs:simpleType name="isbnTypes10"> <xs:restriction base="isbnTypes"> <xs:minLength value="1"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType>
<xs:complexType name="TypeName"> <xs:sequence> <xs:element ...> ... <xs:attribute ...> </xs:sequence> </xs:complexType>
při definici složeného typu lze použít skupiny (group)
<xs:group name="GroupName"> <xs:sequence> <xs:element ... /> ... </xs:sequence> </xs:group>
<xs:attributeGroup name="AttributesGroupName"> <xs:attribute ... use="required"/> ... </xs:attributeGroup>
Příklad použití skupin elementů a atributů
<xs:complexType name="bookType"> <xs:sequence> <xs:group ref="mainBookElements"/> <xs:element name="character" type="characterType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attributeGroup ref="bookAttributes"/> </xs:complexType>
Předepisuje výskyt dceřinných elementů v určitém pořadí
<xs:element name="element_name"> <xs:complexType> <xs:sequence> .../... </xs:sequence> .../... </xs:complexType> </xs:element>
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
Předepisuje výskyt jednoho z dceřinných elementů nebo skupin elementů
<xs:element name="element_name"> <xs:complexType> <xs:choice> .../... </xs:choice> .../... </xs:complexType> </xs:element>
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
<xs:complexType name="bookType"> <xs:all> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> <xs:element name="character" type="characterType" minOccurs="0" maxOccurs="unbounded"/> </xs:all> <xs:attribute name="isbn" type="isbnType" use="required"/> </xs:complexType>
<xs:element name="book"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="isbn" type="isbnType"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
Nelze validovat textový obsah (textové dceřinné uzly)
Lze validovat dceřinné elementy
<xs:element name="book"> <xs:complexType mixed="true"> <xs:all> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> </xs:all> <xs:attribute name="isbn" type="xs:string"/> </xs:complexType> </xs:element>
Možnost specifikace integritních omezení:hodnota je jedinečná -
xs:unique
hodnota je klíčem -
xs:key
hodnota je odkazem na klíč -
xs:keyref
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
<xs:annotation>
<xs:documentation xml:lang="en">Top level element.</xs:documentation>
<xs:documentation xml:lang="fr">Element racine.</xs:documentation>
<xs:appinfo source="http://example.com/foo/">
<bind xmlns="http://example.com/bar/">
<class name="Book"/>
</bind>
</xs:appinfo>
</xs:annotation>
<xs:include schemaLocation="character.xsd"/>
<xs:redefine schemaLocation="character12.xsd"> <xs:simpleType name="nameType"> <xs:restriction base="xs:string"> <xs:maxLength value="40"/> </xs:restriction> </xs:simpleType> </xs:redefine>
<xs:schema targetNamespace="http://example.org/ns/books/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bk="http://example.org/ns/books/" elementFormDefault="qualified" attributeFormDefault="unqualified"> .../... </xs:schema>
Umožní připustit i něco, co předem neznáme
<xs:complexType name="descType" mixed="true"> <xs:sequence> <xs:any namespace="http://www.w3.org/1999/xhtml" processContents="skip" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType>
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