xml : balisage structurel

2. Documents valides

Un document XML valide est un document bien formé qui obéit en outre à une structure type, définie dans un schéma XML ou dans une définition de document type (DTD) : son prologue doit inclure une déclaration de type, contenant, directement ou par référence à des entités externes, des déclarations pour tous les éléments, attributs et entités utilisés. Le document valide sera une instance de cette structure prédéfinie.

Une DTD (Document Type Definition, définition de document type) est l'ensemble de toutes ces déclarations, dans une déclaration de type de document, le 'DOCTYPE'.

Un document peut inclure directement sa DTD, mais le vrai intérêt est la possibilité de l'utilisation externe : on inclut dans le document une déclaration de type faisant appel à la DTD externe à travers un URI. On peut également mélanger une DTD externe avec des déclarations locales (en cas d'incompatibilités entre déclarations locales et externes, les déclarations contenue dans la partie interne ont priorité).

What's in a DTD ... ?

Une DTD peut contenir :

  • Des commentaires
  • Déclarations d'éléments
  • Déclarations de listes d'attributs
  • Déclarations d'éntités générales
  • Déclarations d'éntités paramètres
  • Déclarations de notations

Déclaration d'élément

Cette déclaration définit un type d'élément (par un nom), et l'associe à un certain modèle de contenue. Elle a la forme : <!ELEMENT nom modèle> Le 'nom' d'un élément, tout comme le 'nom' d'un attribut, est un nom XML : essentiellement ce n'est qu'une chaîne alphanumérique, qui, en plus, peut contenir les symboles _ (underscore), - (trait) et . (point). L'utilisation de tout autre symboles non-alphanumérique est interdit, avec l'exception du : . (Mais l'utilisation de : dans les noms XML est réservé pour les domaines nominaux.) Attention: un nom XML commence obligatoirement avec _ ou un symbole alphabétique !
Le 'modèle de contenu' peut autoriser l'utilisation d'un ou plusieurs éléments fils spécifiés, des données, une mélange de données et éléments fils (modèle mixte), une mélange arbitraire de données et d'éléments (contenu libre); le modèle peut aussi imposer que l'élément reste toujours vide.

Les éléments fils peuvent avoir un ordre imposé (ils forment une séquence : leurs noms sont séparés par des virgules). Par exemple :
<!ELEMENT article (titre, resume, introduction, text)> Dans un document valide, l'élément 'article' doit obligatoirement contenir un (seul) élément 'titre', un (seul) élément 'resume', un (seul) élément 'introduction' et un (seul) élément 'text', et dans cet ordre.
Les éléments peuvent aussi être énuméré, comme dans l'exemple suivant: <!ELEMENT article (titre | resume | introduction | text)> Maintenant, dans un document valide, l'élément 'article' contiendra un (seul) élément : 'titre', 'resume', 'introductiion' ou 'text' ...
Les noms des éléments fils peuvent être suffixé par un des indicateurs d'occurrence : ? (l'élément est optionnel et ne peut être répété ; il peut apparaître zéro ou une fois) , * (élément optionnel, peut apparaître zéro, une ou plusieurs fois) ou + (élément obligatoire, doit apparaître au moins une fois). Absence de suffixe signifie que l'élément doit apparaître une et une seule fois. Les suffixes peuvent s'appliquer à un groupe d'éléments. Voici un exemple :
<!ELEMENT article (titre, auteur, resume, sommaire?, introduction?, (titre_paragraphe, introduction_paragraph?, texte_paragraph)+)>

En combinant l'énumération d'éléments fils avec le suffixe *, il est possible de rendre l'ordre d'éléments fils d'un élément donné libre ...

La présence de données dans le contenu d'un élément est indiquée par le mot-clef '#PCDATA' (Parsed Character Data) : <!ELEMENT texte_paragraph (#PCDATA)>

Dans un modèle mixte on autorise une mélange libre de données et éléments fils. Le suffixe de répétition est obligatoirement * , et '#PCDATA' apparaît toujours en première position. Exemple : [ à ajouter ... ]

Pour la déclaration d'un élément avec un contenu libre (absolument quelconque), on utilise le mot-clef 'ANY' : <!ELEMENT essaie (ANY)>

Un élément est déclaré vide en utilisant le mot-clef 'EMPTY' : <!ELEMENT reference (EMPTY)> Pour assurer la compatibilité avec les applications SGML les éléments déclarés vides explicitement dans une DTD doivent êtres fermés par la marque d'élément vide : /> (Un élément instance,si son modèle le permet, peut être vide, bien sur, sans que cela soit obligatoire. Dans ce cas il sera fermé par une balise de clôture normale.)

Creative Commons | CC | 2003-2005 Paris, HarsMedia / H. Schellinx. HTML & CSS valide.