5568 sujets

Sémantique web et HTML

Bonjour,

Pour les besoins d'une application (une petite moulinette wiki -> html, rien de bien méchant), j'envisage, afin de créer des sommaires et de permettre à chaque document html de pointer sur les sections de ses petits copains, de générer les ID directement à partir des titres (c'est la solution la plus simple et la plus robuste [1]). Ainsi le titre de section "Gérer les caractères accentués" se verrait attribuer l'ID "REF:Gérer_les_caractères_accentués".

Or, si cela fonctionne parfaitement côté navigateur, il semble que ce soit en contradiction avec la norme HTML qui spécifie que les IDs ne peuvent contenir, en matière de caractères alphabétiques, que les caractères représentés en ASCII.

Vous me direz que je n'ai qu'à ordonner à ma moulinette de supprimer tout ce qui n'est pas [aA ... zZ] et le tour est joué. Effectivement, ce serait envisageable dans l'hypothèse où seuls des documents utilisant pour base l'alphabet latin seraient traités [2]. Mais j'aimerais vraiment pouvoir m'abstraire de la langue du document source.

Je me retrouve donc devant le dilemme suivant : prendre des libertés avec la norme [3] et me simplifier grandement la vie ou la respecter et alourdir considérablement la gestion des liens entre les documents.

D'où la question qui m'amène, savez-vous si cette norme en matière de création d'ID a un vrai fondement pratique (ie. si ça peut vraiment casser des choses dans la vie terrestre) ou si c'est juste une survivance antique et surannée ? [4]

Voilà, désolé pour ce long premier poste et merci pour vos éventuelles lumières. Smiley smile

-----------------------
[1] L'alternative serait de simplement baser les IDs sur la position des titres dans le document et ainsi obtenir "Titre1", "Titre2", ... , "Titren". Celle-ci est moins robuste car si un titre est inséré ou retranché du document, il faut régénérer tous les documents pointant sur son contenu.

[2] Car un tel élagage appliqué sur des titres en grec/russe/japonais/chinois/... risque fort de générer le même ID pour chaque titre, cassant par la même la navigabilité des documents et l'orthodoxie HTML.

[3] Comme un moteur wiki bien connu (regardez les liens du sommaire), et sans que cela ne défrise le validateur du W3C (testez la page... et pourtant il y a bel et bien un contrôle du contenu des IDs car, pour avoir testé, il fulmine au sujet des espaces et des caractères tels que ">" et "<" ).

[4] Au passage, j'ai comme l'impression qu'il y a un manque sémantique à ce niveau-là. Car la seule limitation qui me vient à l'esprit est l'utilisation de ces IDs dans une feuille style. Or il est clair que jamais elle ne seront utilisées comme telles. C'est bizarre qu'au milieu du délire sémantique personne n'ait songé à séparer les fonctions clé de mise en forme/balise de navigation...
Hello,

Aucune idée sur la compatibilité des caractères hors-ascii dans les id et pour les ancres.

Par contre il est peut-être possible de convertir les chaines de caractères concernées en percent encoding?
Du type REF%3AG%C3%A9rer_les_caract%C3%A8res_accentu%C3%A9s.
Je dirais que tu ne peux pas anticiper maintenant les usages qui seront faits du document HTML produit. Si ça se trouve, dans quelques années tu (ou quelqu'un d'autre) auras besoin de refaire passer dessus une moulinette, et ne disposeras pas du support des caractères non-ASCII.

Une piste à première vue pas trop compliquée à mettre en oeuvre: peut-être pourrais-tu générer tes ID avec les codes Unicode des caractères, précédés par exemple de "u"?
Administrateur
Bonjour et bienvenue,

bonne idée que l'Unicode, il y a peu de chances que tu aies "collision" entre un caractère Unicode ainsi encodé et le même terme réellement rencontré dans le document ...

Si tu veux sortir la grosse artillerie, tu peux utiliser une base de données mettant en correspondance un id (de ta table) avec les noms de tes id (HTML). Tu commences par regarder si l'identifiant est déjà utilisé auquel cas tu récupères l'id (BDD) sinon tu insères ce nouvel id HTML.
Faut juste éviter les id (BDD) de 1 à 9 et commencer à 10 puisque les chiffres sont interdits par la norme. Smiley ravi
Hello,

Pour ce qui est de la norme : http://www.w3.org/TR/html4/types.html#h-6.2
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 (".").

Générer les ids uniquement à partir des titres n'est à mon avis pas la solution la plus robuste : je ne vois pas pourquoi le même titre ne pourrait pas apparaître deux fois dans le même document.
Modifié par Julien Royer (04 Dec 2008 - 11:29)
Merci pour vos réponses. Smiley smile

Pour tout ce qui est à base d'Unicode, ça m'est impossible car je n'ai aucune prise sur la représentation interne des caractères...

a écrit :
Je dirais que tu ne peux pas anticiper maintenant les usages qui seront faits du document HTML produit. Si ça se trouve, dans quelques années tu (ou quelqu'un d'autre) auras besoin de refaire passer dessus une moulinette, et ne disposeras pas du support des caractères non-ASCII.

Oui... Le sens de "l'Histoire" semble quand même plutôt aller vers un support de plus en plus grand de l'Unicode (en UTF8 principalement), et pour un outil traitant le HTML un telle limite semble impensable, je trouve.

En fait ta réserve rejoint un peu mon interrogation sur le fondement de la norme : à partir du moment où un document déclare son encodage, le navigateur (un tant soit peu moderne) sait comment sont représentés les caractères interdits (comme >, <, &,... ), donc il ne devrait pas y avoir de soucis avec les autres...

a écrit :
Générer les ids uniquement à partir des titres n'est à mon avis pas la solution la plus robuste : je ne vois pas pourquoi le même titre ne pourrait pas apparaître deux fois dans le même document.

C'est pas le cas le plus courant, et en général il s'agit de sections qui n'ont alors pas de signification en elles-mêmes mais par rapport à la section dans laquelle elle sont contenues (typiquement, les sous-sections "Exemples" en fin de section, qui illustrent le propos tenu dans celle-ci). Sections qu'on n'a donc pas/moins tendance à pointer de l'extérieur (je suis cependant d'accord que le mécanisme peut poser un problème au niveau de l'unicité de chaque ID).

Mais, je pense qu'au final je vais effectivement essayer de me conformer à la norme en trouvant un mécanisme efficace pour évaluer si oui ou non une édition a bouleversé la structure d'un document, de sorte qu'il faille mettre à jour ceux qui pointent dans son contenu. Smiley ohwell