Article de reference

XHTML

Le langage XHTML ( Extensible HyperText Markup Language ) fait partie de la famille des langages de balisage XML qui reflètent ou étendent des versions du langage HTML (HyperTex...

Le langage XHTML ( Extensible HyperText Markup Language ) fait partie de la famille des langages de balisage XML qui reflètent ou étendent des versions du langage HTML (HyperText Markup Language ), largement utilisé et dans lequel les pages Web sont formulées.

Alors que HTML, avant HTML5 , était défini comme une application du SGML ( Standard Generalized Markup Language ), un cadre de langage de balisage flexible, XHTML est une application du XML, un sous-ensemble plus restrictif du SGML. Les documents XHTML sont bien formés et peuvent donc être analysés à l'aide d'analyseurs XML standard, contrairement à HTML, qui nécessite un analyseur plus permissif et spécifique à HTML.

La norme XHTML 1.0 est devenue une recommandation du World Wide Web Consortium (W3C) le 26 janvier 2000. La norme XHTML 1.1 est devenue une recommandation du W3C le 31 mai 2001. XHTML est désormais considéré comme « la syntaxe XML pour HTML » et est développé comme une adaptation XML de la norme HTML évolutive.

Aperçu

XHTML 1.0 était une reformulation des trois types de documents HTML 4 en tant qu'applications de XML 1.0 . Le World Wide Web Consortium (W3C) maintenait simultanément la recommandation HTML 4.01 . Dans le document de recommandation XHTML 1.0, publié et révisé en août 2002, le W3C indiquait que « la famille XHTML représente la prochaine étape de l'évolution d'Internet. En migrant vers XHTML dès aujourd'hui, les développeurs de contenu peuvent accéder à l'univers XML et profiter de tous ses avantages, tout en garantissant la compatibilité ascendante et future de leur contenu »

Cependant, en 2005, le groupe de travail WHATWG (Web Hypertext Application Technology Working Group ) a été créé, indépendamment du W3C, afin de développer le HTML standard non basé sur XHTML. Le WHATWG a ensuite entrepris l'élaboration d'une norme prenant en charge les sérialisations XML et non-XML , HTML5 , en parallèle des normes du W3C telles que XHTML 2.0. En 2007, le groupe de travail HTML du W3C a voté pour la reconnaissance officielle de HTML5 et son développement en tant que norme HTML de nouvelle génération. En 2009, le W3C a laissé expirer le mandat du groupe de travail XHTML 2.0, reconnaissant ainsi que HTML5 serait la seule norme HTML de nouvelle génération, incluant les sérialisations XML et non-XML. Parmi les deux types de sérialisation, le W3C recommande à la plupart des auteurs d'utiliser la syntaxe HTML plutôt que la syntaxe XHTML.

Les recommandations du W3C concernant XHTML 1.0 et XHTML 1.1 ont été retirées le 27 mars 2018, ainsi que HTML 4.0, HTML 4.01, et HTML5.

Motivation

XHTML a été développé pour rendre HTML plus extensible et améliorer l'interopérabilité avec d'autres formats de données. De plus, les navigateurs toléraient les erreurs HTML et la plupart des sites web s'affichaient malgré des erreurs techniques dans le balisage ; XHTML a introduit une gestion des erreurs plus stricte. HTML 4 était officiellement une application du SGML ( Standard Generalized Markup Language ) ; cependant, la spécification du SGML était complexe et ni les navigateurs web ni la recommandation HTML 4 n'y étaient pleinement conformes. La norme XML, approuvée en 1998, offrait un format de données plus simple, plus proche de celui de HTML 4. En adoptant un format XML, on espérait que HTML deviendrait compatible avec les outils XML courants ; les serveurs et les proxys pourraient ainsi transformer le contenu, si nécessaire, pour les appareils aux ressources limitées comme les téléphones mobiles. Grâce aux espaces de noms , les documents XHTML pourraient offrir une extensibilité en incluant des fragments d'autres langages basés sur XML, tels que Scalable Vector Graphics et MathML . Enfin, ces travaux renouvelés permettraient de diviser le HTML en composants réutilisables ( modularisation XHTML ) et de corriger les aspects les plus complexes du langage.

Lien avec HTML

Il existe plusieurs différences entre XHTML et HTML. Le DOM ( Document Object Model ) est une structure arborescente qui représente la page en interne dans les applications, et XHTML et HTML sont deux manières différentes de la représenter sous forme de balisage. Tous deux sont moins expressifs que le DOM ; par exemple, « --> » peut être placé dans des commentaires dans le DOM, mais ne peut pas être représenté dans un commentaire en XHTML ou en HTML. De manière générale, la syntaxe XML de XHTML est plus expressive que celle de HTML (par exemple, les espaces de noms arbitraires ne sont pas autorisés en HTML). XHTML utilise une syntaxe XML, tandis que HTML utilise une syntaxe pseudo- SGML (officiellement SGML pour HTML 4 et versions antérieures, mais jamais en pratique, et standardisée à partir de SGML dans HTML5). Étant donné que le contenu exprimable de la syntaxe DOM est légèrement différent, il existe quelques différences de comportement entre les deux modèles. Ces différences de syntaxe peuvent toutefois être surmontées en implémentant un framework de traduction alternatif au sein du balisage.

Premièrement, il existe quelques différences de syntaxe :

  • De manière générale, les règles XML exigent que chaque élément soit fermé, soit avec une balise de fermeture séparée (par exemple `<div>` </div>), soit en utilisant la syntaxe d'auto-fermeture (par exemple `</div>` <br/>), tandis que la syntaxe HTML permet à certains éléments d'être ouverts, soit parce qu'ils sont toujours vides (par exemple `<div> `), soit parce que leur fin peut être déterminée implicitement (« omissibilité », par exemple `</div> `).<input><p>
  • Le XML est sensible à la casse pour les noms d'éléments et d'attributs , contrairement au HTML.
  • Certaines fonctionnalités abrégées du HTML sont omises en XML, telles que : (1) la minimisation des attributs , où les valeurs d’attributs ou leurs guillemets peuvent être omis (par exemple, `<attribute>` ou `<div>`, alors qu’en XML, cela doit être exprimé comme `<attribute> `) ; (2) la minimisation des éléments peut être utilisée pour supprimer entièrement des éléments (comme `<div>` inféré dans un tableau s’il n’est pas spécifié) ; et (3) la syntaxe SGML rarement utilisée pour la minimisation des éléments (« shorttag »), que la plupart des navigateurs n’implémentent pas. <optionselected><optionselected=selected><optionselected="selected"><tbody>
  • De nombreuses autres exigences techniques concernent les espaces de noms et l'analyse précise des espaces et de certains caractères et éléments. L'analyse exacte du HTML en pratique est restée indéfinie jusqu'à récemment ; consultez la spécification HTML5 ( [HTML5] ) pour plus de détails, ou le résumé ( HTML vs. XHTML ).

Outre les différences syntaxiques, il existe certaines différences comportementales, qui découlent principalement des différences sous-jacentes de sérialisation. Par exemple :

  • Le comportement en cas d'erreurs d'analyse diffère. Une erreur d'analyse fatale en XML (telle qu'une structure de balise incorrecte) entraîne l'arrêt du traitement du document.
  • La plupart des contenus nécessitant des espaces de noms ne fonctionneront pas en HTML, à l'exception de la prise en charge intégrée de SVG et MathML dans l'analyseur HTML5 ainsi que de certains préfixes magiques tels que xlink.
  • Le traitement JavaScript diffère en XHTML, avec quelques modifications mineures concernant la sensibilité à la casse de certaines fonctions et des précautions supplémentaires pour limiter le traitement au contenu valide. Les scripts ne doivent pas utiliser la méthode `init` ; elle n'est pas disponible en XHTML. La propriété `init` est disponible, mais n'insérera pas de contenu non valide. En revanche, elle peut être utilisée pour insérer du contenu valide avec espaces de noms dans un fichier XHTML.document.write()innerHTML
  • L'application des feuilles de style en cascade (CSS) diffère également. En raison de la sensibilité à la casse du XHTML, tous les sélecteurs CSS deviennent sensibles à la casse pour les documents XHTML. Certaines propriétés CSS, telles que les arrière-plans, définies sur l' élément en HTML sont « héritées » dans l' élément ; ce n'est pas le cas pour le XHTML, sauf indication contraire avec les mots-clés « initial » et « inherit ». <body><html>

