<!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="fr" lang="fr">
  <head>
    <title>Openweb.eu.org - Pourquoi plusieurs variantes de DTD en XHTML ?</title>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
    <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
    <meta name="DC.Language" scheme="RFC3066" content="fr" />
    <meta name="DC.Identifier" content="differentes_dtd" />
    <meta name="DC.Creator" content="Laurent Jouanneau" />
    <meta name="DC.Date.created" scheme="W3CDTF" content="2003-03-21" />
    <meta name="DC.Date.modified" scheme="W3CDTF" content="2003-03-21" />
    <meta name="DC.Rights" content="Cet article est sous licence Creative Commons Attribution-ShareAlike." />
    <meta name="DC.Subject" content="xhtml, debutant, expert" />
  </head>
  <body>
    <h1>Pourquoi plusieurs variantes de DTD en XHTML ?</h1>
    <ul>
      <li>
        <strong>Technologie :</strong> <a href="/xhtml/">(X)HTML</a>
      </li>
      <li>
        <strong>Profil :</strong> <a href="/debutant/">Débutant</a>, <a href="/expert/">Expert</a>
      </li>
      <li>
        <strong>Auteur :</strong> <a href="mailto:laurent.jouanneau%40openweb.eu.org">Laurent Jouanneau</a>
      </li>
      <li>
        <strong>Mise à jour :</strong> 21/03/2003</li>
    </ul>
    <h2>En bref</h2>
    <p>Les balises et attributs devenus obsolètes entre le <acronym title="HyperText Markup Language" lang="en">HTML</acronym> ou <acronym title="eXtensible HyperText Markup Language" lang="en">XHTML</acronym> strict et transitional, et les moyens de les remplacer.</p>
    <hr />
    <p>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.</p>
    <p>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 title="Cascading Style Sheets" lang="en">CSS</acronym> doivent être utilisées pour indiquer au navigateur la manière de présenter chaque élément du contenu.</p>
    <p>La variante « <code>strict</code> » 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, « <code>transitional</code> » qui permet encore l'utilisation de certaines balises modifiant la présentation comme <code>&lt;font&gt;</code>, <code>&lt;center&gt;</code> etc.</p>
    <p>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 : la variante « <code>frameset</code> ».</p>
    <p>A noter : la variante <code>strict</code> de <acronym>HTML</acronym> 4.01 est identique à la variante <code>strict</code>
      <acronym>XHTML</acronym> 1.0 au niveau des balises disponibles et de leurs attributs. Il en va de même pour les variantes <code>transitional</code> et <code>frameset</code>. Pour connaitre toutes les balises disponibles, consultez la <a href="http://www.w3.org/TR/html401/">documentation du <acronym>HTML </acronym>4.01</a>. 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 title="Document Type Definition" lang="en">DTD</acronym> à utiliser.</p>
    <h3>Syntaxe des <acronym>DTD</acronym>
    </h3>
    <h4>En <acronym>HTML</acronym>
    </h4>
    <dl>
      <dt>
        <acronym>HTML</acronym> 4.01 Strict</dt>
      <dd>
        <code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd"&gt;</code>
      </dd>
      <dt>
        <acronym>HTML</acronym> 4.01 Transitional</dt>
      <dd>
        <code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd"&gt;</code>
      </dd>
      <dt>
        <acronym>HTML</acronym> 4.01 Frameset</dt>
      <dd>
        <code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
     "http://www.w3.org/TR/html4/frameset.dtd"&gt;</code>
      </dd>
    </dl>
    <h4>En <acronym>XHTML</acronym>
    </h4>
    <dl>
      <dt>
        <acronym>XHTML</acronym> 1.0 Strict</dt>
      <dd>
        <code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</code>
      </dd>
      <dt>
        <acronym>XHTML</acronym> 1.0 Transitional</dt>
      <dd>
        <code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</code>
      </dd>
      <dt>
        <acronym>XHTML</acronym> 1.0 Frameset</dt>
      <dd>
        <code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;</code>
      </dd>
    </dl>
    <h3>Différences entre <code>transitional</code> et <code>frameset</code>
    </h3>
    <p>La variante <code>frameset</code> reprend toutes les balises et attributs de la variantes <code>transitional</code>. Deux balises ont été rajoutée : <code>frameset</code> et <code>frame</code>.</p>
    <h3>Différences entre <code>strict</code> et <code>transitional</code>
    </h3>
    <p>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 <code>strict</code> 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>.</p>
    <h4>Les balises obsolètes en <acronym>XHTML</acronym>
      <code>strict</code>
    </h4>
    <table width="100%" border="1" rules="all">
      <caption>Les balises obsolètes et les alternatives à leur utilisation</caption>
      <thead>
        <tr>
          <th>Balise</th>
          <th>Alternative</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>
            <code>&lt;frameset&gt;</code>, <code>&lt;frame&gt;</code>
          </td>
          <td>Utilisez la variante <code>frameset</code> du <acronym>XHTML</acronym>
          </td>
        </tr>
        <tr>
          <td>
            <code>&lt;iframe&gt;</code>
          </td>
          <td>Utilisez la variante <code>transitionnal</code> du <acronym>XHTML</acronym>.</td>
        </tr>
        <tr>
          <td>
            <code>&lt;font&gt;</code> et <code>&lt;basefont&gt;</code>
          </td>
          <td>
                Utilisez les styles <acronym>CSS</acronym>
            <a href="http://www.w3.org/TR/CSS2/fonts.html#propdef-font">
              <code>font</code>
            </a> et ses derivés : <code>font-family</code>, <code>font-size</code>, <code>font-weight</code> etc.
              </td>
        </tr>
        <tr>
          <td>
            <code>&lt;u&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/text.html#propdef-text-decoration">
              <code>text-decoration</code>
            </a>: underline;
              </td>
        </tr>
        <tr>
          <td>
            <code>&lt;s&gt;</code> et <code>&lt;strike&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/text.html#propdef-text-decoration">
              <code>text-decoration</code>
            </a>: line-through;
              </td>
        </tr>
        <tr>
          <td>
            <code>&lt;menu&gt;</code> et <code>&lt;dir&gt;</code>
          </td>
          <td>
                Ces balises ont en fait la même fonction que <code>&lt;ul&gt;</code>, seule l'apparence par défaut change. Remplacez-les par une liste <code>&lt;ul&gt;</code> et modifiez l'apparence avec les styles <a href="http://www.w3.org/TR/CSS2/generate.html#propdef-list-style">
              <code>list-style</code>
            </a> et dérivés (<code>list-style-type</code>…), et éventuellement <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin">
              <code>margin</code>
            </a> ou <a href="http://www.w3.org/TR/CSS2/box.html#propdef-padding">
              <code>padding</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>&lt;center&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/text.html#propdef-text-align">
              <code>text-align</code>
            </a>: center; à mettre sur l'élement parent si on veut centrer des élements de type « inline », ou mettre sur les balises de type « bloc » les styles suivants : <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin-left">
              <code>margin-left</code>
            </a>: auto; <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin-right">
              <code>margin-right</code>
            </a>: auto;
              </td>
        </tr>
        <tr>
          <td>
            <code>&lt;isindex&gt;</code>
          </td>
          <td>Utilisez la balise <code>&lt;input&gt;</code>
          </td>
        </tr>
        <tr>
          <td>
            <code>&lt;applet&gt;</code>
          </td>
          <td>Utilisez la balise <code>&lt;object&gt;</code>
          </td>
        </tr>
      </tbody>
    </table>
    <h4>Les attributs obsolètes en <acronym>XHTML</acronym>
      <code>strict</code>
    </h4>
    <table width="100%" border="1" rules="all">
      <caption>Les attributs obsolètes et les alternatives à leur utilisation</caption>
      <thead>
        <tr>
          <th>Attribut</th>
          <th>Balises concernées</th>
          <th>Alternative</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>
            <code>align</code>
          </td>
          <td>
            <code>&lt;div&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;h1 à h6&gt;</code>, <code>&lt;hr&gt;</code>, <code>&lt;object&gt;</code>, <code>&lt;img&gt;</code>, <code>&lt;input&gt;</code>, <code>&lt;legend&gt;</code>, <code>&lt;table&gt;</code>, <code>&lt;caption&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/text.html#propdef-text-align">
              <code>text-align</code>
            </a> à mettre sur l'élement parent si on veut aligner des élements de type « inline », ou mettre sur les balises de type « bloc » les styles suivants : <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin-left">
              <code>margin-left</code>
            </a>,                  <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin-right">
              <code>margin-right</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>background</code>
          </td>
          <td>
            <code>&lt;body&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/colors.html#propdef-background-image">
              <code>background-image</code>
            </a>              que l'on peut utiliser conjointement avec les styles <a href="http://www.w3.org/TR/CSS2/colors.html#propdef-background-position">
              <code>background-position</code>
            </a> et <a href="http://www.w3.org/TR/CSS2/colors.html#propdef-background-repeat">
              <code>background-repeat</code>
            </a> 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).
              </td>
        </tr>
        <tr>
          <td>
            <code>bgcolor</code>
          </td>
          <td>
            <code>&lt;body&gt;</code>, <code>&lt;table&gt;</code>, <code>&lt;tr&gt;</code>, <code>&lt;td&gt;</code>, <code>&lt;th&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/colors.html#propdef-background-color">
              <code>background-color</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>border</code>
          </td>
          <td>
            <code>&lt;object&gt;</code>, <code>&lt;img&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/box.html#propdef-border">
              <code>border</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>clear</code>
          </td>
          <td>
            <code>&lt;br&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/visuren.html#propdef-clear">
              <code>clear</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>compact</code>
          </td>
          <td>
            <code>&lt;ul&gt;</code>, <code>&lt;ol&gt;</code>, <code>&lt;dl&gt;</code>
          </td>
          <td>
                jouer sur les  styles <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin">
              <code>margin</code>
            </a> ou <a href="http://www.w3.org/TR/CSS2/box.html#propdef-padding">
              <code>padding</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>height</code>
          </td>
          <td>
            <code>&lt;td&gt;</code>, <code>&lt;th&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/visudet.html#propdef-height">
              <code>height</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>hspace</code>, <code>vspace</code>
          </td>
          <td>
            <code>&lt;object&gt;</code>, <code>&lt;img&gt;</code>
          </td>
          <td>
                le  style <a href="http://www.w3.org/TR/CSS2/box.html#propdef-margin">
              <code>margin</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>language</code>
          </td>
          <td>
            <code>&lt;script&gt;</code>
          </td>
          <td>
                Aucun. L'attribut <code>type</code> suffit : <code>&lt;script type="text/javascript"&gt;</code>
          </td>
        </tr>
        <tr>
          <td>
            <code>link, alink, vlink</code>
          </td>
          <td>
            <code>&lt;body&gt;</code>
          </td>
          <td>
                Définissez un style par défaut sur la balise <code>&lt;a&gt;</code> ainsi que sur les pseudos classes <a href="http://www.w3.org/TR/CSS2/selector.html#x27">
              <code>:link</code>
            </a>, <a href="http://www.w3.org/TR/CSS2/selector.html#x30">
              <code>:visited</code>
            </a> et <a href="http://www.w3.org/TR/CSS2/selector.html#x36">
              <code>:active</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>name</code>
          </td>
          <td>
            <code>&lt;img&gt;</code>, <code>&lt;form&gt;</code>
          </td>
          <td>utilisez l'attribut <code>id</code>
          </td>
        </tr>
        <tr>
          <td>
            <code>noshade</code>
          </td>
          <td>
            <code>&lt;hr&gt;</code>
          </td>
          <td>
                l'ensemble des  styles <a href="http://www.w3.org/TR/CSS2/box.html#propdef-border">
              <code>border</code>
            </a>, en particulier <a href="http://www.w3.org/TR/CSS2/box.html#propdef-border-style">
              <code>border-style</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>nowrap</code>
          </td>
          <td>
            <code>&lt;th&gt;</code>, <code>&lt;td&gt;</code>
          </td>
          <td>
                Le style <a href="http://www.w3.org/TR/CSS2/text.html#propdef-white-space">
              <code>white-space</code>
            </a>: nowrap;              
              </td>
        </tr>
        <tr>
          <td>
            <code>size</code>
          </td>
          <td>
            <code>&lt;hr&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/visudet.html#propdef-height">
              <code>height</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>start</code>
          </td>
          <td>
            <code>&lt;ol&gt;</code>
          </td>
          <td>
                Utilisez les styles pour gérer des <a href="http://www.w3.org/TR/CSS2/generate.html#counters">compteurs</a>
          </td>
        </tr>
        <tr>
          <td>
            <code>target</code>
          </td>
          <td>
            <code>&lt;base&gt;</code>, <code>&lt;link&gt;</code>, <code>&lt;a&gt;</code>, <code>&lt;area&gt;</code>, <code>&lt;form&gt;</code>
          </td>
          <td>aucun</td>
        </tr>
        <tr>
          <td>
            <code>text</code>
          </td>
          <td>
            <code>&lt;body&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/colors.html#propdef-color">
              <code>color</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>type</code>
          </td>
          <td>
            <code>&lt;ul&gt;</code>, <code>&lt;ol&gt;</code>, <code>&lt;li&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/generate.html#propdef-list-style">
              <code>list-style</code>
            </a>
          </td>
        </tr>
        <tr>
          <td>
            <code>value</code>
          </td>
          <td>
            <code>&lt;li&gt;</code>
          </td>
          <td>
              Utilisez les styles pour gérer des <a href="http://www.w3.org/TR/CSS2/generate.html#counters">compteurs</a>
          </td>
        </tr>
        <tr>
          <td>
            <code>width</code>
          </td>
          <td>
            <code>&lt;hr&gt;</code>, <code>&lt;pre&gt;</code>, <code>&lt;td&gt;</code>, <code>&lt;th&gt;</code>
          </td>
          <td>
                le style <a href="http://www.w3.org/TR/CSS2/visudet.html#propdef-width">
              <code>width</code>
            </a>
          </td>
        </tr>
      </tbody>
    </table>
    <h4>Autres différences</h4>
    <p>A l'intérieur des balises <code>&lt;form&gt;</code>, <code>&lt;noscript&gt;</code> et <code>&lt;blockquote&gt;</code>, il ne peut plus y avoir des balises de type « inline ».</p>
  </body>
</html>
