5568 sujets

Sémantique web et HTML

Bonjour,

Je me pose une question concernant la déclaration du doctype en xhtml 5.

Voici le bout de code sur lequel je travaille:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Titre</title>
	</head>
	<body>

<p>Coucou</p>

	</body>
</html>


Le code est enregistré dans un fichier .xhtml (à défaut de pouvoir forcer le content-type en "application/xhtml+xml" via php, j'utilise cette extension pour forcer le navigateur et le validateur W3C à comprendre le code comme de l'XML).

Seulement voila, je me pose une question d'ordre théorique:

Si je souhaite spécifier l'attribut "standalone" du prélude xml, dois-je le définir à "no" ou "yes" ?
Mon problème est que la spécification W3C ne mentionne pas de fichier DOCTYPE (comme c'était le cas pour les versions de html et de xhtml), et permet même l'abandon de la déclaration dans un document parsé en xhtml. Je tendrais donc vers le
standalone="yes"
; et vous ?

En lien avec cette question: la déclaration "<!DOCTYPE html>" est-elle xml-ment correcte, au sens le plus rigoureusement xml du terme ? (Sans ficihier de référence, est-ce une déclaration rigoureuse de doctype, au sens de la spécification xml ?)

J'espère que mon problème est correctement posé,
et qu'une bonne âme passant par là saura éclairer ma lanterne ! Smiley smile

Amicalement,

Justin
Si je peux placer un commentaire:

Le code

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Titre</title>
	</head>
	<body>

<p>Accentué</p>

	</body>
</html>

est invalide dans le validateur purement xml de http://xmlvalidation.com,
tandis que le même code sans <!DOCTYPE html> devient valide.

Devrait-on alors écrire les document xhtml5 sans aucun doctype, au risque de faire planter les navigateurs web ?

Justin
justin.dekeyser a écrit :
Si je peux placer un commentaire:

Le code

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;&lt;!DOCTYPE html&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"&gt;
	&lt;head&gt;
		&lt;title&gt;Titre&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;

&lt;p&gt;Accentué&lt;/p&gt;

	&lt;/body&gt;
&lt;/html&gt;

est invalide dans le validateur purement xml de http://xmlvalidation.com,
tandis que le même code sans &lt;!DOCTYPE html&gt; devient valide.

Devrait-on alors écrire les document xhtml5 sans aucun doctype, au risque de faire planter les navigateurs web ?

Justin

Contraitement à ses prédécesseurs, HTML5 ne dispose d'aucune DTD permettant une validation stricte au sens XML.
Il existe bien quelques tentatives de DTD dédiées à ces spécifications, mais dont les auteurs reconnaissent eux-mêmes qu'elles ne sont pas complètes.
Sauf erreur de ma part, il me semble avoir lu que cette absence de DTD "officielle" est essentiellement liée à la permissivité très large de HTML5 quant à la présence / absence de balises, leur fermeture ou non, la présence ou non de valeurs d'attributs... toutes choses que la validation XML a, par principe, en horreur.
Pour ma part, je trouve qu'il eut été beaucoup plus judicieux d'introduire plus de rigueur et, justement, d'obliger à ouvrir / fermer les balises.
Simplifier est, certes, une bonne chose en soi mais cela introduit plus d'approximations et complexifie inutilement l'analyse lexicale par les "parseurs".
La rétrocompatibilité est, à mon sens, trop mise en avant pour justifier le fait qu'il ne faut pas "contraindre" les gens avec des règles trop strictes, au nom de la préservation de l'existant dont on sait qu'il est par ailleurs largement bancal.
Après tout, la migration vers HTML5 n'étant pas une obligation en soi, ceux qui voulaient conserver des arborescences olé olé existantes pouvaient le faire, et ceux qui tentaient la migration trouvaient là une occasion de grandement structurer leur code.
Le débat sur l'aspect XHTML contre balisage assoupli a, en tout cas, largement agité le monde des développeurs lors de l'établissement des spécifications HTML5. Il semble que les moins rigoureux l'aient emporté sur ce coup là...
Modifié par sepecat (21 Aug 2016 - 17:28)
Merci pour la réponse !

C'est bien dommage qu'aucun dtd n'existe ! En pratique, cela n'avait pas tant d'importance que cela ! Et comme tu dis, ça bloque tout un travail de parseur qui pourrait avoir de l'utilité, à certaines communautés.

Et pourtant, le validateur applique des règles de validation. Par exemple, le code:
<p><section>Hello</section></p>

est signalé comme erreur de syntaxe. C'est que des règles existent quelque part !

Presque comme ci, de définitions claires et bien établies, on était passé à une sorte de bible disponible sur https://www.w3.org/TR/html/ ... On est à un pas de l'unique H1 par page ! (l'existence de plusieurs H1 est déjà signalée d'un warning... Merci Google ?)

Sur ces notes quelques peu décevantes,
je prends la peine de te remercier encore une fois Smiley smile

Justin
Administrateur
Je vais peut être poser une question hors sujet, mais... pourquoi se contraindre à utiliser XHTML5 ? Cela n'apporte que des difficultés supplémentaires.

L'absence de DTD provient du fait que HTML5 reprend les principes de la famille SGML au sens large (et permissive) plutôt que la validation XML.

On ne peut placer de section dans un paragraphe car les deux sont de type bloc.

Cet aide-mémoire peut l'indiquer, pour chaque élément, voir "Permitted contents" et "Permitted parent elements" : http://w3c.github.io/html-reference/

On peut voir que <p> ne peut contenir que des "Phrasing elements", à savoir la liste qui est mentionnée ici : http://w3c.github.io/html-reference/common-models.html#common.elem.phrasing (7.3)
Merci Dew pour les liens,

Je trouve que la réponse reste néanmoins un peu hors du sujet posé, celui-ci étant de comprendre la validité du doctype html5, du point de vue xml.

Justin
Modifié par justin.dekeyser (24 Aug 2016 - 17:31)
dew a écrit :
Je vais peut être poser une question hors sujet, mais... pourquoi se contraindre à utiliser XHTML5 ? Cela n'apporte que des difficultés supplémentaires.

Ta question ne me semble pas hors sujet, bien au contraire...
La "rigueur" du XHTML (au sens large) peut être (et est certainement...) perçue comme une contraintre très forte par rapport à des avantages qui ne paraissent pas forcément évidents de prime abord.
C'est un argument somme toute recevable et qui peut être discuté.
Pour ma part, je pense qu'un balisage suivant des règles strictes est largement préférable, car lors de la phase d'analyse lexicale / syntaxique, il n'y a pas beaucoup de questions à se poser : une balise ouverte = une balise fermée, sauf élement précisément défini comme vide par les spécifications (ex. BR).
Pour avoir programmé des "parseurs", je préfère cent fois savoir qu'après avoir lu une balise P, je dois tomber ensuite sur son homologue de fermeture pour clore mon bloc, sans avoir à me demander si je suis toujours dans mon P initial ou si j'en suis sorti parce que le concepteur du flux HTML aura eu la fainéantise (appelon un chat un chat...) de la fermer (la balise Smiley ravi ).
Bref, ce genre de chose n'est que peu ou pas du tout visible pour celui qui aura rédigé la page HTML en question mais, mis bout à bout, c'est une somme de petits traitement infinitésimals qui compliquent un processus.
Dans le cadre du développement de mon générateur HTML, je me suis posé la question de savoir si je devais produire un code HTML5 "light", lorsque ce doctype aura été sélectionné par l'utilisateur, ou bien produire de facto du XHTML5 correctement formé et validé.
Le "light" a l'avantage de réduire la taille de ma page, mais il est, à mon avis, parfaitement imbuvable.
Le XHTML5, si je lui ôte sa balise DOCTYPE initiale, passe sans problème dans un outil XML me
t permettant de vérifier que toutes les balises sont correctement ouvertes / fermées. J'ai bien dit vérifier... pas valider, puisque ces spécifications n'ont pas de DTD sur laquelle s'adosser pour contrôler.
J'ai au moins moyen de vérifier que j'ai un document bien "formé" à défaut d'être "valide" (cf. terminologie XML).
Ceci dit, je pense que le fond du problème réside plutôt dans l'outil qui est utilisé pour générer la page HTML :
- via un générateur -> facile, le boulot est fait automatiquement
- à la main -> fastidieux de rajouter ces fichues balises de fermeture qui ne sont pas obligatoires
Par contre, je reste persuadé que tout "flou" introduit dans un balisage et présenté comme une facilité est une mauvaise idée sur le long terme.
J'ai récemment vu une page HTML dont le contenu se résumait à ceci :
<h1>XXXXXXXX<:h1>
<p>ZZZZZZZZZZZ...</p> 

Rien de plus... et cela s'affichait sans problème sous Firefox.
Est-ce pour autant une voie à suivre ?
Perso, j'en doute fort.
La question est hors sujet, dans le sens où elle ne traite pas la question du doctype dans un document xhtml5... (Mais pourquoi diable vouloir à tout prix vendre son pain ?)

Ma question, si claire soit-elle et si détournée est-elle, soulève d'autres questions intéressantes.
Par exemple: en l'absence de doctype, un document xml ne reconnait pas l'entité &nbsp;
Inutile me direz-vous ? Pourtant, l'espace insécable est un "must-have" en typographie française...

L'écriture de l'entité &nbsp; (au lieu de son homologue xml-universel &#160;) met en avant ce phénomène crucial: le navigateur prend parti lors de l'interprétation de document html5, en supposant &nbsp; bien définie et égale à &#160; Ceci complique d'éventuels efforts de traduction vers des fichiers XML... Mais ça veut dire aussi qu'un autre navigateur peut, sans jamais aller à l'encontre des règles du W3C, interpréter tous les &nbsp; comme des "coucou l'ami"...
EDIT: c'est même "sémantiquement" correct, après tout...

Je mentionne que l'entité n'est pas présente dans la spécification HTML5 (ou du moins, ne l'ais-je pas vue; quelqu'un s'y connait-il ? (avec des références à la spécification seule ?).

Ce n'est là qu'une des problématiques de l'absence de doctype...

Justin
Modifié par justin.dekeyser (21 Aug 2016 - 18:49)
justin.dekeyser a écrit :
Par exemple: en l'absence de doctype, un document xml ne reconnait pas l'entité &amp;nbsp;
Inutile me direz-vous ? Pourtant, l'espace insécable est un "must-have" en typographie française...
L'écriture de l'entité &amp;nbsp; (au lieu de son homologue xml-universel &amp;#160;) met en avant ce phénomène crucial: le navigateur prend parti lors de l'interprétation de document html5, en supposant &amp;nbsp; bien définie et égale à &amp;#160; Ceci complique d'éventuels efforts de traduction vers des fichiers XML... Mais ça veut dire aussi qu'un autre navigateur peut, sans jamais aller à l'encontre des règles du W3C, interpréter tous les &amp;nbsp; comme des "coucou l'ami"...
EDIT: c'est même "sémantiquement" correct, après tout...
Je mentionne que l'entité n'est pas présente dans la spécification HTML5 (ou du moins, ne l'ais-je pas vue; quelqu'un s'y connait-il ? (avec des références à la spécification seule ?).
Ce n'est là qu'une des problématiques de l'absence de doctype...

C'est d'ailleurs pour cette raison que j'ai pris le parti de ne jamais utiliser les entités "nommées" dans le flux HTML produit à partir de mon générateur, et leur préférer les entités numériques (hexa ou décimal) à mon sens beaucoup plus portables.
Modifié par sepecat (21 Aug 2016 - 19:32)
Je ne peux qu'être d'accord avec vous: je m'étais plu en HTML4 d'utiliser le XHTML, et je regrette que l'évolution aille tout à fait dans le sens d'une prétendue permissivité, que je considère plutôt comme une source d'erreurs.
Mais on ne peut rien contre un mouvement dominant, et on ne peut que garder ses regrets pour soi...

Dans le genre permissivité, j'en ai découvert hier une qui vaut d'être racontée.

Comme je l'ai déjà expliqué, je développe des programmes PHP qui lisent des pages HTML vieux style et leur font subir de modifications pour les "rajeunir". Mes programmes sont loin de la perfection, il reste des tas de choses à faire à la main, mais ce qu'ils font n'est plus à faire.

Hier donc je lance un de mes programme sur une page http://www.osirisnet.net/docu/bruxelles_art_du_contour/bruxelles_art_du_contour_03.htm pourtant relativement récente, puisqu'elle date de 2013.
Elle se présente comme un tableau d'images à l'écran (assez laid, mais mon objectif est de dépoussiérer un peu tout ça) , mais les fonctions DOM HTML de php n'arrivaient pas à l'interpréter correctement.
Après enquête minutieuse, j'ai découvert que la "licence" autorisée par les navigateurs consistant à ne pas clore les balises <tr> avait été inversée: ces balises étaient closes sans être ouvertes.
De façon intéressante, Chrome et FireFox ne sont pas perturbés du tout par cette bizarrerie, alors que PHP ignore simplement ces fermetures non ouvertes et met toutes les images sur la même ligne.
Je m'en suis tiré en faisant des modifications sur le source avant de lancer la fonction loadHTML.
Modifié par PapyJP (22 Aug 2016 - 15:50)
<modetroll>
<horssujet>

"pourquoi diable vouloir à tout prix vendre son pain"
Question rhétorique s'il en est : Parce que nous avons tous besoin de manger.
Maintenant, il est plutôt sain de voir cohabiter sur un forum libre et gratuit des professionnels qui cherchent en premier lieu à vivre de leur passion et se doivent de ne pas passer des heures à ressasser ce qui s'est décidé ailleurs et avant et des passionnés dont la vie quotidienne ne dépend pas de leur centre d'intérêt et qui peuvent à loisir tenter de redresser le vrillé, ou tout du moins discourir de connivence.

Moi aussi j'ai regretté le XHTML pour sa rigueur, mais il ne m'a pas fallu une heure pour comprendre que je n'avais pas les moyens d'influer sur la chose et qu'il m'était indispensable de passer rapidement au html5 si je voulais continuer de "manger", pour des questions de compatibilité, de partage, etc.

Ah oui, je sais, je suis hors sujet, mais j'm'en bats les roupillons, parce que "libre", le forum Smiley smile
</horssujet>
</modetroll>
Modérateur
justin.dekeyser a écrit :

Si je souhaite spécifier l'attribut "standalone" du prélude xml, dois-je le définir à "no" ou "yes" ?

L'un ou l'autre, ça n'a pas d'effet sans DTD, il est donc plus simple de juste l’omettre vu qu'il n'y a pas de DTD…

justin.dekeyser a écrit :
En lien avec cette question: la déclaration "&lt;!DOCTYPE html&gt;" est-elle xml-ment correcte, au sens le plus rigoureusement xml du terme ? (Sans ficihier de référence, est-ce une déclaration rigoureuse de doctype, au sens de la spécification xml ?)

Oui

justin.dekeyser a écrit :
Si je peux placer un commentaire:

Le code […]

est invalide dans le validateur purement xml de http://xmlvalidation.com,
tandis que le même code sans <!DOCTYPE html> devient valide.

xmlvalidation semble se brouter, c'est valide.

papyJp a écrit :
je m'étais plu en HTML4 d'utiliser le XHTML, et je regrette que l'évolution aille tout à fait dans le sens d'une prétendue permissivité, que je considère plutôt comme une source d'erreurs.

Il n'y jamais eu d'XHTML dans HTML4. On fait (ou faisait) soit du HTML 4, soit du XHTML 1 ou 1.1
Par contre il y a du XHTML dans HTML5, autrement dit la possibilité de faire du code valide XML est inclues dans la norme HTML. Ce qui fait que le XHTML reste tout à fait possible. Ce qui est même une amélioration, vu qu'aujourd'hui un document XHTML est aussi valide HTML ce qui n'était pas le cas avant.
Au-delà de la fermeture des balises, il me semble que la notion de doctype a un intérêt, même en SGML. Il me semble que la question des entités - par exemple - est importante, même pour les écrivains de HTML Smiley ravi

L'intérêt est de mieux comprendre la spécification et ses méandres, que ce soit du point de vue xhtml ou html. Cette question de doctype ne me paraissait pas claire. Elle l'est un peu plus maintenant que kustolovic et sepecat m'ont aidé. Je peux considérer le sujet clos.

Merci donc Smiley smile

Amicalement,

Justin
Modifié par justin.dekeyser (24 Aug 2016 - 17:32)
" Elle l'est un peu plus maintenant que kustolovic et sepecat m'ont aidé. "

De rien, bisous Smiley cligne
Modifié par Manhattan (23 Aug 2016 - 09:15)