XML DTD
Transcription
XML DTD
XML eXtensible Markup Language Mohamed Quafafou ESIL – Département :: Internet Nov.Nov.-Dec. Dec. 2006 DTD Définition du type de document Vérifier qu’ qu’un document XML est conforme à une syntaxe donné donnée Cela se fait à l’aide du document DTD (document Type Definition) Definition) La norme XML n’ n’impose pas l’l’utilisation d’ d’un DTD, mais le respect des rè règles de construction est obligatoire Caté Catégories de documents Bien formé formé : respect des rè règles de base Valide : s’ s’il respecte la DTD associé associée 1 Définition d’une DTD Définition interne La DTD est directement incluse dans le document <?xml version="1.0" ? Encoding= Encoding=‘ISOISO-88598859-1’ standalone= standalone=‘yes’ yes’> <!-- !DOCTYPE nomnom-dede-lala-racine [nomnom-fichier] --> --> <!DOCTYPE nomnom-dede-lala-racine [ <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT ANNUAIRE (TITRE, PERSONNE*)> TITRE (#PCDATA)> PERSONNE ( NOM, PRENOM?, BUREAU, TEL, EMAIL)> PERSONNE numpers ID #REQUIRED> NOM (#PCDATA)> PRENOM (#PCDATA)> BUREAU (#PCDATA)> TEL (#PCDATA)> EMAIL (#PCDATA)> ] --> --> Définition externe <?xml version="1.0" ? Encoding= Encoding=‘ISOISO-88598859-1’ standalone= standalone=‘no’ no’> <!-- !DOCTYPE nomnom-dede-lala-racine SYSTEM "nomnom-fichier" fichier" --> --> <!DOCTYPE Annuaire SYSTEM « Annuaire.dtd" Annuaire.dtd"> DTD – Éléments Définir les balises du langage De la forme <! ELEMENT Nom Modè Modèle > Notations () : regrouper pour appliquer les opé opérateurs + : pré présence une ou plusieurs fois de ce qui pré précède ? : pré présence au plus une fois * : absence ou pré présence une ou plusieurs fois -(…) : ne doit pas être pré présent X | Y : exclusion, pré présence de X ou de Y,mais pas de deux X,Y : pré présent dans l’l’ordre X & Y : pré présent sans importance de l’l’ordre Empty : l’l’élement peutpeut-être vide (sans contenu) #PCDATA : suite de caractè caractère ANY : n’ n’importe quel contenu 2 Éléments - exemples ? : pré présence au plus une fois <!ELEMENT PERSONNE ( NOM, PRENOM, BUREAU, TEL, EMAIL? EMAIL?)> * : absence ou pré présence une ou plusieurs fois <!ELEMENT ANNUAIRE (TITRE, PERSONNE*)> X | Y : exclusion, pré présence de X ou de Y,mais pas de deux <!ELEMENT ADRESSE AUTRE)> (RUE | AVENUE | PLACE | BOULEVARD | Empty : l’é l’éllément peutpeut-être vide (sans contenu) <!ELEMENT ANNUAIRE EMPTY> EMPTY> #PCDATA : suite de caractè caractère <!ELEMENT NOM (#PCDATA)> DTD – Attributs Un attribut peutpeut-être associé associé à un élément De la forme <!ATTLIST NomDElement NomDAttribut TypeValeurOuEnumeration Defaut NomDAttribut TypeValeurOuEnumeration Defaut ... > Valeurs possibles CDATA : valeur de l'attribut est une sé séquence de caractè caractères ID :la valeur de l'attribut est un identificateur unique IDREF : la valeur de l'attribut est une ré référence à un élément ID IDREFS : idem IDREF en acceptant plusieurs valeurs séparé parés par des espaces Une énumé numération de valeurs possibles se fait en mettant entre parenthè parenthèses les valeurs sé séparé parées par des « | » 3 DTD – Attributs Default Que devient l’ l’attribut non utilisé utilisé ? #IMPLIED : la valeur par dé défaut est fournie par l’l’application traitant le document #REQUIRED : l’l’auteur du document doit dé définir l’l’attribut #FIXED : seule la valeur mentionné mentionnée est possible Énumé numération ou chaî chaîne de caractè caractère : une valeur de l’énum ération ou la chaî ’énumé chaîne de caractè caractère sera considé considérée (à (à condition d’ d’être compatible avec le type de l’l’attribut) Attributs pré prédéfinis xml: xml:lang : Prend des valeurs de type code de langue Ex : en, enen-US, etc. xml:space : Prend les valeurs pour contraindre le traitement des espaces default : l’ l’application est libre preserve : l’ l’application doit conserver les espaces DTD – Entités Entité Entités paramé paramétriques définir des symboles qui seront utilisé utilisés ailleurs dans la DTD Cette définition peut faire référence à d’autres entité entités En HTML : <!ENTITY %heading "H1|H2|H3|H4"> %Coopé Coopération sera définie comme « france | hollande | allemagne | japon | chine | sénégal | egypte | eomalie". eomalie". <!ENTITY %europe %europe “france | hollande | allemagne"> allemagne"> <!ENTITY %asie %asie “japon | chine"> <!ENTITY %afrique gal, egypte | somalie"> somalie"> %afrique “sénégal, <!ENTITY %Coopé é ration "%europe europe; ; | %asie asie; ; | %afrique ;"> %Coop "% % %afrique;"> 4 DTD – Entités Entité Entités de caractè caractères Traiter les caractè caractères non repré représentables dans l’ l’alphabet utilisé utilisée <!ENTITY nbsp " "> <!ENTITY iexcl "¡"> Les entité entités de caractè caractères dé définies dans une DTD peuvent être utilisé utilisées dans un document XML ré référenç rençant cette DTD à l'aide de la notation &NomEntit é; &NomEntité Entité Entités internes Symboles pouvant être dé définis dans une DTD et utilisé utilisés dans un document XML comme raccourcis d'é d'écritur DTD : <!ENTITY DDT "Dichlorodiphenyltrichlor éthane"> "Dichlorodiphenyltrichloré thane"> XML : … Le @DDT pesticide qui a abondamment pollué pollué la chaî chaîne alimentaire !!! Lors de l’ l’affichage du document XML, @DDT est remplacé remplacé par Dichlorodiphenyltrichloré Dichlorodiphenyltrichloréthane : … Le Dichlorodiphenyltrichloré Dichlorodiphenyltrichloréthane est un pesticide qui a abondamment pollué pollué la chaî chaîne alimentaire !!! DTD – Entités Entité Entités extè extèrnes Ce sont des symboles pouvant être dé définis dans une DTD et utilisé utilisés dans un document XML, mais dont le contenu se trouve dans un fichier externe à la DTD. DTD : <!ENTITY Inclusion SYSTEM "FichierContenantDuXml.xml"> FichierContenantDuXml.xml"> XML : <balise>... &Inclusion; ...</balise> Ce sont des symboles pouvant être dé définis dans une autre DTD et utilisé utilisés dans la DTD courante: référence à la DTD externe: <!ENTITY %Inclusion SYSTEM "FichierContenantLaDTD.dtd "> "FichierContenantLaDTD.dtd"> importation du contenu de la DTD externe dans la DTD courante: %Inclusion. 5 Pourquoi les schémas Les DTD utilisent une syntaxe diffé différente de XML Pas de typage de donné données Definir un méchanisme de typage de donné données Pas d’ d’espace de noms Utiliser la grammaire XML, ses outils, outils, sa technologie Conflit possible entre les symboles importé importés et les symboles définis Définir un sursur-ensemble des possibilité possibilités des DTDs DTD vs. Schéma Un sché schéma (comme un DTD) permet de spé spécifier la syntaxe d’ d’une classe de documents XML Un sché schéma est contenu dans une dé déclaration <xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema"> </xsd:schema> xsd est un pré préfixe choisi arbitrairement, permettant d'accé d'accéder dans l'é l'élément xsd: xsd:schema à tous les symboles définis dans la syntaxe des sché schémas Définir l ’él ’élément correspondant à une balise <xsd:element name='TITRE' type='xsd:string' use="required"/> 6 DTD vs. Schéma L'é L'élément xsd: xsd:complexType sert à définir le contenu de l'é l'élément qui le contient ElementOnly : des soussous-ensembles TextOnly : du texte simple Mixed : combinaison des deux pré précédents Empty : aucun soussous-élément L'attribut use peut prendre les valeurs suivantes : Prohibited : l'attribut ne doit pas apparaî apparaître Optional : l'attribut peut ou pas apparaî apparaître Required : l'attribut doit apparaî apparaître Fixed : l'attribut ne peut prendre qu'une seule valeur Default : utiliser une valeur par dé défaut si l’ l’attribut n’ n’est pas dé défini Si l'attribut use n'est pas utilisé utilisé, la valeur par dé défaut est généralement optional L'attribut value peut être utilisé utilisé quand use vaut fixed, fixed, required ou default Schéma - Élément Élément adresse DTD syntax: <!ELEMENT adresse (NOM, PRENOM, ADRESSE, TEL, EMAIL, REMARQUE)> Schema syntax: <xsd:complexType name ='personneType'> <xsd:element <xsd:element <xsd:element <xsd:element <xsd:element <xsd:element name='NOM' type='xsd:string' use="required"/> name='PRENOM' type='xsd:string' use="optional"/> name='ADRESSE' type='adressetype' use="required"/> name='TEL' type='teltype' use="optional"/> name='EMAIL' type='emailtype' use="optional"/> name='REMARQUE' type='xsd:string' use="optional"/> </xsd:complexType> 7 Schéma - Attribut Les valeurs de types les plus courantes sont string, boolean, boolean, float, float, decimal, decimal, integer, integer, nonPositiveInteger, nonPositiveInteger, negativeInteger, negativeInteger, nonNegativeInteger, nonNegativeInteger, positiveInteger, positiveInteger, timeDuration, timeDuration, timeInstant, timeInstant, time, timePeriod, timePeriod, date, month, month, year, year, century, century, uriReference, uriReference, ID, IDREF, ENTITY, NOTATION, Qname et Name Les attributs minOccurs et maxOccurs Indiquent le nombre minimum et maximum de soussouséléments autorisé autorisés dans le contexte de l'é l'élément englobant. Des valeurs par dé défaut: maxOccurs = 1 si minOccurs=0 minOccurs=0 Schéma - Attribut Definir le nom, le type, et la valeur par défaut des attributs: attributs: DTD syntax: <!ATTLIST Book ISBN CDATA #REQUIRED Availability (EnStock | PasEnStock) ”EnStock"> Schema syntax: <elementType name="Book"> <sequence>...</sequence> <attrDecl name="ISBN" required="true"> <datatypeRef name="string"/> </attrDecl> <attrDecl name="Availability" required="false"> <datatypeRef name="Disponiblité"> <default>EnStock</default> </datatypeRef> </attrDecl> </elementType> 8 Definition des Types de données DTD syntax: Pas possible Schema syntax: <datatype name=”Disponibilité"> <basetype name="NMTOKEN"/> <enumeration> <literal>EnStock</literal> <literal>PasEnStock</literal> </enumeration> </datatype> Documentation Produire une documentation lisible DTD syntax: <!– Ce schéma défini une liste des personnes de l’IAAI avec des information sur chacun --> Schema syntax: <schema version="1.0" name="http://www.IAAI.info/annuaire.xsd"> <comment> …… </comment> …autres éléments du schéma... </schema> 9 Réutilisation d’une définition de type Définir et nommer un «archetype» archetype» Utiliser ce nom dans la dé définition de type d’ d’un élément Schema syntax: <archetype name="Addresse"> <sequence> <elementTypeRef name="Rue"/> <elementTypeRef name="Ville"/> <elementTypeRef name="CP"/> <elementTypeRef name="ville"/> </sequence> </archetype> <elementType name="personne"> <archetypeRef name="Addresse"/> </elementType> Réutilisation de definitions d’autres schemas Importer le schema contenant la définition Se référer à la définition à partir du schema courant DTD syntax: À la main…Copier-coller Schema syntax: <import schemaAbbrev= "annuaire" schemaName="http://www.annuaire/annuaire.xsd"/> <elementType name="Enseignant"> <sequence> <elementTypeRef name="Nom"/> <elementTypeRef name="adresse" schemaAbbrev="contact" minOccur="0"/> </sequence> </elementType> 10 Association d’un schema avec un Document XML DTD syntax: <!DOCTYPE annuaire SYSTEM "http://www.annuaire/annuaire.dtd"> Schema syntax: <?xml version="1.0"?> <!DOCTYPE Annuaire> <Annuaire xmlns="http://www.annuaire/annuaire.xsd"> ...l’annuaire... </Annuaire> D’autres Languages De Schemas XML Document Content Description (DCD) Document Definition Markup Language (DDML) Schema for ObjectObject-Oriented XML (SOX) XMLXML-Data and XMLXML-Data Reduced 11 Transition DTD-Schema Conversion DTDs vers Schemas Utilisation de XMLXML-DATA et SOX Ne pas utiliser les DTDs et Schemas 12