3 A propos de SGML et HTML

Sommaire

  1. Introduction aux SGML
  2. Constructions SGML utilisées en HTML
    1. Eléments
    2. Attributs
    3. Références de caractères
    4. Commentaires
  3. Comment lire la DTD HTML
    1. Commentaires DTD
    2. Définitions des entités paramètre
    3. Déclarations d'élément
    4. Déclarations des attributs

La section de ce document introduit SGML et présente ses relations avec HTML. Une présentation détaillée de SGML est élaborée par le standard (voir [ISO8879]).

3.1 Introduction à SGML

SGML est un système permettant de définir des des langages de description. Les auteurs balisent leurs documents en saisissant l'information structurelle, de présentation et sémantique au sein du contenu. HTML est un exemple de langage de description. Voici un exemple de document HTML :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
     "http://www.w3.org/TR/REC-html40/strict.dtd">
<HTML>
   <HEAD>
      <TITLE>Mon premier document HTML</TITLE>
   </HEAD>
   <BODY>
      <P>Bonjour &agrave; tous !
   </BODY>
</HTML>

Un document HTML est séparé en 2 parties : un entête (ici, entre <HEAD> et </HEAD>) et un corps (ici, entre <BODY> et </BODY>). Le titre du document apparaît dans l'entête (avec d'autres informations sur le document), et le contenu du document apparaît dans le corps. Le corps contient dans cet exemple un seul paragraphe, balisé par <P>.

Chaque langage de description défini en SGML est appelé une application SGML. Une application SGML est caractérisée par :

  1. Une déclaration SGML. La déclaration SGML spécifie quels sont les caractères et les délimiteurs qui doivent apparaître dans l'application.
  2. Une définition de document type (DTD). La DTD définit la syntaxe des balises servant à décrire. La DTD peut inclure toutes définitions supplémentaires comme les références des entités caractères.
  3. Une spécification décrit la sémantique imputée au balisage. Cette spécification impose également les restrictions de syntaxe qui ne peuvent être exprimées dans la DTD.
  4. Des exemples de document contenant des données (contenu) et des balises. Chaque document contient la référence à la DTD qui doit être utiliser pour interprêter ce dernier.

La spécification HTML 4.0 inclut une déclaration SGML, trois définitions de document type (voir la section sur l'information de version HTML pour une description de ces trois documents), et une liste des références de caractères.

3.2 Constructions SGML utilisées en HTML

Les sections suivantes introduisent les constructions SGML utilisées en HTML.

L'annexe liste quelques options SGML qui ne sont pas largement utilisés par les outils HTML et le logiciels clients et qui doivent être évités.

3.2.1 Eléments

Une définition de document type SGML définit les éléments type qui définissent les structures ou les comportements voulus. Le HTML inclut les éléments type qui définissent les paragraphes, les liens hypertextes, les listes, les tableaux, les images, etc.

Chaque déclaration d'élément type comprend généralement trois parties : une balise de début, un contenu, et une balise de fin.

Le nom de l'élément apparaît dans la balise de début (écrit comme suit <element-name>) et la balise de fin (écrit comme suit </element-name>) ; notez le slash (/) avant le nom de l'élément de balise de fin. Par exemple, les balises de début et de fin de l'élément type UL délimitant les éléments d'une liste :

<UL>
<LI><P>...1er élément de liste...
<LI><P>...2nd élément de liste...
</UL>

Quelques éléments types HTML permettent aux auteurs d'omettre les balises de fin (e.g., les éléments type P et LI). Très peu d'éléments type permettent également d'omettre les balises de début ; par exemple, HEAD et BODY. La DTD HTML indique pour lesquels de chaque élément les balises de début et de fin sont requises.

Certains éléments type HTML n'ont pas de contenu. Par exemple, l'élément de saut de ligne BR na pas de contenu ; Son unique rôle est de terminer une ligne. Certains éléments vides n'ont pas de balises de fin. La DTD et le texte de la spécification indique si un élément type est vide (sans contenu) ou, s'il peut avoir un contenu, considéré alors comme valide.

Les noms des éléments ne sont jamais sensibles à la casse.

Veuillez consulter le standard SGML pour obtenir de l'information à propos des règles définissant les éléments (e.g., les manières correctes de les imbriquer, une balise de fin ferme toutes les balises de début omises jusqu'à la balise correspondante de début, (section 7.5.1), etc.).

Par exemple, Le paragraphe suivant :

<P>C'est le premier paragraphe.</P>
...Un élément de bloc...

peut-être également écrit ainsi :

<P>C'est le premier paragraphe.
...Un élément de bloc...

car la balise de début <P> est fermée par l'élément de bloc le suivant. De la même manière si un paragraphe est contenu dans un élément de bloc, comme suit :

