La mise en oeuvre d'une Définition de Type de Document personnalisée nécessite non seulement la déclaration de chacun des modules personnels, mais aussi des modules fondamentaux ainsi que les modules de structure modulaire.

Tous les définitions de type de document XHTML doivent inclure ces modules fondamentaux :

  • Structure (xhtml-struct-1.mod) :
    <body>,<div><head><html><span><title>
  • Texte basique (xhtml-text-1.mod) :
    <h1>...<h6><p><pre><br><em><strong>
    etc..
  • Hyper-texte (xhtml-hypertext-1.mod) :
    <a href="./..."> ... </a>
  • Liste (xhtml-lists-1.mod) :
    <dl><ol><ul><li>

La plupart des modules de structure modulaire sont également indispensables dans la conception d'une DTD personnalisée.

Hormis les modules optionnels xhtml-arch-1.mod permettant d'activer XHTML comme une architecture de base et xhtml-events-1.mod déclarant les attributs d'événements intrinsèques, tous les autres modules doivent figurer dans toutes DTD ce qui est d'ailleurs le cas des DTD Publics XHTML : stricte, transitionnelle et de support de cadres.

  • Notations (xhtml-notations-1.html)
  • Types de données (xhtml-datatypes-1.html)
  • Attributs communs (xhtml-attribs-1.com)
  • Noms qualifiés (xhtml-qname-1.mod)
  • Entités de caractères (xhtml-charent-1.mod)

La structure modulaire du XHTML permet donc de créer des DTD adaptées simples à partir de différents modules existants.

Il est également possible de concevoir des DTD bien plus complexes autorisant le développeur à inclure ses propres attributs, éléments, espaces de noms ou modules.

Pour cela, la déclaraion des modules personnels doivent se faire par l'intermédiaire de la façon suivante :

   <!ENTITY % Nom_module.mod SYSTEM 
                                  "Nom_module-1.mod">

   %Nom_module.mod;

ou

   <!ENTITY % Nom_module.mod PUBLIC
             "-//AUTEUR//ELEMENTS XHTML Nom Public du Module 1.0//EN"
             "http://uri_identifiant.com/dtD/Nom_module-1.mod">

   %Nom_module.mod;

Il est possible de suivre la construction d'une DTD sur le principe cité ci-dessous.

   <!ENTITY % Nom_module.module "INCLUDE|IGNORE">
   <![%Nom_module.module;[
   <!-- Déclaration -->
   <!ENTITY % Nom_module.mod
               PUBLIC "-//AUTEUR//ELEMENTS XHTML Nom Public du Module 1.0//EN"
               "http://uri_identifiant.com/dtD/Nom_module-1.mod">
   <!-- Appel -->
   %xhtml-Nom_module.mod;
   ]]>

Cette manière de déclarer les modules apporte un gain de souplesse dans la mesure on le fait d'inclure ou d'ignorer le module concerné s'effectue par l'intermédiaire d'un mot-clé, en l'occurrence soit INCLUDE ou IGNORE.

Exemple

L'exemple ci-dessous appelle deux modules personnels ; un module d'espace de noms et un autre déclarant les éléments et attributs supplémentaires.

Par ailleurs, il inclus les quatres modules essentiels, la structure, le texte, l'hyper-texte et la liste.

Le module de structure modulaire (Framework) est également sollicité. Dans ce cas, les cinq modules connexes sont donc tous appelés. Il s'agît des types de données, des notations, des noms qualifiés, des attributs communs et des entités de caractères, le module d'architecture de base étant ignoré par défaut.

Enfin, le module de modèle de document XHTML 1.1 est également défini dans cette DTD.

<!--                                            DTD personnelle                                            -->
<!--                                             Fichier : perso.dtd                                            -->
<!-- 
   PUBLIC "-//AUTEUR//dtD XHTML PERSO 1.0//EN"
   SYSTEM "http://uri.identifiant.com/dtD/perso.dtd"

   xmlns:espace_de_noms="http://uri.identifiant.com/xmlns/espace_de_noms"