Adoption

Les similitudes entre HTML 4.01 et XHTML 1.0 ont incité de nombreux sites web et systèmes de gestion de contenu à adopter la recommandation initiale du W3C concernant XHTML 1.0. Afin d'aider les auteurs dans cette transition, le W3C a fourni des recommandations sur la manière de publier des documents XHTML 1.0 de façon compatible avec HTML et de les diffuser sur des navigateurs non conçus pour XHTML.

Ce type de contenu « compatible HTML » est envoyé à l’aide du type de média HTML ( text/html) plutôt que du type de média Internet officiel pour XHTML ( application/xhtml+xml). Par conséquent, lorsqu’on compare l’adoption de XHTML à celle du HTML classique, il est important de distinguer si l’on compare l’utilisation du type de média ou le contenu même des documents.

La plupart des navigateurs web prennent en charge de manière aboutie tous les types de médias XHTML possibles. Internet Explorer 8 et les versions antérieures de Microsoft constituent une exception notable : au lieu d’afficher application/xhtml+xmlle contenu, une boîte de dialogue invite l’utilisateur à l’enregistrer sur le disque. Internet Explorer 7 (sorti en 2006) et Internet Explorer 8 (sorti en mars 2009) présentent tous deux ce comportement. En 2005, Chris Wilson, développeur chez Microsoft, expliquait que les priorités d’IE7 étaient l’amélioration de la sécurité du navigateur et la prise en charge du CSS , et qu’une prise en charge complète du XHTML serait difficile à intégrer à l’analyseur HTML d’IE, axé sur la compatibilité ; toutefois, Microsoft a ajouté la prise en charge du XHTML natif dans IE9 .

