5568 sujets

Sémantique web et HTML

Bonsoir les gens,

Je viens de remarquer que ça fait une différence d’utiliser `<!doctype html>` ou `<!DOCTYPE html>`. Même si l’habitude des majuscules de l’ancienne école du HTML s’est perdu, et est la raison pour laquelle on voit plus souvent écrit `<!doctype html>` (pour HTML5) que `<!DOCTYPE html>`, je connais au moins une raison de continuer l’écrire en majuscule : XSLTProc ne l’accepte pas en minuscules, et y voit une balise erronée, alors que en majuscules, le traitement se poursuit normalement.

Si vous connaissez d’autres cas où le traitement diffère ou échoue selon que l’on écrit `DOCTYPE` en minuscules ou majuscules, vous pouvez poster vos cas ici, ça peut servir.
Modifié par hibou57 (16 Mar 2013 - 01:00)
SBoudrias a écrit :
XSLTProc ? vraiment

Oui, voilà ce qu’il répond quand c’est écrit en minuscules (si des gens cherche ça sur Google) :


input.html:1: parser error : StartTag: invalid element name
<!doctype html>
 ^
input.html:1: parser error : Extra content at the end of the document
<!doctype html>
 ^
unable to parse input.html
*** Exited with status 6 ***


En majuscules, ça passe, et il traite correctement l’entrée.
En fait XSLT est fait pour transformer un document XML. En XML, le doctype doit être en majuscule, mais pas en HTML (d'ailleurs, théoriquement, XSLT devrait être incompatible avec HTML 5).

Il me semble donc plus exact de dire qu'en xHTML5, le doctype doit être écrit en majuscule.
Comme je ne connais pas de différence aux `doctype` appliqués à HTML ou à XML (qui sont vus comme du SGML tous deux dans ce cas), et comme je vois partout les fichiers HTML5 commencer par un `doctype` écrit en minuscules, j’en avais conclu que c’est moi qui me trompait de croire que le nom de cette balise doit toujours être en majuscules.

J’avais justement prévu de prendre le temps de vérifier. Si tu confirme qu’elle doit être en majuscules pour le XML, alors normalement elle devrait l’être aussi pour le HTML, puisqu’il s’agit du même type de référence. Un processeur SGML, ne fait pas la différence entre HTML et XML, et un processeur qui traite cette balise, le fait en temps que processeur SGML, même s’il ne supporte pas tout SGML.

Ou je me trompe ?

Je vais vérifier ça plus tard…
Modifié par hibou57 (16 Mar 2013 - 04:20)
Le doctype correct pour xhtml 5 est :

<!DOCTYPE html>


Encore faut-il envoyer les pages avec les entêtés correctes :

appplication/xhtml+xml


Et surtout qu'elles soient correctement formées sans entités illégales, donc juste &lt; &gt; &amp;. Une entité très utilisée comme &nbsp; invalide le document.
Le xhtml5 c'est du html5 traité comme du XML, avec toutes les contraintes qui vont avec. Perso les pages de mon sites (polyglottes) étaient envoyées comme xhtml5, mais j'ai laissé tomber: trop contraignant et certains parseurs de réseaux sociaux ne fonctionnent pas dans ce mode.
Pour l’instant, je n’affirme rien sur le cas général, et je ne parle que du cas précis qui m’a amené à cette remarque et à la question. J’allais appliquer une transformation XSLT à une page de test HTML5, pour produire un fichier XLIFF (The standard pour les fichiers de traduction). La feuille XSLT d’exemple, je l’ai récupéré sur le site d’OASIS. Ils l’appliquaient à un fichier d’exemple HTML, mais un fichier HTML qui n’était pas valide. Je l’ai donc rendu valide, et j’ai retenté la transformation, pour voir si elle fonctionnait correctement sur un fichier HTML5 valide également. Et là, XSLTProc cale sur la balise doctype.

Quand je l’écrit en majuscules, ça fonctionne. Je dois également fermer les balises meta avec des `/>` au lieu des `>` habituels, pour que XSLTProc puisse les traiter. Je l’ai testé avec le validateur du W3C, qui me valide bien l’ensemble comme du HTML5 et non-pas comme du XHTML5, bien que ça ressemble plus à du XML qu’à du HTML.

Dans ce cas d’utilisation, le page n’est pas servie, elle est juste utilisée comme entrée pour une transformation, puis autre transformation, produit une autre page de la même forme, mais traduite.

Il faudra que je me penche sur le détail d’HTML5 concernant le balisage et le doctype (doctype factice, puisqu’il n’y a pas de véritable doctype en HTML5).
Modifié par hibou57 (16 Mar 2013 - 21:24)
Pour faire court, ça n’a l’air d’être qu’une histoire de ce qu’ils appellent le HTML5 polyglotte. Ça devait sûrement exister avec HTML4 aussi, mais je ne m’étais jamais penché sur cette question. Il semblerait même que le fait d’ajouter un doctype, soit un acte polyglotte, et qu’il ne soit même pas nécessaire autrement. Du coup, comme le doctype en minuscule n’est pas reconnu correctement par les processeurs XML, ça n’a pas de sens de l’écrire en minuscules et quand on l’indique, on devrait toujours le faire en majuscules, sinon ça ne sert à rien (puisqu’il n’est alors reconnu que par les processeurs HTML, pour lesquels il est inutile).

Les lectures intéressantes que j’ai trouvé sur la question :

* XHTML5 in a nutshell (blog.whatwg.org)
* Polyglot Markup: HTML-Compatible XHTML Documents (dev.w3.org)
* HTML vs. XHTML (wiki.whatwg.org)

Le dernier lien s’applique bien à HTML5 il semble.

Citation du second lien :
W3C a écrit :
It is often valuable to be able to serve HTML5 documents that are also well formed XML documents. An author may, for example, use XML tools to generate a document, and they and others may process the document using XML tools. The language used to create documents that can be parsed by both HTML and XML parsers is called polyglot markup.

J’aime bien ce concept Smiley smile .
Modifié par hibou57 (18 Mar 2013 - 00:47)
Il n'y avait pas de html 4 polyglotte, par contre on peut envoyer des pages xhtml 1.0 en text/html ou application/xhtml+xml.

Le doctype est nécessaire, en tout cas en mode html, pour éviter de passer en mode quirck. D'après ce que j'ai le mode quirck influence aussi le Javascript. Smiley smile
Patidou a écrit :
Le doctype est nécessaire, en tout cas en mode html, pour éviter de passer en mode quirck. D'après ce que j'ai le mode quirck influence aussi le Javascript. Smiley smile

Évidemment, quel idiot je fait, et en plus je le savais, … je l’avais oublié dans mes pensées. Heureusement que tu me rattrape.

Patidou a écrit :
Il n'y avait pas de html 4 polyglotte, par contre on peut envoyer des pages xhtml 1.0 en text/html ou application/xhtml+xml.

Je ne sais pas trop s’il était possible ou pas en HTML4, par exemple d’écrire `<br/>`; ce serait une chose à vérifier.