Dev Web - L©S ßlog - CyberSDF

L©S ßlog - CyberSDF

mercredi 16 mars 2005

XHTML : on "name" les "id" !

En relisant une page web en XHTML 1.0 Strict écrite par quelqu'un d'autre, j'ai remarqué qu'il utilisait l'attribut name de l'élément A pour ses ancres. Ses ancres étant des références (genre notes de fin de documents) il a choisi de donner en valeur un numéro à chacun.

On se retrouvait donc avec quelque chose du style :

<a href="#1">Lien 1</a>
<a href="#2">Lien 2</a>
<a href="#3">Lien 3</a>

<a name="1"></a>(1) Blabla
<a name="2"></a>(2) Blabla
<a name="3"></a>(3) Blabla

Jusque la, aucun problème, tout est complètement conforme à ce qu'on peu lire dans la doc de HTML 4.01 vu que les identificateurs partiels que sont name et id sont complètement prévus.

Seulement en XHTML il en est tout autrement. En effet XHTML est un langage XML et en XML, le seul identificateur partiel possible est de type ID, et la franchement ça tombe super bien vu que l'attribut id est aussi défini de type ID [1]. La ou a déconné, c'est qu'il ne respectait pas la règle qui dit que les documents XHTML 1.0 DOIVENT utiliser l'attribut id quand l'identificateur partiel est défini, même sur les éléments qui historiquement ont également un attribut name [2]

La ou ça pêche le plus c'est que le validateur du W3C n'avait rien vu et nous disait que la page était valide, et bien sur, cela fonctionnait correctement dans les divers navigateurs.

Donc la vous vous dites, ok, pas bien grave on fait un rechercher de name qu'on remplace par id ce qui nous donnerait cette fois ci :

<a href="#1">Lien 1</a>
<a href="#2">Lien 2</a>
<a href="#3">Lien 3</a>

<a id="1"></a>(1) Blabla
<a id="2"></a>(2) Blabla
<a id="3"></a>(3) Blabla

Oui mais non !

La encore, on introduit une erreur dans notre document ; En effet, la personne à utilisé des chiffres comme identificateur partiel (ancres) et la, cela ne fonctionne plus (du moins pour le langage, le navigateur lui...). Tout simplement parce que si on peu donner la valeur que l'on désire à name, vu que la spécification de HTML4 dit que la valeur de name est de type CDATA, il n'en est pas de même pour l'attribut id qui lui n'accepte que les valeurs de type nom qui doivent commencer par une lettre ([A-Za-z]).

Donc en résumé et pour éviter toutes erreurs futur et chercher pendant des heures la ou ça coince :

  • N'utilisez pas l'attribut name pour vos ancres (d'ailleurs ne l'utilisez carrément plus ça sera mieux) et ce même si vous faites du HTML 4.01 Strcit ou du XHTML 1.0 Strict.
  • Utilisez des valeurs d'identificateur parlantes (ex : annexe1, annexe2, etc.)
  • Ne faites qu'une confiance partielle au validateur, il n'est pas omnicient ;-) .

Notes

[1] Bon, comme je vois que ceux du fond commencent à lacher avec tous ces id et ID, je détaille un peu plus. Un attribut en XHTML est toujours en minuscule, donc lorsque j'écris id, on parle bien de l'attribut en (X)HTML et lorsque j'écris 'ID'' je parle du type de donnée que cela inclue en XML, donc un attribut qui identifie de manière unique un élément

[2] http://www.la-grange.net/w3c/xhtml1/#h-4.10

Toutes les fautes d'orthographes présentes sur ce site sont protégées par la licence Logo Creative common Creative common

 |  Valid XHTML  |  Valid CSS  |  Dotclear  |  Design décliné de [ON]Simple par [ NikO ]
Hébergé par Typhon.Network