Vous êtes sur la page 1sur 111

Les Schmas XML

Plan
Introduction par un exemple Les lments du langage XMLSchema Modle de contenu d'lment Contraintes pour les attributs Dfinitions locales Rutilisation : les groupes Validation

Un exemple
DTD versus XMLSchma

Un exemple introductif
Squence

Dfinition d'un lment <item> par une DTD


<!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT item (prodName+,USPrice,shipDate?)> item partNum CDATA #implied> prodName (#PCDATA)> USPrice (#PCDATA)> item shipDate (#PCDATA)> prodName @partNum shipDate

Exemple d'instance

prodName <item partNum="124-PQ"> <prodName>imprimante</prodName> USPrice <prodName>printer</prodName> <USPrice>150</USPrice> <shipDate>10/4/04</shipDate> </item>

XML-SCHEMA 1/4
En rponse aux lacunes des DTD, une alternative a t propose comme recommandation : il sagit de XML-Data dont XML-Schema est un sousensemble. Cette nouvelle norme achve de faire dXML un format pivot La version 1.1 de XML Schema (date de mai 2001) se compose de 3 normes :
XML Schema tome 0 : Introduction XML Schema tome 1 : Structures XML Schema tome 2 : Types de donnes

XML-SCHEMA 2/4
Les documents XML-Schema sont des documents : respectant la syntaxe XML, permettant de dcrire la structure dun document XML dune faon beaucoup plus complte que les DTD. XML-Schema permet en effet de : spcifier la typologie des donnes que va contenir le document XML dcrit par le XML-Schema, grer une quarantaine de types de donnes simples, grer des types complexes, grer les occurrences des donnes.

XML-SCHEMA 3/4
Exemple de document XML-Schema :

XML-SCHEMA 4/4
Rfrence un XML-Shema dans un document XML : Lespace de nommage xsi correspond aux instances de documents XML respectant les contraintes dfinies dans un document XML-Schema. Le W3C a dfini une librairie de balises et attributs pouvant tre utiliss par ces documents.

Constituants dun XML-SCHEMA

1/8

Dclaration de lentte : Llment <xsd:schema> permet de dclarer un document XMLXchema.

<?xml version="1.0" encoding="ISO-8859-1" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--balise schema obligatoire -->

Lattribut targetNamespace permet de prciser lespace de nommage de ce type de documents. Lattribut elementFormDefault prcise si les documents XML respectant cette grammaire doivent rfrer cet espace de nommage.

Constituants dun XML-SCHEMA


Dclaration des types de donnes :

2/8

Il est possible de dclarer un type de donnes


soit dans la dclaration dun lment (local) soit hors de la dclaration de llment (global)

XML-Schema permet dutiliser des donnes :


de type prdfini (string, int) de type complexe dont le type est une restriction de type dont le type est une extension de type

Constituants dun XML-SCHEMA


Dclaration des types de donnes :

3/8

Types prdfinis :
byte, unsignedByte, hexBinary, integer, positiveInteger, negativeInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double string, NormalizedString, token boolean, anyURI, language time, dateTime, duration, date, gMonth, gYear, gYearMonth, gDay, gMonthDay ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATIN, NMTOKEN, NMTOKENS

Exemple : <xsd:element name="comment" type="xsd:string"/>

Constituants dun XML-SCHEMA


Dclaration des types de donnes :
Types complexes :

4/8

Exemple : le type de donnes TypeAdresse se compose de 6 lments Numero, Rue1, Rue2, Ville, CP et Pays :

Constituants dun XML-SCHEMA


Dclaration des types de donnes :
Restriction de type existant :

5/8

Exemple : le type de donnes string comprend 6 attributs optionnels : pattern, enumeration, length, minlength, maxlength, whitespace. Si on dsire reprsenter un choix Oui/Non (restriction sur lattribut enumeration) :

Constituants dun XML-SCHEMA


Dclaration des types de donnes :

6/8

