Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Pourquoi pas d'attributs booléens dans les normes du W3C ?

Première rédaction de cet article le 16 avril 2009
Dernière mise à jour le 17 avril 2009


Une question me titille : dans plusieurs (toutes ?) normes du W3C, un attribut prend une valeur qui est le nom de l'attribut, plutôt qu'un booléen. Deux exemples : en CSS, l'attribut border-collapse (pour fusionner les bordures de deux cellules contiguës d'un tableau) s'utilise :

border-collapse: collapse; 

alors que :

border-collapse: true; 

me semblerait plus logique. De même, en XHTML, on indique le bouton radio sélectionné avec :

<input checked="checked" type="radio" name="operator" value="OR" />

alors que j'aurai préféré :

<input checked="true" type="radio" name="operator" value="OR" />

Existe t-il une raison à cette absence de booléens ?

Daniel Dardailler me signale que les booléens ont un défaut : ils ne sont pas extensibles. Si on a un type booléen, on ne pourra pas rajouter de troisième valeur par exemple une apparence spéciale pour dire que le bouton est délibérement désactivé. Donc, plutôt que true et false, il vaudrait peut-être mieux :

<input checked="on" type="radio" name="operator" value="OR" />

on et off n'empêcheraient pas d'ajouter disabled par la suite.

Bert Bos ajoute que, si un jour on décide de combiner plusieurs propriétés dans un super-propriété (ce qui est courant en CSS sous le nom de shorthand, par exemple background intègre plusieurs propriétés comme background-color, background-image, etc), on risque moins d'ambiguïté. Par exemple, si un jour on veut une propriété table-handling comme abréviation pour table-layout, empty-cells et border-collapse, on peut sans problème écrire table-handling: fixed collapse (qui implique donc aussi show) mais pas table-handling: true false ce qui serait peu clair.

Sur le cas de XHTML (mais cela n'explique pas celui de CSS), Éric van der Vlist note que la valeur checked était déjà là du temps de HTML / SGML. En effet, avant XHTML, on aurait écrit :

<INPUT CHECKED TYPE=radio ...>

CHECKED n'est pas le nom de l'attribut mais sa valeur (oui, c'est déroutant mais c'est vrai, cf. l'article du W3C sur les liens entre HTML et SGML, le livre de Martin Bryan qui explique SGML et HTML et une longue discussion sur ce problème des boutons radio).

Merci à Éric van der Vlist, Bert Bos et Daniel Dardailler pour leurs intéressantes informations.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)