DTD

DTD est l’abréviation de Document Type Definition.
Une DTD est un ensemble de règles qui définissant

Inclure une DTD

Une DTD peut écrite

Valider un document avec DTD

xmllint --dtdvalid Bookcatalogue.dtd BookCatalogue.xml

Définition d’éléments

Définit le nom de l’élément et ce que l’élément peut contenir (éléments fils, contenu texte seulement, contenu mixte)

Éléments fils
<!ELEMENT Carnet (personne|société)+>
Élément vide
<!ELEMENT Rôle EMPTY>
Contenu libre
<!ELEMENT Complément ANY>
Données (texte)
<!ELEMENT Nom (#PCDATA)>
Contenu mixte
<!ELEMENT Paragraphe (#PCDATA|gras|ital)*>

Expression de composition des éléments fils

Pour décrire les contenus mixtes/fils d’un élément, on définit une expression de composition des éléments fils.
Les expressions sont délimitées par des parenthèses.
Des opérateurs en définissent la composition

Séquence ,
(Nom, Prénom, Adresse, Email)
Alternative |
(Personne | Société)
De 0 à n occurences *
(Adresse, LigneAdresse*)
Au moins 1 occurence +
(Adresse, LigneAdresse*)+
0 ou 1 occurence ?
(Nom, Prénom?, Email?)

Définition d’attributs

Définit le nom de l’élément et ses attributs.

<!ATTLIST Société xml:lang NMTOKEN #IMPLIED
                  idname   ID      #IMPLIED
                  type     (SA|SARL|EURL) 'SA' >

Un attribut se définit comme suit

Types d’attributs

CDATA Chaîne de caractère littérale
<!ATTLIST soc name CDATA #IMPLIED>
ID,
IDREF
Renvois à l'intérieur des documents
<!ATTLIST soc idname ID #REQUIRED>
(a | b) L'ensemble des valeurs possibles de l'attribut est défini
<!ATTLIST personne fonction (ing|com|tech|admin) "ing">
ENTITY,
ENTITIES
Référence à une ou plusieurs entités externes non XML
<!ATTLIST personne photo ENTITY #IMPLIED>
NMTOKEN,
NMTOKENS
1 ou plus noms symboliques
<!ATTLIST personne compet NMTOKEN default "xml">
NOTATION (OBSOLÈTE) Indique que le contenu de l'élément doit être passé à l'application identifiée par la notation
<!NOTATION vcard system "/usr/bin/ns">
<!ELEMENT vcard-buffer any>
<!ATTLIST vcard-buffer vc NOTATION (vcard) #IMPLIED>

Indicateur d’occurence

#REQUIRED L'attribut est obligatoire
<!ATTLIST soc idname ID #REQUIRED>
#IMPLIED L'attribut est optionnel
<!ATTLIST soc name CDATA #IMPLIED>
#FIXED "valeur" La valeur de l'attribut est fixée
<!ATTLIST soc pays CDATA #FIXED "France">
"valeur" Valeur par défaut
<!ATTLIST personne fonction (ing|tech|admin) "ing">

Définition d’entités

Entités internes

Les entités internes référencent des objet qui peuvent être réutilisés dans le document XML (servent de remplacement). Il existe 3 types d’entités internes :

Entités externes

Les entités externes référencent des documents externes. Il existe 2 types d’entités externes :

Référence document

Un document peut être référencé soit


Exemple complet

Modèle de données:

Document.xml :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document SYSTEM "Presentation.dtd">

<document>
<header>
  <declare name="titre"/>
  <declare name="standard"/>
  <declare name="illustration"/>
</header>
<slide model="titre">
  <title><p>Exemple DTD</p></title>
</slide>
<slide model="standard">
  <title><p>Travail à réaliser</p></title>
  <body>
  <bloc>
    <ul>
    <li>
      <p>Réaliser une DTD</p>
      <ul>
        <li><p>Valider une instance</p></li>
      </ul>
    </li>
    <li>
      <p>Modifier un document ODP</p>
      <ul>
        <li><p>Mettre un titre en rouge</p></li>
        <li><p>Mettre tous les titres en vert</p></li>
      </ul>
    </li>
    </ul>
  </bloc>
  </body>
</slide>
<slide model="illustration">
  <title><p>Validation</p></title>
  <body>
  <bloc>
    <img src="screenshot"/>
  </bloc>
  <bloc>
    <ul>
      <li><p>Xmllite</p></li>
    </ul>
  </bloc>
  </body>
</slide>
</document>

Presentation.dtd :

<!-- / -->
<!ELEMENT  document (header, slide*)>

<!-- /document/header -->
<!ELEMENT  header   (declare)*>
<!ELEMENT  declare  EMPTY>
<!ATTLIST  declare  name ID #REQUIRED>

<!-- /document/slide -->
<!ELEMENT  slide    (title?, body?)>
<!ATTLIST  slide    model IDREF #REQUIRED>
<!ELEMENT  title    (p)>
<!ELEMENT  body     (bloc)*>

<!-- /document/slide/body -->
<!ELEMENT  bloc     (ul | img)>

<!ELEMENT  ul       (li)*>
<!ELEMENT  li       (p, ul?)>
<!ELEMENT  p        (#PCDATA | b | i | color)*>

<!ELEMENT  img      EMPTY>
<!ATTLIST  img      src CDATA #REQUIRED>

<!-- /document/body/body/bloc/p -->
<!ELEMENT  b        (#PCDATA | i | color)*>
<!ELEMENT  i        (#PCDATA | b | color)*>
<!ELEMENT  color    (#PCDATA | b | i)*>
<!ATTLIST  color    rgb CDATA #REQUIRED>