Extension / drivation de type existant :


Exemple : si lon souhaite crer un type Personne contenant en plus du nom et du prnom, un lment de type Adresse (extension du type Adresse vu prcdemment) :

Constituants dun XML-SCHEMA


Dclaration des lments :

7/8

Constituants dun XML-SCHEMA


Dclaration des attributs :

8/8

lment racine dun schma xmlschema


<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com" xmlns="http://www.example.com"> ... ... </xs:schema>
17

XMLSchema un dialecte XML


Espace de noms du dialecte XMLSchema
http://www.w3.org/2001/XMLSchema

Prfixe recommand xs:

18

Dfinition par schmaXML


Squence <xs:element name="item"> <xs:complexType> <xs:sequence> <xs:element name="prodName" type="xs:string" maxOccurs="5"/> <xs:element name="USPrice" type="xs:decimal"/> <xs:element name="shipDate" type="xs:date" minOccurs="0"/> </xs:sequence> <xs:attribute name="partNum" type="SKU"/> </xs:complexType> Type utilisateur </xs:element>
Types prdfinis
19

Dfinition d'un type utilisateur


<! Code Produit --> <xs:simpleType name="SKU"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-[A-Z]{2}"/> </xs:restriction> </xs:simpleType>

XMLSchema est un dialecte XML


C'est plus bavard que les DTDs

20

DTD versus XMLSchema


item

prodName @partNum prodName USPrice shipDate

Plus de contraintes exprimes avec XMLSchema


Composant
prodName USPrice ShipDate @partNum

DTD
#PCDATA #PCDATA #PCDATA CDATA

XMLSchema
xs:string xs:decimal xs:date xs:string + restriction

Des types de base primitifs prdfinis Des types dfinis par l'utilisateur
xs:string, xs:decimal, xs:string,
21

Dclaration d'un type driv


Le type SKU (code produit) est dfini l'aide d'une dclaration de type drive du type xs:string
<xs:simpleType name="SKU"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}-[A-Z]{2}"/> </xs:restriction> prodName </xs:simpleType>

item

@partNum shipDate

Une contrainte sur la chane


3 chiffres + "-" + 2 lettres majuscules Exemple : 344-AB

prodName USPrice

La mme restriction pourrait s'appliquer un contenu d'lment


22

Contraintes d'occurrence dans les modles de contenu


Un modle de contenu peut contenir des contraintes d'occurrence. Exemple :
N le nombre d'lments <prodName> Contrainte : 0 N 5
<xs:element name="prodName" type="xs:string" minOccurs="0" maxOccurs="5"/>

23

