Alternative Micro Système




Les formats graphiques
Construire un site Web
Protocoles de messagerie
Le protocoles FTP
Le dessin vectoriel
Cours de Basic
Retouche d'images
Le langage XML
Les associations
Le E-commerce
Les virus
La compression
Les cookies
Trouver un job
La comptabilité
Comprendre la paie

Comprendre l'informatique

Introduction au langage XML

Le XML (eXtended Markup Language) est un langage de balisage extensible standardisé par le World Wide Web Consortium (W3C) qui s'occupe également de la standardisation du langage HTML et des feuilles de style entre autres.

Le XML et les technologies associées comme le XSL (eXtended StyleSheet Language) seront certainement dans l'avenir, les successeurs désignés du langage HTML. Effectivement, plusieurs éditeurs de logiciels à l'image de Sun Microsytems ou de Microsoft travaillent activement à l'élaboration de nouveaux outils profitant pleinement des avantages du XML.

Le HTML permet de mettre en forme un document contenant diverses données formatées en titres, en paragraphes, en listes, en tableaux, etc. Ainsi, le langage HTML possède des balises destinées essentiellement à la présentation des données que le développeur lui fournit et en aucun cas, il ne tente de les interpréter.

Par contre, les balises du XML définissent plutôt la sémantique (le sens) des données. C'est-à-dire, que le balisage créé par le développeur donnera une signification précise des données fournies.

Par exemple, une liste de noms et de prénoms d'employés dans une entreprise quelconque sera balisé comme suit par du HTML :

<UL>
  <LI>Jean Bernard</LI>
  <LI>Jean-Yves Dupré<LI>
    ...
</UL>

Alors que dans le XML, le balisage adoptera une autre forme plus adaptée aux données :

<ENTREPRISE>
  <EMPLOYE SECU_SOC="1.80.12.75.120.058/51">
    <NOM>Bernard</NOM>
    <PRENOM>Jean</PRENOM>
  </EMPLOYE>
  <EMPLOYE SECU_SOC="1.51.02.38.032.181/18">
    <NOM>Dupré</NOM>
    <PRENOM>Jean-Yves</PRENOM>
  </EMPLOYE>
    ...
</ENTREPRISE>

Comme nous pouvons le constater, le XML est une structure arborescente dont les noeuds de l'arbre contiennent des données. Dans l'exemple ci-dessus, le noeud principal est <ENTREPRISE> et des noeuds secondaires sont représentés par <EMPLOYE>. On remarquera que ce dernier possède un attribut SECU_SOC qui représente une donnée complémentaire et permet de différencier les noeuds secondaires entre eux.

Dans un navigateur compatible avec cette technologie comme Internet Explorer 5, le résultat à l'affichage est le suivant :


C'est pourquoi, pour afficher correctement ses données à l'instar du HTML, le XML a besoin du langage des feuilles de style, le CSS (Cascading Style Sheet) ou spécifiquement pour lui le XSL (eXtended StyleSheet Language). Le XSL est une grammaire du XML, un processeur de modèle qui transforme une grammaire XML en une autre ou en HTML.

Le prologue
Le prologue XML est une instruction de traîtement servant à identifier la version du langage XML et doit se trouver obligatoirement tout en haut du document XML.
Cette instruction est utilisée également pour déclarer le jeu de caractères d'encodage du document XML.
Enfin, elle permet de spécifier si le document est autonome (standalone="yes") ou s'il dépend, pour son fonctionnement, d'autres fichiers ou de toutes autres ressources externes (standalone="no").
Les instructions XML légales sont les suivantes :
<?xml attributs ?>
<?XML ATTRIBUTS ?>

Ces instructions possèdent trois attributs :

version="numéro-de-version" : indique la version de XML utilisée pour le traîtement du document.
encoding="type-d'encodage" : indique le jeu de caractères employé dans le document.
standalone="yes|no" : indique si le document est autonome ou s'il se réfère à d'autres fichiers.
exemple :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

