Ce DOCTYPE est-il valide ?

Considérez le DOCTYPE suivant :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Il présente visiblement un dilemme : l’identifiant public (FPI) fait référence au XHTML 1.1, alors que l’URL de l’identifiant SYSTEM renvoit vers la DTD du XHTML 1.0 transitional. Il ne fait évidemment pas partie des DTD recommandées par le W3C.

Pourquoi le validateur ne voit pas cette erreur

Le validateur du W3C ne lit pas la DTD quand il reconnaît un identifiant public (en l’occurence -//W3C//DTD XHTML 1.1//EN). Il va donc ici chercher la DTD correspondant au XHTML 1.1 et si le document est valide pour cette DTD, il sera déclaré valide, quelle que soit la DTD définie dans l’identifiant public. exemple.

C’est un problème connu, et qui a une contrepartie: lorsque l’identifiant public n’est pas reconnu, l’identifiant système est recherché. S’il correspond à ne DTD valide, le document est validé avec celle-ci et le validateur ne vérifie pas si l’identifiant public correspond. Cette bizarrerie ne date pas d’hier, et permet toujours de faire dire au validateur à peu près ce qu’on veut (à condition ici de servir le document avec un type MIME correct).

Réponse ?

Il n’existe pas à ma connaissance d’outil pour valider les DOCTYPE, je ne sais même pas si l’idée à un sens, mais il est évident que déclarer un identifiant public différent de l’identifiant système est une aberration, les deux étant sensés se référer à la même DTD.

← article précédentarticle suivant →

Les commentaires pour cet article sont fermés.