Contrainte : 7 N 12
DTD
<!ELEMENT biscuit(#PCDATA)> <!ELEMENT commande(biscuit,biscuit,biscuit,biscuit, biscuit,biscuit,biscuit, biscuit?,biscuit?,biscuit?,biscuit?,biscuit?)>

XMLSchma
<xs:element name="commande"> <xs:complexType> <xs:sequence> <xs:element name="biscuit" type="xs:string" minOccurs="7" maxOccurs="12" /> </xs:sequence> </xs:complexType> </xs:element>
24

Types numrs pour les attributs


DTD
<!ELEMENT person (description du contenu de person)> <!ATTLIST person couleur (red | green ) "red">

XMLSchma

<xs:simpleType name="color"> <xs:restriction base="xs:string"> <xs:enumeration value="red"/> <xs:enumeration value="green"/> </xs:restriction> </xs:simpleType> <xs:element name="person" type="person_type"> <xs:complexType> <xs:attribute name="couleur" type="color"/> </xs:complexType> </xs:element>

25

DTD et modle de contenu d'lment


DTD
Impossible de spcifier un type numr comme contenu d'lment

XMLSchma
Comme un attribut, un contenu d'lment peut tre de type numr Exemple
<xs:element name="shoes" type="shoe_color">
26

Valeur par dfaut


Element
<xs:element name="shoes" type="shoe_color" default="red">

Attribut
<xs:attribute name="shoes" type="shoe_color" default="red">

27

DTD versus XMLSchema rsum


Plus de smantique exprime par le schma
L'lment <shipDate> contient une date L'lment <USPrice> contient un dcimal L'attribut @partNum contient une chane restreinte certains modles

Traitement orthogonale des attributs et des contenus d'lment (e.g. les types numrs) Contraintes d'occurrences plus souples
28

Vision W3C d'un schma XML


Un schma XML est construit sur deux ensembles complmentaires de constructions
Les modles de contenu
Modle de contenu vide Modle de contenu simple (que du texte) Modle de contenu complexe (que des lments) Modle de contenu mixte (texte + lments)

Les types de donnes


Type simple (attributs + lments contenu simple sans attribut) Type complexe (lments contenu simple avec attribut + tous les autres)
29

Dclaration versus dfinition


Les schma XML contiennent
Des dclarations pour les composants d'instance de document
lments Attributs Notations

Des dfinitions pour les composants internes au schma


Types Groupe modles de contenu Groupe d'attributs
30

tude des lments du langage XMLSchema

31

lment <xs:schema>
lment racine d'un schma XML
<?xml version="1.0" encoding="UTF-8"?> <xs:schema name="" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!- constructions </xs:schema>

de niveau 0 -->

Constructions de niveau 0 (composants globaux)


Des dclarations d'lment Des dfinitions de type complexes. Des dfinitions de types simples D'autres encore /
32

Composants globaux ou locaux


Les composants globaux apparaissent au premier niveau au sein de l'lment <xs:schema>
Ils sont toujours nomms (attribut name="") Leur nom doit tre unique au sein de leur type de composant

Les composants locaux


Leur nom a une porte locale au type complexe dans lequel ils sont dfinis Types simples et types complexes dfinis localement sont anonymes (ils ne peuvent tre rutiliss)
33

Conflit de noms
Deux types ne peuvent avoir le mme nom Deux lments de type diffrents dans la mme porte ne peuvent avoir le mme nom Un type et un lment peuvent avoir le mme nom

34

Type et lment de mme nom


<xs:complexType name="figure" abstract="true"> <xs:attribute name="id" type="xs:string"/> </xs:complexType> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="figure" type="a:figure" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element>
35

Type simple et type complexe


Type simple permettent de donner un type aux :
lments qui ne contiennent que du texte et sans d'attribut
Exemple <prnom>Yves</prnom>

Attributs (leur contenu n'est que textuel !)

Type complexe permettent de donner un type aux :


lments qui ne contiennent que du texte mais avec attributs
Exemple <ville codePostal="35000">Rennes</ville>

lments qui contiennent d'autres lments, contenu mixte ou non


36

lment <xs:complexeType>
Dclaration de type complexe
un modle de contenu --> <!-- des dclarations d'attributs -->
<!-</xs:complexeType> <xs:complexeType name="" mixed="">

1. Dclaration d'attribut
<xs:attribute name="" type="" use=""> L'attribut type fait rfrence un type simple L'attribut use prend une valeur parmi required, optional, prohibited

1. Modle de contenu suivre


37

Modle de contenus pour lments

38

Modle de contenu
4 sortes de modles de contenu
Contenu vide (par dfaut) Contenu simple (seulement pour les contenus caractres)
Type simple comme les attributs
<xs:simpleContent> </xs:simpleContent>

Contenu compos d'lments


Expression rgulire
Combinaison <xs:sequence>, <xs:choice>, <xs:all> Chacun contenant des rfrences lment de la forme
<xs:element ref="" minOccurs="" maxOccurs=""/>

L'attribut ref fait rfrence une dfinition d'lment

Attribut mixed="true | false" contenu mixte ou non


39

Contenu vide avec attribut


Exemple
<prnom val="yves"/>

Dfinition
<xs:element name="prnom"> <xs:complexType> <xs:attribute name="val" type="xs:string"/> </xs:complexType> </xs:element>
40

Contenu simple textuel


Exemple
<prnom>Yves</prnom>

Dfinition 1 Dfinition 2

<xs:element name= "prnom" type="xs:string"/> <xs:element name="prnom"> <xs:complexType mixed="true"/> </xs:element>

Dfinition 3

<xs:element name="prnom"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> <xs:complexType> </xs:element>


41

Contenu simple textuel avec attribut


Exemple
<ville code="35770">vern sur seiche</ville>

Dfinition
<xs:element name="ville"> <xs:complexType mixed="true"> <xs:attribute name="code" type="xs:string" /> </xs:complexType> </xs:element>
42

Autre moyen lextension dun <simpleContent>


Exemple
<ville code="35770">vern sur seiche</ville>

Dfinition
<xs:element name="ville"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="code" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
43

Contenu simple avec attribut et restriction du type de contenu (bis)


Exemple
<price currency="dollard">15.5</price>

Dfinition

<xs:element name="price"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:decimal"> <xs:attribute name="currency" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>
44

Contenu complexe Expressions rgulires


Trois oprateurs de composition
lment <xs:sequence> squence d'lments lment <xs:choice> choix d'lments lment <xs:all> permutation d'lments

45

Squence d'lments
DTD
<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT ROOT (A,B,C) > A (#PCDATA)> B (#PCDATA)> C (#PCDATA)>

XMLSchema

<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:sequence> <xs:element name="A" type="xs:string"/> <xs:element name="B" type="xs:string"/> <xs:element name="C" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
46

Choix entre lments


DTD
<!ELEMENT ROOT (A|B|C) >

XMLSchema

<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:choice> <xs:element name="A" type="xs:string"/> <xs:element name="B" type="xs:string"/> <xs:element name="C" type="xs:string"/> </xs:choice> </xs:complexType> </xs:element>
47

lment contenu mixte


DTD
<!ELEMENT ROOT (#PCDATA|A|B)*>

XMLSchema
<xs:element name="ROOT"> <xs:complexType mixed="true"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="A" type="xs:string"/> <xs:element name="B" type="xs:string"/> </xs:choice> </xs:complexType> </xs:element>
48

Expression rgulire (1)


DTD
<!ELEMENT ROOT (A|(B,C))>

XMLSchema

<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:choice> <xs:element name="A" type="xs:string"/> <xs:sequence> <xs:element name="B" type="xs:string"/> <xs:element name="C" type="xs:string"/> </xs:sequence> </xs:choice> </xs:complexType> </xs:element>
49

Expression rgulire (2)


DTD
<!ELEMENT ROOT (A?,B+,C*) >

XMLSchema

<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:sequence> <xs:element name="A" minOccurs="0"/> <xs:element name="B" maxOccurs="unbounded"/> <xs:element name="C" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> Valeurs par dfaut : 1 </xs:element>
50

Rutilisation d'un type


DTD
Modle import dans sa totalit

On utilise les entits paramtres Dclaration <!ENTITY % seqABC "A,B,C"> Utilisation <!ELEMENT root (&seqABC;)>

XMLSchema :
Un type dclar au niveau 1 de l'lment <xs:schema> Il est global, il porte un nom, il peut tre rutilis
<xs:complexType mixed="false" name="root"> <xs:sequence> <xs:element name="A" type="xs:string"/> <xs:element name="B" type="xs:string"/> <xs:element name="C" type="xs:string"/> </xs:sequence> </xs:complexType>

51

Types diffrents pour un mme lment

52

Deux types diffrents pour le mme nom dlment - 1


<xs:element name="personne1"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>

53

Deux types diffrents pour le mme nom dlment - 2


<xs:element name="personne2"> <xs:complexType> <xs:sequence> <xs:element name="nom"> <xs:complexType> <xs:sequence> <xs:element name="patronyme" type="xs:string"/> <xs:element name="prnom" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> 54

Deux types diffrents pour le mme nom dlment - 3

<xs:element name="test"> <xs:complexType> <xs:sequence> <xs:element ref="personne1"/> <xs:element ref="personne2"/> </xs:sequence> </xs:complexType> </xs:element>
55

Contraintes pour les attributs

56

Attribut chane obligatoire


DTD
<!ELEMENT ROOT EMPTY> <!ATTLIST ROOT a CDATA #REQUIRED>

XMLSchema
<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:attribute name="a" type="xs:string" use="required"/> </xs:complexType> </xs:element> obligatoire
57

Attribut chane optionnel


DTD
<!ELEMENT ROOT EMPTY> <!ATTLIST ROOT a CDATA #IMPLIED>

XMLSchema
<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:attribute name="a" type="xs:string" use="optional"/> </xs:complexType> </xs:element> optionnel

58

Type numr pour un attribut


DTD
<!ELEMENT ROOT EMPTY> <!ATTLIST ROOT a (x|y|z) #REQUIRED>

XMLSchema
<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:attribute name="a" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="x"/> <xs:enumeration value="y"/> <xs:enumeration value="z"/> </xs:restriction> Dfinition d'un type numr </xs:simpleType> Par restriction du type xs:string </xs:attribute> </xs:complexType> </xs:element>
59

Attribut valeur fixe


DTD
<!ELEMENT ROOT EMPTY> <!ATTLIST ROOT a CDATA #FIXED "x">

XMLSchema
<xs:element name="ROOT"> <xs:complexType mixed="false"> <xs:attribute name="a" type="xs:string" fixed="x"/> </xs:complexType> Valeur fixe </xs:element>

60

Types simples
Les types simples peuvent tre
Primitifs (ne drivant pas d'un autre) Drivs d'un autres type simple
Par une liste : squence de types spars par des blancs Par une union : union d'autres types simples Par une restriction :
length, minLength, maxLength (longueur de listes) enumeration (liste de valeurs) pattern (expression rgulire la Perl) whitespace (prserver, remplacer, rduire les espaces) minInclusive,maxInclusive (intervales borns de valeurs)
61

Types simples prdfinis


Ils peuvent tre primitifs ou drivs Il y en a une cinquantaine Exemples :
string normalized-string name NCName langage float double long int short positive-integer negative-integer date time datetime duration ID IDREF IDREFS boolean hexBinary anyURI
62

Restrictions dun type

63

Exemple : restriction de la longueur d'une chane


<xs:simpleType name="chaine32"> <xs:restriction base="xs:string"> <xs:maxLength value="32"/> </xs:restriction> </xs:simpleType>

64

Longueur minimum dun identificateur


<xs:simpleType name="longName"> <xs:restriction base="xs:NCName"> <xs:minLength value="6"/> </xs:restriction> </xs:simpleType>

65

Exemple : restriction du type date


<xs:element name="ROOT"> <xs:simpleType name="maDate"> <xs:restriction base="xs:date"> <xs:pattern value="\d{4}-05-\d{2}"/> </xs:restriction> </xs:simpleType> </xs:element>

66

Entier born
<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> </xs:element>
67

Type numr - 1
<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>
68

Type numr - 2
<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>
69

Restriction dun type simple


Contenu
xs:minExclusive, xs:minInclusive, xs:maxExclusive, xs:maxInclusive, xs:totalDigits, xs:fractionDigits, xs:length, xs:maxLength, xs:minLength: xs:enumeration: xs:whiteSpace, xs:pattern xs:attribute, xs:attributeGroup, xs:anyAttribute (contenu simple dun type complexe)
70

Union de types simples


<qtes> <qte valeur="12"/> <qte valeur="*"/> </qtes>

71

Union de types simples (bis)


<xs:attribute name="valeur" use="required"> <xs:simpleType> <xs:union memberTypes="xs:decimal star"/> </xs:simpleType> </xs:attribute> <xs:simpleType name="star"> <xs:restriction base="xs:string"> <xs:enumeration value="*"/> </xs:restriction> </xs:simpleType>

72

Restriction dun type complexe


Permet de rduire le nombre dinstances valides (la description de contenu doit tre valide pour le contenu de base, les attributs inchangs peuvent tre omis) Contenu
xs:group, xs:all, xs:choice, xs:sequence xs:attribute, xs:attributeGroup, xs:anyAttribute
73

Rutilisation d'un type simple


DTD
On utilise les entits paramtres Dclaration <!ENTITY % ContentType "CDATA"> Utilisation <!ATTLIST elem at %ContentType; "x">

XMLSchema
Un type dclar au niveau 0 de l'lment <xs:schema> est global Il porte un nom, il peut tre rutilis
<xs:simpleType name='ContentType'> <xs:restriction base='xs:string'/> </xs:simpleType>

74

Dfinitions locales/globales

75

Premier style d'criture : " plat"


Utiliser une liste de dfinitions et dclarations globales
Toutes les dfinitions et dclarations sont directement au niveau 0 de l'lment <xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="ROOT" type="root"/> Dfinition globale de <xs:element name="A" type="xs:string"/> type <xs:element name="B" type="xs:string"/> - peut tre driv <xs:complexType mixed="false" name="root"> <xs:choice> <xs:element ref="A"/> <xs:element ref="B"/> Dfinitions globales d'lments </xs:choice> - peuvent tre rutilises partout </xs:complexType> </xs:schema>
76

Second style d'criture : "en poupes russes"


Dfinitions et dclarations sont mises en ligne
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="ROOT"> Dfinition locale de type <xs:complexType mixed="false"> - ne peut pas tre drive <xs:choice> <xs:element name="A" type="xs:string"/> <xs:element name="B" type="xs:string"/> </xs:choice> </xs:complexType> </xs:element> dclaration locale d'lment - ne peut pas tre rutilis ailleurs </xs:schema>

- y compris comme racine de document


77

Rutilisation : les groupes

78

Rutilisation groupe d'lments


DTD
On utilise les entits paramtres Dclaration <!ENTITY % seqAB "(A,B)"> Utilisation <!ELEMENT root (&seqAB;|C)>

XMLSchema : groupe d'lments


Dclaration globale
<xs:group name="seqAB"> <xs:sequence> <xs:element name="A" type="xs:string"/> <xs:element name="B" type="xs:string"/> </xs:sequence> </xs:group>
79

Rutilisation d'un groupe d'lment


DTD
Dclaration <!ENTITY % seqAB "(A,B)"> Utilisation <!ELEMENT root (&seqAB;|C)>

XMLSchema : groupe d'lments


Utilisation du groupe seqAB
<xs:element name="ROOT"> Rfrence <xs:complexType mixed="false"> <xs:choice> <xs:group ref="seqAB"/> <xs:element name="C" type="xs:string"/> </xs:choice> </xs:complexType> </xs:element> 80

Rutilisation groupe d'attributs


DTD - On utilise les entits paramtres XMLSchema : groupe d'attributs
Dclar au niveau 0 de l'lment <xs:schema>
<xs:attributeGroup name="g1"> <xs:attribute name="x" type="xs:string" default="x"/> </xs:attributeGroup>

la rfrence au groupe <xs:element name="ROOT"> d'attributs doit apparatre d'attribut doit apparatre <xs:complexType> aprs le modle de contenu aprs le modle de contenu <xs:choice> <xs:group ref="seqAB"/> <xs:element name="C" type="xs:string"/> </xs:choice> <xs:attributeGroup ref="g1"/> </xs:complexType> </xs:element>
81

Utilis dans un type complexe

Attention Attention

la rfrence au groupe

Contraintes dintgrit
Contrainte dunicit Contrainte de rfrencement

82

Exemple 1
<root> <AAA> <a id="x"/> <a id="y"/> <a id="z"/> </AAA> </root> Dfinition dun ensemble de cls nomm myid <xs:element name="root" type="root-type"> <xs:key name="myid"> <xs:selector xpath="./AAA/a"/> <xs:field xpath="@id"/> </xs:key> </xs:element>
83

Exemple 1 - bis
<root> <AAA> <a id="x"/> <a id="y"/> <a id="z"/> </AAA> <BBB> <b refid="x"/> <b refid="y"/> <b refid="z"/> </BBB> </root>

rfrence

84

Exemple 1 - ter
<xs:element name="root" type="root-type"> <xs:key name="myid"> <xs:selector xpath="./AAA/a"/> <xs:field xpath="@id"/> </xs:key> <xs:keyref name="dummy" refer="myid"> <xs:selector xpath="./BBB/b"/> <xs:field xpath="@idref"/> </xs:keyref> </xs:element>
85

Contraintes dintrgrit - bis


Rfrence
<para> ...<bibref code="bek1999"/>... </para> Dfinition <bibitem code="bek1999"> ...<author>Y Bekkers</author>... </bibitem>
86

Contraintes dintrgrit - suite


<xs:element name="livre" type="">
Dfinition des cls

<xs:key name="bib"> <xs:selector xpath='bibitem'/> <xs:field xpath='@code'/> </xs:key>


Dfinition des rfrences

<xs:keyref name="dummy" refer="bib"> <xs:selector xpath=".//bibref"/> <xs:field xpath='@code'/> </xs:keyref> </xs:element>


87

Contrainte dunicit sur deux champs


<xsd:element name="catalog" type="CatalogType"> <xsd:unique name="dateAndProdNumKey"> <xsd:selector xpath="department/product"/> <xsd:field xpath="number"/> <xsd:field xpath="@effDate"/> </xsd:unique> </xsd:element>
88

Exemple
<catalog> <department number="021"> <product effDate="2000-02-27"> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <price currency="USD">29.99</price> </product> <product effDate="2001-04-02"> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <price currency="USD">39.99</price> </product>
89

Exemple suite
<product effDate="2001-04-02"> <number>563</number> <name>Ten-Gallon Hat</name> <price currency="USD">69.99</price> </product> <product> <number>443</number> <name>Deluxe Golf Umbrella</name> <price currency="USD">49.99</price> </product> </department> </catalog>
90

Validation

91

Rappel : validation par une DTD


Ncessit de mettre une dclaration <!DOCTYPE Exemple
<?xml version="1.0"> <!DOCTYPE racine SYSTEM "maDTD.xml"> <racine> </racine>
>

92

XMLSchema deux dialectes XML


Deux espaces de noms
Dialecte XMLSchema
http://www.w3.org/2001/XMLSchema

Prfixe recommand xs:

Dialecte pour rfrencer une instance de XMLSchema


http://www.w3.org/2001/XMLSchema-instance

Prfixe recommand xsi:


93

Spcifier l'emplacement des schmas W3C XML Schema


xsi:schemaLocation xsi:noNamespaceSchemaLocation Deux attributs de l'espace de noms XSI "http://www.w3.org/2001/XMLSchema-instance" qui permettent de spcifier l'emplacement des schmas W3C XML Schema que l'on souhaite utiliser pour la validation d'un document.
94

xsi:schemaLocation
Rserv une suites de rfrences vers des schmas W3C XML Schema dcrivant des espaces de noms Son contenu est une suite de paires de valeurs alternant des URIs d'espaces de noms et les chemins d'accs aux schmas correspondant.
95

xsi:schemaLocation
<racine
xmlns="http://mondomaine.com/monNom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:SchemaLocation="http://mondomaine.com/monNom monSchema.xsd"> ... </racine> 1. http://mondomaine.com/monNom : mon espace de noms 2. monSchema.xsd : fichier contenant mon schma
96

xsi:noNamespaceSchemaLocation
rserv aux rfrences des schmas dcrivant des vocabulaires sans espaces de noms et sa valeur est constitue du chemin permettant d'accder au schma correspondant :
<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="monSchema.xsd"> ... </racine>

97

Mon schma dcrit-il un espace de noms ?


Pour voir si un schma dcrit un espace de noms, il suffit de regarder l'attribut "targetNamespace" de l'lment xs:schema Pas dattribut targetNamespace :
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

Pas despace de nom


98

Mon schma dcrit-il un espace de noms ? (bis)


Prsence dun attribut targetNamspace
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:po="http://mondomaine.com/monNom" targetNamespace="http://mondomaine.com/monNom" elementFormDefault="unqualified" attributeFormDefault="unqualified">

Dclaration dun espace de noms

99

Type abstrait / hritage et validation


Un exemple
Figure @id Cercle @rayon Carr @cot

100

Validation dun Type abstrait figType


<xs:schema targetNamespace= "figureAbstraite" xmlns:a="figureAbstraite" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name= "figType" abstract="true"> <xs:attribute name="id" type="xs:string"/> </xs:complexType> <xs:element name="root"> dfinition <xs:complexType> <xs:sequence> <xs:element name="figure" type="a:figType" maxOccurs="unbounded"/> </xs:sequence> utilisation </xs:complexType> </xs:element> </xs:schema> 101

Cercle une extension de type


<xs:complexType name="circle"> <xs:complexContent> <xs:extension base="a:figType"> <xs:sequence> <xs:element name="rayon" type="xs:double"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
102

Carr une extension de type


<xs:complexType name="carr"> <xs:complexContent> <xs:extension base="a:figType"> <xs:sequence> <xs:element name="cot" type="xs:double"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
103

Exemple de contenu
<root xmlns:xsi="http://www.w3.org/2001/XMLSc hema-instance"> <figure xsi:type="cercle"> <rayon>25</rayon> </figure> <figure xsi:type="carre"> <cot>25</cot> </figure> </root>
104

Validit de document type abstrait


Document non valide
<root> <figure/> <figure xsi:type="a:carr"><cot>22.5</cot></figure> </root>

Document valide
<root> <figure xsi:type="a:cercle"><rayon>22.5</rayon></figure> <figure xsi:type="a:carr"><cot>22.5</cot></figure> </root>

105

Elments abstraits
Ncessit dutiliser les groupes de substitution
<element name="comment" type="string" abstract="true"/> <element name="shipComment" type="string" substitutionGroup="ipo:comment"/> <element name="customerComment" type="string" substitutionGroup="ipo:comment"/>
106

Groupe de substitution
Attribut substitutionGroup Des lments globaux peuvent tre regroups sous un autre lment global (appel la tte du groupe). Tous les lments regroups sous une tte peuvent tre substitus la tte. Tous les lments sous une tte doivent avoir le mme type ou un type driv de celui de la tte La tte peut tre dclare abstraite. Dans ce cas seuls les lments sous la tte peuvent apparatre dans une instance de document.
107

Les xlmSchemas ont leur DTD


<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "http://www.w3c.org/2001/XMLSchema.dtd"> <xs:schema> </xs:schema>

108

Modularit
<xs:include>
Inclure des dfinitions dun mme espace de nommage

<xs:import>
Inclure des dfinitions dun autre espace de nommage

<xs:redefine>
Redfinir dans le schma actuel des types simples et complexes, des groupes et des groupes d'attributs obtenus partir de fichiers de schma externes.
109

D'autres langages de schma


RELAX NG
http://www.oasis-open.org/committes/relax-ng/ [lien]

Schematron
http://www.ascc.net/xml/ressource/schematron/schemat ron.html [lien]

DSD Document Structure Description


http://www.brics.dk./DSD/ [lien]

Bien d'autres

Schma XML - Y. Bekkers 110

Rfrences
Un tutorial en ligne
http://www.xml.com/pub/a/2000/11/29/schem as/part1.html http://www.brics.dk/ixwt/

111