<DIV>
<P>C'est le paragraphe.
</DIV>

la balise de fin de l'élément de bloc entourant le paragraphe (ici, </DIV>) comprends la balise de fin de la balise de début <P> ouverte.

Les éléments ne sont pas des balises. Quelques personnes font références aux éléments par les balises (e.g., "la balise P"). Vous devez vous souvenir que l'élément est une chose, et que la balise (qu'elle soit de début ou de fin) en est une autre. Par exemple, l'élément HEAD est toujours présent, bien que les balises de début et de fin HEAD peuvent être absentes de la description.

Tous les éléments types declarés dans cette spécification sont listés dans l'index des éléments.

3.2.2 Attributs

Les éléments peuvent être associés à des propriétés, appelés des attributs, qui peuvent prendre des valeurs (par défaut, ou définies par les auteurs ou des scripts). Les paires valeurs/attributs apparaissent avant le ">" final de la balise de début d'un élément. Toutes paires valeurs attributs (autorisées), séparées par des espaces, peuvent apparaître dans une balise de début. Ils peuvent apparaître dans un ordre quelconque.

Dans cet exemple, l'attribut id est utilisé dans un élément H1 :

<H1 id="section1">
Ceci est un titre identifié par l'attribut id
</H1>

Par défaut, SGML exige que ques toutes les valeurs des attributs soient délimitées par l'utilisation de guillemets doubles (caractère ASCII décimal 34) ou par des guillemets simples (caractère ASCII décimal 39). Des guillemets simples peuvent être inclus à l'intérieur d'une vealuer quand celle-ci est délimitée par des guillemets doubles, et vice versa. Les auteurs peuvent également utiliser les références numériques des caractères pour spécifier les doubles guillemets (&#34;) les guillemets simples (&#39;). Pour les guillemets doubles, les auteurs peuvent utiliser également la référence entité du caractère : &quot;.

Dans certains cas, les auteurs peuvent spécifier la valeur d'un attribut sans aucun guillemets. La valeur de l'attribut doit alors seulement contenir les lettres (a-z et A-Z), les chiffres (0-9), les tirets (caractère ASCII décimal 45), et les points (caractère ASCII décimal 46). Nous recommandons l'utilisation des guillemets même quand il est possible de ne pas les utiliser.

Les noms d'attributs sont toujours insensibles à la casse

Les valeurs des attributs sont généralement insensibles à la casse. La définition de chaque attribut dans le manuel de référence indique la sensibilité de la valeur à la casse.

Tous les attributs définis par la spécification sont listés dans l'index des attributs.

3.2.3 Références des caractères

Les références de caractère sont de la forme numérique ou symbolique pour les caractères qui peuvent être inclus dans un document HTML. Ils sont utiles dans le cadre de référence à des caractères rarement utilisés, ou pour les caractères que les outils d'éditions rendent difficiles ou impossibles à saisir. Vous verrez des caractères références dans ce document ; ils commencent avec un signe "&" et finissent par un point-virgule (;). Quels exemples courants suivent :

Nous abordons les références des caractères HTML en détail dans la section sur les ensembles des caractères de document HTML. La spécification contient également une liste des références de caractères qui peuvent apparaître dans les documents HTML 4.0.

3.2.4 Commentaires

Les commentaires HTML ont la syntaxe suivante :

<!-- C'est un commentaire -->
<!-- également celui-ci,
    qui occupe plus d'une ligne -->

Les espaces ne sont pas autorisés dans le délimiteur d'ouverture de la déclaration de balise ("<!") et le délimiteur d'ouverture du commentaire ("--"), mais est permis entre le délimiteur de fermeture du commentaire ("--") et le délimiteur de fermeture de la balise (">"). Une erreur courante est d'inclure un ensemble de tirets ("---") à l'intérieur d'un commentaire. Les auteurs doivent éviter d'utiliser 2 tirets ou plus à l'intérieur d'un commentaire.

L'information qui apparait à l'intérieur des commentaires n'a pas de signification particulière (e.g., Les références de caractères ne sont pas interprêtés).

3.3 Comment lire la DTD HTML ?

Chaque déclaration d'élément et d'attribut dans cette spécification est accompagnée par son fragment de définition de type de document. Nous avons choisi d'inclure les fragments DTD dans la spécification plutôt que de rechercher un moyen plus accessible, mais plus long et moins précis de décrire les propriétés d'un élément. Le manuel d'aide suivant devrait permettre aux lecteurs non familliés avec SGML de pouvoir lire la DTD et comprendre les détails techniques de la specification.

3.3.1Commentaires de la DTD

Dans les DTDs, les commentaires peuvent occupper une ou plusieurs lignes. Dans la DTD, Les commentaires sont délimités par une paire de tirets, "--", e.g.

