Schémas XML - ITFormation
Transcription
Schémas XML - ITFormation
XML Schema Definition 1 Introduction • Un schéma xml est une grammaire dans un formalisme xml • un schéma comme une dtd définit: – – – – – – – – Les éléments valides Les attributs des éléments Les éléments imbriqués Ordre d’apparition des éléments fils Le nombre d’éléments fils élément vide Les types de données des éléments et des attributs Les valeurs par défaut et constantes des éléments et des attributs 2 Caractéristiques des schémas Les schémas XML sont extensibles Les schémas XML sont plus riches que les DTD Sont écrits en XML Davantage de précision dans la définition des multiplicités. • Supportent les types de données • Supportent les espaces de noms • • • • 3 Exemple <?xml version="1.0" encoding="utf‐8"?> <xs:schema targetNamespace="http://www.itformation.com/message" elementFormDefault="qualified" xmlns="http://www.itformation.com/message" xmlns:mstns="http://www.itformation.com/message" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="message"> <xs:complexType> <xs:sequence> <xs:element name="destination" type="xs:string"/> <xs:element name="source" type="xs:string"/> <xs:element name="titre" type="xs:string"/> <xs:element name="texte" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 4 Exemple: référence à un schéma xsd dans un document <?xml version="1.0"?> <message xmlns="http://www.itformation.com/message" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance" xsi:schemaLocation="http://www.itformation.com/message message.xsd"> <destination>DTD</destination> <source>XSD</source> <titre>Rappel</titre> <texte>N'oubliez pas les types de données</texte> </message> • le document est considéré comme une instance du schéma. 5 Elément schema(racine du schéma) • xmlns:xs=http://www.w3.org/2001/XMLSchema: fichier de définition des éléments d'un schéma, cette déclaration indique aussi que les éléments de cet espace de noms doivent être préfixés par: xs. • targetNamespace=http://www.itformation.com: cette déclaration indique que les éléments message, source, destination, titre et texte sont définis dans cet espace de noms. • xmlns=http://www.itformation.com: définit l'espace de noms par défaut. • elementFormDefault="qualified": les éléments doivent être complètement qualifiés. 6 Référence du schéma dans le document XML • xmlns=http://www.itformation.com: espace de noms par défaut, pour localiser le schéma xml. • xmlns:xsi=http://www.w3.org/2001/XMLSche ma‐instance: XML Schema Instance • xsi:schemaLocation="http://www.itformation. com note.xsd" : localisation du xsi 7 Elément simples • Elément qui peut contenir uniquement du texte et sans attributs • Définition d'un élément simple: – <xs:element name="xxx" type="yyy"/> Type de données xsd Type de données .Net xs:string System.String xs:decimal System.Decimal xs:int System.Int32 xs:boolean System.Boolean xs:date System.DateTime xs:time System.DateTime • Un élément vide doit être xs:dateTime déclaré sans type: xs:byte <xs:element name="br"/> – Types communs: • Un élément de type quelconque: xs:ana System.DateTime System.SByte xs:float System.Single xs:Long System.Int32 8 Elément simples • Exemple: <xs:element name="nom" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="datenaissance" type="xs:date"/> • Valeurs par défaut et constantes dans les éléments simples: – Exemple: <xs:element name="couleur1" type="xs:string" default="rouge"/> <xs:element name="couleur2" type="xs:string" fixed="red"/> – L'attribut mixed définit si un élément complexe peut contenir du texte ou non (par défaut mixed=false). 9 Attributs • Tous les attributs sont déclarés comme des éléments simples: – <xs:attribute name="xxx" type="yyy"/> • • Les attributs peuvent avoir des valeurs par défaut (default="valeur") ou être constants (fixed="valeur"). Les attributs sont optionnels par défaut: – <xs:attribute name="lang" type="xs:string" use="required"/>. • • • • Un attribut peut être déclaré global ou local à l’intérieur de l’élément auquel il est attaché. Pour associer à attribut global à un élément: <xs:attribute ref="nomattribut"/> Un attribut ne peut pas être associé à un élément simple Des attributs communs à plusieurs éléments peuvent être rassemblés dans des groupes d’attributs. <xs:attributeGroup name="paragraphe"> <xs:attribute name="couleur" type="xs:int" use="required"/> <xs:attribute name="police" type="xs:string" use="required"/> <xs:attribute name="taille" type="xs:byte" use="required"/> </xs:attributeGroup> 10 restrictions et Facettes des XSD • • Une restriction est un élément composé d'une ou de plusieurs facettes, chaque facette définit une contrainte sur les valeurs autorisées pour un certain type de données, Facettes : minInclusive, minExclusive,maxExclusive, maxInclusive, Enumeration, length, maxLength, minLength, fractionDigits,totalDigits, whiteSpace . – La facette whiteSpace peut prendre l'une des valeurs suivantes: • • • • preserve replace: les caractères ox9 (tab), oxA (saut de ligne) et oxD (retour chariot) sont remplacés par 0x20 (espace) collapse: même traitement que replace, mais en plus les espaces contiguës sont remplacés par un seul espace et les espaces de début et de fin sont supprimés. Exemple: <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="150"/> </xs:restriction> </xs:simpleType> </xs:element> 11 La facette Enumeration <xs:element name=" couleur" > <xs:simpleType > <xs:restriction base="xs:string"> <xs:enumeration value="Rouge" /> <xs:enumeration value="Vert"/> <xs:enumeration value="Bleu"/> </xs:restriction> </xs:simpleType> </xs:element> 12 La facette pattern • Exemple 1 – • <xs:element name="lettre"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a‐z]"/> </xs:restriction> </xs:simpleType> </xs:element> Exemple 2 – – – – – – – <xs:element name="mot"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a‐zA‐Z0‐ 9]{8}"/> </xs:restriction> </xs:simpleType> </xs:element> •Mulitplicités •{m,n} : de m à n; •* : 0 ou plus ; •+ : au moins 1 ; •? :0 ou 1. •Classes de caractères •\s : blanc ; •Plages de caractères •[0‐9] : un chiffre •[a‐Z] : une lettre minuscule •[a‐zA‐Z] : une lettre minuscule ou majuscule •[^0] : tout sauf 0 •[0‐9E] : un chiffre ou E •\S : tout sauf un blanc ; •\d : un chiffre ; •\D : tout sauf un chiffre ; •\w : caractère alphanumérique plus "–" ; •\W : tout sauf un caractère alphanumérique plus "–". 13 Les indicateurs Un indicateur définit comment les sous éléments d'un élément complexe peuvent être utilisés dans un document xml associé. Exemples d'indicateurs xs:all : les sous‐éléments apparaissent dans n'importe quel ordre, xs:choice : indique qu'un seul des sous‐éléments peut apparaître, xs:sequence : ordonne les sous‐éléments : ils doivent apparaître dans un ordre précis. 14 Unions et listes • Liste: ensemble de valeurs de même type(séparées par des espaces),exemple: <xs:simpleType> <xs:list itemType="xs:int"/> </xs:simpleType> • Union: permet d’autorise plusieurs types, exemple: <xs:simpleType> <xs:union memberTypes="xs:int couleur"/> </xs:simpleType> Remarque: couleur est le type défini précédement. 15 Types complexes <xs:element name="employe"> <xs:complexType> <xs:sequence> <xs:element name="prénom" type="xs:string"/> <xs:element name="nom" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> 16 Exemples de schémas: Température <?xml version="1.0" encoding="UTF‐8"?> <xsd:schema targetNamespace="temperature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="temperature" > <xsd:element name="temperature"> <xsd:complexType > <xsd:sequence> <xsd:element name="min" type="TDegre"/> <xsd:element name="max" type=" TDegre"/> <xsd:element name="forecast‐low" type=" TDegre"/> <xsd:element name="forecast‐high" type=" TDegre"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:simpleType name=" TDegre" > <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="‐5"/> <xsd:maxInclusive value="44"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> 17 Exemple biblio <?xml version="1.0" encoding="utf‐8"?> <xsd:enumeration value="science‐fiction"/> <xsd:schema id="biblio" <xsd:enumeration value="aventure"/> targetNamespace="http://tempuri.org/biblio.xsd" </xsd:restriction> </xsd:simpleType> elementFormDefault="qualified" </xsd:attribute> xmlns="http://tempuri.org/biblio.xsd" </xsd:complexType> xmlns:mstns="http://tempuri.org/biblio.xsd" </xsd:element> xmlns:xsd="http://www.w3.org/2001/XMLSchema" </xsd:sequence> > </xsd:complexType> <xsd:element name="biblio"> </xsd:element> <xsd:complexType> <xsd:sequence> <xsd:element name="livre" maxOccurs="unbounded"> </xsd:schema> <xsd:complexType> <xsd:sequence> <xsd:element name="titre" type="xsd:string"/> <xsd:element name="auteur" type="xsd:string"/> <xsd:element name="ref" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="type" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="policier"/> 18 Compléments • Types pour les chaînes de caractères – xs:string : sans normalisation et non compactée – xs:normalizedString : la forme normalisée (tout les espaces sont remplacés par un seul caractère); – xs:token : la forme normalisée et compactée (les espaces de début et de fin sont supprimés) ; – xs:language : les codes de langue (RFC 1766) ; – xs:NMTOKEN : pas de blanc (comme 1999‐10‐10, 1234534 ou employe1023) ; – xs:Name : forme de NMToken commençant par une lettre ; – xs:ID : chaîne unique dans le document ; – xs:IDREF : chaîne ayant pour valeur un ID (d’où le mot REF pour référence) ; – xs:anyURI : la valeur de l’URI utilisera des caractères ASCII, conversion automatique. Par exemple, http://www.exemple.com/Un dossier devient http://www.site.com/Un%20dossier. • Contenu simple avec attributs (exemple l'élément html <img/>: <xs:element name="auteur"> <xs:complexType mixed="true"> <xs:attribute name="nom" type="xs:string"/> </xs:complexType> </xs:element> 19 Compléments • Groupe d’éléments: – Définition <xs:group name="g1"> <xs:sequence> <xs:element name="contact" type="xs:string"/> <xs:element name="note" type="xs:string"/> </xs:sequence> </xs:group> – Utilisation <xs:element name="liste1"> <xs:complexType maxOccurs="unbounded"> <xs:group ref="g1"/> </xs:complexType> </xs:element> • Les entités dans un schéma xml: deux solutions possibles • Insérer une dtd dans le document xml: <!DOCTYPE commande [ <!ENTITY eacute "é"> <!ENTITY egrave "è"> ]> • Simuler une entité à l'aide d'un élément constant. • • Dans le schéma: <xs:element name="eacute" type="xs:ENTITY" fixed="é" /> Dans le document xml: r<eacute></eacute>seau 20 Exercices 1. 2. Créer un schéma xml pour décrire la structure de documents xml contenant des informations sur des molécules, créer un document xml nommé molecule. xml lié au schéma défini précédemment. Créer un schéma annuaire.xsd qui définit la structure de documents xml contenant des informations sur des contacts <contact categorie="…" > <nom>...</nom> <prenom>...</prenom> <tel_mobile> ...</tel_mobile> <email>...</email> <email>...</email> ... </contact> L ’attribut categorie et l’élément tel_mobile sont optionnels categorie est de type enumeration. L'adresse email doit être validée par une expression régulière 21