Billet du blogue

Éléments vides en HTML

On le sait, une des grandes différences entre HTML et XHTML — ou plutôt, entre SGML et XML — est le fait que tous les éléments doivent être fermés.

Cela comprend les éléments ne possédant pas de balises fermantes — appelés empty elements — comme META, LINK, BR, IMG et INPUT. Donc, en HTML, cette syntaxe est parfaitement valide (mais un cauchemar pour un parser…)

<input type="text" name="courriel">

On sait aussi que la syntaxe XML peut aussi être utilisé en HTML :

<input type="text" name="courriel" />

Cependant, cette syntaxe ne semble pas pouvoir s’appliquer aux éléments LINK et META. En effet, cette syntaxe n’est pas valide en HTML :

<link rel="alternate" href="/atom" type="application/atom+xml" />

Pourquoi ? Aucune idée. J’ai beau fouiller la spécification HTML 4.01, je ne trouve pas de réponse. Je devrais peut-être poser la question à Karl Dubost lors de son passage à Québec dans un mois.

Posté le avec les tags: et .

Commentaires fermés

Les commentaires pour ce billet ont été désactivés un mois après la date de publication de ce-dernier. Vous désirez exprimer votre opinion sur ce billet malgré le fait que les commentaires aient été désactivés ? Utilisez le formulaire de contact.


Fil atom des commentaires de ce billet4 commentaires

  • La barre oblique à la fin d’une balise est une invention du XML et n’est pas supporté en HTML. Un parser HTML ignore simplement la barre oblique à la fin d’une balise, mais comprend que des balises avec un certain nom (input, meta, link, etc.) ferment automatiquement (peu importe si ils ont une barre oblique à la fin).

    Avec HTML 4, <input type="text" name="courriel" /> n’est pas valide, et la barre oblique ne simplifie pas du tout la vie du parser (qui soit l’ignore, soit crée un attribute nommé / avec une valeur vide ce qui revient pas mal à l’ignorer). Et c’est la même chose pour <link> ou <meta> ou les autres éléments vides. HTML 5 (dans sa version actuelle) autorise la barre oblique, mais uniquement sur les éléments vides (void elements dans la spec, les mêmes que tu as nommés dans ton article), mais ça ne change rien au parser.

    Michel Fortin (27 août 2007 à 10:54 EST)

  • Avec HTML 4, <input type="text" name="courriel" /> n’est pas valide

    Pourtant, regarde le code source de cette page, et valide-la :) Et je suis content de voir que tu remets à commenter sur mon blogue Michel :)

    Rémi Prévost (27 août 2007 à 11:59 EST)

  • C’est tout simplement pas normal. Soit il y a un bogue dans le validateur, soit le validateur accepte n’importe quel attribut pour l’élément <input> du à des limites techniques, mais peu importe, en HTML une barre oblique à la fin d’une balise n’a aucune signification à part peut-être celle d’un attribut dont le nom est / et le contenu vide: ça devrait être invalide il me semble. HTML 4 est basé sur SGML, on pourrait peut-être chercher ce que SGML a à dire d’un / à la fin d’une balise, mais je doute qu’il en dise quoi que ce soit.

    Michel Fortin (27 août 2007 à 16:28 EST)

  • En fait, en SGML, <hr /> est équivalent à <hr>> (c’est la syntaxe SHORTTAG). C’est tout à fait valide, et le deuxième > est considéré comme du texte. C’est pourquoi <link ... /> est invalide (il n’est pas possible de placer du texte directement dans le <head>).

    Le validateur prend en compte cette syntaxe car il utilise un parseur qui respecte la norme SGML. Par contre, les navigateurs interprètent <hr /> comme <hr>, puisque qu’ils utilisent un parseur unique pour tous les documents servis en tant que text/html.

    Il ne faut donc pas utiliser de balises auto-fermantes en HTML, car elle est source de confusion.

    Julien Royer (17 septembre 2007 à 5:08 EST)