• Home
  • Docker
  • Kubernetes
  • Java
  • Ubuntu
  • Maven
  • Big Data
  • CI
  • Install
  • Samples
  • Archived
XML | DTD (Document Type Definition)
  1. Introduction
  2. Déclaration du DTD : Identificateur système
  3. Déclaration du DTD : Identificateur public
  4. Structure du DTD : déclarations des éléments
    1. Déclarer un élément vide ("EMPTY")
    2. Déclarer un élément qui contient uniquement du texte
    3. Déclarer un élément qui contient d'autres éléments
    4. Déclarer un élément parent qui contient une combinaison d'éléments enfants et de textes
    5. Déclarer un élément parent qui contient n'importe quelle combinaison d'éléments et de textes
  5. Structure du DTD : Cardinalité des éléments
  6. Structure du DTD : déclarations des attributs

  1. Introduction
    Un DTD définit la structure syntaxique et sémantique que les documents XML, qui référencent le DTD, doivent respecter pour être valides.

    Par exemple, le document XML suivant :

    Peut être validé contre le DTD suivant :

    Pour déclarer que le document XML doit se conformer à un DTD, il faut utiliser la syntaxe suivante :

    La déclaration du DTD doit commencer par "<!DOCTYPE", suivi par un espace, suivi par le nom de l'élément racine du document XML (exemple book).

    Notes : Aucun espace n'est autorisé dans la déclaration "<!DOCTYPE".

    Il y a plusieurs façons pour déclarer le DTD auquel le document XML doit s'adhèrer.
    La solution la plus simple est de spécifier le DTD directement avec la déclaration du DTD en plaçant le contenu entre les caractères "[" et "]".

    Il est également possible de référer à un DTD en utilisant un :
    ► Identificateur système.
    ► Identificateur public.
  2. Déclaration du DTD : Identificateur système
    Un identificateur système permet de spécifier un fichier externe qui contient le contenu DTD.
    L'identificateur système est défini en utilisant le mot-clé "SYSTEM" suivit de l'emplacement du fichier externe.
    L'emplacement du DTD peut être relatif au document XML (exemple : "book.dtd") ou absolu en spécifiant un chemin explicite sur une ressource locale (disque dure : "file:///C:/dtd/book.dtd") ou distante (intranet ou internet : "http://www.mtitek.com/dtd/book.dtd").

    Voici quelques exemples de déclarations DTD vers un fichier externe "book.dtd" :



    Voici le contenu du fichier "book.dtd" :
  3. Déclaration du DTD : Identificateur public
    Un identificateur public permet de spécifier un fichier externe qui contient le contenu DTD.
    L'identificateur public est défini en utilisant le mot-clé "PUBLIC" suivit par un identifiant qui permet de localiser une ressource (DTD) dans un catalogue public.

    Voici un exemple de déclaration DTD en utilisant un identificateur public :

    Avec un identificateur public, il est aussi possible de spécifier un identificateur système qui sera utilisé au cas où la résolution de l'identificateur public échoue :

    Notes : Il n'est pas obligatoire de spécifier, dans ce cas, le mot-clé "SYSTEM".

    On peut aussi utiliser des déclarations internes, avec un identificateur public :
  4. Structure du DTD : déclarations des éléments
    Un document XML contient principalement des éléments.
    Ces éléments doivent être déclarés dans le DTD pour que le document XML soit valide.

    La déclaration d'un élément doit commencer par "<!ELEMENT", suivi par un espace, suivi par le nom de l'élément (exemple book), suivi par le contenu de l'élément (placé entre parenthèses).

    Le contenu d'un élément définit le contenu autorisé dans l'élément.

    Un élément peut être vide ("EMPTY"), ou contenir du texte ("PCDATA"), contenir d'autres éléments, contenir une combinaison d'éléments et du texte, ou contenir n'importe quel contenu ("ANY").
    1. Déclarer un élément vide ("EMPTY")
      Pour déclarer un élément vide il faut utiliser le mot-clé "EMPTY".

      Dans cet exemple, l'élément "price" doit être un élément vide dans le document XML.


    2. Déclarer un élément qui contient uniquement du texte
      Pour déclarer un élément qui contient uniquement du texte il faut utiliser le mot-clé "PCDATA" (Parsed Character DATA).

      Dans cet exemple, l'élément "title" peut contenir uniquement du texte (cela inclut une chaîne de caractères vide, ou même un élément vide).



    3. Déclarer un élément qui contient d'autres éléments
      • Pour déclarer un élément parent qui contient d'autres éléments enfants, il suffit de lister les noms de ces éléments séparés par des virgules.
        Les noms des éléments doivent être placées entre parenthèses.

        Par exemple, l'élément "<book>" est autorisé à contenir seulement les éléments suivants : "title", "isbn".

        La déclaration d'un élément doit être unique dans un DTD, c.-à-d. qu'il ne peut pas y avoir plusieurs déclarations d'un élément qui utilisent le même nom de l'élément.
        Cependant, il est possible que le même élément soit imbriqué dans des éléments parents différents ; dans ce cas, la même déclaration de l'élément enfant peut être utilisée dans la déclaration de plusieurs éléments parents.

        L'ordre des éléments enfants dans le document XML doit respecter l'ordre dans lequel ils étaient listés dans la déclaration de l'élément parent dans le DTD (les éléments enfants sont séparés par une virgule).
        Dans l'exemple précédant, la déclaration de l'élément "<book>" indique qu'il doit contenir deux éléments enfants ("<title>", "<author>") qui doivent apparaître dans cet ordre dans le document XML.

        La validation du document XML échoue :
        - Si un élément enfant, spécifié dans la déclaration de l'élément parent, est manquant.
        - Si un élément parent contient un élément enfant qui n'est pas spécifié dans la déclaration de l'élément parent.
        - Si les éléments enfants sont listés dans un ordre différent de l'ordre spécifié dans la déclaration de l'élément parent.

      • Il est possible d'utiliser le caractère "|" pour déclarer qu'un élément parent peut contenir un seul élément enfant parmi une liste de choix d'éléments enfants spécifiée dans la déclaration de l'élément.

        Dans l'exemple précédant, la déclaration de l'élément "<book>" indique qu'il doit contenir soit l'élément enfant "<isbn>", "<nbn>", ou "<issn>".

      • Il est aussi possible de combiner une séquence d'éléments obligatoires avec une séquence d'éléments où un seul est obligatoire.

        Dans l'exemple précédant, la déclaration de l'élément "<book>" indique qu'il doit contenir deux éléments enfants ("<title>", "<author>") qui doivent apparaître dans cet ordre dans le document XML.
        En plus, l'élément "<book>" doit contenir soit l'élément enfant "<isbn>", "<nbn>", ou "<issn>" qui doivent apparaître après l'élément "<author>".
    4. Déclarer un élément parent qui contient une combinaison d'éléments enfants et de textes
      Pour déclarer un élément parent qui peut contenir une combinaison d'éléments enfants et textes il faut lister les éléments enfants ainsi que le mot-clé "PCDATA" en les séparant par le caractère "|".

      Notes : l'utilisation du caractère "*" indique que n'importe quelle combinaison de ces éléments et textes sera acceptée.

      La déclaration d'un élément parent qui contient une combinaison des éléments enfants et textes doit respecter les règles suivants :
      - Les éléments enfants (inclus le texte) doivent être séparés par le caractère "|".
      - Le mot-clé "#PCDATA" doit apparaître en premier dans la liste des éléments enfants.
      - Le contenu de la déclaration de l'élément parent doit être mis entre parenthèses suivi par le caractère "*".
      - La déclaration doit contenir uniquement des noms des éléments enfants (séparés par le caractère "|") et non pas une autre combinaison de d'autres éléments enfants (placés entre parenthèses).

      Notes : cette syntaxe n'offre aucun contrôle sur l'ordre des éléments enfants et le nombre de fois qu'ils seront répétés à l'intérieur de l'élément parent.
    5. Déclarer un élément parent qui contient n'importe quelle combinaison d'éléments et de textes
      Pour déclarer un élément parent qui peut contenir n'importe quelle combinaison d'éléments enfants et textes il faut utiliser le mot-clé "ANY".

      Dans cet exemple, l'élément "book" peut contenir n'importe quelle combinaison d'éléments enfants et textes, peu importe, l'ordre des éléments enfants et le nombre de fois qu'ils seront répétés à l'intérieur de l'élément "book".

      Notes : l'élément "book" peut contenir uniquement les éléments déclarés dans le DTD.
  5. Structure du DTD : Cardinalité des éléments
    La cardinalité définit le nombre de fois qu'un élément enfant peut apparaître à l'intérieur d'un élément parent.

    Il y a quatre options possibles pour préciser la cardinalité d'un élément enfant :
    • "?" : indique que l'élément enfant peut apparaître, au maximum, une fois à l'intérieur de l'élément parent.
      L'élément enfant ne peut pas apparaître plus qu'une fois à l'intérieur de l'élément parent.

    • "+" : indique que l'élément enfant peut apparaître une ou plusieurs fois à l'intérieur de l'élément parent.
      L'élément enfant doit apparaître au moins une fois à l'intérieur de l'élément parent.

    • "*" : indique que l'élément peut apparaître zéro ou plusieurs fois à l'intérieur de l'élément parent.

    • Si aucune option de cardinalité n'est précisée, alors l'élément enfant doit apparaître une et une seule fois à l'intérieur de l'élément parent.

    Notes : la cardinalité n'affecte pas l'ordre des éléments ; un élément enfant doit apparaitre exactement dans l'ordre qui a été définit dans la déclaration DTD (peu importe le nombre de fois qu'il sera répété).
  6. Structure du DTD : déclarations des attributs
    Un élément peut définir des attributs.
    Ces attributs doivent être déclarés dans le DTD pour que le document XML soit valide.

    La déclaration d'un attribut doit commencer par "<!ATTLIST", suivi par un espace, suivi par le nom de l'élément auquel appartient l'attribut (exemple book), suivi par un espace, suivi par le nom de l'attribut (exemple isbn), suivi par un espace, suivi par les options de l'attribut (type, valeur par défaut, ...).

    Notes : il est possible de déclarer plusieurs attributs dans la même déclaration.

    Voir la liste des types des attributs :
    • CDATA
      Indique que la valeur de l'attribut est une chaîne caractères.

    • ID
      Indique que la valeur de l'attribut identifie de manière unique l'élément auquel cet attribut appartient.

    • IDREF
      Indique que la valeur de l'attribut est une référence à un élément (identifié par son ID).

    • IDREFS
      Indique que la valeur de l'attribut est une liste de valeurs "IDREF" séparées par des espaces.

    • NMTOKEN
      Indique que la valeur de l'attribut est un nom de jeton.

    • NMTOKENS
      Indique que la valeur de l'attribut est une liste de valeurs "NMTOKEN" séparées par des espaces.

    • ENTITÉ
      Indique que la valeur de l'attribut est une référence à une ressource externe (image, texte, …).

    • ENTITÉS
      Indique que la valeur de l'attribut est une liste de valeurs "ENTITÉ" séparées par des espaces.

    • Liste de valeurs possibles : (value1, value2, ...)
      Indique que la valeur de l'attribut peut prendre une valeur parmi les valeurs de cette liste (séparées par le caractère "|").

      Dans l'exemple précédant, la déclaration de l'élément "<book>" indique qu'il peut avoir un attribut "<version>" qui peut prendre l'une des valeurs "1", "2", "3", "4".
      La valeur par défaut de l'attribut "<version>" est "1".

      Il est possible d'omettre l'attribut, mais il est interdit de lui donner une valeur différente des valeurs listées dans sa déclaration.

    Il est aussi possible d'ajouter les options suivantes à la déclaration de l'attribut :
    • #FIXED
      Indique que la valeur de l'attribut a une valeur fixe.

      Il est possible d'omettre l'attribut, mais il est interdit de lui donner une valeur différente de la valeur fixe.

    • #REQUIRED
      Indique que l'attribut est requit.


    • #IMPLIED
      Indique que l'attribut est optionnel.

© 2025  mtitek