eXtensible Markup Language


Introduction

Qu'est ce que XML ?

XML est un langage de marquage constitué de balises tout comme HTML. Il se situe à mi-chemin entre SGML - le langage de référence en milieu professionnel pour la gestion électronique des documents (GED) - et HTML que l'on rencontre tous les jours sur l'internet.

Tout comme son cousin HTML, XML est directement issu de SGML. Cependant, il s'en rapproche davantage dans le sens où l'ont peut dire que XML est une forme simplifiée de SGML, car ce dernier est trop complexe pour s'afficher sur le WEB.

XML est l'acronyme de eXtensible Markup Language, cela signifie que XML n'est pas un langage sémantiquement figé comme peut l'être HTML mais au contraire un langage ouvert. C'est à dire que l'auteur d'un document XML peut créer ses propres balises, par exemple : la balise <INSTRUMENT> peut être définie pour désigner un instrument de musique. Cela s'écrirait de la façon suivante :

<INSTRUMENT>Guitare</INSTRUMENT>

Dans un document XML, on s'efforcera de ne pas tenir compte de la mise en forme mais seulement du contenu de celui-ci; la mise en forme étant réalisée par la feuille de style.

Dès lors, ont peut imaginer d'innombrables possibilités que nous offre un tel langage; par exemple dans l'échange de données informatisées (EDI). Prenons par exemple le secteur automobile, on pourrait employer les balises suivantes pour décrire un véhicule: <TYPE MINE>, <CHASSIS>, <MOTEUR>, <COULEUR>, ...

Les données pouvant être structurées, comme on définirait un enregistrement Moteur dans tout langage de programmation ou bien dans une base de données, en XML on écrirait :

<MOTEUR>
        <PUISSANCE>......</PUISSANCE>
        <CYLINDREE>......</CYLINDREE>
        <NB SOUPAPES>......</NB SOUPAPES>
</MOTEUR>

Et puisque dans un document XML l'information pertinente est marquée par des balises portant des noms significatifs, il sera plus facile de retrouver l'information en s'appuyant sur le nom de ces balises pour effectuer des recherches.
En effet, en HTML on ne sait faire actuellement  que de la  recherche plein-texte (full-text), ce qui la plupart du temps nous retrouve beaucoup de documents qui n'ont rien à voir avec notre recherche de départ, c'est ce que l'on appelle le bruit.

Dans notre exemple :

Origine et buts

XML a été développé par le XML Working Group (originellement connu comme le SGML Editorial Review Board) formé sous les auspices du World Wide Web Consortium (W3C) en 1996. Il était présidé par Jon Bosak de Sun Microsystems avec la participation active du XML Special Interest Group (anciennement SGML Working Group) également organisé par le W3C.

Les objectifs de conception de XML sont les suivants :

  1. XML sera utilisable sans difficulté sur Internet ;
  2. XML soutiendra une grande variété d'applications ;
  3. XML sera compatible avec SGML ;
  4. Il sera facile d'écrire des programmes traitant les documents XML ;
  5. Le nombre d'options dans XML doit être réduit au minimum, idéalement à aucune ;
  6. Les documents XML devraient être lisibles par l'homme et raisonnablement clairs ;
  7. La conception de XML devrait être préparée rapidement ;
  8. La conception de XML sera formelle et concise ;
  9. Il sera facile de créer des documents XML ;
  10. La concision dans le balisage de XML est de peu d'importance.

Remarque : Ceci est un extrait des spécifications officielles, bien entendu cela reste très théorique car aujourd'hui nous en sommes encore très loin. Vous vous apercevrez par vous-même que l'apprentissage d'XML est un travail de longue haleine et que les outils de création sont encore rares. D'ailleurs, tous les exemples de code XML que vous pourrez trouver sur ce site ont été réalisés avec le bon vieux Notepad !
Cela dit, je ne cherche pas à vous décourager car comme vous le savez, pour maîtriser tout outil aussi puissant qu'il soit, il faut un certain  temps...

Qu'est ce que SGML ?

SGML (Standard Generalized Markup Language) (ISO 8879) est une norme internationale adoptée dès 1986 pour apporter une réponse à des problèmes que l'expérience vous a appris à bien connaître :

