26 27 XML Schéma Séparation entre types et éléménts (grammaire d arbre à types uniques) Types complexes, abstraits et anonymes Sous-typage par extension et restriction XML Schema Contraintes d intégrité (clés, clés étrangères) Un schéma XML est lui même un document XML. Types Simples 28 Restrictions de Types Simples 29 DTD: un seul type simple (#PCDATA) et 10 types d attributs Schéma XML: 43 types simples xsd:string, xsd:byte,... xsd:integer, xsd:long, xsd:float, xsd:double,... xsd:boolean xsd:time, xsd:timeduration, xsd:date, xsd:year, xsd:month,... xsd:language, xsd:urireference xsd:id, xsd:idref, xsd:nmtoken,... On peut restreindre les types simples par leur longueur (length, minlength, maxlength) (chaînes de caractères ou listes) par des motifs (chaînes de caractères), par énumération, par des intervalles (maxinclusive, maxexclusive, mininclusive, minexclusive) et autres (precision, scale, encoding, period, duration).
Restriction de Types Simples par Motifs Numéro de téléphone: +33-(0)-1-34-45-67-89 DTD: #PCDATA Schéma XML: Similaire aux expressions régulières de Perl <xsd:simpletype name= numtél > <xsd:restriction base= xsd:string > <xsd:pattern value= +33-(0)-\d(-\d{2}){3} /> </xsd:restriction> 30 Listes de Valeurs de Type Simple Une liste de numéros de téléphone : <xsd:simpletype name= listenumtél > <xsd:list itemtype= numtél /> Une liste de cinq numéros de téléphone (restriction du type précédent) : <xsd:simpletype name= cinqnumtél > <xsd:restriction base= listnumtél > <xsd:length value= 5 /> </xsd:restriction> 31 Union de Types Simples Un numéro de téléphone Européen est soit un numéro français, un numéro allement,... Grammaire d arbres : euronumtél -> franctél gertél beltél... Schéma : <xsd:simpletype name= euronumtél > <xsd:union membertypes= franctél gertél beltél... /> 32 Eléments Déclaration d éléments: <xsd:element name type contraintes [value]/> ou <xsd:element ref contraintes/> Contraintes: minoccurs, maxoccurs, fixed Exemple: <xsd:element name= nom type= xsd:string minoccurs= 0 maxoccurs= 2 /> 33
Attributs Déclaration d attributs: <xsd:attribute name use [value]/> Use : required, optional, fixed, prohibited Exemple: <xsd:attribute name= langue type= xsd:language optional= true /> 34 Types Complexes Trois constructeurs de type: xsd:sequence: séquence ordonnée d éléménts xsd:all: séquence non-ordonnée d éléménts xsd:choice: choix d éléménts (DTD: ) xsd:group: regroupement (DTD: (...) ). 35 Type Complexe: Exemple Modèle de contenu DTD: (titre, année) 36 Contenu Mélangé (mixed) 37 XML Schéma: <xsd:complextype name= FilmType > <xsd:sequence> <xsd:element name= titre type= xsd:string /> <xsd:element name= année type= xsd:year /> </xsd:sequence> Grammaire : FilmType -> Titre Année Titre -> titre String Année -> année xsd:year DTD: (#PCDATA cinéma film)* Schéma XML : <xsd:complextype name= OfficielType mixed= true > <xsd:choice minoccurs= 0 maxoccurs= unbounded > <xsd:element name= cinema type= CinemaType /> <xsd:element name= film type= FilmType /> </xsd:choice>
Groupes: Exemple 38 Valeurs Nulles 39 DTD: ((B C)*,D)+ XML schéma: <xsd:complextype> <xsd:group minoccurs= 1 maxoccurs= unbounded > <xsd:sequence> <xsd:group minoccurs= 0 maxoccurs= unbounded > <xsd:choice> <xsd:element name= B xsd:type= xsd:string /> <xsd:element name= C xsd:type= xsd:string /> </xsd:choice> </xsd:sequence> </xsd:group> <xsd:complextype> On distingue entre les éléments vides et les éléments avec un contenu inconnu : Schéma XML: <xsd:element name= heurefilm type= xsd:time nullable= true /> Élément XML: <heurefilm xsi:null= true /> xsi:null est défini dans l espace de noms pour des instances (http://www.w3.org/2000/10/xmlschema-instance). Extension de Types Complexes Cinémas avec un site Web et un pays (fichier webcountry.xsd): <complextype name= cybercinematype > <complexcontent> <extension base= officiel:cinematype > <sequence> <element name= url type= xsd:string /> </sequence> </extension> </complexcontent> Grammaire d abres : CybercinemaType -> Nom Adresse (Seance)* Url, Nom -> nom String, Url -> url String,... 40 Extension de Types Complexes Chaque occurrence de CinemaType dans le modèle de contenu d une règle est remplacée par (CinemaType CybercinemaType) Le remplacement automatique peut être empeché par les attributs block et final. Ces deux attributs peuvent prendre comme valeurs #all ou une liste contenant les valeurs restriction, extension et/ou substitution : <xsd:complextype name= CinemaType block= restriction >... 41
Utilisation de Types Étendus On indique explicitement le type (grammaire à types uniques) : <cinema xsi:type= CybercinemaType > <nom>st André des Arts</nom> <officiel:adresse> <ville> Paris </ville> <rue> rue St. André des Arts </rue> <numéro> 13 </numéro> </officiel:adresse> <url>http://www.st-andré.com</url> </cinema> 42 Restriction de Types Complexes On définit un type spécifique pour les cinémas avec une à trois séances (fichier seance.xsd): <complextype name= séanceobligtype > <complexcontent> <restriction base= cinematype > <complextype content= elementonly > <sequence minoccurs= 1 maxoccurs= 3 > <element ref= seance /> </sequence> <element name= nom type= string /> <element ref= adresse /> </complexcontent> 43 Valeur unique 44 Clés et Références 45 L attribut film_id d un film doit être unique: <unique name= toto > <selector>film</selector> <field>@film_id</field> </unique> Les valeurs des element <selector> et <field> sont des expressions XPath. La valeur de <field> doit être unique à l intérieur de chaque élément sélectionné par le sélecteur. Une clé est unique (filmcli = clé): <key name= filmclé > <selector>film</selector> <field>@film_id</field> </key> Référence (filmref = clé etrangère): <keyref name= filmref refer= filmclé > <selector>séance</selector> <field>@ref_film</field> </keyref>