<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://openweb.eu.org/dtd/docbkx42/docbookx.dtd">
<article lang="fr" role="article" id="html_au_xhtml">
  <articleinfo>
    <title>Passer du <acronym>HTML</acronym> au <acronym>XHTML</acronym></title>
    <pubdate>2003-03-21</pubdate>
    <date>2003-03-21</date>
    <author>
      <firstname>Laurent</firstname>
      <surname>Jouanneau</surname>
      <email>laurent.jouanneau@openweb.eu.org</email>
    </author>
    <author>
      <firstname>Denis</firstname>
      <surname>Boudreau</surname>
      <email>denis.boudreau@openweb.eu.org</email>
    </author>
    <legalnotice>
      <para>Cet article est sous licence <ulink url="http://creativecommons.org/licenses/by-sa/1.0/legalcode">Creative Commons Attribution-ShareAlike</ulink>.</para>
    </legalnotice>
    <abstract><para>Les règles à suivre pour passer de la syntaxe <acronym>HTML</acronym> à la norme <acronym>XHTML</acronym>.</para></abstract>
    <subjectset>
      <subject role="profil">
        <subjectterm>expert</subjectterm>
      </subject>
      <subject role="technologie">
        <subjectterm>xhtml</subjectterm>
      </subject>
    </subjectset>
  </articleinfo>
  <section id="introduction">
    <title>Introduction</title>
    <para>Depuis le 26 janvier 2000, le <acronym>XHTML</acronym> est la nouvelle norme du <acronym>W3C</acronym> en matière de langage balisé pour concevoir des documents Web. Que vos pages existantes soient actuellement conformes ou non aux différentes versions du <acronym>HTML</acronym> importe peu. Vous allez rapidement constater que les convertir en <acronym>XHTML</acronym> n'est pas sorcier du tout. En effet, puisque le <acronym>XHTML</acronym> n'est rien de plus que du <acronym>HTML</acronym> reformulé de façon à respecter les règles strictes du <acronym>XML</acronym>, il ne vous suffit que d'apprendre quelques règles syntaxiques propres à <acronym>XML</acronym> pour commencer à coder selon les normes du <acronym>W3C</acronym>. Si vos documents sont déjà conformes (valides) aux règles du <acronym>HTML</acronym> 4.01, votre travail de conversion en sera grandement facilité. Cependant, si vous avez l'habitude de coder selon les règles plus permissives du <acronym>HTML</acronym> des premières versions, truffé de balises propriétaires ou dépréciées depuis, vous aurez un peu plus de pain sur la planche.</para>
    <para>Tout ce qui vous sépare de votre but, c'est un peu moins d'une dizaine de petites lois et quelques principes d'application.  Issues de la spécification <acronym>XML</acronym>, ces lois permettent une séparation logique entre les aspects de structure et de présentation dans un document Web. Car voilà réellement ce qu'est le <acronym>XHTML</acronym> : un pont entre le <acronym>HTML</acronym> (le langage d'hier) et le <acronym>XML</acronym> (le langage de demain).</para>
    <para>Cet article n'a qu'un seul but, celui de vous aider à franchir ce pas entre le <acronym>HTML</acronym> du siècle dernier et celui d'aujourd'hui ou, si vous préférez, à mettre un peu de <emphasis>X</emphasis> dans votre <acronym>HTML</acronym>.</para>
    <section id="fermeture1">
      <title>Chaque balise nécessite une fermeture</title>
      <para>Dans les premières heures du <acronym>HTML</acronym>, on pouvait se permettre d'être relativement brouillon dans la façon d'organiser son code. Maintenant, selon les règles plus strictes du <acronym>XML</acronym>, il n'y a plus de place pour une telle permissivité ; ainsi, toutes les balises présentes dans un document Web doivent dorénavant être correctement fermées : il ne faut jamais oublier d'ajouter la balise de fermeture d'un élément quand celle-ci existe :</para>
      <para>Invalide :</para>
      <programlisting>&lt;p&gt;<replaceable>Lorem ipsum dolor sit amet. Praesent vel justo.</replaceable></programlisting>
      <para>Valide :</para>
      <programlisting>&lt;p&gt;<replaceable>Lorem ipsum dolor sit amet. Praesent vel justo.</replaceable>&lt;/p&gt;</programlisting>
    </section>
    <section id="fermeture2">
      <title>Même celles qui n'en ont pas</title>
      <para>En revanche, comment peut-on fermer ces autres éléments ne possèdant pas de balise de fin, comme les <sgmltag class="starttag">br</sgmltag> et <sgmltag>img</sgmltag> ? En leur inventant une balise de fermeture ? Eh bien presque. Sauf que vous n'aurez pas à les inventer puisque le <acronym>W3C</acronym> s'en est déjà chargé pour vous. Vous pourriez effectivement vous mettre à coder des <token>&lt;br&gt;&lt;/br&gt;</token> ou des <token>&lt;img&gt;&lt;/img&gt;</token>, mais une telle pratique est déconseillée puisqu'il est possible que cela produise des résultats inattendus dans certains butineurs. Ce serait aussi un peu inutile puisque selon la syntaxe <acronym>XML</acronym>, il est possible de simplement fermer un élément en lui attribuant une barre oblique (un <emphasis>slash</emphasis>) en fin de balise, comme ceci : <token>&lt;br /&gt;</token>, ou encore <token>&lt;img /&gt;</token>. Cependant, si vous optez pour la seconde méthode, il ne faut pas oublier d'inclure un espace entre le contenu de l'élément et la barre oblique, car autrement, les anciens navigateurs, en particulier Netscape 4.x, ne pourront l'interpréter et l'ignoreront tout bonnement :</para>
      <para>Invalide :</para>
      <programlisting>&lt;br&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;br /&gt;</programlisting>
    </section>
    <section id="imbriquer">
      <title>Imbriquer correctement les éléments</title>
      <para>Quand on ouvre une série de balises en cascades, (les unes à l'intérieur de l'espace de définition des autres), il faut obligatoirement les refermer dans l'ordre inverse de l'ordre d'ouverture pour respecter la structure logique interne du document. Il faut toujours voir une balise <acronym>HTML</acronym> comme étant incluse dans une autre balise qui lui sert de parent. Ainsi, dans l'exemple ci-dessous, l'élément <sgmltag>strong</sgmltag>, qui est un enfant direct de l'élément <sgmltag>p</sgmltag>, doit impérativement se refermer à l'intérieur de l'élément qui le contient :</para>
      <para>Invalide :</para>
      <programlisting>&lt;p&gt;Paragraphe avec texte en &lt;strong&gt;gras&lt;/p&gt;&lt;/strong&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;p&gt;Paragraphe avec texte en &lt;strong&gt;gras&lt;/strong&gt;&lt;/p&gt;</programlisting>
    </section>
    <section id="minuscules">
      <title>Utiliser des minuscules dans les balises et leurs attributs</title>
      <para>En <acronym>HTML</acronym>, on pouvait à loisir utiliser des majuscules ou des minuscules pour baliser nos documents. Certains voyaient même en l'utilisation des majuscules un moyen efficace pour repérer le code <acronym>HTML</acronym> du contenu dans un document. Avec <acronym>XHTML</acronym>, ce n'est plus possible ; puisque <acronym>XML</acronym> est sensible à la casse, toutes les balises et tous leurs attributs doivent obligatoirement être écrits en lettres minuscules. C'est donc dire que les balises <sgmltag class="starttag">LI</sgmltag> et <sgmltag class="starttag">li</sgmltag> ne sont plus identiques en <acronym>XHTML</acronym>, alors que c'était le cas en <acronym>HTML</acronym>. Les valeurs d'attributs, par contre, peuvent toujours être écrites en majuscules :</para>
      <para>Invalide :</para>
      <programlisting>&lt;TEXTAREA ID="monTexte"&gt;&lt;/TEXTAREA&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;textarea id="monTexte"&gt;&lt;/textarea&gt;</programlisting>
    </section>
    <section id="guillemets">
      <title>Chaque valeur d'attribut doit être entre guillemets</title>
      <para>Avec les versions antécédentes de <acronym>HTML</acronym>, le recours aux guillemets pour encadrer les valeurs d'attributs était conseillé, mais pas obligatoire. Toujours selon les règles de <acronym>XML</acronym>, l'utilisation des guillemets n'est plus une proposition, mais bien une obligation. De plus, il ne peut plus y avoir de saut de ligne dans la définition d'une valeur donnée. Les caractères d'espacement (comme les espaces, les bris de lignes et les retours de chariots) sont interprétés différemment de navigateurs en navigateurs. Lorsque des caractères d'espacement sont insérés dans les valeurs d'attributs, les navigateurs tronquent ces espaces et les transposent en code <acronym>ASCII</acronym>, d'où parfois d'imprévisibles maux de têtes. Afin de vous éviter ces tracas, prenez simplement la bonne habitude de ne pas laisser d'espace dans vos valeurs d'attributs :</para>
      <para>Invalide :</para>
      <programlisting>&lt;div id=monMenu&gt;&lt;/div&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;div id="monMenu"&gt;&lt;/div&gt;</programlisting>
    </section>
    <section id="abregees">
      <title>Les formes abrégées d'attributs sont interdites</title>
      <para>Certaines balises en <acronym>HTML</acronym> possédaient des attributs autonomes qui pouvaient être utilisés sans valeurs associées, comme c'était par exemple le cas pour la balise <sgmltag>input</sgmltag> avec laquelle on pouvait utiliser les attributs <sgmltag class="attribute">checked</sgmltag>, <sgmltag class="attribute">disabled</sgmltag> et <sgmltag class="attribute">readonly</sgmltag>. Une pratique courante en <acronym>HTML</acronym> consistait donc à les déclarer de manière abrégée, afin d'économiser le nombre de caractères, en spécifiant directement un attribut sans valeur associée dans une balise <acronym>HTML</acronym>. En <acronym>XHTML</acronym>, cette pratique est révolue. Dorénavant, afin de rendre votre code valide, il vous faut l'inscrire de manière complète, c'est-à-dire en spécifiant l'attribut et sa valeur associée, même si cela représente une répétition :</para>
      <para>Invalide :</para>
      <programlisting>&lt;option value="page.html" selected&gt;&lt;/option&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;option value="page.html" selected="selected"&gt;&lt;/option&gt;</programlisting>
    </section>
    <section id="name">
      <title>L'attribut <sgmltag class="attribute">name</sgmltag> est remplacé par l'attribut <sgmltag class="attribute">id</sgmltag></title>
      <para>L'attribut <sgmltag class="attribute">name</sgmltag>, utilisé en <acronym>HTML</acronym> pour nommer les ancres, les images ou tout autre objet dans un document Web est remplacé par l'attribut <sgmltag class="attribute">id</sgmltag> en <acronym>XHTML</acronym>. En effet, puisque le principe de nommer un objet revient à l'identifier et que par définition, cet identifiant se doit d'être unique, le recours à l'attribut <sgmltag class="attribute">id</sgmltag> permet de s'assurer que la communication par le <acronym>DOM</acronym> avec un objet dans un document donné se fera individuellement. Malheureusement, le support pour l'attribut <sgmltag class="attribute">id</sgmltag> étant faible ou inexistant dans les anciens navigateurs, il importe (en <acronym>XHTML</acronym> 1.0) de continuer à utiliser à la fois les attributs <sgmltag class="attribute">name</sgmltag> et <sgmltag class="attribute">id</sgmltag> pour désigner un même objet dans ces navigateurs, en leur attribuant des valeurs identiques, de sorte que les navigateurs de nouvelle génération puissent y trouver leur compte conformément aux règles de <acronym>XML</acronym>, tout en assurant une rétro-compatibilité avec les anciens navigateurs :</para>
      <para>Invalide :</para>
      <programlisting>&lt;h1 name="<replaceable>titre</replaceable>"&gt;<replaceable>&#8230;</replaceable>&lt;/h1&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;h1 name="<replaceable>titre</replaceable>" id="<replaceable>titre</replaceable>"&gt;<replaceable>&#8230;</replaceable>&lt;/h1&gt;</programlisting>
      <para>Ajoutons que l'attribut <sgmltag class="attribute">name</sgmltag> des éléments <sgmltag>a</sgmltag>, <sgmltag>applet</sgmltag>, <sgmltag>form</sgmltag>, <sgmltag>frame</sgmltag>, <sgmltag>iframe</sgmltag>, <sgmltag>img</sgmltag>, and <sgmltag>map</sgmltag> est déprécié et ne peut plus être employé en <acronym>XHTML</acronym>.</para>
    </section>
    <section id="cdata">
      <title>Gestion des caractères spéciaux avec <token>CDATA</token></title>
      <para><acronym>XHTML</acronym> est beaucoup plus sensible que ne l'était <acronym>HTML</acronym> aux caractères spéciaux dans les déclarations <acronym>CSS</acronym> et JavaScript. Vous ne pouvez plus inclure les blocs de code dans des balises de commentaires comme en <acronym>HTML</acronym> : en effet, les navigateurs supportant <acronym>XML</acronym> peuvent réagir de manière inattendue à la présence de ces caractères et simplement les ignorer, affichant ainsi le contenu des éléments <sgmltag>script</sgmltag> et <sgmltag>style</sgmltag>. Afin d'éviter un tel désastre, il est recommandé d'entourer les scripts et les styles d'une section <token>CDATA</token>, qui indiquera aux navigateurs <acronym>XML</acronym> que les caractères spéciaux inclus doivent être interprétés normalement.</para>
      <programlisting>
&lt;script language="javascript" type="text/javascript"&gt;
&lt;![CDATA[Votre code javascript...]]&gt;
 &lt;/script&gt;
      </programlisting>
      <para>Toutefois, cela ne règle que partiellement le problème puisque les navigateurs <acronym>HTML</acronym> ignorent le contenu d'une balise <acronym>XML</acronym> <token>CDATA</token> et requièrent l'utilisation traditionnelle des commentaires <acronym>HTML</acronym>. La seule solution viable à ce jour consiste donc à placer toutes les définitions de <acronym>CSS</acronym> ou de JavaScript dans des fichiers externes.</para>
    </section>
    <section id="url">
      <title>Gestion des caractères spéciaux dans les <acronym>URL</acronym></title>
      <para>Les caractères spéciaux présents dans les valeurs d'attributs s'avèrent également catastrophiques en <acronym>XHTML</acronym>. Afin de contrer le problème, vous devez nécessairement les encoder afin d'éviter que le navigateur ne les interprète de façon erronée. Ainsi, pour tous les caractères spéciaux comme « &lt; », « &gt; » ou « &amp; » destinés à être interprétés tels quels, vous devrez plutôt inscrire « &amp;lt; », « &amp;gt; » ou « &amp;amp; » :</para>
      <para>Invalide :</para>
      <programlisting>&lt;a href="index.php?a=1&amp;b=2" title="Articles &amp;amp; Didacticiels"&gt;</programlisting>
      <para>Valide :</para>
      <programlisting>&lt;a href="index.php?a=1&amp;amp;b=2" title="Articles &amp;amp; Didacticiels"&gt;</programlisting>
    </section>
  </section>
  <section id="conformite">
    <title>Conformité et type de document</title>
    <para>Afin d'être conforme aux normes <acronym>XHTML</acronym>, outre les spécificités de syntaxe <acronym>XML</acronym> décrites précédemment, un document doit respecter les règles suivantes :</para>
    <section id="prologue">
      <title>Prologue <acronym>XML</acronym> et encodage de caractères</title>
      <para>La déclaration <acronym>XML</acronym> <sgmltag class="xmlpi">xml</sgmltag> est une composante recommandée du document <acronym>XHTML</acronym>. Cette déclaration l'identifie en effet comme appartenant au cadre <acronym>XML</acronym> et en décrit la version.</para>
      <para>Son support inégal dans les principaux navigateurs et <ulink url="/articles/dimensions_boites_css/">ses conséquences sur le rendu <acronym>CSS</acronym></ulink> incitent parfois à l'omettre.
      </para>
      <para>Cependant, comme elle permet de spécifier l'encodage de caractères spéciaux dans le document, choisir de l'omettre expose à un rendu incorrect de ces mêmes caractères. Le cas typique est celui des documents rédigés en français, qui utilisent des caractères spéciaux n'appartenant pas à l'encodage <acronym>ASCII</acronym>.</para>
      <para>Tout dépend donc de l'encodage choisi :</para>
      <itemizedlist>
        <listitem>
          <para>avec les encodages par défaut du <acronym>XML</acronym> (<emphasis><acronym>UTF</acronym>-8</emphasis> et <emphasis><acronym>UTF</acronym>-16</emphasis>), le prologue <acronym>XML</acronym> est optionnel, et une balise <sgmltag>meta</sgmltag> précisera l'encodage approprié pour les anciens navigateurs :
<programlisting>&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8" /&gt;</programlisting> ;</para>
        </listitem>
        <listitem>
          <para>avec d'autres encodages (<acronym>ISO</acronym>-8859-1 par exemple), il faut :</para>
          <itemizedlist>
            <listitem>
              <para>soit inclure en tête du document le prologue :
                <programlisting>&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;</programlisting>
                ainsi que la balise <sgmltag>meta</sgmltag> pour les vieux navigateurs qui ignoreront ce prologue ;
              </para>
            </listitem>
            <listitem>
              <para>ou encore spécifier l'encodage au niveau supérieur, c'est-à-dire dans l'en-tête <acronym>HTTP</acronym> serveur.</para>
            </listitem>
          </itemizedlist>
        </listitem>
      </itemizedlist>
    </section>
    <section id="dtd">
      <title>Utilisation de la déclaration de type de document</title>
      <para>Le document doit respecter les normes de validation d'une des trois <acronym>DTD</acronym> <acronym>XHTML</acronym> : <token>strict</token>, <token>transitional</token> ou <token>frameset</token>. Une déclaration de type de document doit apparaître dans le document juste avant l'élément <sgmltag>html</sgmltag> (qui est l'élément racine de tout document <acronym>XHTML</acronym>).</para>
      <itemizedlist>
        <listitem>
          <para>La <acronym>DTD</acronym> stricte n'autorise pas l'utilisation des anciens éléments de présentation (<sgmltag>s</sgmltag>, <sgmltag>u</sgmltag>, etc.) mais elle a l'avantage de contraindre le développeur à séparer structure et présentation, avec les facilités de maintenance que cela apporte.</para>
        </listitem>
        <listitem>
          <para>La <acronym>DTD</acronym> transitionnelle est plus permissive et plus proche des anciennes habitudes liées à <acronym>HTML</acronym> 3.2. Les balises dépréciées en <acronym>XHTML</acronym> strict y sont autorisées : le recours à cette <acronym>DTD</acronym> est donc plus facile dans un premier temps, mais avec le défaut de mêler encore partiellement structure et présentation.</para>
        </listitem>
        <listitem>
          <para>Enfin, la <acronym>DTD</acronym> <sgmltag>frameset</sgmltag> permet l'utilisation des cadres. Ceux-ci tombent en désuétude, mais peuvent se réveler encore utiles dans certains cas très exceptionnels.</para>
        </listitem>
      </itemizedlist>
      <programlisting>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;
      </programlisting>
    </section>
    <section id="racine">
      <title><sgmltag>html</sgmltag>, l'élément racine du document <acronym>XHTML</acronym></title>
      <para>L'élément racine d'un document doit impérativement être l'élément <sgmltag>html</sgmltag> et celui-ci se doit d'avoir un espace de nom (namespace) utilisant l'attribut <sgmltag class="attribute">xmlns</sgmltag> et une déclaration de la langue utilisée principalement dans le document. Par exemple :</para>
      <programlisting>&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"&gt;</programlisting>
    </section>
  </section>
  <section id="templates">
    <title>Gabarits prêts à l'emploi</title>
    <section id="strict">
      <title>Gabarit <acronym>XHTML</acronym> strict</title>
      <para>Encodage <acronym>ISO</acronym>-8859-1 :</para>
      <programlisting>
&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"&gt;
  &lt;head&gt;
    &lt;title&gt;<varname>Votre titre</varname>&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    <varname>&#8230;votre code&#8230;</varname>
  &lt;/body&gt;
&lt;/html&gt;
</programlisting>
      <para>Encodage <acronym>UTF</acronym>-8 ou <acronym>UTF</acronym>-16 :</para>
      <programlisting>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"&gt;
  &lt;head&gt;
    &lt;title&gt;<varname>Votre titre</varname>&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    <varname>&#8230;votre code&#8230;</varname>
  &lt;/body&gt;
&lt;/html&gt;
      </programlisting>
    </section>
    <section id="transitional">
      <title>Gabarit <acronym>XHTML</acronym> transitional</title>
      <para>Encodage <acronym>ISO</acronym>-8859-1 :</para>
      <programlisting>
&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"&gt;
  &lt;head&gt;
    &lt;title&gt;<varname>Votre titre</varname>&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    <varname>&#8230;votre code&#8230;</varname>
  &lt;/body&gt;
&lt;/html&gt;
      </programlisting>
      <para>Encodage <acronym>UTF</acronym>-8 ou <acronym>UTF</acronym>-16 :</para>
      <programlisting>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"&gt;
  &lt;head&gt;
    &lt;title&gt;<varname>Votre titre</varname>&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    <varname>&#8230;votre code&#8230;</varname>
  &lt;/body&gt;
&lt;/html&gt;
      </programlisting>
    </section>
  </section>
  <section id="conclusion">
    <title>Conclusion</title>
    <para>Comme vous pouvez le constater, faire la transition vers le <acronym>XHTML</acronym> ne demande pas un grand effort d'adaptation et vous ouvre les portes de la technologie <acronym>XML</acronym>. En y conformant vos documents dès aujourd'hui, vous assurerez la pérennité de vos pages Web et commencerez dès lors à profiter des <ulink url="/articles/pourquoi_standards/">avantages induits par l'applications des standards Web</ulink>.</para>
  </section>
</article>