Vous trouverez une FAQ à l'adresse suivante : http://lamp.man.deakin.edu.au/sgml/sgmlfaq.txt

SGML dissocie la structure d'un texte de sa présentation physique. A ce titre, il permet de mieux hiérarchiser et conserver vos données.

SGML repose sur le principe du marquage normalisé des éléments qui définissent la structure logique d'un texte, c'est à dire tous les éléments extérieurs au contenu d'un texte qui concourent à sa structure (ex : un titre, une liste...). Cette norme ISO est ainsi fondée sur la distinction fondamentale entre contenu et présentation physique.
Imaginons un ouvrage qui porte le titre Le langage XML.
On décrira ce titre avec le symbolisme suivant :

<titre>Le langage XML</titre>

Comme vous pouvez le constater, tous les attributs typographiques sont écartés de cette représentation. Le texte est systématiquement marqué par une chaîne de balises entre crochets qui énoncent seulement que l’élément structurel <titre> est le titre de l’ouvrage.
En généralisant cet exemple, chaque élément de texte (qu'il s'agisse d'un titre, d'un paragraphe...) est ainsi délimité par des balises, conférant une structure propre au document. Ainsi, <titre> sera utilisé pour annoncer un titre qui sera suivi de </titre> (fin de titre). Il en va de même pour <sous-titre>, <auteur>, etc. Il va de soi que des éditeurs et des convertisseurs se chargent de la mise en place de ces balises. Quant à la représentation typographique, elle est laissée à l’outil de mise en page qui en donne une forme physique.

SGML permet de distinguer la structure d'un texte de son contenu. Cette distinction est fondamentale pour comprendre certains des apports majeurs de SGML :

Est ce que XML remplace HTML ?

Bien évidement un langage quel qu'il soit ne peut s'imposer du jour au lendemain, cependant à terme, XML est appelé à succéder dignement à HTML.
Néanmoins, lorsque l'on se rend compte qu'il aura fallu environ 2 ans pour que la norme HTML 4.0 soit correctement implémentée dans les navigateurs du marché, on peut se dire que HTML a encore du temps devant lui. D'autant plus que beaucoup d'entreprises ou de particuliers utilisent encore des navigateurs comme Microsoft Internet Explorer ou Netscape Navigator dans leur version 3.0.

Cependant, les plus optimistes d'entre nous diront que XML va révolutionner l'internet, quant aux plus pessimistes, ils diront que XML est une simple évolution pour le WEB.
En étant réaliste, on ne peut envisager à l'heure actuelle d'architecturer tout un système d'information ou bien de construire un site internet entièrement en XML. D'une part, on ne dispose pas encore de tous les outils nécessaires à la conception de documents, d'autre part toutes les normes qui s'articulent autour de XML et notamment les spécifications concernant les feuilles de style ne sont pas encore achevées par le W3C.

Et pour finir, il n'existe à l'heure actuelle que Microsoft Internet Explorer 5.0 qui soit capable de comprendre le XML. A noter cependant que Mozilla - nom de code du prochain Netscape Navigator 5.0 - en version Bêta actuellement supportera aussi ce merveilleux langage.

Toutefois, on peut vraisemblablement imaginer que d'ici d'une à deux années XML sera réellement utilisé dans de bonnes conditions, ainsi XML pourra pleinement montrer toute sa puissance

Concepts

Définition d'un document

Afin de représenter un document en XML, il est nécessaire de posséder :

La DTD est utilisée pour décrire la structure et le type des balises utilisés dans la feuille XML, ce qui bien évidemment donne une structure à notre document. A noter que son emploi est facultatif.

Dès lors, on dira qu'un document XML est "valide" (valid) s'il possède une DTD, et s'il n'en possède pas on utilisera le terme "bien formé" (well formed). Un document dit bien formé doit se conformer aux règles de base de XML. En corollaire, un document valide (accompagné de sa DTD) est obligatoirement bien formé.

Concrètement comme en XML on peut créer toutes sortes de balises, et si l'on veut que tous nos documents exploitent la même structure, il convient de parler le même langage. Ceci est donc le rôle de la DTD, que de définir toutes les balises que l'on pourra utiliser pour créer des documents.

En reprenant l'exemple de l'automobile, si dans notre DTD on a définit l'élément MOTEUR et que dans notre feuille XML on utilise l'élément MOTOR, alors il y aura une erreur de provoquée lors de l'interprétation du document par le navigateur.

