Les Schémas XML Le standard W3C
Concepts de base: 1er exemple <xsd:schema xmlns:xsd= " http://www.w3.org/2001/XMLSchema " > <xsd:annotation> <xsd:documentation > Schema pour le document commande.xml </xsd:documentation> </xsd:annotation> <xsd:element name= "commande" type= "CommandeType" /> <xsd:element name= "commentaire" type= "xsd:string" /> <xsd:complexType name= "CommandeType" > <xsd:sequence> <xsd:element name= "envoyera" type= "Adresse" /> <xsd:element name= "facturation" type= "Adresse" /> </xsd:sequence> <xsd:attribute name= "datecommande" type= "xsd:date" /> </xsd:complexType> <xsd:complexType name= "Adresse" > <xsd:element name= "nom" type= "xsd:string" /> <xsd:element name= "ville" type= "xsd:string" /> <xsd:element name= "codepostal" type= "xsd:decimal" /> </xsd:schema> Balise de déclaration d'un schéma Balise de déclaration d'un élément Elément complexe Déclaration d'un attribut
Concepts de base:document XML valide <?xml version= "1.0" ?> <commande datecommande= "2003-10-20" > <envoyera> <nom> Alice Dupond </nom> <ville> Strasbourg</ville> <codepostal> 67000 </codepostal> </envoyera> <facturation> <nom> Robert Dupond </nom> <ville> Strasbourg </ville> </facturation> </commande>
Concepts de base: déclaration d'éléments Définition: <element default= string fixed= string form= (qualified|unqualified) maxOccurs= (entier positif |unbounded):1 minOccurs= entier positif:1 name= NCname nillable= boolean:false ref= QName substitutionGroup=QName type= Qname > Contenu: (annotation?, ((simpleType |complexType)?,(unique|key|keyref)*)) </element>
Concepts de base: contraintes d'occurence minOccurs, maxOccurs, fixed,default notes 1, 1, -, - Elément devant apparaître une fois, il peut avoir n'importe quelle valeur 1,1,37,- Elément devant apparaître une fois, sa valeur doit être 37 0,1,-,- Elément pouvant apparaître une fois, il peut avoir n'importe quelle valeur 2, unbounded, 37,- Elément devant apparaître 2 fois ou plus, sa valeur doit être 37 0,1,-,37 Elément pouvant apparaître 1 fois, si il n'apparaît pas sa valeur est 37 sinon sa valeur est celle donnée 0,2,-,37 Elément pouvant apparaître 1fois, 2 fois ou pas du tout, si l'élément est vide, sa valeur est 37, sinon sa valeur est celle donnée 0,1,37,- Elément pouvant apparaître 1 fois, si il apparaît sa valeur doit être 37, sinon sa valeur est 37 0,0,-,- L'élément ne doit pas apparaître
Concepts de base: attribut ref Il est possible d'utiliser un élément existant plutôt que d'en déclarer un nouveau: Ex: <xsd:element ref="commentaire" minOccurs="0"/> Cette déclaration fait référence à un élément existant, commentaire, déclarer ailleurs dans le schéma. ref doit faire référence à un élément global, fils de l'élément schema.
Concepts de base: éléments simples Définition: <simpleType Name= NCName> Content: (annotation?,(restriction|list|union)) </simpleType> <restriction base= QName> Content: (annotation?,(simpleType?,(minExclusive|minInclusive| maxExclusive|maxInclusive|totalDigits|fractionDigit|length|minLength|maxLength|enumeration|whiteSpace|pattern)*)) </restriction>
Concepts de base: éléments simples <list itemType=QName> Content: (annotation?,(simpleType?)) </list> <union memberTypes=Liste de QName> Content: (annotation?,(simpleType*)) </union>
Éléments simples prédéfinis Type simple exemples string chaîne positiveInteger 1,126789 normalizedString negativeInteger -126789,-1 token nonNegativeInteger 0,1,126789 byte -1,126 nonPositiveInteger -126789,-1,0 unsignedByte 0,126 int -1,1267896754 base64Binary GpM7 unsignedInt 0, 1267896754 hexBinary 0FB7 long -1, 12678967543233 integer -126789,-1,0,1,126789 unsigned long 0, 12678967543233 short -1,12678 unsigned short 0,12678 decimal -1.23,0,123.4,1000.0 float -INF,-1E4,-0,0, 12.78E-2
Éléments simples prédéfinis Type simple exemples double -INF,-1E4,-0,0,12.78E-2,12,INF,NaN gMonthDay --05-31 boolean True,false,1,0 Name envoyera time 13:20:00.000 QName Po:Adresse dateTime 2003-05-31T13:20:00.000 NCName Adresse duration P1Y2M3DT10H30M12.3S anyURY http://www.example.com/ date 2003-05-31 language En-GB,en-US,fr gMonth --05-- ID Uniquement dans les attributs gYear 2003 IDREF idem gYearMonth 2003-02 IDREFS gDay ---31 ENTITY ENTITIES NMTOKEN NOTATION NMTOKENS
Elément simples: restriction Exemples: <xsd:simpleType name= "monEntier" > <xsd:restriction base= "xsd:integer" > <xsd:minInclusive value= "10000" /> <xsd:maxInclusive value= "99999" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name= "dessert" > <xsd:restriction base= "xsd:string" > <xsd:enumeration value= "patisserie" /> <xsd:enumeration value= "glace" />
Elément simple: liste Exemple: <xsd:simpleType name= "maListedEntier" > <xsd:list itemType= "monEntier" /> <xsd:simpleType> Élément XML satisfaisant cette définition: <maListedEntier> 20003 15037 95977 95945 </maListedEntier>
Elément simple: union Exemple: <xsd:simpleType name= "cpunion" > <xsd:union memberTypes= "xsd:string maListedEntier" /> </xsd:simpleType> <xsd:element name= "cp" type= "cpunion" /> Eléments XML satisfaisant cette définition: <cp> bas-rhin </cp> <cp> 20003 15037 95977 95945 </cp>
Concepts de base: éléments complexes Définition: <complexType mixed=boolean:false name=NCName> Content: (annotation?, (simpleContent|complexContent|((group|all|choice| sequence)?,((attribute|attributeGroup)*,anyAttribute?)))) </complexType>
Élément complexe: simpleContent Definition: <simpleContent> Content: (annotation?,(restriction|extension)) </simpleContent> <restriction> Content: (annotation?,(simpleType?,(minExclusive|minInclusive|maxExclusive|maxInclusive|totalDigits|fractionDigits|length|minLength|maxLength| enumeration|whiteSpace|pattern)*)?,((attribute|attributeGroup)*, anyAttribute?)) </restriction> <extension> Content: (annotation?,((attribute|attributeGroup)*,anyAttribute?)) </extension>
Élément complexe: simpleContent Exemple: <xsd:complexType name= "long1" > <xsd:simpleContent> <xsd:extension base="xsd:nonNegativeInteger"> <xsd:attribute name="unit" type="xsd:NMTOKEN"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType>
Elément complexe: complexContent Définition: <complexContent mixed=boolean> Content: (annotation?,(restriction|extension)) </complexContent> <restriction base=QName> Content:(annotation?,(group|all|choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?)) </restriction> <extension Content: (annotation?,(group|all|choice|sequence)?,((attribute|attributeGroup)*,anyAttribute?)) </extension>
Elément complexe: complexContent Exemple: <xsd:complexType name= "nomdepersonne" > <xsd:sequence> <xsd:element name= "prenom" minOccurs= "0" maxOccurs= "unbounded" /> <xsd:element name= "nom" /> </xsd:sequence> </xsd:complexType> <xsd:complexType nom= "nometendu" > <xsd:complexContent> <xsd:extension base= "nomdepersonne" > <xsd:element name= "generation" minOccurs= "0" /> </xsd:extension> </xsd:complexContent>
Elément complexe: group,all, choice,sequence Définition: <group Name=NCName > Content: (annotation?,(all|choice|sequence)) </group> <all maxOccurs=1:1 minOccurs=(0|1):1> content: (annotation?,element*) </all> <choice maxOccurs=(nonNegativeInteger|unbounded):1 minOccurs=nonNegativeInteger:1> content: (annotation?,(element|group|choice|sequence|any)*) </choice> <sequence </sequence>
Elément complexe: group,all, choice,sequence Exemple <xs:group name= "monGroup" > <xs:sequence> <xs:element ref= "quelquechose" /> . . . </xs:sequence> </xs:group> <xs:complexType name= "trivial" > <xs:group ref= "monGroup" /> <xs:attribute . . . /> </xs:complexType>
Elément complexe: group,all, choice,sequence Exemple: <xs:complexType name= "enplus" > <xs:choice> <xs:element ref= "autrechose" /> <xs:group ref= "monGroup" /> </xs:choice> <xs:attribute .../> </xs:complexType>
Elément complexe: group,all, choice,sequence Exemple: <xs:all> <xs:element ref= "chats" /> <xs:element ref= "chiens" /> </xs:all> <xs:sequence> <xs:choice> <xs:element ref= "gauche" /> <xs:element ref= "droite" /> </xs:choice> <xs:element ref= "paysage" /> </xs:sequence>
Concepts de base: déclaration d’attributs Définition: <attribute default=string fixed=string form=(qualified|unqualified) name=NCName ref=QName type=QName use=(optional|prohibited|required):optional> Content: (annotation?,(simpleType?)) </attribute>
Concepts de base: déclaration d’attributs Exemples: <xsd:attribute name= "age" type= "xsd:positiveInteger" use= "required" /> <xsd:complexType> <xsd:attribute name= "nom" type= "xml:lang" use= "required" /> <xsd:attribute name= "version" type= "xsd:number" fixed= "1.0" /> </xsd:complexType>
Concepts de base: groupe d'attributs Définition: <attributeGroup name=NCName ref=QName> Content: (annotation?,(attribute|attributeGroup)*,anyAttribute?)) </attributeGroup>
Concepts de base: groupe d'attributs Exemple: <xsd:attributeGroup name= "mongroupe" > <xsd:attribute . . . /> <xsd:attributeGroup> <xsd:complexType name= "monelement" > . . . <xsd:attributeGroup ref= "mongroupe" /> <xsd:complexType>