<!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 - Respecter la sémantique 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="respecter_semantique" />
    <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="debutant, expert, xhtml, structure" />
  </head>
  <body>
    <h1>Respecter la sémantique XHTML</h1>
    <ul>
      <li>
        <strong>Profil :</strong> <a href="/debutant/">Débutant</a>, <a href="/expert/">Expert</a>
      </li>
      <li>
        <strong>Technologie :</strong> <a href="/xhtml/">(X)HTML</a>
      </li>
      <li>
        <strong>Thème :</strong> <a href="/structure/">Structure</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>Pourquoi et comment utiliser les balises <acronym title="(eXtensible) HyperText Markup Language" lang="en">(X)HTML</acronym> à bon escient</p>
    <hr />
    <h3>La sémantique des balises</h3>
    <p>Le <acronym>(X)HTML</acronym> définit de nombreuses balises. Chacune de ces balises est destinée à indiquer la nature du contenu qu'elle encadre (c'est le cas pour les versions strictes du <acronym title="HyperText Markup Language" lang="en">HTML</acronym> et du <acronym title="eXtensible HyperText Markup Language" lang="en">XHTML</acronym>, leurs autres versions ayant d'autres balises pour spécifier l'apparence du contenu). C'est ce qu'on appelle la <em>sémantique</em>.</p>
    <p>Nous avons ainsi des balises pour indiquer un titre (<code>h1</code>, <code>h2</code>…) ; des balises pour indiquer des listes (<code>ul</code>, <code>ol</code>,…) ; des balises pour indiquer un paragraphe (<code>p</code>), une citation (<code>blockquote</code>), un tableau de données (<code>table</code>), un bloc regroupant plusieurs contenus (<code>div</code>), etc.</p>
    <h3>Pourquoi est-ce si important ?</h3>
    <p>Respecter la sémantique des balises, donc encadrer un contenu avec la balise adéquate, permet tout d'abord de structurer le document correctement, indépendamment de la forme qu'il va prendre. Ceci permet aux programmes qui traiteront l'information contenue dans la page, de l'interpréter correctement, et donc de l'utiliser comme il se doit.</p>
    <p>Vous n'en n'avez peut-être pas conscience, mais les types de ces programmes sont nombreux : les navigateurs classiques bien sûr, mais aussi les robots d'indexation des moteurs de recherche, les lecteurs à synthèse vocale pour les mal-voyants, les plages brailles, etc. On peut imaginer aussi avoir besoin de développer en interne, dans une société, des programmes pour extraire certaines informations dans les pages pour y appliquer un traitement quelconque.</p>
    <p>Prenons l'exemple des titres. On voit trop souvent ceux-ci se terminer par une balise <code>br</code> ou inclus dans un simple paragraphe <code>p</code>. Il se trouve alors que du point de vue des logiciels, ces titres sont noyés dans le reste de la page. Rien ne peut les distinguer d'un simple paragraphe. Les encadrer d'une balise de titre comme <code>h1</code> les met en valeur sémantiquement. Les navigateurs afficheront le texte encadré par cette balise avec un rendu par défaut (caractères plus grand, plus gras) qui permettra de le dissocier du reste. Les robots d'indexation pourront indexer les mots des titres avec un coefficient de pertinence plus important par exemple, par rapport à ceux des paragraphes. Les logiciels de synthèse vocal pourront lire le titre avec une intonation différente du reste du texte, comme vous le faites quand vous lisez à voix haute.</p>
    <p>Et cet exemple avec les titres est valable pour toutes les balises.</p>
    <p>Cela rend ainsi les pages accessibles à tous les outils de navigations et par conséquence, <em>à tout le monde</em> ! N'est-ce pas le but recherché quand vous publiez un document sur le web ?</p>
    <h3>Un exemple avec Lynx</h3>
    <h4>Qu'est ce que Lynx ?</h4>
    <p>
      <a href="http://lynx.browser.org/">Lynx</a> est un navigateur « texte » trés connu dans le monde Unix (il existe aussi pour d'autres plateformes telles que Windows). On entend par navigateur texte, un navigateur qui affiche le contenu d'une page en mode texte, sans aucun rendu graphique. Ils permettent de surfer sur un écran non graphique ou au travers d'une console (très utile lorsqu'on travaille sur des serveurs qui ne disposent pas d'interface graphique, et que l'on veut aller sur des sites pour récupérer des mises à jour, de l'aide, etc…).</p>
    <p>Ainsi, un navigateur texte :</p>
    <ul>
      <li>ne tient pas compte des feuilles de style, des balises de formatage (<code>font</code>…), ni des attributs de formatage (<code>color</code>, <code>bgcolor</code>…) ;</li>
      <li>affiche tout avec une unique fonte, une unique taille de caractère ;</li>
      <li>ne peut respecter les espacements artificiels réalisés avec des images vides ou ceux indiqués par des attributs comme <code>cellpadding</code>, <code>cellspacing</code>… ;</li>
      <li>définit ses propres couleurs pour chaque type de balise (paramétrable par l'internaute) ;</li>
      <li>affiche tout le contenu de la page de façon linéaire ;</li>
      <li>etc.</li>
    </ul>
    <h4>Pourquoi Lynx ?</h4>
    <p>Du fait qu'il ne tient pas compte de la présentation, l'affichage dans Lynx permet de se faire une idée de comment est « vu » votre site par d'autres types de media qu'un navigateur classique. On peut ainsi mieux se rendre compte de ce que peut analyser un robot d'indexation, de ce que peut « lire » un logiciel de synthèse vocale, de ce que restitue une plage braille à un aveugle.</p>
    <h4>Ce qu'on voit à travers Lynx</h4>
    <p>Prenons l'exemple de menu du site evoqué dans le tutoriel : avec l'ancienne page, il s'agit d'items de menu placés dans des cellules de tableaux, avec des images servant de puce. Sur un navigateur texte, cela va donner ceci :</p>
    <div><img src="annexes/lynx-nonconforme.png" alt="vision d'une page non conforme avec lynx" /></div>
    <p>On le voit, on n'obtient pas forcément un bon résultat. Les informations sont un peu désorganisées, on a du mal à voir la structure du texte, ce qui rend son interprétation difficile.</p>
    <p>Par contre si on utilise les balises <acronym>HTML</acronym> dans leur bon contexte, le navigateur va afficher le texte avec des indentations et couleurs spécifiques, montrant donc mieux la nature du contenu. En utilisant <code>ul</code> et <code>li</code> pour notre menu (et <code>h1</code> pour les titres de menus), on va donc avoir une vraie liste, avec des puces, des indentations, des espacements : le menu ressemble à un menu.</p>
    <div><img src="annexes/lynx-conforme.png" alt="vision d'une page conforme avec lynx" /></div>
    <p>C'est mieux non ? Non seulement le texte est plus lisible, mais en plus il sera mieux interprété par les autres médias. De plus, en regardant la source, le code <acronym>HTML</acronym> est beaucoup plus clair, plus concis, ce qui apporte des avantages non négligeables : maintenance et modifications aisées, page plus légère donc téléchargement plus rapide et économie de bande passante du serveur (plus de gens peuvent se connecter en même temps).</p>
    <p>Le plus beau dans tout ça, c'est que cela ne change pratiquement pas l'aspect sur un navigateur classique, grâce à l'utilisation de feuilles de styles !</p>
  </body>
</html>