<!ELEMENT PARAM - O EMPTY       -- named property value -->
Ici, le commentaire "named property value" explique l'utilisation de l'élément type PARAM. Les commentaires sont uniquement informatifs.

3.3.2 Définitions des entités paramètres

La DTD HTML commence avec une série de définitions des entités paramètres. Une définition d'entité paramètre définit un type de macro qui peut être utilisé et être développé ailleurs dans la DTD. Ces macros peuvent ne pas apparaître dans les documents HTML, et uniquement dans la DTD. D'autres types de macros, appelés références de caractères, dans le texte d'un document HTML ou à l'intérieur des valeurs d'attribut.

Quand l'entité paramètre est appelée par son nom dans la DTD, il est développé en chaîne de caractères.

Une définition d'entité paramètre commence avec le mot clé <!ENTITY % suivie par le nom de l'entité, une chaîne de caractères des valeurs possibles, et finallement un > de fermeture. Les modèles des entités paramètres dans une DTD commence avec "%", puis le nom de l'entité paramètre, et enfin termine avec un ";" optionnel.

L'exemple suivant définit les chaînes de caractères possibles que l'entité "%fontstyle;" peut prendre.

<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">

Les options que peut prendre l'entité paramètre doit contenir les autres noms de l'entité paramètre. Ces noms sont développés de façon récursive. Dans l'exemple suivant, l'entité paramètre "%inline;" est définie pour inclure les entités paramètres "%fontstyle;", "%phrase;", "%special;" et "%formctrl;".

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

