<?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="differentes_dtd">
  <articleinfo>
    <title>Pourquoi plusieurs variantes de <acronym>DTD</acronym> en <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>
    <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 balises et attributs devenus obsolètes entre le <acronym>HTML</acronym> ou <acronym>XHTML</acronym> strict et transitional, et les moyens de les remplacer.</para>
    </abstract>
    <subjectset>
      <subject role="technologie">
        <subjectterm>xhtml</subjectterm>
      </subject>
      <subject role="profil">
        <subjectterm>debutant</subjectterm>
        <subjectterm>expert</subjectterm>
      </subject>
    </subjectset>
  </articleinfo>
  <para>Le web évolue et les besoins aussi. Avec l'expérience, on se rend rapidement compte qu'une page en <acronym>HTML</acronym> 2 ou 3 devient rapidement lourde et impossible à maintenir. La raison principale en est le mélange dans le langage des balises structurant le contenu et de celles spécifiant la présentation.</para>
  <para>Depuis le <acronym>HTML</acronym> 4, le langage a évolué et impose dorénavant une séparation du contenu et de la forme. Les balises <acronym>HTML</acronym>4.01/<acronym>XHTML</acronym> sont ainsi utilisées seulement pour structurer le document, et les feuilles de styles <acronym>CSS</acronym> doivent être utilisées pour indiquer au navigateur la manière de présenter chaque élément du contenu.</para>
  <para>La variante «&#160;<token>strict</token>&#160;» du <acronym>HTML</acronym>4.01 et du <acronym>XHTML</acronym> 1.0 respectent entièrement cette philosophie, et les versions ultérieures du <acronym>XHTML</acronym> iront dans ce sens. Mais pour un passage en douceur à cette nouvelle manière de conçevoir les documents, le W3C a créé une autre variante, «&#160;<token>transitional</token>&#160;» qui permet encore l'utilisation de certaines balises modifiant la présentation comme <token>&lt;font></token>, <token>&lt;center&gt;</token> etc.</para>
  <para>Dans ces deux variantes, vous remarquerez cependant la disparition des balises pour utiliser des frames: il existe en effet une troisième variante pour continuer à les employer&#160;: la variante «&#160;<token>frameset</token>&#160;».</para>
  <para>A noter&#160;: la variante <token>strict</token> de <acronym>HTML</acronym> 4.01 est identique à la variante <token>strict</token> <acronym>XHTML</acronym> 1.0 au niveau des balises disponibles et de leurs attributs. Il en va de même pour les variantes <token>transitional</token> et <token>frameset</token>. Pour connaitre toutes les balises disponibles, consultez la <ulink url="http://www.w3.org/TR/html401/">documentation du <acronym>HTML </acronym>4.01</ulink>. Dans la suite de ce document, nous allons seulement voir les différences (balises en plus ou en moins) entre chaque variante. Mais rappelons tout d'abord la syntaxe des <acronym>DTD</acronym> à utiliser.</para>
  <section id="dtd">
    <title>Syntaxe des <acronym>DTD</acronym></title>
    <section id="html">
      <title>En <acronym>HTML</acronym>
      </title>
      <variablelist>
        <varlistentry>
          <term><acronym>HTML</acronym> 4.01 Strict</term>
          <listitem>
              <para>
                <programlisting>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd"&gt;</programlisting>
              </para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term><acronym>HTML</acronym> 4.01 Transitional</term>
            <listitem>
              <para>
                <programlisting>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd"&gt;</programlisting>
              </para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term><acronym>HTML</acronym> 4.01 Frameset</term>
            <listitem>
              <para>
                <programlisting>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
     "http://www.w3.org/TR/html4/frameset.dtd"&gt;</programlisting>
              </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>
    <section id="xhtml">
      <title>En <acronym>XHTML</acronym></title>
      <variablelist>
        <varlistentry>
          <term><acronym>XHTML</acronym> 1.0 Strict</term>
          <listitem>
            <para>
              <programlisting>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</programlisting>
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><acronym>XHTML</acronym> 1.0 Transitional</term>
          <listitem>
            <para>
              <programlisting>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</programlisting>
            </para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term><acronym>XHTML</acronym> 1.0 Frameset</term>
          <listitem>
            <para>
              <programlisting>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;</programlisting>
            </para>
          </listitem>
        </varlistentry>
      </variablelist>
    </section>
  </section>
  <section id="transitionnal_frameset">
    <title>Différences entre <token>transitional</token> et <token>frameset</token></title>
    <para>La variante <token>frameset</token> reprend toutes les balises et attributs de la variantes <token>transitional</token>. Deux balises ont été rajoutée&#160;: <token>frameset</token> et <token>frame</token>.</para>
  </section>
  <section id="strict_transitionnal">
    <title>Différences entre <token>strict</token> et <token>transitional</token></title>
    <para>Cette partie va vous permettre de convertir facilement un document non conforme, ou conforme <acronym>HTML</acronym> 4.01 transitional, en document XHTML1.0 strict. Comme nous l'avons déjà évoqué précédement, la variante <token>strict</token> oblige une séparation du contenu et de la présentation. Cela implique donc la suppression de toutes les balises et attributs de mise en forme, et l'obligation de passer par les <acronym>CSS</acronym>.</para>
    <section id="balises">
      <title>Les balises obsolètes en <acronym>XHTML</acronym> <token>strict</token></title>
      <table>
        <title>Les balises obsolètes et les alternatives à leur utilisation</title>
        <tgroup cols="">
          <thead>
            <row>
              <entry>Balise</entry>
              <entry>Alternative</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry><token>&lt;frameset&gt;</token>, <token>&lt;frame&gt;</token></entry>
              <entry>Utilisez la variante <token>frameset</token> du <acronym>XHTML</acronym></entry>
            </row>
            <row>
              <entry><token>&lt;iframe&gt;</token></entry>
              <entry>Utilisez la variante <token>transitionnal</token> du <acronym>XHTML</acronym>.</entry>
            </row>
            <row>
              <entry><token>&lt;font&gt;</token> et <token>&lt;basefont&gt;</token></entry>
              <entry>
                Utilisez les styles <acronym>CSS</acronym> <ulink url="http://www.w3.org/TR/CSS2/fonts.html#propdef-font"><token>font</token></ulink> et ses derivés&#160;: <token>font-family</token>, <token>font-size</token>, <token>font-weight</token> etc.
              </entry>
            </row>
            <row>
              <entry><token>&lt;u&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/text.html#propdef-text-decoration"><token>text-decoration</token></ulink>: underline;
              </entry>
            </row>
            <row>
              <entry><token>&lt;s&gt;</token> et <token>&lt;strike&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/text.html#propdef-text-decoration"><token>text-decoration</token></ulink>: line-through;
              </entry>
            </row>
            <row>
              <entry><token>&lt;menu&gt;</token> et <token>&lt;dir&gt;</token></entry>
              <entry>
                Ces balises ont en fait la même fonction que <token>&lt;ul&gt;</token>, seule l'apparence par défaut change. Remplacez-les par une liste <token>&lt;ul&gt;</token> et modifiez l'apparence avec les styles <ulink url="http://www.w3.org/TR/CSS2/generate.html#propdef-list-style"><token>list-style</token></ulink> et dérivés (<token>list-style-type</token>&#8230;), et éventuellement <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin"><token>margin</token></ulink> ou <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-padding"><token>padding</token></ulink>
              </entry>
            </row>
            <row>
              <entry><token>&lt;center&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/text.html#propdef-text-align"><token>text-align</token></ulink>: center; à mettre sur l'élement parent si on veut centrer des élements de type «&#160;inline&#160;», ou mettre sur les balises de type «&#160;bloc&#160;» les styles suivants&#160;: <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin-left"><token>margin-left</token></ulink>: auto; <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin-right"><token>margin-right</token></ulink>: auto;
              </entry>
            </row>
            <row>
              <entry><token>&lt;isindex&gt;</token></entry>
              <entry>Utilisez la balise <token>&lt;input&gt;</token></entry>
            </row>
            <row>
              <entry><token>&lt;applet&gt;</token></entry>
              <entry>Utilisez la balise <token>&lt;object&gt;</token></entry>
            </row>
          </tbody>
        </tgroup>
      </table>
    </section>
    <section id="attributs">
      <title>Les attributs obsolètes en <acronym>XHTML</acronym> <token>strict</token></title>
      <table>
        <title>Les attributs obsolètes et les alternatives à leur utilisation</title>
        <tgroup cols="">
          <thead>
            <row>
              <entry>Attribut</entry>
              <entry>Balises concernées</entry>
              <entry>Alternative</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry><token>align</token></entry>
              <entry>
                <token>&lt;div&gt;</token>, <token>&lt;p&gt;</token>, <token>&lt;h1 à h6&gt;</token>, <token>&lt;hr&gt;</token>, <token>&lt;object&gt;</token>, <token>&lt;img&gt;</token>, <token>&lt;input&gt;</token>, <token>&lt;legend&gt;</token>, <token>&lt;table&gt;</token>, <token>&lt;caption&gt;</token>
              </entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/text.html#propdef-text-align"><token>text-align</token></ulink> à mettre sur l'élement parent si on veut aligner des élements de type «&#160;inline&#160;», ou mettre sur les balises de type «&#160;bloc&#160;» les styles suivants&#160;: <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin-left"><token>margin-left</token></ulink>,                  <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin-right"><token>margin-right</token></ulink>
              </entry>
            </row>
            <row>
              <entry><token>background</token></entry>
              <entry><token>&lt;body&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/colors.html#propdef-background-image"><token>background-image</token></ulink>              que l'on peut utiliser conjointement avec les styles <ulink url="http://www.w3.org/TR/CSS2/colors.html#propdef-background-position"><token>background-position</token></ulink> et <ulink url="http://www.w3.org/TR/CSS2/colors.html#propdef-background-repeat"><token>background-repeat</token></ulink> pour positionner et définir la répetition de l'image de fond (il est d'ailleurs possible d'utiliser ces styles sur pratiquement toutes les balises).
              </entry>
            </row>
            <row>
              <entry><token>bgcolor</token></entry>
              <entry>
                <token>&lt;body&gt;</token>, <token>&lt;table&gt;</token>, <token>&lt;tr&gt;</token>, <token>&lt;td&gt;</token>, <token>&lt;th&gt;</token>
              </entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/colors.html#propdef-background-color"><token>background-color</token></ulink>
              </entry>
            </row>
            <row>
              <entry><token>border</token></entry>
              <entry><token>&lt;object&gt;</token>, <token>&lt;img&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-border"><token>border</token></ulink>                
              </entry>
            </row>
            <row>
              <entry><token>clear</token></entry>
              <entry><token>&lt;br&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/visuren.html#propdef-clear"><token>clear</token></ulink>                
              </entry>
            </row>
            <row>
              <entry><token>compact</token></entry>
              <entry><token>&lt;ul&gt;</token>, <token>&lt;ol&gt;</token>, <token>&lt;dl&gt;</token></entry>
              <entry>
                jouer sur les  styles <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin">     <token>margin</token></ulink> ou <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-padding">                 <token>padding</token></ulink>
              </entry>
            </row>
            <row>
              <entry><token>height</token></entry>
              <entry><token>&lt;td&gt;</token>, <token>&lt;th&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/visudet.html#propdef-height"><token>height</token></ulink>                
              </entry>
            </row>
            <row>
              <entry><token>hspace</token>, <token>vspace</token></entry>
              <entry><token>&lt;object&gt;</token>, <token>&lt;img&gt;</token></entry>
              <entry>
                le  style <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-margin">                 <token>margin</token></ulink>
              </entry>
            </row>
            <row>
              <entry><token>language</token></entry>
              <entry><token>&lt;script&gt;</token></entry>
              <entry>
                Aucun. L'attribut <token>type</token> suffit&#160;: <token>&lt;script type="text/javascript"&gt;</token>
              </entry>
            </row>
            <row>
              <entry><token>link, alink, vlink</token></entry>
              <entry><token>&lt;body&gt;</token></entry>
              <entry>
                Définissez un style par défaut sur la balise <token>&lt;a&gt;</token> ainsi que sur les pseudos classes <ulink url="http://www.w3.org/TR/CSS2/selector.html#x27"><token>:link</token></ulink>, <ulink url="http://www.w3.org/TR/CSS2/selector.html#x30"><token>:visited</token></ulink> et <ulink url="http://www.w3.org/TR/CSS2/selector.html#x36"><token>:active</token></ulink>
              </entry>
            </row>
            <row>
              <entry><token>name</token></entry>
              <entry><token>&lt;img&gt;</token>, <token>&lt;form&gt;</token></entry>
              <entry>utilisez l'attribut <token>id</token></entry>
            </row>
            <row>
              <entry><token>noshade</token></entry>
              <entry><token>&lt;hr&gt;</token></entry>
              <entry>
                l'ensemble des  styles <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-border">                <token>border</token></ulink>, en particulier <ulink url="http://www.w3.org/TR/CSS2/box.html#propdef-border-style"><token>border-style</token>                </ulink>
              </entry>
            </row>
            <row>
              <entry><token>nowrap</token></entry>
              <entry><token>&lt;th&gt;</token>, <token>&lt;td&gt;</token></entry>
              <entry>
                Le style <ulink url="http://www.w3.org/TR/CSS2/text.html#propdef-white-space"><token>white-space</token></ulink>: nowrap;              
              </entry>
            </row>
            <row>
              <entry><token>size</token></entry>
              <entry><token>&lt;hr&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/visudet.html#propdef-height"><token>height</token></ulink>                
              </entry>
            </row>
            <row>
              <entry><token>start</token></entry>
              <entry><token>&lt;ol&gt;</token></entry>
              <entry>
                Utilisez les styles pour gérer des <ulink url="http://www.w3.org/TR/CSS2/generate.html#counters">compteurs</ulink>
              </entry>
            </row>
            <row>
              <entry><token>target</token></entry>
              <entry>
                <token>&lt;base&gt;</token>, <token>&lt;link&gt;</token>, <token>&lt;a&gt;</token>, <token>&lt;area&gt;</token>, <token>&lt;form&gt;</token>
              </entry>
              <entry>aucun</entry>
            </row>
            <row>
              <entry><token>text</token></entry>
              <entry><token>&lt;body&gt;</token></entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/colors.html#propdef-color"><token>color</token></ulink>                
              </entry>
            </row>
            <row>
              <entry><token>type</token></entry>
              <entry>
                <token>&lt;ul&gt;</token>, <token>&lt;ol&gt;</token>, <token>&lt;li&gt;</token>
              </entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/generate.html#propdef-list-style"><token>list-style</token></ulink>
            </entry>
          </row>
          <row>
            <entry><token>value</token></entry>
            <entry><token>&lt;li&gt;</token></entry>
            <entry>
              Utilisez les styles pour gérer des <ulink url="http://www.w3.org/TR/CSS2/generate.html#counters">compteurs</ulink>
            </entry>
          </row>
          <row>
              <entry><token>width</token></entry>
              <entry>
                <token>&lt;hr&gt;</token>, <token>&lt;pre&gt;</token>, <token>&lt;td&gt;</token>, <token>&lt;th&gt;</token>
              </entry>
              <entry>
                le style <ulink url="http://www.w3.org/TR/CSS2/visudet.html#propdef-width"><token>width</token></ulink>                
              </entry>
            </row>
          </tbody>
        </tgroup>
      </table>
    </section>
    <section id="autres">
      <title>Autres différences</title>
      <para>A l'intérieur des balises <token>&lt;form&gt;</token>, <token>&lt;noscript&gt;</token> et <token>&lt;blockquote&gt;</token>, il ne peut plus y avoir des balises de type «&#160;inline&#160;».</para>
    </section>
  </section>
</article>
