XML Schema |
Recommandation du W3C : Mai 2001
XML Schema Part 0 : Primer
XML Schema Part 1 : Structure
XML Schema Part 2 : Datatypes
Un langage pour définir la structure et le typage des documents
Une syntaxe XML
Destinée à remplacer la DTD
Introduit des types simples : integer, float, string, énumération, date, etc.
Définition de type par extension de types existant
Une touche objet pour le typage : spécialisation
![]() |
XML/XML Schema 17/9/2002 |
1/20 |
Type complexe |
Déclaration d'un élément book :
<xsd:schema xmls:xsd="http://www.w3.org/2001/XMLSchema" xmls:s='http://www.inria.fr/acacia'> <xsd:element name="book" type="s:bookType"/> |
<!-- Déclaration de son type bookType-->
<xsd:complexType name='bookType'> <xsd:sequence> <xsd:element name='author' type='s:author'/> <xsd:element name='title' type='string'/> <xsd:element name='publisher' type='string'/> <xsd:element name='year' type='integer'/> </xsd:sequence> <xsd:attribute name='id' type='string'/> </xsd:complexType> <xsd:schema> |
Elément book dans un document
<s:book id='...'> <s:author> <s:name>J. M. Keynes</s:name> </s:author> <s:title>General Theory ...</s:title> <s:publisher>...</s:publisher> <s:year>...</s:year> <s:book> |
![]() |
XML/XML Schema 17/9/2002 |
2/20 |
Type complexe avec choix |
<xsd:complexType name='bookType'> <xsd:sequence> <xsd:element name='author' type='s:author'/> <xsd:element name='title' type='string'/> <xsd:element name='publisher' type='string'/> <xsd:choice> <xsd:element name='year' type='gYear'/> <xsd:element name='date' type='date'/> </xsd:choice> </xsd:sequence> <xsd:attribute name='id' type='string'/> </xsd:complexType> |
![]() |
XML/XML Schema 17/9/2002 |
3/20 |
Déclaration sans ordre |
Tous les éléments doivent apparaitre zéro ou une fois, dans n'importe quel ordre
<xsd:complexType name="bookType"> <xsd:all> <xsd:element name='author' type='s:author'/> <xsd:element name='title' type='string'/> <xsd:element name='publisher' type='string'/> <xsd:element name='year' type='gYear'/> </xsd:all> <xsd:attribute name='id' type='string'/> </xsd:complexType> |
![]() |
XML/XML Schema 17/9/2002 |
4/20 |
Facettes d'occurrence |
Pour un élément
<xsd:element name="date" type="integer" minOccurs="0" maxOccurs="1" fixed="2000" default="2000"/> |
Pour un attribut
<xsd:attribute name="price" type="integer" use="required | optional | fixed | default" value="123"/> |
![]() |
XML/XML Schema 17/9/2002 |
5/20 |
Types simples |
|
|
![]() |
XML/XML Schema 17/9/2002 |
6/20 |
Type simple étendu |
Spécification d'un motif à l'aide d'expression régulière
Date sous la forme : 16-10-1959
<xsd:simpleType name="Date"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{2}-\d{2}-\d{4}"/> </xsd:restriction> </xsd:simpleType> |
Code sous la forme : Catch-22
<xsd:simpleType name="code"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[A-Za-z]{5}-\d{2}"/> </xsd:restriction> </xsd:simpleType> |
![]() |
XML/XML Schema 17/9/2002 |
7/20 |
Type énuméré |
<xsd:simpleType name="Region"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Alsace"/> <xsd:enumeration value="Centre"/> <xsd:enumeration value="Languedoc-Roussillon"/> <xsd:enumeration value="PACA"/> <!-- etc ... --> </xsd:restriction> </xsd:simpleType> |
![]() |
XML/XML Schema 17/9/2002 |
8/20 |
Type liste |
<xsd:simpleType name="ListeRegion"> <xsd:list itemType="Region"/> </xsd:simpleType> <xsd:element name="regions" type="ListeRegion"/> |
Elément de type liste de régions :
<regions>Alsace PACA</regions> |
![]() |
XML/XML Schema 17/9/2002 |
9/20 |
Type simple avec attribut |
Déclaration d'un élément de type simple avec attribut
<xsd:element name="price"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="currency" type="xsd:string" /> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> |
Elément
<price currency="EUR">423.46</> |
![]() |
XML/XML Schema 17/9/2002 |
10/20 |
Type dérivé par extension |
Un type peut être dérivé d'un autre par extension
Ici on ajoute un élément URI à un type bookType
<xsd:complexType name='eBookType'> <xsd:complexContent> <xsd:extension base='bookType'> <xsd:sequence> <xsd:element name='URI' type='uriReference'/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> |
![]() |
XML/XML Schema 17/9/2002 |
11/20 |
Utiliser un type dérivé dans un document |
Déclaration d'un élément item de type bookType
<xsd:element name="item" type="bookType"/> |
Elément item standard (i.e. de type bookType):
<s:item> <s:author> ...</s:author> ... <s:date>..</s:date> </s:item> |
Elément item de type eBookType :
<s:item xsi:type="eBookType"> <s:author> ...</s:author> ... <s:date>..</s:date> <s:URI> ...</s:URI> </s:item> |
Si l'on utilise un type dérivé dans le document, à la place du type de base, il faut le signaler.
![]() |
XML/XML Schema 17/9/2002 |
12/20 |
Contrainte d'intégrité : unicité |
La valeur de l'attribut code des éléments regions/zip est unique
<xsd:unique name="dummy1"> <xsd:selector xpath='regions/zip'/> <xsd:field xpath='@code'/> </xsd:unique> |
![]() |
XML/XML Schema 17/9/2002 |
13/20 |
Contrainte d'intégrité : clé et référence |
Toute clé référencée doit être définie. Exemple : référence bibliographique
<para>....<bibref code="Corby1999"/> ...</para> <bibliography> <bibitem code="Corby1999"> <author>Olivier Corby</author> ... </bibitem> </biliograpgy> |
Définition de la clé bibitem/@code et de la référence bibref/@code
<xsd:key name="bib"> <xsd:selector xpath='bibitem'/> <xsd:field xpath='@code'/> </xsd:key> <xsd:keyref name="dummy" refer="bib"> <xsd:selector xpath='bibref'/> <xsd:field xpath='@code'/> </xsd:keyref> |
![]() |
XML/XML Schema 17/9/2002 |
14/20 |
Autres |
Equivalence entre éléments :
<xsd:element name="comment" type="string" /> <xsd:element name="shipComment" type="string" substitutionGroup="ipo:comment" /> <xsd:element name="customerComment" type="string" substitutionGroup="ipo:comment" /> |
Groupe d'éléments
<xsd:group name="shipAndBill"> <xsd:sequence> <xsd:element name="shipTo" type="USAddress" /> <xsd:element name="billTo" type="USAddress" /> </xsd:sequence> </xsd:group> <xsd:group ref="shipAndBill" /> |
Groupe d'attributs
<xsd:attributeGroup name="ItemDelivery"> <xsd:attribute name="partNum" type="SKU"/> <xsd:attribute name="weightKg" type="xsd:decimal"/> </xsd:attributeGroup> <xsd:attributeGroup ref="ItemDelivery"/> |
![]() |
XML/XML Schema 17/9/2002 |
15/20 |
Autres |
Union type
<xsd:simpleType name="zipUnion"> <xsd:union memberTypes="USState listOfMyIntType"/> </xsd:simpleType> |
Union of different kinds of types :
<xsd:simpleType> <xsd:union> <xsd:simpleType> <xsd:restriction base='nonNegativeInteger'/> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base='string'> <xsd:enumeration value='unbounded'/> </xsd:restriction> </xsd:simpleType> </xsd:union> </xsd:simpleType> |
![]() |
XML/XML Schema 17/9/2002 |
16/20 |
Autres |
Mixed content :
<xsd:element name="letterBody"> <xsd:complexType mixed="true"> <xsd:element .> </xsd:complexType> </xsd:element> |
Any type :
<xsd:element name='anything' type='xsd:anyType'> <xsd:element name='anything'/> |
Empty content type:
<xsd:element name='vacuum'> <xsd:complexType> <xsd:attribute .> </xsd:complexType> </xsd:element> |
null content :
<xsd:element name="shipDate" type="xsd:date" nillable="true"/> <shipDate xsi:nil="true"></shipDate> |
![]() |
XML/XML Schema 17/9/2002 |
17/20 |
Autres |
Abstract : ne peut être utilisé dans un document :
<xsd:element name="comment" type="string" abstract="true"/> <xsd:complexType name="Vehicle" abstract="true"/> |
Limiter la dérivation de types :
<xsd:complexType name="Address" final="restriction|extension|#all"> |
Limiter l'utilisation d'un type dérivé à la place d'un type de base dans un document :
<xsd:complexType name="Address" block='restriction|extension|#all'> |
![]() |
XML/XML Schema 17/9/2002 |
18/20 |
Autres |
targetNamespace
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace='http://www.inria.fr/acacia'> ... </schema> |
Référence au schema dans un document
<s:document xmls:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.inria.fr/acacia http://www.inria.fr/acacia/pub/schema.xsd' xmls:s='http://www.inria.fr/acacia'> .... </s:document> |
documentation
<xsd:annotation> <xsd:documentation>XML Schema is not de la tarte</xsd:documentation> </xsd:annotation> |
![]() |
XML/XML Schema 17/9/2002 |
19/20 |
Autres |
<xsd:any namespace='a namespace | ##targetNamespace | ##any | ##local | ##other' processContents='skip | lax | strict'/> <xsd:anyAttribute namespace='...'/> length, minLength, maxLength totalDigits fractionDigits prohibited <xsd:include schemaLocation='http://...' /> <xsd:redefine schemaLocation='http://...'/> elementFormDefault='qualified' for local elements only attributeFormDefault='qualified' for local attributes only form='qualified' blockDefault='#all' global definition and ref='' multiple local definitions of element with same name and different types |
![]() |
XML/XML Schema 17/9/2002 |
20/20 |