Valider une DTD personnalisée

Comment valider des documents XHTML utilisant une DTD personnalisée.

Traduction de l’article Validating a Custom DTD. Translated with the permission of A List Apart Magazine (http://alistapart.com) and the author[s].

Dans son article de cette même édition (NDT : sur A List Apart – Edition N°194), Peter-Paul Koch propose l’ajout d’attributs personnalisés dans les éléments de formulaire pour déclencher des évènements spéciaux. Le valideur du W3C ne validera pas un document avec de tels attributs, parce qu’ils ne font pas partie des spécifications XHTML.

Cet article va vous permettre :

Voici un exemple de balisage HTML personnalisé qui nous permettra :

<form action="http://example.com/cgi-bin/example.cgi">
<p>
  Name:
  <input type="text" name="yourName" size="40" />

</p>
<p>
  Email:
  <input type="text" name="email" size="40"
  required="true" />

</p>
<p>
  Comments:<br />
  <textarea maxlength="300" required="false"
  rows="7" cols="50"></textarea>

</p>
<p>
  <input type="submit" value="Send Data" />
</p>
</form>

Qu’est ce qu’une DTD ?

La Définition du Type de Document (DTD) est un fichier qui spécifie quels éléments et attributs existent dans un langage balisé et comment ils apparaissent. Ainsi la DTD XHTML précise que

est un élément valide et qu’il peut apparaître dans une balise

mais pas dans . L’adresse URL, à la fin de la déclaration DOCTYPE, pointe à l’endroit où l’on va trouver le fichier de DTD pour la version HTML que l’on va utiliser. Ni votre navigateur, ni le valideur du W3C ne parcourt le web pour récupérer la DTD – Ils ont une liste des DOCTYPEs valides en mémoire et utilisent l’URL pour les identifier uniquement. Comme nous le verrons plus loin, ce comportement change en cas de DTD personnalisée.

Spécifier les attributs

Ajouter des attributs dans une DTD existante est facile. Pour chaque attribut, vous devez spécifier à quel élément il est associé, quel est son nom, quel type de données il peut contenir et s’il est obligatoire ou facultatif. Ces informations sont spécifiées suivant le modèle :

<!ATTLIST
  elementName attributeName type optionalStatus
>

Pour ajouter l’attribut maxlength à l’élément