INaLCO - M2 Traductique
Introduction à XML, cours n°2

Jean-François Perrot 

Validation par DTD : Document Type Definition


  1. I. Validation d'un document XML.
    1. Préambule 
    2. Trois techniques
    3. Outillage
    4. Lier le document à valider avec le document de référence ?
      Le cas des DTD
      1. Déclaration incluse
      2. Déclaration par URL SYSTEM
      3. Déclaration par référence PUBLIC

  2. II. Structure d'une DTD
    1. Métagrammaire des DTDs
    2. Exemples
      1. Représentation par enfants
      2. Représentation par attributs

  3. III. Les entités
    1. Idée générale
    2. Un usage fréquent : les entités-caractères
    3. Entités utilisées dans la DTD elle-même

  4. IV. Mise en pratique

I. Validation d'un document XML.


II. Structure d'une DTD

  1. Métagrammaire des DTDs

    Une DTD permet essentiellement de spécifier les noms, les contenus et les attributs
    des éléments qui composent le fichier XML visé.
  2. Exemples

    Représentation par enfants

    [ fichier Nom_note2.xml]

    <?xml version="1.0" ?>
    <liste>
    <eleve>
    <nom> Toto</nom> <note> 12 </note>
    </eleve>
    <eleve>
    <nom> Tata</nom> <note> 13 </note>
    </eleve>
    <eleve>
    <nom> Tutu</nom> <note> 17 </note>
    </eleve>
    <eleve>
    <nom> Titi</nom> <note> 11 </note>
    </eleve>
    </liste>


    [ fichier Nom_note2.dtd]

    <?xml version="1.0" encoding='ISO-8859-1'?>
    <!-- Tableau Noms-Notes par enfants -->
    <!ELEMENT liste (eleve*)>
    <!ELEMENT eleve (nom, note)>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT note (#PCDATA)>

    Ce qui se lit :
    1. L'élément liste contient un nombre quelconque d'éléments eleve.
    2. L'élément eleve contient un élément nom suivi d'un élément note.
    3. Les éléments nom et note contiennent des chaînes de caractères
      qui seront analysées par le parseur (PCDATA = Parsed Character Data).
    Représentation par attributs

    [ fichier Nom_note1.xml]

    <?xml version="1.0" ?>
    <liste>
    <eleve nom="Toto" note="12"/>
    <eleve nom="Tata" note="13"/>
    <eleve nom="Tutu" note="17"/>
    <eleve nom="Tutu" note="11"/>
    </liste>


    [fichier Nom_note1.dtd] :

    <?xml version="1.0" encoding='ISO-8859-1'?>
    <!-- Tableau Noms-Notes par attributs -->
    <!ELEMENT liste (eleve*)>
    <!ELEMENT eleve EMPTY>
    <!ATTLIST eleve nom CDATA #REQUIRED>
    <!ATTLIST eleve note CDATA #REQUIRED>

    Les attributs de l'élément (vide) eleve sont nom et note,
    dont les valeurs sont des chaînes de caractères non analysées (type CDATA),
    et dont la présence est obligatoire (indicateur #REQUIRED).


III. Les entités

  1. Idée générale

    En XML, comme en HTML (c'est un héritage de SGML), on appelle entité (anglais entity) une forme d'abréviation censée rendre les fichiers plus faciles à gérer.
    Ces  abréviations sont définies dans la DTD, et utilisées dans le fichier entre "&" et ";" :
    Exemple :  


  2. Un usage fréquent : les entités-caractères

    Elles sont bien connues en HTML depuis le temps où on croyait ne pouvoir faire circuler que des fichiers écrits en ASCII 7 bits.
    Rappelez-vous ! &eacute;, &agrave;, etc sont des entités prédéfinies en HTML.
    Depuis l'avènement d'UTF-8, leur emploi s'est considérablement restreint, aussi n'en reste-t-il qu'un tout petit nombre (5) en XML :
    &amp; &
    &apos; '
    &quot; "
    &lt; <
    &gt; >

    Mais n'oublions pas que tout caractère peut être donné par une entité dérivée de son numéro Unicode, soit en décimal, soit en hexa :
    Ce qui permet de mentionner des caractères étrangers à la page de code choisie pour son fichier.
    En effet, tout le monde n'a pas encore adopté UTF-8 !

    Rien n'interdit - c'est même recommandé - d'introduire des entités plus "parlantes" comme
    <!ENTITY care-of "&#x2105;">
    et d'écrire &care-of; au lieu de &#x2105;.

  3. Entités utilisées dans la DTD elle-même

    Les DTDs pouvant prendre des tailles considérables, on souhaite employer des abréviations du même genre dans le fichier-DTD lui-même.
    Il s'agit bien évidemment d'un mécanisme différent de celui des entités ordinaires (définies dans la DTD, donc "au niveau méta", mais utilisées dans le fichier XML, "au niveau objet").
    Dans la littérature, ces nouvelle abréviations sont appelées "entités-paramètres" (en anglais parameter entities).
    On devrait plutôt les qualifier de méta-entités.

    Elles sont caractérisées par l'apparition d'un marqueur syntaxique spécial "%" dans leur définition, qui répparaît comme préfixe dans leur utilisation. On pourrait par exemple réécrire notre DTD familiale ainsi 

    <!ENTITY % parents "pere?, mere?">
    ....
    <!ELEMENT Personne (%parents;, enfants)>

Pour plus de détails et d'exemples, voir par exemple les excellentes sources d'informations que sont SelfHTML et Commentçamarche.

IV. Mise en pratique

Nous sommes à présent armés pour aller lire la DTD des documents XML