-->

   <!-- Déclare un paramètre d'entité pour le nom pulic de la DTD -->
   <!ENTITY % XHTML.version "-//AUTEUR//dtD XHTML PERSO 1.0//EN" >

   <!-- Réservé pour une utilisation avec des profils de document -->
   <!ENTITY % XHTML.profile "" >

   <!-- Inclusion du module d'espace de noms personnel -->
   <!ENTITY % Espace_de_noms-qname.module "INCLUDE">
   <![%Espace_de_noms-qname.module;[
        <!ENTITY % Espace_de_noms-qname.mod PUBLIC
           "-//AUTEUR//ELEMENTS XHTML Espace_de_noms Qnames 1.0//EN"
           "http://uri_identifiant.com/dtD/espace_de_noms-qname-1.mod">
        %Espace_de_noms-qname.mod;
   ]]>

   <!-- Inclusion du module d'éléments et d'attributs personnels -->
   <!ENTITY % Espace_de_noms.module "INCLUDE">
   <![%Espace_de_noms.module;[
        <!ENTITY % Espace_de_noms.mod PUBLIC
           "-//AUTEUR//ELEMENTS XHTML Espace_de_noms 1.0//EN"
           "http://uri_identifiant.com/dtD/espace_de_noms-1.mod">
        %Espace_de_noms.mod;
   ]]>

      <!-- Demande à la structure d'employé l'espace de noms personnel 
           comme module supplémentaire de noms qualifiés                      -->
      <!ENTITY % xhtml-qname-extra.mod SYSTEM 
                      "espace_de_noms-qname-1.mod">

      <!-- Désactive le suppport bidirectionnel de texte -->
      <!ENTITY % XHTML.bidi "IGNORE" >

      <!-- Déclare le module de structure modulaire -->
   <!ENTITY % framework.module "INCLUDE">
   <![%framework.module;[
        <!ENTITY % xhtml-framework.mod PUBLIC
         "-//W3C//ENTITIES XHTML Modular Framework 1.0//EN"
         "http://www.w3.org/TR/xhtml-modularization/dtD/xhtml-framework-1.mod">
   %xhtml-framework.mod;
   ]]>

      <!-- Déclare le module de modèle de document -->
   <!ENTITY % model.module "INCLUDE">
   <![%model.module;[
        <!ENTITY % xhtml-model.mod PUBLIC
           "-//W3C//ENTITIES XHTML 1.1 Document Model 1.0//EN"
           "http://www.w3.org/TR/xhtml11/dtD/xhtml11-model-1.mod" >
   %xhtml-model.mod;
   ]]>

      <!-- Déclare le module de texte -->
   <!ENTITY % text.module "INCLUDE">
   <![%text.module;[
        <!ENTITY % xhtml-text.mod PUBLIC
           "-//W3C//ELEMENTS XHTML Basic Text 1.0//EN"
           "http://www.w3.org/TR/xhtml-modularization/dtD/xhtml-text-1.mod" >
   %xhtml-text.mod;
   ]]>

      <!-- Déclare le module d'hypertexte -->
   <!ENTITY % hypertext.module "INCLUDE">
   <![%hypertext.module;[
        <!ENTITY % xhtml-hypertext.mod PUBLIC
           "-//W3C//ELEMENTS XHTML Hypertext 1.0//EN"
           "http://www.w3.org/TR/xhtml-modularization/dtD/xhtml-hypertext-1.mod" >
   %xhtml-hypertext.mod;
   ]]>

      <!-- Déclare le module de liste -->
   <!ENTITY % list.module "INCLUDE">
   <![%list.module;[
        <!ENTITY % xhtml-list.mod PUBLIC
           "-//W3C//ELEMENTS XHTML Lists 1.0//EN"
           "http://www.w3.org/TR/xhtml-modularization/dtD/xhtml-list-1.mod" >
   %xhtml-list.mod;
   ]]>

      <!-- Déclare le module de structure HTML -->
   <!ENTITY % struct.module "INCLUDE">
   <![%struct.module;[
        <!ENTITY % xhtml-struct.mod PUBLIC
           "-//W3C//ELEMENTS XHTML Document Structure 1.0//EN"
           "http://www.w3.org/TR/xhtml-modularization/dtD/xhtml-struct-1.mod" >
   %xhtml-struct.mod;
   ]]>