Link Search Menu Expand Document

TP - définition DTD d’un répertoire

Votre apprentissage des DTD arrive donc à son terme et rien ne vaut un TP pour le conclure ! Je vous propose donc de réaliser la définition DTD d’un répertoire. L’objectif est de mettre en pratique toutes les notions vues dans les parties précédentes sur les DTD.

L’énoncé

Le but de ce TP est de créer la DTD du répertoire élaboré dans le premier TP.

Pour rappel, voici les informations que l’on souhaite connaître pour chaque personne :

  • Son sexe (homme ou femme).
  • Son nom.
  • Son prénom.
  • Son adresse.
  • Un ou plusieurs numéros de téléphone (téléphone portable, fixe, bureau, etc.).
  • Une ou plusieurs adresses e-mail (adresse personnelle, professionnelle, etc.).

Voici le document XML que nous avions construit :

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

<repertoire>
  <!-- John DOE -->
  <personne sexe="masculin">
    <nom>DOE</nom>
    <prenom>John</prenom>
    <adresse>
      <numero>7</numero>
      <voie type="impasse">impasse du chemin</voie>
      <codePostal>75015</codePostal>
      <ville>PARIS</ville>
      <pays>FRANCE</pays>
    </adresse>
    <telephones>
      <telephone type="fixe">01 02 03 04 05</telephone>
      <telephone type="portable">06 07 08 09 10</telephone>
    </telephones>
    <emails>
      <email type="personnel">john.doe@wanadoo.fr</email>
      <email type="professionnel">john.doe@societe.com</email>
    </emails>
  </personne>
    
  <!-- Marie POPPINS -->
  <personne sexe="feminin">
    <nom>POPPINS</nom>
    <prenom>Marie</prenom>
    <adresse>
      <numero>28</numero>
      <voie type="avenue">avenue de la république</voie>
      <codePostal>13005</codePostal>
      <ville>MARSEILLE</ville>
      <pays>FRANCE</pays>
    </adresse>
    <telephones>
      <telephone type="bureau">04 05 06 07 08</telephone>
    </telephones>
    <emails>
      <email type="professionnel">contact@poppins.fr</email>
    </emails>
  </personne>
</repertoire>

Une dernière consigne : la DTD doit être une DTD externe !

Une solution

Une fois de plus, je vous fais part de ma solution !

Le fichier XML avec le DOCTYPE :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<!DOCTYPE repertoire SYSTEM "repertoire.dtd">

<repertoire>
  <!-- John DOE -->
  <personne sexe="masculin">
    <nom>DOE</nom>
    <prenom>John</prenom>
    <adresse>
      <numero>7</numero>
      <voie type="impasse">impasse du chemin</voie>
      <codePostal>75015</codePostal>
      <ville>PARIS</ville>
      <pays>FRANCE</pays>
    </adresse>
    <telephones>
      <telephone type="fixe">01 02 03 04 05</telephone>
      <telephone type="portable">06 07 08 09 10</telephone>
    </telephones>
    <emails>
      <email type="personnel">john.doe@wanadoo.fr</email>
      <email type="professionnel">john.doe@societe.com</email>
    </emails>
  </personne>
    
  <!-- Marie POPPINS -->
  <personne sexe="feminin">
    <nom>POPPINS</nom>
    <prenom>Marie</prenom>
    <adresse>
      <numero>28</numero>
      <voie type="avenue">avenue de la république</voie>
      <codePostal>13005</codePostal>
      <ville>MARSEILLE</ville>
      <pays>FRANCE</pays>
    </adresse>
    <telephones>
      <telephone type="professionnel">04 05 06 07 08</telephone>
    </telephones>
    <emails>
      <email type="professionnel">contact@poppins.fr</email>
    </emails>
  </personne>
</repertoire>

Le fichier DTD :

<!-- Racine -->
<!ELEMENT repertoire (personne*)>

<!-- Personne -->
<!ELEMENT personne (nom, prenom, adresse, telephones, emails)>
<!ATTLIST personne sexe (masculin | feminin) #REQUIRED>

<!-- Nom et prénom -->
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>

<!-- Bloc adresse -->
<!ELEMENT adresse (numero, voie, codePostal, ville, pays)>
<!ELEMENT numero (#PCDATA)>

<!ELEMENT voie (#PCDATA)>
<!ATTLIST voie type CDATA #REQUIRED>

<!ELEMENT codePostal (#PCDATA)>
<!ELEMENT ville (#PCDATA)>
<!ELEMENT pays (#PCDATA)>

<!-- Bloc téléphone -->
<!ELEMENT telephones (telephone+)>
<!ELEMENT telephone (#PCDATA)>
<!ATTLIST telephone type CDATA #REQUIRED>

<!-- Bloc email -->
<!ELEMENT emails (email+)>
<!ELEMENT email (#PCDATA)>
<!ATTLIST email type CDATA #REQUIRED>

Un bref commentaire

Dans cette solution, je suis allé au plus simple en indiquant que pour les types de téléphones, d’e-mails et de voies, j’accepte toutes les chaînes de caractères. Libre à vous de créer de nouvelles règles si vous souhaitez que, par exemple, le choix du type de la voie ne soit possible qu’entre rue, avenue, impasse, etc.

Ce cours vous plait ?

Retrouvez ce cours en livre physique sur Amazon !