L'instruction XML spécifie la version 1.0 de XML avec un encodage Unicode compressé et requiert des documents externes.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
La déclaration suivante indique toujours la version 1.0, d'ailleurs la seule, un encodage correspondant au type Latin-1, Europe occidentale et enfin le document est autonome.

Les commentaires
Les commentaires permetttent d'illustrer le code afin de le rendre compréhensible pour une meilleure efficacité dans la maintenance d'un site.
Les commentaires peuvent être placés n'importe où dans un document excepté à l'intérieur des balises. La définition de type de document peut contenir ces commentaires aux endroits autorisés par la grammaire.
Les commentaires dans XML ont la même forme que ceux du HTML.

<!-- commentaire -->

Les informations textuelles contenues à l'intérieur de ce balisage ne sont évidemment pas affichées à l'écran.
En outre, un processeur XML peut permettre à une application de récupérer le texte des commentaires.
La chaîne double trait d'union (--) ne doit pas apparaître à l'intérieur de commentaires en raison d'une incompatibilité.

<!----------commentaire---------->

Cette écriture est interdite car elle comporte deux séries de double trait d'union.

Exemple :
<?xml version="1.0" standalone="yes"?>
<--/-L'esperluette & peut être utilisée 
  littéralement dans une instruction CDATA-/-->
<[CDATA[L'esperluette ou le & commercial]]>
<balise>
<!-- Explication -->
   Données
</balise>
      

Les sections CDTA
Les sections CDATA sont utilisées pour habiller des blocs de texte contenant des caractères qui seraient autrement reconnus comme balisage.
Les sections CDATA sont identifiées de la manière suivante :

<![CDATA[ bloc de texte ]]>

Ces sections peuvent se trouver à n'importe quel endroit acceptable pour des données textuelles dans le document XML.
En outre, il n'est pas possible d'employer des références d'entités (&lt;, &amp;, etc.) à l'intérieur d'une section CDATA, en raison d'une incapacité de transcription puisque seule la chaîne de caractères ]]> est reconnue comme balisage.
Enfin, les sections CDATA ne peuvent pas s'imbriquer.

Exemple :
 <?xml version="1.0" standalone="yes"?>
 <[CDATA[Voici un élément vide 
     correctement fermé : <balise/>.]]>
 

Les instructions de traitement
Une instruction de traitement permet de transmettre le type d'application et éventuellement différents paramètres permettant de traiter une entité externe non-analysable comme une vidéo (avi, mpeg, qtw, etc.), un document textuel (pdf, doc, rtf, etc.) un programme Java, Perl ou encore C++.

<?cible liste_attributs?>

La cible identifie l'application à laquelle l'instruction est destinée.
La liste d'attributs permet de spécifier des données particulières pour le traitement de l'instruction.
Les instructions de traitement débutant par la chaîne de caractères xml sont réservés à un usage réservé au standard XML.

<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Exemple :
<?tableau feuille="compte.xsl"?>
<?bml register demos.texteditor.MenuBarAdder?>
<?xml-stylesheet type="text/css" href="style.css"?>