Tant que la prise en charge n'est pas généralisée, la plupart des développeurs web évitent d'utiliser le XHTML non compatible avec HTML , de sorte que les avantages du XML, tels que les espaces de noms, une analyse plus rapide et des navigateurs plus légers, ne profitent pas à l'utilisateur.

Critique

Au début des années 2000, certains développeurs web ont commencé à s'interroger sur les raisons qui avaient poussé les auteurs web à adopter le langage XHTML. D'autres ont rétorqué que les problèmes attribués à l'utilisation de XHTML pouvaient principalement provenir de deux sources : la production de documents XHTML invalides par certains auteurs web et l'absence de prise en charge native de XHTML dans Internet Explorer 6. [ ont ensuite décrit les avantages des documents web basés sur XML (c'est-à-dire XHTML) en matière de recherche, d'indexation et d'analyse syntaxique, ainsi que pour la pérennité du web lui-même.

En octobre 2006, Tim Berners-Lee , inventeur du HTML et président du W3C, annonçant un important projet du W3C visant à développer une nouvelle spécification HTML, a écrit sur son blog : « La tentative de faire passer le monde entier au XML… d’un coup n’a pas fonctionné. La grande majorité des utilisateurs de HTML n’a pas suivi le mouvement… Certaines grandes communautés ont fait la transition et profitent désormais de systèmes bien conçus… Il est prévu de créer un groupe HTML entièrement nouveau. » Le projet de spécification HTML5 actuel indique qu’« une attention particulière a été portée à la définition de critères de conformité clairs pour les agents utilisateurs afin d’améliorer l’interopérabilité… tout en mettant à jour les spécifications HTML pour résoudre les problèmes soulevés ces dernières années. » Ian Hickson , éditeur de la spécification HTML5 critiquant l’utilisation inappropriée du XHTML en 2002, est membre du groupe développant cette spécification et figure parmi les co-éditeurs du projet de spécification actuel.

Simon Pieters a étudié la conformité XML des navigateurs mobiles et a conclu que « l’affirmation selon laquelle XHTML serait nécessaire pour les appareils mobiles est tout simplement un mythe ».

Versions de XHTML

XHTML 1.0

Avant septembre 2012, Wikipédia utilisait le doctype et la syntaxe XHTML 1.0 Transitional, bien que le contenu ne soit pas servi comme application/xhtml+xml.

En décembre 1998, le W3C publia un document de travail intitulé « Reformulating HTML in XML » . Ce document présentait Voyager, nom de code d'un nouveau langage de balisage basé sur HTML 4, mais respectant les règles de syntaxe plus strictes de XML. En février 1999, la spécification fut renommée XHTML 1.0 : The Extensible HyperText Markup Language , et en janvier 2000, elle fut officiellement adoptée comme recommandation du W3C. Il existe trois définitions de type de document (DTD) formelles pour XHTML 1.0, correspondant aux trois versions différentes de HTML 4.01 :

  • XHTML 1.0 Strict est l'équivalent XML de HTML 4.01 strict et inclut les éléments et attributs qui n'ont pas été déclarés obsolètes dans la spécification HTML 4.01. Depuis novembre 2015, XHTML 1.0 Strict est le type de document utilisé pour la page d'accueil du site web du World Wide Web Consortium .
  • XHTML 1.0 Transitional est l'équivalent XML de HTML 4.01 Transitional et inclut les éléments de présentation (tels que <p> center, font<div> et <span> strike) exclus de la version stricte.
  • XHTML 1.0 Frameset est l'équivalent XML de HTML 4.01 Frameset et permet la définition de documents frameset — une fonctionnalité Web courante à la fin des années 1990.

La deuxième édition de XHTML 1.0 est devenue une recommandation du W3C en août 2002.

Modularisation du XHTML

La modularisation offre un ensemble abstrait de composants permettant de sous-ensembler et d'étendre XHTML. Cette fonctionnalité vise à faciliter l'adoption de XHTML sur les plateformes émergentes, telles que les appareils mobiles et les téléviseurs connectés. La première version de la modularisation de XHTML a été publiée en avril 1999 et est devenue une recommandation en avril 2001.

Les premières variantes modulaires de XHTML étaient XHTML 1.1 et XHTML Basic 1.0.

En octobre 2008, la modularisation de XHTML a été remplacée par la modularisation XHTML 1.1 , qui ajoute une implémentation de schéma XML . Cette dernière a été remplacée par une deuxième édition en juillet 2010.

XHTML 1.1 : XHTML basé sur des modules

XHTML 1.1 evolved out of the work surrounding the initial Modularization of XHTML specification. The W3C released the first draft in September 1999; the Recommendation status was reached in May 2001. The modules combined within XHTML 1.1 effectively recreate XHTML 1.0 Strict, with the addition of ruby annotation elements (ruby, rbc, rtc, rb, rt and rp) to better support East-Asian languages. Other changes include the removal of the name attribute from the a and map elements, and (in the first edition of the language) the removal of the lang attribute in favor of xml:lang.

Although XHTML 1.1 is largely compatible with XHTML 1.0 and HTML 4, in August 2002 the Working Group issued a formal Note advising that it should not be transmitted with the HTML media type. With limited browser support for the alternate application/xhtml+xml media type, XHTML 1.1 proved unable to gain widespread use. In January 2009 a second edition of the document (XHTML Media Types – Second Edition) was issued, relaxing this restriction and allowing XHTML 1.1 to be served as text/html.

The second edition of XHTML 1.1 was issued on 23 November 2010, which addresses various errata and adds an XML Schema implementation not included in the original specification. (It was first released briefly on 7 May 2009 as a "Proposed Edited Recommendation" before being rescinded on 19 May due to unresolved issues.)

XHTML Basic

Since information appliances may lack the system resources to implement all XHTML abstract modules, the W3C defined a feature-limited XHTML specification called XHTML Basic. It provides a minimal feature subset sufficient for the most common content-authoring. The specification became a W3C recommendation in December 2000.

Of all the versions of XHTML, XHTML Basic 1.0 provides the fewest features. With XHTML 1.1, it is one of the two first implementations of modular XHTML. In addition to the Core Modules (Structure, Text, Hypertext, and List), it implements the following abstract modules: Base, Basic Forms, Basic Tables, Image, Link, Metainformation, Object, Style Sheet, and Target.

XHTML Basic 1.1 remplace le module Formulaires de base par le module Formulaires et ajoute les modules Événements intrinsèques, Présentation et Script. Il prend également en charge des balises et des attributs supplémentaires provenant d'autres modules. Cette version est devenue une recommandation du W3C le 29 juillet 2008.

La version actuelle de XHTML Basic est la 1.1 Deuxième édition (23 novembre 2010), dans laquelle le langage est réimplémenté en utilisant le langage XML Schema du W3C . Cette version prend également en charge l' langattribut.

Impression XHTML

XHTML-Print, qui est devenu une recommandation du W3C en septembre 2006, est une version spécialisée de XHTML Basic conçue pour les documents imprimés à partir d'appareils d'information sur des imprimantes bas de gamme .

Profil mobile XHTML

XHTML Mobile Profile (abrégé XHTML MP ou XHTML-MP) est une variante tierce de la spécification XHTML Basic du W3C. Tout comme XHTML Basic, XHTML a été développé pour les appareils informatiques aux ressources système limitées.

En octobre 2001, la société Wireless Application Protocol Forum (WAP) a entrepris l'adaptation de XHTML Basic pour WAP 2.0 , la deuxième version majeure du protocole WAP . La DTD de la WAP Forum s'est basée sur la modularisation de XHTML du W3C, intégrant les mêmes modules que ceux utilisés par le W3C dans XHTML Basic 1.0, à l'exception du module Target. À partir de cette base, la WAP Forum a remplacé le module Basic Forms par une implémentation partielle, ajouté une prise en charge partielle des modules Legacy et Presentation, et intégré la prise en charge complète du module Style Attribute.

En 2002, le WAP Forum a été absorbé par l' Open Mobile Alliance (OMA), qui a continué à développer le profil mobile XHTML en tant que composante de sa spécification de navigation OMA.

Profil XHTML Mobile 1.1

À cette version, finalisée en 2004, l'OMA a ajouté une prise en charge partielle du module de script et une prise en charge partielle des événements intrinsèques. XHTML MP 1.1 fait partie de la version 2.1 de la spécification de navigation OMA (1er novembre 2002).

Profil XHTML mobile 1.2

Cette version, finalisée le 27 février 2007, étend les fonctionnalités de XHTML MP 1.1 en prenant pleinement en charge le module Formulaires et les modes de saisie de texte OMA. XHTML MP 1.2 fait partie de la version 2.3 de la spécification de navigation OMA (13 mars 2007).

Profil XHTML mobile 1.3

XHTML MP 1.3 (finalisé le 23 septembre 2008) utilise la définition de type de document XHTML Basic 1.1 , qui inclut le module cible. Les événements de cette version de la spécification sont mis à jour conformément aux spécifications DOM de niveau 3 (c’est-à-dire qu’ils sont indépendants de la plateforme et du langage).

XHTML 1.2

Le groupe de travail XHTML 2 a envisagé la création d'un nouveau langage basé sur XHTML 1.1 . Si XHTML 1.2 avait été créé, il aurait inclus WAI-ARIA et roledes attributs pour une meilleure prise en charge des applications web accessibles, ainsi qu'une prise en charge améliorée du Web sémantique grâce à RDFa . L' inputmodeattribut de XHTML Basic 1.1, ainsi que l' targetattribut (pour spécifier les cibles des cadres ), auraient également pu être présents. Le groupe de travail XHTML 2 n'avait pas été mandaté pour mener à bien le développement de XHTML 1.2. Le W3C ayant annoncé son intention de ne pas reconduire le groupe de travail XHTML 2 et l'ayant dissous en décembre 2010, la proposition XHTML 1.2 n'a finalement pas abouti.

XHTML 2.0

Entre août 2002 et juillet 2006, le W3C a publié huit versions préliminaires de XHTML 2.0, une nouvelle version de XHTML qui rompait définitivement avec les versions précédentes en abandonnant l'exigence de rétrocompatibilité. Cette incompatibilité avec XHTML 1.x et HTML 4 a suscité des controverses au sein de la communauté des développeurs web. Certaines parties du langage (comme les roleattributs `and` et `RDFa`) ont ensuite été extraites de la spécification et développées comme des modules distincts, notamment pour faciliter la transition de XHTML 1.x à XHTML 2.0. La neuvième version préliminaire de XHTML 2.0 était attendue pour 2009, mais le 2 juillet 2009, le W3C a décidé de laisser expirer la charte du groupe de travail XHTML2 à la fin de cette année, interrompant ainsi tout développement ultérieur de cette version préliminaire en vue d'une normalisation. Au lieu de cela, XHTML 2.0 et ses documents associés ont été publiés sous forme de notes W3C en 2010.

Parmi les nouvelles fonctionnalités introduites par XHTML 2.0, on peut citer :

  • Les formulaires HTML devaient être remplacés par XForms , une spécification de saisie utilisateur basée sur XML permettant un affichage approprié des formulaires sur différents périphériques de rendu.
  • Les cadres HTML devaient être remplacés par des Xframes .
  • Les événements DOM devaient être remplacés par des événements XML , qui utilisent le modèle objet de document XML .
  • Un nouveau type d'élément de liste, le nltype d'élément `<list>`, devait être inclus pour désigner spécifiquement une liste comme liste de navigation. Cela aurait été utile pour créer des menus imbriqués, actuellement créés de diverses manières, comme avec des listes non ordonnées imbriquées ou des listes de définitions imbriquées.
  • Tout élément devait pouvoir servir de lien hypertexte , par exemple <li href="articles.html">Articles</li>, comme avec XLink . Cependant, XLink n'est pas compatible avec XHTML en raison de différences de conception.
  • Tout élément devait pouvoir faire référence à des médias alternatifs avec l' srcattribut, par exemple, <p src="lbridge.jpg" type="image/jpeg">London Bridge</p>est identique à <object src="lbridge.jpg" type="image/jpeg"><p>London Bridge</p></object>.
  • L' altattribut de l' imgélément a été supprimé : un texte alternatif devait être fourni dans le contenu de l' imgélément, comme pour l' objectélément, par exemple, <img src="hms_audacious.jpg">HMS <span class="italic">Audacious</span></img>.
  • Un seul élément de titre ( h) a été ajouté. Le niveau de ces titres était déterminé par la profondeur d'imbrication. Cela aurait permis un nombre illimité de titres, au lieu d'être limité à six niveaux de profondeur.
  • Les éléments de présentation restants i, `<p>`, `<sup>` bet tt`<sub>`, encore autorisés dans XHTML 1.x (même strict), devaient être absents de XHTML 2.0. Seuls `<sup>` et `<sub>`, pour les exposants et les indices respectivement, étaient conservés, supcar subils ont des usages non liés à la présentation et sont requis par certains langages. Toutes les autres balises devaient être sémantiques (par exemple, `<em>` strongpour une forte emphase ), tout en laissant au navigateur la possibilité de contrôler leur présentation via CSS (par exemple, rendu en gras dans la plupart des navigateurs, mais avec des variations de ton dans un lecteur vocal, une police plus grande et italique selon les règles d'une feuille de style utilisateur, etc.).
  • L'ajout d'un triplet RDF avec les attributs propertyet aboutpour faciliter la conversion de XHTML en RDF/XML.

XHTML5

HTML5 s'est développé indépendamment du W3C, grâce à un groupe informel de fabricants de navigateurs et d'autres parties intéressées se faisant appeler WHATWG (Web Hypertext Application Technology Working Group). L'objectif principal du groupe était de créer une plateforme pour les applications web dynamiques ; ils considéraient XHTML 2.0 comme trop centré sur le document et inadapté à la création de forums internet ou de boutiques en ligne.

HTML5 propose une text/htmlsérialisation classique et une sérialisation XML, également appelée XHTML5 . Ce langage est plus compatible avec HTML 4 et XHTML 1.x qu'avec XHTML 2.0, grâce au choix de conserver les éléments de formulaire HTML existants et le modèle d'événements. Il introduit cependant de nombreux nouveaux éléments absents de XHTML 1.x, tels que les balises `<script>` sectionet ` </script> aside`.

Le langage XHTML5, comme HTML5, utilise une déclaration DOCTYPE sans DTD. De plus, la spécification rend obsolètes les anciennes DTD XHTML en demandant aux navigateurs de les remplacer par une DTD contenant uniquement des définitions d'entités pour les caractères nommés lors de l'analyse syntaxique.

Contenu sémantique en XHTML

XHTML+RDFa est une version étendue du langage de balisage XHTML permettant la prise en charge de RDF grâce à un ensemble d'attributs et de règles de traitement sous forme de documents XML bien formés . Ce langage hôte est l'une des techniques utilisées pour développer du contenu Web sémantique en intégrant un balisage sémantique riche.

Documents XHTML valides

Un document XHTML conforme à une spécification XHTML est dit valide . La validité garantit la cohérence du code du document, ce qui facilite son traitement, mais ne garantit pas nécessairement un rendu identique par les navigateurs. La validité d'un document peut être vérifiée à l'aide du service de validation de balisage du W3C (pour XHTML5, il convient d'utiliser le validateur Validator.nu Living Validator). En pratique, de nombreux logiciels de développement web proposent une validation de code basée sur les normes du W3C .

Élément racine

L'élément racine d'un document XHTML doit être `<script>` htmlet contenir un xmlnsattribut `namespace` pour l'associer à l' espace de noms XHTML . L'URI de cet espace de noms est `XHTML.xml` http://www.w3.org/1999/xhtml. L'exemple de balise ci-dessous inclut également un xml:langattribut `namespace` permettant d'identifier le document en langage naturel :

<html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "ar" >

DOCTYPE

Pour valider un document XHTML, on peut utiliser une déclaration de type de document ( DOCTYPE ). Une déclaration DOCTYPE indique au navigateur la définition de type de document (DTD) à laquelle le document est conforme. Cette déclaration doit être placée avant l' élément racine `<script>` .

L' identifiant système du document DOCTYPE, qui dans ces exemples correspond à l' URL commençant par `/ etc http:///data`, doit simplement pointer vers une copie de la DTD à utiliser si le validateur ne parvient pas à la localiser à partir de l' identifiant public (l'autre chaîne entre guillemets). Il n'est pas nécessaire que ce soit l'URL précise figurant dans ces exemples ; en fait, il est recommandé aux auteurs d'utiliser des copies locales des fichiers DTD lorsque cela est possible. L'identifiant public, en revanche, doit être identique, caractère par caractère, à celui des exemples.

déclaration XML

L' encodage des caractères peut être spécifié au début d'un document XHTML dans la déclaration XML lorsque le document est servi en utilisant le type application/xhtml+xmlMIME . (Si un document XML ne spécifie pas d'encodage, un analyseur XML suppose que l'encodage est UTF-8 ou UTF-16 , sauf si l'encodage a déjà été déterminé par un protocole de niveau supérieur.)

Par exemple:

<?xml version="1.0" encoding="UTF-8" ?>

Cette déclaration peut être omise car elle indique l'encodage par défaut. Cependant, si le document utilise XML 1.1 ou un autre encodage de caractères, une déclaration est nécessaire. Internet Explorer, avant la version 7, passe en mode de compatibilité s'il rencontre une déclaration XML dans un document servi en tant que fichier XML text/html.

Compatibilité ascendante

Les documents XHTML 1.x sont généralement rétrocompatibles avec les navigateurs HTML4 lorsque les bonnes pratiques sont respectées. XHTML 1.1 est globalement compatible, bien que les éléments d' annotation Ruby ne fassent pas partie de la spécification HTML4 et soient donc généralement ignorés par les navigateurs HTML4. Les modules XHTML 1.x ultérieurs, tels que ceux relatifs à l' roleattribut `submit`, RDFa et WAI-ARIA, sont rétrocompatibles de manière similaire.

La compatibilité XHTML 2.0 est nettement moindre, même si l'utilisation de scripts permet d'atténuer ce problème. (Il peut s'agir de simples lignes de code, comme l'utilisation de `@example.com` document.createElement()pour enregistrer un nouvel élément HTML dans Internet Explorer, ou de frameworks JavaScript complets, tels que l' implémentation XForms de FormFaces .)

Exemples

Voici des exemples de XHTML 1.0 Strict, présentant le même rendu visuel. Le premier respecte les directives de compatibilité HTML de la note sur les types de médias XHTML, tandis que le second rompt la compatibilité ascendante, mais offre un balisage plus propre.

Recommandation de type de média (selon la RFC 2119) pour les exemples :
Type de média Exemple 1 Exemple 2
application/xhtml+xml DEVRAITDEVRAIT
application/xml PEUTPEUT
texte/xml PEUTPEUT
texte/html PEUT NE DEVRAIT PAS

Exemple 1.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en" lang= "en" > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title> Exemple XHTML 1.0 Strict </title> <script type= "text/javascript" > // <![CDATA[ function loadpdf() {  document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf"; } //]]> </script> </head> <body onload= "loadpdf()" > <p> Ceci est un exemple de document <abbr title= "Extensible HyperText Markup Language" > XHTML </abbr> 1.0 Strict . <br /><img id= "validation-icon" src= "http://www.w3.org/Icons/valid-xhtml10" alt= "XHTML 1.0 Strict valide" /> <br /> <object id= "pdf-object" name= "pdf-object" type= "application/pdf" data= "http://www.w3.org/TR/xhtml1/xhtml1.pdf" width= "100%" height= "500" > </object> </p> </body> </html>

Exemple 2.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en" > <head> <title> Exemple XHTML 1.0 Strict </title> <script type= "application/javascript" > <![CDATA[ function loadpdf() {  document.getElementById("pdf-object").src="http://www.w3.org/TR/xhtml1/xhtml1.pdf"; } ]]> </script> </head> <body onload= "loadpdf()" > <p> Ceci est un exemple de document <abbr title= "Extensible HyperText Markup Language" > XHTML </abbr> 1.0 Strict . <br /><img id= "validation-icon" src= "http://www.w3.org/Icons/valid-xhtml10" alt= "XHTML 1.0 Strict valide" /> <br /> <object id= "pdf-object" type= "application/pdf" data= "http://www.w3.org/TR/xhtml1/xhtml1.pdf" width= "100%" height= "500" ></object> </p> </body> </html>

Remarques :

  1. La fonction « loadpdf » est en réalité une solution de contournement pour Internet Explorer. Elle peut être remplacée en ajoutant <param name="src" value="http://www.w3.org/TR/xhtml1/xhtml1.pdf"/>du code à l'intérieur <object>.
  2. Cet imgélément ne possède pas d' nameattribut dans la DTD XHTML 1.0 Strict . Utilisez idplutôt :

Compatibilité croisée entre XHTML et HTML

Les sérialisations HTML5 et XHTML5 sont largement intercompatibles si elles respectent la syntaxe XHTML5 plus stricte, mais il existe certains cas où XHTML ne fonctionnera pas comme un HTML5 valide (par exemple, les instructions de traitement sont inexistantes en HTML, sont traitées comme des commentaires et se terminent sur le premier >, alors qu'elles sont pleinement autorisées en XML, sont traitées comme leur propre type et se terminent sur ?>).