Le document bien formé

Un document bien formé doit répondre aux critères suivants:

Cette liste n'est bien sûr pas exhaustive, le mieux étant consulter les spécifications à l'adresse : http://www.w3.org/xml

En résumé, pour produire un document XML, il faut :

Document

Par abus de langage (à mon sens) on emploie le terme de document XML pour désigner ce que j'ai volontairement appelé la feuille XML. Je pense qu'il aurait mieux valu nommer document XML, le document accompagné de sa feuille de style; mais cela n'engage que moi.

Exemple de code XML

La structure de base est très similaire à celle de HTML. Les feuilles XML peuvent être très simple et vous pouvez créer vos propres balises ou bien utiliser celles prédéfinies dans une DTD.

Notre exemple ne possède pas de DTD :

<?xml version="1.0" standalone="yes"?>
<conversation>
  <greeting>Hello, world!</greeting>
  <response>Stop the planet, I want to get off!</response>
</conversation>


Structure d'un document

Une feuille XML est composée de la façon suivante :


Le prologue

La première chose à indiquer est le type de document que l'on crée ainsi qu'il faut spécifier s'il existe une DTD associée à ce document.

Cela s'écrit sous la forme :

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>

Nous venons de déclarer un document du type XML dans sa version actuelle 1.0 qui utilise un encodage de type UTF-8 (que nous verrons un peu plus loin) et qui ne possède pas de DTD.

Remarque : il faut bien faire attention à la casse, cette déclaration doit être écrite en minuscule sinon cela provoquera une erreur lors de l'interprétation du document.

Si notre document possédait une DTD, on aurait écrit :

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!DOCTYPE exemple SYSTEM './exemple.dtd' >

Remarque: On rencontre aussi

<?xml version='1.0'?>

les autres attributs prennent alors les valeurs par défaut. A savoir encoding = 'UTF-8' et standalone='yes' .


Les différents types de codage

XML utilise les jeux de caractères de la norme ISO 10646 ou Unicode, pour plus d'informations vous trouverez la référence Unicode à l'adresse suivante : http://www.unicode.org

Les plus fréquemment utilisés sont :


Structure d'un document

C'est à l'intérieur la feuille XML que sera stocké tout le contenu textuel d'un document ainsi que des liens vers des images s'il en possède, par le terme document j'entend par là une documentation technique par exemple.

Tout document possède un contenu hiérarchisé (1er chapitre, 1ère partie, ...) et peut donc être représenté sous forme d'arbre.

Arborescence

Ceci est donc la structure typique d'une feuille XML à laquelle on exclut toutes les balises de mise en page que l'on trouve en HTML. La présentation physique du document sera réalisée par la feuille de style.

Définition de type de document

DTD est l'acronyme de Document Type Definition ou en français Définition de type de document. Son rôle va être de définir la structure interne de notre document, c'est à dire qu'il va falloir définir les balises que l'on va utiliser.

Il est à noter que l'utilisation d'une DTD est facultative. Dans le jargon XML, un document qui n'en possède pas est dit bien formé si sa structure est conforme à XML. A l'inverse s'il en utilise une le document sera dit valide.

La DTD peut prendre deux formes :

Ces deux sous-ensembles forment la DTD.

Exemple de document XML avec une déclaration de type de document :

Document avec DTD externe :

<?xml version="1.0"?>
<!DOCTYPE accueil SYSTEM "bonjour.dtd">
<accueil>Bonjour!</accueil>

