3.3. La déclaration DOCTYPE
Précédent | Chapitre 3. Introduction à SGML | Suivant

## 3.3. La déclaration DOCTYPE

Au début de chaque document que vous rédigez, vous devez préciser le nom de la DTD à laquelle le document se conforme. Cela pour que les analyseurs syntaxiques SGML la connaissent et puissent valider le document.

Cette information est habituellement donnée sur une seule ligne, dans la déclaration DOCTYPE.

Voici une déclaration typique pour un document conforme à la version 4.0 de la DTD HTML :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">

Cette ligne a plusieurs composants distincts :

`<!`

  C'est l'indicateur qui dit que c'est une déclaration SGML. Cette ligne définit le type de document.

`DOCTYPE`

  Précise que c'est la déclaration SGML du type de document.

`html`

  Définit le premier élément qui apparaîtra dans le document.

`PUBLIC "-//W3C//DTD HTML 4.0//EN"`

  Donne le Formal Public Identifier (FPI) - Identifiant Public Officiel - de la DTD à laquelle le document se conforme.

  `PUBLIC` n'appartient pas au FPI, mais indique au processeur SGML comment trouver la DTD référencée par le FPI. Les autres façons de dire à l'analyseur SGML comment trouver la DTD sont données plus loin.

`>`

  Retour au document.

### 3.3.1. Formal Public Identifiers (FPIs) - Identifiants Publics Officiels

### Note:

Vous n'avez pas besoin de connaître ce qui suit, mais ce n'est n'est pas inutile, et cela peut vous aider à résoudre des problèmes, si votre processeur SGML ne trouve pas la DTD que vous utilisez.

Les FPIs doivent respecter une syntaxe précise. La voici :

"`Propriétaire`//`Mot-Clé` `Description`//`Langue`"

`Propriétaire`

  Indique qui détient le FPI.

  Si la chaîne de caractères commence par “ISO”, c'est un FPI ISO. Par exemple, le FPI `"ISO 8879:1986//ENTITIES Greek Symbols//EN"` donne `ISO 8879:1986` comme propriétaire du jeu d'entités pour les lettres grecques. ISO 8879:1986 est le numéro ISO du standard SGML.

  Sinon, cette chaîne sera de la forme `-//`Propriétaire`` ou `+//`Propriétaire`` (remarquez que la seule différence est le `+` ou `-` du début).

  Si la chaîne commence par un `-`, c'est que le propriétaire n'est pas enregistré, il l'est si elle commence par un `+`.

  L'ISO 9070:1991 définit comment sont générés les noms enregistrés ; ils peuvent dériver du numéro d'une publication ISO, d'un code ISBN ou d'un code d'organisation affecté selon l'ISO 6523. De plus, il pourrait y avoir une autorité d'enregistrement pour l'affectation de ces noms. Le conseil ISO a délégué cela à l'American National Standards Institute (ANSI) - Institut National Américain des Standards.

  Comme le Projet FreeBSD n'est pas enregistré, la chaîne utilisée est `-//FreeBSD`. Comme vous pouvez vous en rendre compte, le W3C n'est pas non plus un propriétaire enregistré.

`Mot-Clé`

  Il y a plusieurs mots-clés qui définissent le type d'information dans le fichier. Les mots-clés les plus courants sont : `DTD`, `ELEMENT`, `ENTITIES` et `TEXT`. `DTD` ne sert que pour les DTD, `ELEMENT` sert habituellement pour les extraits de DTD qui ne contiennent que des entités ou des déclarations d'éléments. `TEXT` sert pour le contenu SGML (texte et marques).

`Description`

  La description que vous souhaitez donner du contenu du fichier. Cela peut inclure des numéros de version et n'importe quel texte court qui ait un sens et soit unique au système SGML.

`Langue`

  C'est une code ISO de deux caractères qui identifie la langue utilisée dans le fichier. Pour l'anglais, c'est `EN`.

#### 3.3.1.1. Fichiers `catalog`

Si vous avez utilisé la syntaxe décrite plus haut et essayé d'utiliser un processeur SGML pour traiter votre document, il aura besoin de convertir le FPI en un nom de fichier sur votre ordinateur qui décrive la DTD.

Vous pouvez pour cela vous servir d'un fichier catalogue (habituellement appelé `catalog`). Il contient des lignes qui donnent les correspondances entre FPIs et noms de fichiers. Par exemple, s'il y a la ligne :

PUBLIC "-//W3C//DTD HTML 4.0//EN" "4.0/strict.dtd"

le processeur SGML cherchera la DTD dans le fichier `strict.dtd` du sous-répertoire `4.0` où se trouve le fichier `catalog` qui comporte cette ligne.

Jettez un oeil au fichier `/usr/local/share/xml/html/catalog`. C'est le fichier catalogue pour les DTDs HTML qui ont été installées par le logiciel porté `textproc/docproj`.

#### 3.3.1.2. `SGML_CATALOG_FILES`

Pour trouver un fichier `catalog`, votre processeur SGML doit savoir où chercher. La plupart d'entre eux ont des paramètres de leur ligne de commande pour donner le chemin d'accès à un ou plusieurs catalogues.

Vous pouvez par ailleurs définir `SGML_CATALOG_FILES` pour désigner ces fichiers. Cette variable d'environnement doit contenir une liste de fichiers catalogues (donnés par leurs chemins d'accès complets) séparés par des points-virgules.

Habituellement, vous incluerez les fichiers suivants :

- `/usr/local/share/xml/docbook/catalog`

- `/usr/local/share/xml/html/catalog`

- `/usr/local/share/xml/iso8879/catalog`

- `/usr/local/share/xml/jade/catalog`

### 3.3.2. Alternatives aux FPIs

Au lieu d'utiliser un FPI pour préciser la DTD utilisée (et donc le fichier qui contient la DTD), il est possible de donner explicitement le nom du fichier.

La syntaxe pour le faire est légèrement différente :

<!DOCTYPE html SYSTEM "/path/to/file.dtd">

Le mot-clé `SYSTEM` indique que le processeur SGML doit localiser le fichier d'une façon qui dépend du système. Cela signifie habituellement (mais pas toujours) que la DTD sera définie par un nom de fichier.

Il est préférable d'utiliser des FPIs pour des raisons de portabilité. Vous ne voulez pas livrer un exemplaire de la DTD avec votre document, et si vous avez utilisé l'identifiant `SYSTEM`, il faudra que chacun ait ses DTDs aux mêmes endroits.

Précédent | Niveau supérieur | Suivant
3.2. Eléments, marques et attributs | Sommaire | 3.4. Revenir au SGML

Ce document, ainsi que d'autres peut être téléchargé sur ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.