XML Schema XML Schéma Types Simples Restrictions de Types
Transcription
XML Schema XML Schéma Types Simples Restrictions de Types
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 Contraintes d’intégrité (clés, clés étrangères) XML Schema Un schéma XML est lui même un document XML. Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 28 29 Types Simples Restrictions de Types Simples DTD: un seul type simple (#PCDATA) et 10 types d’attributs On peut restreindre les types simples Schéma XML: 43 types simples – xsd:string, xsd:byte, ... par leur longueur (length, minLength, maxLength) (chaînes de caractères ou listes) – xsd:integer, xsd:long, xsd:float, xsd:double, ... par des motifs (chaînes de caractères), – xsd:boolean – xsd:time, xsd:timeDuration, xsd:Date, xsd:year, xsd:month, ... – xsd:language, xsd:uriReference – xsd:ID, xsd:IDREF, xsd:NMTOKEN, ... par énumération, par des intervalles (maxInclusive, maxExclusive, minInclusive, minExclusive) et autres (precision, scale, encoding, period, duration). Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 30 31 Restriction de Types Simples par Motifs Listes de Valeurs de Type Simple Numéro de téléphone: +33-(0)-1-34-45-67-89 Une liste de numéros de téléphone : DTD: #PCDATA <xsd:simpleType name=’listeNumTél’> <xsd:list itemType=’numTél’/> </xsd:simpleType> 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> </xsd:simpleType> 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> </xsd:simpleType> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 32 33 Union de Types Simples Eléments 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 | ... Déclaration d’éléments: <xsd:element name type contraintes [value]/> ou <xsd:element ref contraintes/> Contraintes: minOccurs, maxOccurs, fixed Schéma : <xsd:simpleType name=’euroNumTél’> <xsd:union memberTypes=’francTél gerTél belTél ...’/> </xsd:simpleType> Exemple: <xsd:element name=’nom’ type=’xsd:string’ minOccurs=’0’ maxOccurs=’2’/> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 34 35 Attributs Types Complexes Déclaration d’attributs: <xsd:attribute name use [value]/> Trois constructeurs de type: – xsd:sequence: séquence ordonnée d’éléménts Use : required, optional, fixed, prohibited – xsd:all: séquence non-ordonnée d’éléménts Exemple: – xsd:choice: choix d’éléménts (DTD: ’ ’) <xsd:attribute name=’langue’ type=’xsd:language’ optional=’true’/> – xsd:group: regroupement (DTD: ’(...)’). Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 36 37 Type Complexe: Exemple Contenu Mélangé (mixed) Modèle de contenu DTD: (titre, année) XML Schéma: DTD: (#PCDATA | cinéma | film)* <xsd:complexType name=’FilmType’> <xsd:sequence> <xsd:element name=’titre’ type=’xsd:string’/> <xsd:element name=’année’ type=’xsd:year’/> </xsd:sequence> </xsd:complexType> Grammaire : 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> </xsd:complexType> FilmType -> Titre Année Titre -> titre String Année -> année xsd:year Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 38 39 Groupes: Exemple Valeurs Nulles DTD: ((B|C)*,D)+ On distingue entre les éléments vides et les éléments avec un contenu inconnu : 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> 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). Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 40 41 Extension de Types Complexes 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> </complexType> Grammaire d’abres : CybercinemaType -> Nom Adresse (Seance)* Url, Nom -> nom String, Url -> url String, ... 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’> ... </xsd:complexType> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 42 43 Utilisation de Types Étendus Restriction de Types Complexes On indique explicitement le type (grammaire à types uniques) : On définit un type spécifique pour les cinémas avec une à trois séances (fichier seance.xsd): <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> <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’/> </complexType> </complexContent> </complexType> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 44 45 Valeur unique Clés et Références L’attribut film_id d’un film doit être unique: Une clé est unique (filmcli = clé): <unique name=’toto’> <selector>film</selector> <field>@film_id</field> </unique> <key name=’filmclé’> <selector>film</selector> <field>@film_id</field> </key> Les valeurs des element <selector> et <field> sont des expressions XPath. Référence (filmref = clé etrangère): La valeur de <field> doit être unique à l’intérieur de chaque élément sélectionné par le sélecteur. <keyref name=’filmref’ refer=’filmclé’> <selector>séance</selector> <field>@ref_film</field> </keyref> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
Documents pareils
Limites des DTD Espaces de noms XML : Une introduction (2
Types dérivés
Types dérivés prédéfinis
Restriction sur des types primitifs
Ex : Entier positif : positiveInteger