5568 sujets
Sémantique web et HTML
Hacken a écrit :
Bonjour,
J'ai quelques Div avec quelques ID qui continnent uniquement des numéros.
Aujourd'hui je vais lancer une validation de mon code et j'ai des erreurs, je voulais savoir pourquoi je peux pas mettre que des chiffres comme ID ?
Merci d'avance
A mon avis on peut y voir une perte du sens sémantique.
A quoi correspond la div numéro "1" ?
Ca a moins de sens que de parler d'une div qui correpond à l'en-tête via un mot.
Si je te dis que j'ai mit une div "menu" tu comprends plus facilement en lisant le code que c'est le bloc d'un menu.
Alors que si je te dis que j'ai mit une div "4" tu es tout de suite dans le flou.
Bon après est-ce que le validateur pense comme moi quand il te renvoie une erreur, ça je ne sais pas !
Modifié par Paul-Hewson (08 Sep 2006 - 10:43)
Hacken a écrit :
je voulais savoir pourquoi je peux pas mettre que des chiffres comme ID ?
Parce que le contenu de l'attribut id est défini ainsi dans la spécification HTML4.01 : Les types de données HTML de base.
Hacken a écrit :
Bonjour,
J'ai quelques Div avec quelques ID qui continnent uniquement des numéros.
Aujourd'hui je vais lancer une validation de mon code et j'ai des erreurs, je voulais savoir pourquoi je peux pas mettre que des chiffres comme ID ?
Merci d'avance
Pas vraiment de réponse mais une reformulation de ta question.
S'il n'y a que des chiffres, alors le premier caractère est également un chiffre. Et c'est précisemment cela qui n'est pas possible.
clb56 a écrit :
Pas vraiment de réponse mais une reformulation de ta question.
S'il n'y a que des chiffres, alors le premier caractère est également un chiffre. Et c'est précisemment cela qui n'est pas possible.
Pour être un peu plus clair, un id ne peut pas commencer par un chiffre, mais il peut en contenir. Par exemple, id="p12345678" est tout à fait valide.
D'après la recommandation en effet,
W3C a écrit :
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
Modifié par Gilles (08 Sep 2006 - 11:22)
Bref, parce que c'est comme cela, et pas autrement, et surtout: que cela ne pose aucun problème de se conformer à cette règle.
Mais...Allez, qui nous donne le pourquoi du comment du fond de cette règle selon laquelle un id ne peut pas commencer par un chiffre ?
Parce que moi, j'aimerais bien répondre au-delà des specs sur la question de Hacken, ou sur le pourquoi des normes dans ce cas, disons...
Modifié par Laurent Denis (08 Sep 2006 - 11:30)
Mais...Allez, qui nous donne le pourquoi du comment du fond de cette règle selon laquelle un id ne peut pas commencer par un chiffre ?
Parce que moi, j'aimerais bien répondre au-delà des specs sur la question de Hacken, ou sur le pourquoi des normes dans ce cas, disons...
Modifié par Laurent Denis (08 Sep 2006 - 11:30)
Laurent Denis a écrit :
Bref, parce que c'est comme cela, et pas autrement, et surtout: que cela ne pose aucun problème de se conformer à cette règle.
Mais...Allez, qui nous donne le pourquoi du comment du fond de cette règle selon laquelle un id ne peut pas commencer par un chiffre ?
Parce que moi, j'aimerais bien répondre au-delà des specs sur la question de Hacken, ou sur le pourquoi des normes dans ce cas, disons...
Ben je crois avoir répondu au delà de la spécification dans mon message (le deuxième).
Répondre à la question par "c'est dans les recommandations du w3C" ça n'aurait pas éclairé sa lumière
Mais ça reste un avis clairement subjectif. (je suis pas dans la tête des concepteurs ^^)
Paul-Hewson a écrit :
Ben je crois avoir répondu au delà de la spécification dans mon message (le deuxième).
Bah, non. Ce type de métadonnées est couramment utilisé lorsqu'il s'agit de préciser que l'ordre d'apparition dans la source est significatif, et doit être conservé. "1" veut alors simplement dire "avant 2". <edit>Cela semble évident, mais pas tant que cela. C'est tout l'histoire de la différence entre un <ol> et un <ul>, lorsque l'élément lui-même prend en charge cette information).
Mais pourquoi, pourquoi... faut-il dire "foo1" au lieu de "1", dans ce cas. Hum ?
Modifié par Laurent Denis (08 Sep 2006 - 11:41)
Alors là... même en inspectant Extensible Markup Language (XML) 1.0 (Fourth Edition) - Attribute types pour IDREF, je ne suis pas plus éclairé, à part qu'une telle syntaxe doit être conforme à
Peut-être que quelque part dans les archives de discussion sur cette recommandation il y a l'explication.
Modifié par Gilles (08 Sep 2006 - 12:07)
Name ::= (Letter | '_' | ':') (NameChar)*
Peut-être que quelque part dans les archives de discussion sur cette recommandation il y a l'explication.
Modifié par Gilles (08 Sep 2006 - 12:07)
Gilles a écrit :
Pour être un peu plus clair, un id ne peut pas commencer par un chiffre, mais il peut en contenir. Par exemple, id="p12345678" est tout à fait valide.
Zut je me fais encore gronder
Cela dit je pense qu'il est important d'alerter que l'exigence de précision de formulation n'est pas seulement dans la réponse mais déjà et avant tout dans la question elle même.
Sur cette affaire du pourquoi "pas de caractères chiffres" pour commencer les id.
1. la réponse petit soldat "c'est comme ça et pas autrement" est pour le moins ruineuse pédagogiquement parlant. Elle ne peut avoir de sens que dans le cas d'un conflit comportemental où certaine choses doivent être remises à leur place mais certainement pas plus (cas du parent d'un enfant hyper actif malicieux et rebelle).
A tout le moins on pourrait dire "parce qu'il y a de bonnes raisons pour ça... ... Même si reste ouverte l'explicitation desdites bonnes raisons". Après tout c'est parfaitement concevable puisque les parties d'un système ne peuvent finalement être comprises qu'une fois que l'ensemble du système est lui même compris... De ce point de vue les explications à répétition sont
. De toute façon fastidieuses.
. Au mieux non comprises.
. Au pire mésinterprétées.
2. Ne s'agirait il pas d'un problème de statut des chiffres qui peuvent être interprétés comme caractères dans une chaine de caractères ou bien comme valeurs numériques. Et qui à partir du moment où c'est ce qui est déclaré en premier pourrait dans certaines circonstances provoquer un bug ???
Modifié par clb56 (08 Sep 2006 - 14:53)
A propos du pourquoi on n'a pas le droit de commencer un id par un chiffre, je répondrais ceci :
Dans l'écrasante majorité des langages de programmation, les noms de variables obéissent aux mêmes règles : on commence par une lettre, et ensuite on peut mettre lettres, chiffres, underscores et dollars (ce dernier étant évidemment interdit pour le php et les langages descendants du perl car ce caractère a une autre signification nous sommes d'accord).
IL fut un temps, en javascript, où on pouvait accéder aux propriétés d'un élément identifié directement à l'aide de son nom. p.ex. mondiv.style.display="block";
Pour cette raison, ce n'était pas possible de laisser commencer un id par un chiffre...
Pour aller plus loin car ceci est bien plus ancien que js :
Au départ dans le HTML, du temps qu'il n'existait pas de DTD fixe, les noms d'attributs eux-mêmes devaient respecter cette règle. J'imagine que ça doit toujours être le cas en XML et que c'était déjà le cas en SGML.
Dans les langages de programmation, cette règle a surtout été imposée pour éviter des confusion avec les nombres. Pensons aux déclarations style var 33=44 ou var 3c=44 où 3c peut représenter, dans certains langages, la multiplication 3*c. Ce n'est pas possible...
Rappelons au passage que HTML est un langage de programmation ...
Modifié par QuentinC (08 Sep 2006 - 16:49)
Dans l'écrasante majorité des langages de programmation, les noms de variables obéissent aux mêmes règles : on commence par une lettre, et ensuite on peut mettre lettres, chiffres, underscores et dollars (ce dernier étant évidemment interdit pour le php et les langages descendants du perl car ce caractère a une autre signification nous sommes d'accord).
IL fut un temps, en javascript, où on pouvait accéder aux propriétés d'un élément identifié directement à l'aide de son nom. p.ex. mondiv.style.display="block";
Pour cette raison, ce n'était pas possible de laisser commencer un id par un chiffre...
Pour aller plus loin car ceci est bien plus ancien que js :
Au départ dans le HTML, du temps qu'il n'existait pas de DTD fixe, les noms d'attributs eux-mêmes devaient respecter cette règle. J'imagine que ça doit toujours être le cas en XML et que c'était déjà le cas en SGML.
Dans les langages de programmation, cette règle a surtout été imposée pour éviter des confusion avec les nombres. Pensons aux déclarations style var 33=44 ou var 3c=44 où 3c peut représenter, dans certains langages, la multiplication 3*c. Ce n'est pas possible...
Rappelons au passage que HTML est un langage de programmation ...
Modifié par QuentinC (08 Sep 2006 - 16:49)
Bien le merci pour toutes vos réponses, je pense en effet que la question est pas facile à répondre, nous devons donc nous plier au règles, et ce fort malheureusement, mais le changement dans mon code n'est pas énorme
Euh, moi on ma toujours dis que le HTML n'était pas un langage de programmation... mais plus un langage de structuration... on alors on m'a mal enseigné ?
A+
QuentinC a écrit :
Rappelons au passage que HTML est un langage de programmation ...
Euh, moi on ma toujours dis que le HTML n'était pas un langage de programmation... mais plus un langage de structuration... on alors on m'a mal enseigné ?
A+
Gilles a écrit :
D'après la recommandation en effet,
W3C a écrit :
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
Est-ce que la recommandation indique la même chose pour les classes : que l'on doit utiliser le même type de synaxe.
J'ai regardé le DTD et les documents du W3C (HTML4.01 et CSS 2.1) mais j'ai rien trouvé qui correspond.
Ce que j'aimerai savoir c'est si on peut utiliser les charactères tel que les ":" ou le "." ce qui me parait pas focrément probable.
La seule chose que j'ai trouvé mais que je sais déja c'est les classes mutliples, que pour les utiliser il faut mettre un espace entre les classes.
Si quelqu'un en savais quelque chose ?