Vous rencontrerez fréquemment deux entités de DTD dans la DTD HTML: "%block;" "%inline;". Ils sont utilisés dans le modèle de contenu des éléments de bloc et internes, respectivement (definis dans la section sur la structure globale d'un document HTML).

3.3.3 Déclarations d'élément

La majeure partie de la DTD HTML consiste en la déclaration des éléments types et de leurs attributs. le mot clé <!ELEMENT commence une déclaration et le caractère > l'achève. Entre ceux-ci sont spécifiés :

  1. Le nom de l'élément.
  2. Si la balise de fin de l'élément est optionnelle les deux tirets qui apparaissent après le nom de l'élément signifie que les balises de début et de fin sont obligatoires. Un tiret suivi par la lettre "O" indique que la balise de fin peut-être omise. Une paire de lettres "O" indique que les balises de début et de fin peuvent être omises.
  3. Le contenu de l'élément, si nécessaire. Le contenu autorisé pour un élément est appelé son contenu modèle. Les éléments types qui sont créés pour ne pas avoir de contenu sont appelés éléments vides. Le contenu modèle pour ce type d'éléments est déclaré par le mot clé "EMPTY".

Dans cet exemple :

    <!ELEMENT UL - - (LI)+>

Cet exemple illustre la déclaration d'un élément type vide :

    <!ELEMENT IMG - O EMPTY>

Définitions des modèles de contenu 

Le modèle de contenu décrit ce qui doit être contenu dans l'occurence d'un élément type. Les définitions de modèle de contenu doivent être incluses :

Le modèle de contenu d'un élément est défini par la syntaxe suivante :

( ... )
Delimite un groupe.
A | B
Soit A ou B, mais pas les deux.
A , B
A et B, dans cet ordre.
A & B
A et B, quelque soit l'ordre.
A?
A présent zéro ou une fois.
A*
A présent zero ou plusieurs fois.
A+
A présent une ou plusieurs fois.

Quelques exemples tirés de la DTD HTML :

   <!ELEMENT UL - - (LI)+>

L'élément ULdoit contenir un ou plusieurs éléments LI.

   <!ELEMENT DL    - - (DT|DD)+>

L'élément DL doit contenir un ou plusieurs éléments DT ou DD quelqu'en soit l'ordre.

   <!ELEMENT OPTION - O (#PCDATA)>

L'élément OPTION ne doit contenir que du texte et des entités, tel que &amp; -- ceci est défini par le type de données SGML #PCDATA.

Quelques types d'éléments HTML utilisent une option SGML aditionnelle pour exclure des éléments du modèle de contenu. Les éléments exclus sont précédés par un tiret. Les exclusions explicites sont prioritaires sur les éléments permis.

Dans cet exemple, Le -(A) signifie que l'élément A ne peut pas apparaître dans un autre élément A (c.à.d., Les ancres ne peuvent être mises en abymes).

   <!ELEMENT A - - (%inline;)* -(A)>

Notez que le le type de l'élément A fait partie de l'entité paramètre DTD "%inline;", mais exclu explicitement par -(A).

De la même manière, la déclaration de l'élément type suivant pour FORM interdit les formulaires mis en abyme :

   <!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>

3.3.4 Déclarations d'attribut

Le mot clé <!ATTLIST débute la déclaration des attributs que l'élément peut prendre. Le nom de l'élément en question, une liste des définitions des attributs et un > final suivent. Chaque définition d'attribut est un triplet qui comprend :

Dans cette exemple, le nom de l'attribut est défini pour l'élément MAP. L'attribut est optionnel pour cet élément.

<!ATTLIST MAP
  name        CDATA     #IMPLIED
  >

Le type des valeurs permises pour l'attribut est donné par CDATA, type de donnée SGML. CDATA est un texte qui peut contenir des caractères diacritiques.

Pour plus d'information à propos de "CDATA", "NAME", "ID", et autres types de données, Consultez la section sur les types de données HTML.

Les exemples suivants illustrent quelques définitions d'attribut :

rowspan     NUMBER     1         -- number of rows spanned by cell --
http-equiv  NAME       #IMPLIED  -- HTTP response header name  --
id          ID         #IMPLIED  -- document-wide unique id --
valign      (top|middle|bottom|baseline) #IMPLIED

L'attribut rowspan requiert des valeurs de type NUMBER. La valeur de défaut est définie explicitement par "1". L'attribut optionnel http-equiv requiert une valeur de type NAME. optionnel id requiert des valeurs de type ID. L'attribut optionnel valign est contraint de prendre les valeurs de l'ensemble {top, middle, bottom, baseline}.

Les entités DTD dans les définitions d'attribut 

Les défintions d'attributs peuvent également contenir des références aux entités paramètre.

Dans cet exemple, on voit que la liste des défintiions des attributs pour l'élément LINK commence avec l'entité paramère "%attrs;".

<!ELEMENT LINK - O EMPTY               -- a media-independent link -->
<!ATTLIST LINK
  %attrs;                              -- %coreattrs, %i18n, %events --
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  href        %URI;          #IMPLIED  -- URI for linked resource --
  hreflang    %LanguageCode; #IMPLIED  -- language code --
  type        %ContentType;  #IMPLIED  -- advisory content type --
  rel         %LinkTypes;    #IMPLIED  -- forward link types --
  rev         %LinkTypes;    #IMPLIED  -- reverse link types --
  media       %MediaDesc;    #IMPLIED  -- for rendering on these media --
  >

Start tag: required, End tag: forbidden

L'entité paramètre "%attrs;" est définie comme suit :

<!ENTITY % attrs "%coreattrs; %i18n; %events;">

L'entité paramètre "%coreattrs;" dans la définition de "%attrs;" se développe ainsi :

<!ENTITY % coreattrs
 "id          ID             #IMPLIED  -- document-wide unique id --
  class       CDATA          #IMPLIED  -- space separated list of classes --
  style       %StyleSheet;   #IMPLIED  -- associated style info --
  title       %Text;         #IMPLIED  -- advisory title/amplification --"
  >

L'entité paramètre "%attrs;" a été définie pour des raisons pratiques depuis que ces attributs sont définis pour la plupart des éléments de type HTML

Egalement, la DTD définit l'entité paramètre "%URI;" en se développant en chaîne "CDATA".

<!ENTITY % URI "CDATA"
    -- a Uniform Resource Identifier,
       see [URI]
    -->

Comme cet exemple l'illustre, l'entité paramètre "%URI;" fournit aux lecteurs de la DTD plus d'information que le type des données attendues pour un attribut. Des entités semblabes ont été définies pour "%Color;", "%Charset;", "%Length;", "%Pixels;", etc.

Attributs booléens 

Certains attributs jouent le rôle de variables booléennes (c.à.d., l'attribut selectionné pour l'élément OPTION). Leur présence dans la balise de début d'u élément implique que la valeur de l'attribut est "true" (vrai). L'absence implique que la valeur est "false" (faux).

Les attributs booléens doivent normallement prendre une valeur unique : le nom de l'attribut lui-même ( c.à.d., selected="selected").

Cette exemple définit l'attribut selected comme un attribut booléen.

selected     (selected)  #IMPLIED  -- reduced inter-item spacing --

L'attribut est "true" en raison de sa présence dans la balise de début de l'élément :

<OPTION selected="selected">
...contenus...
<OPTION>

En HTML, les attributs booléens peuvent apparaître dans une forme réduite -- la valeur de l'attribut apparaît seule dans la balise de début de l'élément. Ainsi, selected peut-être écrit de la façon suivante :

<OPTION selected>

à la place de :

<OPTION selected="selected">

Les auteurs doivent être conscients que beaucoup d'agents utilisateurs ne reconnaissent que la forme que réduite des attributs booléens et non la forme complète. attributes et not the full form.