Document avec DTD interne :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE accueil [
  <!ELEMENT accueil (#PCDATA)>
]>
<accueil>Bonjour!</accueil>

Si les sous-ensembles externes et internes sont utilisés, le sous-ensemble interne est considéré comme se produisant avant le sous-ensemble externe. Ceci a pour effet que les déclarations d'entités et de liste d'attributs du sous-ensemble interne ont priorité sur celles du sous-ensemble externe.

Une déclaration de balisage est :

Les feuilles de style

Les feuilles de style sont une addition récente aux fonctionnalités supportées par les navigateurs Web. Elles constituent l'apport le plus significatif à la mise en page de document électroniques en-ligne, et devraient provoquer d'importants changements dans la façon dont l'information textuelle est publiée sur le Web.

En outre, les créateurs de pages Web qui supportent les feuilles de style ne sont pas légion à l'heure actuelle. Aussi, le texte qui suit suppose que vous ayez déjà quelques connaissances de la programmation HTML "à la main"...

Les feuilles de style ne sont ni plus ni moins que des modèles, qui contrôlent l'aspect d'un document. Le concept est familier aux utilisateurs de traitements de texte. Ainsi, dans un document on distingue les titres, les sous-titres et les paragraphes de corps de texte. Chacun d'entre eux possède un aspect qui lui est propre et facilite la lecture du document, en mettant en évidence sa structuration.

Un résultat identique peut maintenant être obtenu en HTML, en surchargeant les balises HTML comme <H1>, <P>, etc. avec des instructions de mise en page. En XML, on s'efforcera de redéfinir tous les éléments contenus dans la DTD. De cette manière la feuille de style ainsi créée sera applicable à tous les documents qui utiliseront cette même DTD.

Il est notamment possible de contrôler l'indentation des paragraphes, les espacements avant et après, les couleurs du texte (avant et arrière plans), etc. En outre, les propriétés définies peuvent être appliquées à plusieurs pages, qui bénéficient alors d'une présentation commune.

Un peu d'histoire

HTML était avant tout une norme de description de page basée sur SGML. Aussi ne possédait-il au départ qu'un nombre assez réduit d'instructions (ou balises) permettant de structurer les documents. Par exemple, la balise <I> plaçait le texte en italique, la balise <BR> (de l'anglais BReak line) assurait un saut de ligne, etc.

L'explosion du Web a révélé la nécessité de moyens de présentation plus sophistiqués, permettant de mettre à la disposition des utilisateurs des documents de meilleure qualité esthétique. La norme HTML s'est alors progressivement enrichie de nouvelles balises, assurant par exemple des mises en couleur, le changement de police de caractère, etc.

Cependant, cette approche présentait de multiples inconvénients. Tout d'abord, elle mettait en péril le concept même de la NORME HTML, puisque ces balises étaient proposées soit par Netscape, soit par Microsoft, avant même que le W3C ait pu donner son avis sur la question. Ensuite, HTML était initialement composé d'un petit nombre de balises, que cette effervescence menaçait de conduire rapidement à l'explosion. Enfin, le principe des balises n'était pas adapté à la mise en oeuvre de mises en page sophistiquées.

L'apparition des feuilles de styles promet de régler les problèmes évoqués ci-dessus, en facilitant la création et l'harmonisation des pages Web. L'objectif est d'apporter aux designers de pages Web une partie des facilités dont bénéficient depuis longtemps les outils traditionnels de mise en page.

On en distingue 3 types :

A noter qu'il en existe encore d'autres, cependant nous nous intéresseront seulement aux plus répandues et en l'occurrence celles citées ci-dessus.

La DTD

La déclaration de type d'élément

La structure des éléments d'un document XML peut, pour des raisons de validation, être contrainte à l'aide de déclarations de type d'élément et de liste d'attributs. La déclaration de type d'un élément contraint le contenu de cet élément.
Les déclarations de type d'un élément limitent habituellement les types d'élément qui peuvent apparaître comme sous-éléments de celui-ci.

On utilise la notation suivante :

<!ELEMENT NomElément TypeElément>

Voici les différents types d'éléments que l'on peut utiliser :

Exemples de déclarations de type d'élément :

<!ELEMENT br EMPTY>
<!ELEMENT p (#PCDATA|emph)* >
<!ELEMENT %param.nom; %param.contenu; >
<!ELEMENT contenant ANY>

Remarque : Aucun type d'élément ne peut être déclaré plus d'une fois.

La déclaration de liste d'attributs

On utilise des attributs pour associer des couples nom-valeur aux éléments. Les spécifications d'attribut ne peuvent apparaître qu'au sein de balises ouvrantes et de balises d'élément vide. Les déclarations de liste d'attributs peuvent servir à :

Les déclarations de liste d'attributs précisent le nom, le type de données et la valeur par défaut de chaque attribut associé à un type d'élément donné :

<!ATTLIST NomListeAttribut 
           Nom  TypeAttribut   ValeurParDéfaut>

Les types d'attribut XML sont de trois genres:

Le type chaîne peut prendre comme valeur toute chaîne littérale; les types atomiques possèdent différentes contraintes lexicales et sémantiques.

Exemples de déclarations de liste d'attributs :

<!ATTLIST défterme
          ident   ID      #REQUIRED
          nom   CDATA   #IMPLIED>
<!ATTLIST liste
          type    (àpuces|ordonnée|glossaire)  "ordonnée">
<!ATTLIST formulaire
          méthode CDATA   #FIXED "ENVOI">

La déclaration d'entités

Un document XML peut être formé d'une ou plusieurs unités de stockage. Ces unités sont appelées entités ; elles ont toutes du contenu et sont toutes identifiées par un nom, à l'exception de l'entité document et du sous-ensemble externe de la DTD. Chaque document XML possède une entité appelée l'entité document qui sert de point de départ pour le processeur XML et qui peut contenir le document au complet.

Une entité peut être analysable ou non. Le contenu d'une entité analysable est appelé  texte de remplacement ; ce texte fait partie intégrante du document.

Une entité non-analysable est une ressource dont le contenu n'est pas nécessairement textuel. À chaque entité non-analysable est associée une notation, identifiée par un nom. XML n'impose aucune contrainte au contenu des entités non-analysables, mais exige seulement que les noms des entités et des notations soient mis à la disposition de l'application.

Les entités analysables sont appelées par leur nom au moyen d'un appel d'entité ; le nom des entités non-analysables est donné par la valeur d'un attribut de type ENTITY ou ENTITIES.

Les entités générales sont destinées à être utilisées dans le contenu du document. Les entités paramètres sont des entités analysables destinées à être utilisées dans la DTD. Les appels à ces deux types d'entités sont différents et sont reconnus dans des contextes différents. De plus, les deux types occupent des espaces de noms distincts ; une entité paramètre et une entité générale de même nom sont deux entités distinctes. Dans ce texte, les entités générales sont parfois appelées simplement entités quand il n'y a pas de risque d'ambiguïté.

On déclare les entités de la façon suivante:

entité générale

<!ENTITY  Nom ValeurEntité >

entité paramètre

<!ENTITY % Nom ValeurEntité >

Les entités peuvent être soit internes soit externes.

Exemple de déclaration d'entité interne :

<!ENTITY Avancement "Ouf ! J'ai presque terminé cette partie.">

Exemples de déclaration d'entité externe :

<!ENTITY écoutille-ouverte
         SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY écoutille-ouverte
         PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
         "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY image-écoutille
         SYSTEM "../grafix/OpenHatch.gif"
         NDATA gif >

La déclaration de notation

Une notation identifie par un nom le format d'une entité non-analysable, le format d'un élément muni d'un attribut notation ou l'application cible d'une instruction de traitement.

Une déclaration de notation donne un nom à la notation, nom servant dans les déclarations d'entité et de liste d'attributs et dans les stipulations d'attribut, ainsi qu'un identificateur externe qui peut permettre à un processeur XML ou à son application cliente de repérer un assistant capable de traiter des données en cette notation.

<!NOTATION NomNotation SYSTEM Valeur>
              ou
<!NOTATION NomNotation PUBLIC Valeur>

Exemple:

<!NOTATION images SYSTEM "/usr/local/ressources/images">

<!ENTITY voiture SYSTEM "./3d/jaguar.jpg" NDATA images>

Appel de caractères

Un appel de caractère fait référence à un caractère particulier du jeu de caractères ISO/CEI 10646, pour afficher par exemple un caractère inaccessible par le biais du clavier.

Si un appel de caractère commence par « &#x », les chiffres et lettres jusqu'au terminateur ";" constituent une représentation hexadécimale de la position de code du caractère dans l'ISO/CEI 10646.
S'il commence seulement par « &# », les chiffres jusqu'au terminateur ";" constituent une représentation décimale de cette position de code.

Exemple:

&#233;  -> Appel du caractère é en notation décimale
&#xe9;  -> Appel du caractère é en notation hexadécimale

Appel d'entités

Un appel d'entité fonctionne de la même façon qu'un appel de caractères, il fait référence au contenu d'une entité nommée déclarée dans la DTD.
Les appels à des entités générales analysables utilisent l'esperluette « & » et le point-virgule ";" comme délimiteurs.
Les appels d'entités paramètres utilisent le symbole pour cent « % » et le point-virgule ";" comme délimiteurs.

Comme un exemple vaut mieux qu'un long discours :

Appelons par exemple ce fichier accueil.xml

<?xml version="1.0"?>
<!DOCTYPE accueil SYSTEM "bonjour.dtd">

<accueil>&livre;</accueil>

Et celui là bonjour.dtd

<!ELEMENT accueil (#PCDATA)>
<!ENTITY % ed "&#xc9;ditions Gallimard" >
<!ENTITY droits "Tous droits r&#233;serv&#233;s" >
<!ENTITY livre "La Peste : Albert Camus, &#xA9; 1947 %ed;. &droits;" >

Voici le résultat :

La Peste : Albert Camus, © 1947 Éditions Gallimard . Tous droits réservés

Feuilles de style

DSSSL (Document Style Semantics and Specification Language)

Le format DSSSL est utilisé pour le rendu des documents SGML.
Il permet :

  1. de formater les documents pour l'affichage (langage de style)
  2. de transformer les documents : par exemple pour générer la table des matières (langage de transformation)
  3. l'extraction de données en considérant le document comme une base de données (langage d'extraction ou Query Language)

Si vous voulez tout savoir sur SGML/DSSSL, visitez http://heuss.techfak.uni-bielefeld.de/www/mreinsch/dsssl. Le site est en anglais mais vaut vraiment le détour.

Voici un petit exemple de SGML avec une feuille de style DSSSL :

Petit document avec sa DTD
<!DOCTYPE HTMLLite [
<!ELEMENT HTMLLite O O (H1|P)* >
<!ELEMENT (H1|P) - - (#PCDATA|EM|STRONG)*>
<!ELEMENT (EM|STRONG) - - (#PCDATA)>
]>
<HTMLLite>
<H1>Ceci est le titre</H1>
<P>Ceci est du texte</P>
<P>Ceci est en <em>italique</em></P>
<P>Ceci est en <strong>gras</strong></P>
</HTMLLite>
Feuille de style associée
<!DOCTYPE style-sheet 
	system "style-sheet.dtd" >

(element HTMLLite 
	(make simple-page-sequence))

(element H1
  (make paragraph
        font-family-name: 
		"Times New Roman"
        font-weight: 'bold
        font-size: 20pt
        line-spacing: 22pt
        space-before: 15pt
        space-after: 10pt
        start-indent: 6pt
        first-line-start-indent: -6pt
        keep-with-next?: #t))

(element P (make paragraph       
	font-family-name: 
		"Times New Roman"
        font-size: 12pt
	line-spacing: 13.2pt
	space-before: 6pt
	start-indent: 6pt       
quadding: 'start))

(element EM (make sequence
    font-posture: 'italic))

(element STRONG (make sequence
    font-weight: 'bold))
Voici le spectaculaire résultat

  Ceci est le titre

Ceci est du texte

Ceci est en italique

Ceci est en gras

Veuillez noter au passage que la DTD est intégrée au document, en SGML elle est obligatoire.

Cascading Style Sheets

Introduction

Les Cascading Style Sheets ou Feuilles de Styles en Cascade ont été initialement conçues pour le langage HTML. La première version du standard, dite CSS niveau 1 (CSS1), a été publiée en 1996.

En mai 1998, le W3 Consortium a publié une nouvelle version, dite CSS niveau 2 (CSS2). Celle-ci introduit des possibilités nouvelles par rapport à CSS-1, notamment la notion de type de média qui donne la possibilité de spécifier la mise en page d'un document en vue de son affichage sur écran, de son impression sur papier, ou d'indiquer les conditions de sa réalisation par synthèse vocale ou sur des terminaux braille.

CSS-1 et CSS-2 s'appliquent parfaitement bien à XML.

Ce nom barbare signifie simplement que les instructions de mise en page sont utilisées par ordre d'apparition, et que les surcharges sont possibles. Par exemple, si un style A définit une police Arial et une couleur bleue, on peut dans le document demander un style A avec une couleur rouge, qui remplacera temporairement le bleu dans une portion de document.

Les spécifications complètes se trouvent à l'adresse suivante http://www.w3c.org/TR/CSS

 

Implémentation

L'implémentation des feuilles de styles en cascade peut se faire de plusieurs manières :

Cette seconde solution est celle qui a été retenue pour l'utilisation avec XML, et c'est la plus commode. Son principal avantage étant sa réutilisation pour d'autres document. Après tout pourquoi se fatiguer !

Cela s'écrit de la façon suivante :

<?xml version='1.0'?>
<?xml-stylesheet href="FeuilleDeStyle.css" type="text/css" ?>

 

Concepts de base

Il est facile de concevoir des feuilles de style simples. Cependant il est nécessaire de connaître un minimum la programmation HTML/XML "à la main".
Par exemple pour définir la couleur bleue à l'élément (ou balise) H1, on écrira :

H1 { color: blue }


La règle de style

Une règle de style se compose d'un sélecteur qui indique l'élément auquel elle s'applique, et d'une ou de plusieurs propriétés ainsi que leur valeur respective. Le couple propriété: valeur forme ce que l'on appelle la déclaration.

sélecteur {propriété1: valeur ; propriété2: valeur }

Notre exemple se décompose donc ainsi :

Règle de style


Le groupage

Afin de réduire la taille d'une feuille de style et d'en accroître la lisibilité, on peut regrouper les sélecteurs en les séparant par une virgule.

H1, H2, H3 { font-family: arial }

De la même façon on peut regrouper les déclarations.

H1 {
  font-weight: bold;
  font-size: 12pt;
  line-height: 14pt;
  font-family: arial;
  font-variant: normal;
  font-style: normal;
}

De plus, certaines propriétés peuvent avoir leur propre groupement de syntaxe. L'exemple ci-dessous est identique à celui présenté précédemment.

H1 { font: bold 12pt/14pt arial }


Héritage

Dans le premier exemple, nous avons spécifié la couleur bleue à l'élément H1. Supposons maintenant que nous avons un élément en italique à l'intérieur de celle-ci.

<H1>Le titre d'un document <EM>est</EM> très important !</H1>

Si aucune couleur n'a été spécifiée pour l'élément EM, le mot en italique "est" héritera automatiquement de la couleur de son élément parent (H1), soit bleue pour notre exemple. Il en va également de même pour toutes les autres propriétés à savoir font-family, font-size, etc...

Pour définir un style "par défaut" pour tout un document il suffit de définir l'élément parent à tous les autres - c'est ce qu'on appelle aussi couramment élément racine - soit en HTML, l'élément <BODY>. En XML, je vous laisse imaginer le nom de cet élément.

exemple :

BODY {
      color : black;
      background: white;
      font-style: arial;
}


Sélecteur de classe

Afin d'accroître le contrôle de granularité sur les éléments, un nouvel attribut a été ajouté à HTML : 'CLASS'. Tous les éléments contenus dans l'élément racine peuvent être regroupés par classe. Ces classes seront définies dans la feuille de style.

<HTML>
<HEAD>
  <TITLE>Titre</TITLE>
  <STYLE TYPE="text/css">
    H1.citation { font-style: italic; font-weight: bold }
  </STYLE>
</HEAD>
<BODY>
  <H1 CLASS=citation>La vie est trop courte pour se faire la guerre</H1>
</BODY>
</HTML>

Dans cet exemple, nous avons "surchargé" l'élément H1 tel que défini dans la feuille de style qui est cette fois intégrée à notre document. Cependant nous aurions pu la concevoir à part.

Si nous avions voulu utiliser la classe 'citation' pour tous les éléments

eXtensible Style Language

Introduction

Dans ce chapitre je vais essayer de vous présenter brièvement les concepts de base des feuilles de style XSL en m'appuyant sur le document de travail du W3C de Juillet 1998 car, c'est sur celui-ci que s'appuie en partie Internet Explorer 5.0.

Les informations que vous trouverez dans cette partie différeront peut-être un peu de la norme étant donné que pour faire fonctionner nos exemples avec IE 5.0 il m'a fallu les adapter "à la sauce" Microsoft. A partir de là, il est possible qu'en fonction de l'évolution de la norme et des prochaines versions d'Internet Explorer que nos exemples ne fonctionnent plus. Cependant l'essentiel est de comprendre le principe de fonctionnement de cette nouvelle norme.

Ce que nous essayerons de comprendre :

XSL est particulièrement puissant dans le sens ou l'on peut à partir du document source obtenir un document résultat qui peut être très différent. Par exemple, on pourrait créer des graphiques à partir des valeurs contenues dans le document XML, de même que l'on pourrait bâtir automatiquement un sommaire et un index et tout ça sans modifier le document original.

Généralités

Ce qu'il faut retenir, c'est que pour définir une règle de style il faut :

1. décrire le squelette ou arbre du document (cf. XSLT: XSL Tree)

 

2. décrire le style que l'on veut appliquer à chaque articulation du squelette ou à chaque de noeud de l'arbre

En effet comme nous l'avons vu précédemment un document XML est vu auprès d'un interprèteur XML (ou parser) comme une structure arborescente, un peu à l'image d'une arborescence d'un disque dur.

La règle du patron

A ne pas confondre avec votre "boss", la règle que j'appellerai du "patron" ou template rule si vous préférez décrit la structure de chaque noeud de l'arbre ainsi que le style à appliquer à ce noeud.
Une feuille de style XSL est tout simplement un document XML qui contient tout un ensemble de règles. Ainsi, comme tout bon document XML elle doit suivre les règles de construction afin d'être bien formée.

Cette règle se décompose en deux parties :

  1. on associe un motif (pattern) au patron (template) afin d'identifier chaque noeud de l'arbre
  2. on associe une action, une mise en forme, un formatage ou une transformation au noeud résultant

Un motif sélectionne un noeud (en fait une balise ou élément) en utilisant un ou plusieurs des critères suivants :

Le formatage de l'arbre

Dans l'ancienne spécification, la mise en forme des noeuds de l'arbre se fait en utilisant les balises du jeu d'instruction de HTML; c'est actuellement ce qui fonctionne avec Internet Explorer 5.0.
Dans la nouvelle spécification, la mise en forme ressemble plus à la syntaxe de CSS à laquelle quelques éléments on été scindés pour d'augmenter la précision du formatage des documents.

Voici à quoi ressemble XSL dans sa nouvelle mouture:

<xsl: template match="accueil">

   <fo:block
     font-family="times new roman, serif"
     font-size="12pt"
     text-color="red"
   </fo:block>

</xsl:template>


Exemple

Afin d'être un peu plus concrets voyons un exemple très simple.

Voici le document XML :

<accueil>Bonjour monde !</accueil>

Et voici notre fichier XSL (légèrement simplifié afin de comprendre sa structure) :

<xsl:stylesheet>

  <xsl:template match="/">

    <b><i><xsl:value-of select="accueil"/></i></b>

  </xsl:template>

</xsl:stylesheet>

Voilà le résultat :

Bonjour monde !

Dans cet exemple basique, nous avons sélectionné l'élément racine du document (root) qui est en réalité notre document tout entier en utilisant élément template avec l'attribut match.
Ensuite nous recherchons l'élément ou balise accueil en utilisant le mot clé value-of select que nous encadrons par les balises de mise en forme HTML.

Vous pouvez remarquer que tous les éléments XSL sont préfixés par xsl:, ceci est obligatoire et constitue ce que l'on appelle l'espace de nom ou name-space. Les espaces de nom sont utilisés afin de bien dissocier les différentes syntaxes que l'on peut trouver dans un document XML.

Conclusion

Je ne m'attarderais donc pas plus pour l'instant sur la norme XSL car les spécifications n'étant pas encore achevées tout ce que je pourrai vous décrire aujourd'hui ne sera plus valable demain. En effet, Microsoft Internet Explorer 5.0 étant le seul à implémenter une partie de cette norme s'appuie sur des spécifications ultérieures à celle que l'on connaît actuellement. De plus, XSL est une norme relativement complexe à mettre en oeuvre et assez controversées par les différents acteurs du marché.

Par conséquent, je pense qu'il est encore trop tôt pour utiliser XSL mais qu'il vaut mieux à l'heure actuelle utiliser plutôt XML + CSS qui fonctionnent très bien ensemble et qui sont à peu près conformes aux standards.
De cette manière,  vos documents XML auront toutes les chances de perdurer.