Cours XML Schéma, tutoriel & guide de travaux pratiques en pdf.
XML Schéma Les premiers pas
Résumé des attributs de xsd:schema
<xsd:schema
xmlns = anyURI
id= ID
attributeFormDefault = qualified | unqualified elementFormDefault = qualified | unqualified
blockDefault = (#all|list of (extension | restriction | substitution))
finalDefault = (#all | list of (extension | restriction | list | union))
targetNamespace = anyURI
version = token
any attributes
>
((include | import | redefine | annotation)*,(((simpleType | complexType | group | attributeGroup) | element | attribute | notation),annotation*)*) </xs:schema>
Attributs de xsd:schema
xmlns
Une référence URI qui spécifie un ou plusieurs namespaces à utiliser dans ce schéma
Id
Optionnel. Signale un unique identifiant pour l’élément
targetNamespace
Optionnel. Une URI référence du namespace de ce schéma elementFormDefault
Optionnel. La valeur doit être « qualified » ou « unqualified ». « unqualified » indique que les éléments du namespace cible ne sont pas obligés d’être accompagnés d’un préfixe du namespace
attributeFormDefault
Optionnel. La valeur doit être « qualified » ou « unqualified ». … blockDefault
Optionnel. définit la valeur par défaut de l’attribut block sur l’élément et les types complexes dans le targetNamespace du schéma
finalDefault
Optionnel. Indique la valeur par défaut de l’attribut final des éléments, simpleType, et complexType dans le namespace cible
Version
Optionnel. Spécifie la version du schéma
Déclaration d’éléments
Un élément, dans un schéma, se déclare avec la balise <xsd:element>
Exemple :
<?xml version= »1.0″ ?>
<xsd:schema …>
<xsd:element name= »remarque » type= »xsd:string »/> <xsd:element name= »contacts » type= »typeContacts »/> <!– déclarations de types ici –>
</xsd:schema>
Ce schéma déclare deux éléments :
remarque et contacts
A chaque élément est associé un type via l’attribut type
remarque de type xsd:string, type simple prédéfini de XML Schema
contacts de type typeContacts, type complexe défini par l’utilisateur
Les types de données
XML Schema permet donc de spécifier des types de données bien plus finement que le langage DTD
Il distingue notamment deux types :
types simples
types complexes
Types simples
Ne peuvent comporter ni attributs, ni éléments enfants
Il en existe de nombreux, prédéfinis, mais il est également possible d’en « dériver » de nouveaux
Syntaxe de déclaration
<xs:element name= »xxx » type= »yyy »/>
Types simples : exemple
Document XML <lastname>Refsnes</lastname> <age>34</age> <dateborn>1968-03-27</dateborn>
Schéma associé
<xs:element name= »lastname » type= »xs:string »/> <xs:element name= »age » type= »xs:integer »/> <xs:element name= »dateborn » type= »xs:date »/>
Les types simples (1)
string integer
Confirm this is electric -126789, -1, 0, 1, 126789
normalizedString positiveInteger
Confirm this is electric 1, 126789
token negativeInteger
Confirm this is electric -126789, -1
byte nonNegativeInteger
-1, 126 0, 1, 126789
unsignedByte nonPositiveInteger
0, 126 -126789, -1, 0
base64Binary int
GpM7 -1, 126789675
hexBinary unsignedInt
0FB7 0, 1267896754
long boolean
-1, 12678967543233 true, false 1, 0
unsignedLong time
0, 12678967543233 13:20:00.000, 13:20:00.000-05:00
short dateTime
-1, 12678 1999-05-31T13:20:00.000-05:00
unsignedShort duration
0, 12678 P1Y2M3DT10H30M12.3S
decimal date
-1.23, 0, 123.4, 1000.00 1999-05-31
float gMonth
-INF, -1E4, -0, 0, 12.78E-2, 12, –05–
INF, NaN gYear
double
1999
-INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
gYearMonth
1999-02
gDay
—31
gMonthDay
–05-31
Name
shipTo
QName
po:USAddress
NCName
USAddress
anyURI
http://www.example.com/,
http://www.example.com/doc.html
#ID5
language
en-GB, en-US, fr
ID
« A212 »
IDREF
« A212 »
IDREFS
« A212 » « B213″
ENTITY
ENTITIES
NOTATION
NMTOKEN, NMTOKENS
US
Brésil Canada Mexique
Valeur par défaut et valeur fixée
Un élément simple peut avoir une valeur par défaut ou une valeur fixée
Une valeur par défaut est affectée si aucune autre valeur ne l’est
<xs:element name= »color » type= »xs:string » default= »red »/>
Une valeur fixée est aussi affectée mais peut être changée
<xs:element name= »color » type= »xs:string » fixed= »red »/>
Déclaration d’attributs
Les attributs sont déclarés de types simples
<xs:attribute name= »xxx » type= »yyy »/>
Seuls les éléments complexes peuvent avoir des attributs
Exemple d’élément XML
<lastname lang= »EN »>Smith</lastname>
Voici la définition correspondante de type simple
<xs:attribute name= »lang » type= »xs:string »/>
On peut également affecter une valeur par défaut <xs:attribute name= »lang » type= »xs:string » default= »EN »/>
On peut également affecter une valeur fixe
<xs:attribute name= »lang » type= »xs:string » fixed= »EN »/>
Déclaration d’attributs
Tous les attributs sont optionnels par défaut, on peut cependant les expliciter :
<xs:attribute name= »lang » type= »xs:string » use= »optional »/>
On peut les rendre obligatoires
<xs:attribute name= »lang » type= »xs:string » use= »required »/>
Déclaration d’attributs : restriction
Des restrictions sont utilisées sur les attributs pour ne tolérer que des valeurs acceptables
Les restrictions en XML sont appelées facettes
Restriction à des valeurs
Cet exemple définit un élément age avec une restriction : la valeur doit être comprise ente 0 et 100
<xs:element name= »age »> <xs:simpleType>
<xs:restriction base= »xs:integer »> <xs:minInclusive value= »0″/> <xs:maxInclusive value= »100″/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restriction à un ensemble de valeurs
Pour limiter l’étendue d’un élément de XML à un ensemble de valeurs acceptables, on a l’habitude d’utiliser l’énumération
Cet exemple montre l’élément « car » avec restriction à « Audi », « Golf » et « BMW »
<xs:element name= »car »> <xs:simpleType>
<xs:restriction base= »xs:string »> <xs:enumeration value= »Audi »/> <xs:enumeration value= »Golf »/> <xs:enumeration value= »BMW »/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restriction à un ensemble de valeurs
On peut également l’écrire comme suit :
<xs:element name= »car » type= »carType »/> <xs:simpleType name= »carType »>
<xs:restriction base= »xs:string »> <xs:enumeration value= »Audi »/> <xs:enumeration value= »Golf »/> <xs:enumeration value= »BMW »/>
</xs:restriction>
</xs:simpleType>
Dans ce cas-ci le type « carType » peut être employé par d’autres éléments parce que ce n’est pas une partie de l’élément « voiture »
Restriction à une série de valeurs
Restrictrion de « letter » à des lettres minuscules :
<xs:element name= »letter »> <xs:simpleType>
<xs:restriction base= »xs:string »> <xs:pattern value= »[a-z] »/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restriction à une série de valeurs
Restriction de « initials » à trois lettres majuscules :
<xs:element name= »initials »> <xs:simpleType>
<xs:restriction base= »xs:string »>
<xs:pattern value= »[A-Z][A-Z][A-Z] »/> </xs:restriction>
</xs:simpleType>
</xs:element>
Restriction à une série de valeurs
Restriction de « choice » à l’une des trois lettres x, y ou z :
<xs:element name= »choice »> <xs:simpleType>
<xs:restriction base= »xs:string »> <xs:pattern value= »[xyz] »/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Autres exemples de restrictions
On préserve tous les espaces dans la chaîne <xs:restriction base= »xs:string »> <xs:whiteSpace value= »preserve »/>
On remplace toutes les zones d’espaces, de tabulations, de justifications par des espaces
<xs:restriction base= »xs:string »> <xs:whiteSpace value= »replace »/>
On remplace toutes les zones d’espaces dans la chaîne par un espace
<xs:restriction base= »xs:string »> <xs:whiteSpace value= »collapse »/>