<?xml version="1.0" standalone="no"?>
<!DOCTYPE document [
<!ELEMENT document (article)>
<!ELEMENT article (#PCDATA)>
<!ATTLIST article source ENTITY #REQUIRED>
<!ENTITY doc_word SYSTEM "/doc/article.doc" 
  NDATA doc>
<!NOTATION doc PUBLIC 
 "-//IETF//NONSGML Media Types 
  application/msword//EN"
 "http://www.isi.edu/in-notes/iana/assignments
 /media-types/application/msword">
]>
<?doc WinWord?>
<document>
  <article source="doc_word">
    Spécification de XML 1.0
  </article>
</document>
       

La définition de type de doccument
Une DTD permet de déclarer la liste, le type et les relations des éléments, des attributs, des entités et des notations contenus dans le document XML.
La DTD contraint le document XML à se conformer aux règles énoncées. Si le document est conforme au DTD, alors ce document XML est considéré comme valide.
Chaque élément, attribut et entité doivent être déclarés dans la DTD avant leur utilisation.
De plus, la structure adoptée dans la DTD doit correspondre rigoureusement à celle construite dans le corps du document XML.

<!DOCTYPE élément_racine [
  <!ELEMENT balise (#PCDATA)>
  <!ATTLIST balise attribut CDATA #REQUIRED>
  <!ELEMENT élément_racine (balise)>
  <!ENTITY e-aigu "&eacute;">
]>
<élément_racine>
  <balise attribut="valeur">donn&e-aigu;e</balise>
</élément_racine>

La définition s'énonce à la suite de la déclaration XML préalable par la commande suivante :

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE Elément_racine...>
<Elément_racine>
...
</Elément_racine>

Cette définition se compose du nom de l'élément racine, suivi de la déclaration de type de document soit sous forme d'une énumération des éléments, attributs et entités, soit sous forme d'une URI (Uniform Resource Identifier) pointant vers une DTD externe auquelle est associée un mot-clé : SYSTEM ou PUBLIC combiné avec le nom public de la DTD externe.

<!DOCTYPE Elément_racine [Enumération...]>
<!DOCTYPE Elément_racine SYSTEM "URI">
<!DOCTYPE Elément_racine PUBLIC "Nom_DTD" "URI">

Il est également possible de combiner une DTD externe à une DTD interne. Ainsi, la DTD du document XML se composera d'une sous-DTD externe et d'une sous-DTD interne.

<!DOCTYPE Elément_racine SYSTEM "URI" [Enumération...]>

Il existe, donc, deux mots-clé pour cette instruction :

SYSTEM : indique la localisation d'une URI d'une DTD utilisée dans le document.
PUBLIC : est employé lorsque la DTD possède un usage général.

La valeur diffère selon le mot-clé spécifié.

"URI" : permet d'indiquer une adresse d'une DTD lors de la spécification du mot-clé SYSTEM.
"Nom_DTD" "URI" : représente, lors d'une spécification PUBLIC, le nom de la DTD que le processeur XML utilisera pour retrouver la définition du type de document et une adresse permettra de se substituer au nom de la DTD précitée en cas d'impossibilité d'être atteinte.
Exemple :
<!DOCTYPE document SYSTEM "../dtd/definition.dtd">

<!DOCTYPE document 
  PUBLIC 
   "-//NomDTD//DTD//EN" 
   "http://www.monsite.com/dtd/definition.dtd">

<!DOCTYPE document [
   <!ELEMENT paragraphe (phrase)>
   <!ELEMENT phrase (#PCDATA)>
   <!ATTLIST paragraphe auteur CDATA #IMPLIED>
   <!ENTITY e-dans-o "&oelig;">
   <!ENTITY a-dans-e "&aelig;">
]>

Documents bien formés et valides
Un document XML est dit bien formé lorsque le document est correct sans toutefois possèder une DTD.
Le prologue du document ne contient pas de Définition de Type de Document (DTD) et la structure arborescente du document respecte les standards XML (nom des balises et attributs, imbrication des marqueurs XML,...).

<?xml version="1.0" standalone="yes"?>
<magasin>
  <service>
    <produit>
      Vaisselle
    </produit>
  </service>
</magasin>

Un document XML est dit valide lorsque le document est bien formé et possède une DTD.
Le prologue du document contient une Définition de Type de Document (DTD) et l'arborescence des éléments XML respecte strictement, la structure définie par la DTD.

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE magasin [
  <!ELEMENT magasin (service)>
  <!ELEMENT service (produit)>
  <!ELEMENT produit (#PCDATA)>
]>
<magasin>
  <service>
    <produit>
      Vaisselle
    </produit>
  </service>
</magasin>

Un document XML bien formé doit obéir aux règles suivantes :

  • Le document doit commencer par une déclaration XML.
    <?version="1.0" standalone="yes" encoding="iso-8859-1"?>
  • Le document doit utiliser une DTD (Document Type Definition).
    <!DOCTYPE élément_racine [Définitions...]>
  • Le document doit contenir un seul et unique élément racine, déclaré dans l'instruction DOCTYPE, dont les marqueurs encadrent une ou plusieurs autres balises.
    <!DOCTYPE élément_racine [Déclarations...]>
    <élément_racine>
    <balise>donnée</balise>
    ...
    </élément_racine>
  • Le document doit contenir un ou plusieurs éléments. Si le document contient un seul élément, alors ce document sera composé du seul élément racine.
  • Les valeurs d'attribut doivent être impérativement encadrées par des guillemets simples (') ou doubles (").
    <balise attribut="valeur" attribut2='valeur'>
  • Une balise contenant des données doit impérativement être fermée.
    <balise>donnée</balise>
  • Une balise vide (ne contenant pas de données à l'instar de la balise IMG dans le HTML) doit également contenir un marqueur de fermeture.
    <balise></balise>
    <balise/>
  • Les balises doivent être correctement imbriquées, ainsi la ou les balises fils doivent être encadrées par une balise parente de départ et une de fin.
    <balise parent>
    <balise fils>donnée</balise fils>
    <balise fils/>
    </balise parent>
  • Les noms d'éléments et d'attributs ne peuvent être composés que de lettres, y compris les lettres accentuées, de chiffres, de soulignés(_), de tirets (-), de points (.) et de deux points (:).
  • Les noms d'éléments et d'attributs doivent commencer par une lettre ou un souligné.
    <_balise attribut9='valeur'/>
  • Les noms d'éléments dans les balises d'ouvertures ou de fermetures devront respecter une casse rigoureusement identique.
    <BaLiSe>Donnée</BaLiSe>
  • Les noms d'attributs doivent également conserver une casse rigoureusement identique.
     balise AttribuT="valeur">donnée<balise>
     balise2 AttribuT="valeur">donnée<balise2>
  • Le caractère inférieur à (<) sert uniquement à ouvrir une balise.
    <élément/>
  • Le caractère esperluette (&) est utilisé essentiellement pour faire appel à une référence d'entité soit prédéfinie, soit générale, déclarée au préalable dans la DTD.
    &amp;
    &entité_générale;
  • Les caractères inférieur à (<), l'esperluette (&) ou la séquence ]]> doivent être remplacés respectivement par les références d'entité &lt;, &amp; ou ]]&gt;.
  • Les attributs des documents XML bien formés sans DTD seront considérés de type CDATA, d'ailleurs considéré comme type par défaut.
Les éléments
Les éléments XML sont des balises particulières à l'instar de celles du langage HTML, hormis que dans ce cas, elles sont le fruit de l'auteur.
Tous les Eléments doivent être déclarées dans la Définition de Type de Document (DTD).
Les balises XML peuvent être de deux sortes.
La première contient, entre la balise de début et la balise de fin, des données diverses comme du texte.

<Elément>donnée</Elément>

La seconde est du type vide, c'est-à-dire, des balises ne contenant pas de données à proprement parler à l'instar des balises HTML <IMG...> ou <BR>. Dans ce cas, contrairement au HTML, les éléments doivent être impérativement fermées par une balise de fin ou le caractère slash (/) placé juste avant le caractère supérieur à (>).

<Elément></Elément>
<Elément/>

En effet, le balisage XML doit respecter des règles strictes comme la fermeture obligatoire de tous les types d'éléments comme précité.

<centre>
  <image src="http://monsite.com/photo.jpg">
</centre>

Cet exemple ne pourra pas fonctionner car la balise image n'est pas fermée.
De plus, Les éléments doivent être correctement imbriquées sous peine de dysfonctionnements.

<tableau>
  <gras><souligne>Titre</gras></souligne>
</tableau>

Dans cet exemple, les éléments gras et souligne sont incorrectement imbriquées.
Le nom d'un élément doit commencer par une lettre (a-zA-Z et les caractères accentués), le caractère de soulignement (_). Le nom peut comporter un nombre quelconque des caractères précités auxquels s'ajoutent les chiffres (0-9), le tiret (-), le point (.), les caractère deux points (:). Ce dernier est en général utilisé comme séparateur entre un espace de nom (namespace) et le nom d'élément.

<2main/> <!--Balise incorrecte-->
<&variable/> <!--Balise incorrecte-->
<Premier Pas/> <!--Balise incorrecte-->
<départ/> <!--Balise correcte-->
<_depart/> <!--Balise correcte-->
<football:milieu/> <!--Balise correcte-->
<fin/> <!--Balise correcte-->

Pour en savoir plus sur la construction des noms, consultez le site du World Wide Web Consortium (W3C).
De même, un nom d'élément ne peut commencer par la chaîne de caractère xml, XML ou toutes autres combinaisons formant ce dernier, réservée pour un usage spécifique.
Les noms d'éléments XML sont sensibles à la casse.

<balise>
<Balise>
<BALISE>

Les trois balises ci-dessus sont toutes strictement différentes. Le processeur XML interprètera chacun de ces éléments de façon unique, si bien qu'ils seront incompatibles entre eux.

<balise>donnée</Balise>

Cet exemple provoquera une erreur puisque les balises de début et de fin ne sont pas équivalentes.

Les attributs
Les attributs apportent des informations complémentaires à une balise XML.
Les attributs des éléments XML doivent être déclarés dans la Définition de Dype de Document (DTD) avant leur utilisation dans le document XML.
A l'image de ceux du HTML, les attributs sont formés d'un nom auquel est associé une valeur.

<livre edition="EditeurX" auteur="IndividuY">Titre</livre>

Dans cet exemple, deux attributs sont associés à l'élément livre, lui apportant deux caractéristiques supplémentaires.
Les attributs ne peuvent être présents que dans la balise de début de l'élément XML.

<balise attribut="valeur">...</balise>
<balise attribut="valeur"/>

La valeur des attributs doivent toujours être entre des guillemets doubles ("...") ou simples ('...').
Les attributs pays='France' et pays="France" sont tout les deux corrects.
Les attributs sont également sensibles à la casse.
L'attribut monnaie="francs" est différent de MONNAIE="francs".
Le nom d'un attribut doit commencer par une lettre (a-zA-Z et les caractères accentués), le caractère de soulignement (_) ou le caractère deux points (:) utilisé généralement pour des attributs réservés.
Ainsi, l'attribut poids='120kg' est correct alors que #poids='72kg' est invalide.
Enfin, une balise ne peut commencer par la chaîne de caractère xml ou XML réservée pour un usage spécifique, en l'occurrence pour des attributs réservés comme xml:lang et xml:space.

La déclaration des entités
Les documents XML sont construits à partir d'une ou plusieurs entités internes ou externes.
Ces denières possèdent un contenu et un identifiant, en l'occurrence une valeur d'entité et un nom d'entité.
Tout document XML possède au moins une entité correspondant à la Déclaration de Type de Document et l'élément racine. Cette entité s'appelle entité document.
Les entités peuvent contenir des données XML bien formulées, d'autres formes de texte comme des courriers électroniques ou des données binaires comme des images ou des applets Java.
Les noms d'entités obéissent aux mêmes règles que les noms d'éléments ou d'attributs. Ils ne peuvent être constitués que de lettres, y compris les lettres accentuées, de chiffres, de soulignés (_), de tirets (-), de points (.) et de deux-points (:). Toutefois le nom d'entité ne peut commencer que par une lettre ou un souligné.

Deux catégories d'entités se distinguent. Il s'agit des entités internes, définies et utilisables dans le document XML, et les entités externes, définies dans une ressource externe et utilisable dans le document via une adresse URL (Uniform Resource Locator).
Deux autres types d'entités apparaissent également : les entités analysables dont le contenu est entièrement conforme à un XML bien formé, et les entités non-analysables correspondant à un contenu composé de texte non-XML ou de données binaires.
Enfin, les entités se divisent encore en deux parties. Les entités générales permettent d'utiliser leur contenu essentiellement dans le document XML hors DTD. Les entités paramètres sont utilisables exclusivement dans la Déclaration de Type de Document.

Les notations
Les notations sont utilisées en conjonction avec des entités non-analysables, c'est-à-dire contenant des données non-XML (image, applet Java, courrier électronique, etc.).
Le nom de la notation est associé, au sein de l'instruction <!ENTITY...>, au mot-clé NDATA permettant ainsi de faire référence à un identificateur (ID) permettant de décrire le format de données non-XML concerné.
L'identificateur externe (ID_Externe) peut tout à fait être un type MIME (Multipurpose Internet Mail Extensions) comme "video/mpeg", "text.rtf", "application.pdf", etc..
Si l'identificateur est public alors une adresse URI (Uniform Resource Identifier) est nécessaire.
La déclaration d'une notation s'effectue comme suit :
<!NOTATION nom_notation SYSTEM "ID_Externe">
<!NOTATION nom_notation PUBLIC "ID_Public" "URI">

L'appel à cette notation s'opère de la manière suivante :

<!ENTITY nom_entité SYSTEM "URI" NDATA nom_notation>
Exemple :
<?xml version="1.0" standalone="no"?>
<!DOCTYPE vidéothèque [
 <!ELEMENT vidéothèque (vidéo)>
 <!ELEMENT vidéo EMPTY>
 <!ATTLIST vidéo source ENTITY #REQUIRED>
 <!NOTATION avi SYSTEM "video/avi">
 <!ENTITY vacance SYSTEM "mes_vacances.avi" 
NDATA avi> ]> <vidéothèque> <vidéo source="&vacance;"/> <vidéothèque>

Les sections conditionnelles
Les sections conditionnelles permettent d'inclure ou d'ignorer des portions de déclarations dans la DTD (Document Type Definition).
L'instruction suivante permet d'inclure le bloc de déclarations dans la DTD.
<![INCLUDE Bloc_Déclarations...]]>

L'instruction suivante permet d'ignorer le bloc de déclarations dans la DTD.

<![IGNORE Bloc_Déclarations...]]>

Il est possible de substiturer la directive INCLUDE ou IGNORE par une entité paramètre, déclarée par l'instruction ENTITY.
De cette façon, l'entité paramètre pourra prendre comme valeur INCLUDE ou IGNORE afin d'inclure ou d'ignorer la section concernée.

<!ENTITY % directive "INCLUDE"> <![%directive; Bloc_Déclarations...]]>

Si une DTD externe est utilisée pour plusieurs documents XML, l'entité paramètre déclarée dans la sous-DTD interne combinée avec les sections conditionnelles déclarées dans la DTD externe permettent d'adapter cette dernière à tous les documents XML.

Exemple :
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE document SYSTEM "definition.dtd" [
  <!ENTITY % directive "IGNORE">
]>
<!-- document.xml -->
<document>
  ...
</document>

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE document SYSTEM "definition.dtd" [
  <!ENTITY % directive "INCLUDE">
]>
<!-- snd_document.xml -->
<document>
  ...
</document>

<!-- definition.dtd -->
<!ELEMENT document ANY>
<![%directive; Bloc_Déclarations...]]>
       

Logiciels en rapport
Ams XML
Ams HTML
Ams WML