TD 2: DTD (suite et fin)

Rappels / Outils

Exercice 1: DTD basiques

On donne les 2 DTD suivantes (vous pouvez également les télécharger: 1.a.dtd et 1.b.dtd)
<!ELEMENT a (a|(b|c)*)>
<!ELEMENT b (c,b?)>
<!ELEMENT c (#PCDATA|c)*> 
    
<!ELEMENT a (b,c)>
<!ELEMENT b ((c|b)*)>
<!ELEMENT c (#PCDATA)>
  1. Écrivez un document XML 1.1.xml ayant <a> comme élément racine, et qui est valide pour la première DTD mais pas pour la seconde.
    Vérifiez avec la commande de validation rappelée en haut!

    RENDU: 1.1.xml.

  2. Écrivez un document XML 1.2.xml ayant <a> comme élément racine, et qui est valide pour la seconde DTD mais pas pour la première. Vérifiez!

    RENDU: 1.2.xml.

  3. Écrivez un document XML 1.3.xml ayant <a> comme élément racine, et qui est valide pour les deux DTD. Vérifiez!

    RENDU: 1.3.xml.

  4. Écrivez un document XML 1.4.xml valide pour les 2 DTD et ayant au moins 5 eléments <c>. Vérifiez!

    RENDU: 1.4.xml.

Exercice 2: DTD avancée

  1. Écrivez un document XML 2.1.xml validé par la DTD suivante (téléchargement: 2.1.dtd).
    De plus, votre document devra avoir:
    <!ENTITY % verified "verified (yes|no) #REQUIRED">
    <!ELEMENT library (author*,book*)>
    <!ELEMENT author (name,book_ref*)>
    <!ATTLIST author id ID #REQUIRED %verified; sex (M|F) #IMPLIED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT book_ref EMPTY>
    <!ATTLIST book_ref isbn IDREF #REQUIRED>
    <!ELEMENT book (title,author_ref+)>
    <!ATTLIST book isbn ID #REQUIRED %verified; year NMTOKEN #REQUIRED>
    <!ELEMENT title (#PCDATA)>
    <!ELEMENT author_ref EMPTY>
    <!ATTLIST author_ref ref IDREF #REQUIRED>
    RENDU: 2.1.xml.

Exercice 3: Ecriture de DTD

  1. Écrivez une DTD 3.0.dtd qui valide les documents 3.0.valid1.xml, 3.0.valid2.xml et 3.0.valid3.xml et qui trouve une ou plusieurs erreurs dans tous les documents 3.0.invalid*.xml.
    Pour télécharger ces documents et lancer automatiquement le test:
    rm 3.0.tar.gz; wget --no-cache http://fabien.viger.free.fr/xml/td2/3.0.tar.gz
    tar xf 3.0.tar.gz
    ./3.0.sh
    RENDU: 3.0.dtd.

  2. Écrivez une DTD 3.1.dtd qui valide le document 3.1.xml (voir l'extrait ci-dessous).
    IMPORTANT: votre DTD devra être la plus stricte possible.
    <!-- Ceci est un EXTRAIT pour vous donner une idée. Teléchargez le fichier complet! -->
    <genealogie>
      ...
      <famille fid="def">
        <mere pid="p999"/>
        <pere_inconnu/>
        <enfant pid="p567"/>
        <enfant pid="p789"/>
      </famille>
      ...
      <famille fid="jkl">
        <mere pid="p000"/>
        <pere pid="p123"/>
      </famille>
      ...
      <personne pid="p567" sex="F">
        <fid fid="abc"/>
        <fid fid="def"/>
        <fid fid="ghi"/>
        <nom>Daisy</nom>
        <naissance>01/01/1975</naissance>
      </personne>
      ...
      <personne pid="p999" sex="F">
        <fid fid="def"/>
        <nom>Grand-mère Donald</nom>
        <naissance_inconnue/>
        <mort>12/12/2012</mort>
      </personne>
      ...
    </genealogie>
    Vérifiez que votre DTD est bien stricte comme cela:
    rm 3.1.tar.gz; wget --no-cache http://fabien.viger.free.fr/xml/td2/3.1.tar.gz
    tar xf 3.1.tar.gz
    ./3.1.test.sh
    RENDU: 3.1.dtd.