SGML, Standard Generalized Markup Language


Le langage SGML

Définition

Il n'y a pas à proprement parler de langage, mais plutôt un ensemble de règles regroupées dans une norme. Le "langage" SGML est une norme internationale publiée par l'ISO en 1986. SGML définit un format pour la pose de balises dans un texte, et précise la méthode pour décrire la structure d'un document. SGML permet d'établir une structure hiérarchique d'un ensemble de documents et assure que chaque élément du balisage descriptif comme par exemple: "chapître", "titre" ou "paragraphe"soit bien à sa place en occurrence et en séquence dans la structure envisagée du document.

A partir d'une spécification documentaire (la documentation que l'on veut obtenir) SGML produit une grammaire appelée Définition de type de document ou DTD Document type definition. Cette grammaire est utilisée pour certifier que le document produit est conforme à la specification: Immédiatement lorsqu'elle est utilisée par un logiciel de documentation structurée, et en temps différé (après la saisie) pour une écriture manuelle (ou semi-automatique) du document.

Afin de ne pas lasser les lecteurs impatients, on dira que SGML est la base de HTML. Connaître quelques rudiments de SGML favorisera largement la compréhension et le travail de composition des document HTML...

SGML permet une large quantité de structures variées qui peuvent être utilisées pour des catégories de documents différentes telles que documents techniques, catalogues, rapports, lettres etc..

Il s'agit bien de catégories comportant un nombre appréciable de documents de même structure (et de contenus différents). La composition d'un seul document avec SGML constitue un non-sens.

Portabilité

SGML crée des documents portables, indépendants du système et du logiciel d'exploitation. Un même document SGML est lu par un MacIntosh ®, ou un PC, ou un système UNIX ou LINUX. SGML n'utilise qu'un seul jeu de caratères: ASCII American Standard Code for Information Interchange dans sa première page (caractères de code 0 à 127). Voir la liste complète des RFCRequest for Comment et le RFC0020 qui définit l'ASCII Les autres caractères, notamment les caractères accentués en français sont remplacés par des entités codées elles aussi en ASCII. Le prix à payer pour la portabilité est une définition précise que l'on verra plus tard dans la norme.

Fonctionnement

Tout document peut être décomposé en trois composants (couches layers): la structure qui définit l'enchaînement des composants élémentaires (titre, sous-titre, paragraphe..), le contenu représenté par le texte contenu dans les composants élémentaires et le style qui définit l'apparence du contenu dans le document. SGML traite ces composants séparément en maintenant une forte interaction entre le contenu et la structure.

Le système SGML

Un systèms SGML se compose de 3 fichiers principaux: la source (futur document SGML), la déclaration et la DTD (Définition de type de document Document Type definition. Ces trois fichiers peuvent être ou non inclus dans le document, ou expédiés séparémént. La DTD et la déclaration ne demandent qu'en principe qu'une seule transmission car les données contenues dans ces fichiers sont statiques; elles ne changent qu'en cas de changement de la structure du document. La figure ci-contre représente également le Parser qui sera étudié plus loin. Voir la présentation SGML

Les balises simples

Les balises sont constituées d'une suite de caractères ASCII comprenant: <, >, ! O, &, /, |, -, a à z, A à Z et 0 à 9. Une balise commence toujours par le signe < et se termine toujours par le signe >
Exemple: <PARAGRAPHE>

Encadrement d'éléménts

Un élémént de contenu est encadré par deux balises, une ouvrante et une fermante. On les distingue en ajoutant le signe "/" dans la fermante.
Exemple: <PARAGRAPHE> ceci est le texte contenu dans un paragraphe </PARAGRAPHE>.

Les éléments peuvent contenir du texte, et/ou d'autres éléments.Voici un BON Exemple:

<PARAGRAPHE> Ceci est un paragraphe contenant une partie de texte en <GRAS>gras</GRAS></PARAGRAPHE>

Dans ce bon exemple, l'élément de contenu <GRAS> est entièrement contenu dans l'élément<PARAGRAPHE>

Les éléments peuvent contenir du texte, et/ou d'autres éléments.

Voici un MAUVAIS Exemple: <PARAGRAPHE> Ceci est un paragraphe contenant une partie de texte en gras</PARAGRAPHE></GRAS>

Dans le mauvais exemple, l'élément de contenu <GRAS> n'est PAS contenu dans l'élément <PARAGRAPHE>

Le non respect de cette règle constitue 80% des cas d'erreur chez les débutants.

Pendant la saisie du texte SGML,Je conseille de fermer les balises ouvertes dans le traitement de texte ou l'éditeur, AVANT d'insérer du contenu ou d'autres balises et de décaler (indenter) les éléments hiérarchiquement comme le montre la figure ci-contre. Cette règle aura toute son efficacité lors de la rédaction de nombreux éléments imbriqués comme les listes et les tableaux complexes. (Voir exemple HTML ci-dessous)
Liste à créer
  • Item n°1
    • Item n°1-1
    • Item n°1-2
      • Item n°1-2-1
      • Item n°1-2-2
Liste: Code à écrire
<ul><li>Item n°1<ul><li>Item n°1-1</li>
<li>Item n°1-2<ul><li>Item n°1-2-1</li><li>
Item n°1-2-2</li></ul></li></li></ul>
Code saisi
<UL>
	<LI>Item n°1
            <UL>
                <LI>Item n°1-1</LI>
                <LI>Item n°1-2
                    <UL>
                        <LI>Item n°2-1</LI>
                        <LI>Item n°2-2</LI>
                    </UL>
                </LI>
           </UL>
        </LI>
</UL>

Les attributs

Un attribut est contenu dans une balise. Il sert à qualifier la balise en lui donnant ainsi plusieures dimensions. La façon d'écrire les attributs est definie par SGML et la DTD associée au document. Mais on peut dès à présent en voir la règle générale: <[NOM DE LA BALISE][ATTRIBUT1 = VALEUR][ATTRIBUT2 = valeur][</NOM DE LA BALISE>

Exemple:<PARAGRAPHE ALIGN="CENTER"></PARAGRAPHE> ou PARAGRAPHE est le nom de la balise, ALIGN est le nom du seul attribut et CENTER sa valeur. Note: La balise fermante ne répète PAS les attributs.