logo Mkadmi
Accueil            ISD            Equipe de recherche           Laboratoire Paragraphe            Enssib         ECP           Contact  

Accueil

 

 
 
 
 
   

 
 

webmaster

   
Chapitre 1 : Les documents XML

1- Les Règles d'ecriture

  • Il faut noter que la casse des caractères dans un document XML est importante (la casse est discriminante), alors que de façon générale les espaces, tabulations et retours de chariots ne le sont pas.
  • Comme en HTML, les espaces, tabulations, retours et sauts à la ligne sont considérés comme des séparateurs et sont générés par le parseur sous forme d'espace simple.
  • Il est possible d'insérer des commentaires dans les documents XML, en utilisant la syntaxe suivante:

<!-- Voici le commentaire -->

  • un commentaire s'écrit entre <!- -  et - - > et ne peut contenir le caractère tiret'-'.
  • Les instructions pour les applications sont comprises entre <? et ?> Exemple : <? XXXXXX ?>
  • Un nom (ou Token) commence par une lettre et peut contenir : Lettre, Chiffre, (point),  (tiret), '_' (tiret souligné), ':' (deux points)

            Tous les mots commençant par XML ou xml sont réservés.

2. La Structure du document

Il existe deux types de documents XML : le document bien formé et le document valide.

Un document bien formé est un document respectant la syntaxe XML.

Un document valide est un document bien formé qui respecte une structure type définie dans une DTD.

Le document XML se compose de :

un prologue (facultatif mais conseillé),

• un arbre d'éléments qui constitue le contenu du document,

• des commentaires et des instructions de traitement.

2.1. Le prologue

Le prologue des documents XML joue trois rôles importants:

1.      Préciser qu'il s'agit d'un document XML

2.      Identifier le jeu de caractères utilisé

3.      Identifier la grammaire (DTD) utilisée

Les trois éléments sont facultatifs, mais il est en général préférable d'include la déclaration XML qui contient les deux premiers éléments d'information.

Si aucun jeu de caractères n'est spécifié, une application XML doit supposer qu'il s'agit du jeu de caractères Unicode, encodé en UTF-8 ou en UTF-16.

Si aucune DTD n'est identifiée, le document est considéré bien formé. Si une DTD est spécifiée, le document est alors valide (s'il respecte les règles dictées dans la DTD bien sûr).

Le prologue peut contenir donc :

  • une déclaration XML,

§         des instructions de traitement,

§         une déclaration de DTD.

2.1.1. La déclaration XML

. Exemple

< ?xml version=  "1.0 "  encoding = "ISO-8859-1" standalone = "yes" ?>

Dans cet exemple, il y a trois parties :

-  L'identification du document XML est nécessairement au début du document et a la forme suivante :

<?xml version="1.0"?> : Version du langage utilisé

-    L'encodage, s'il est spécifié, se retrouve dans l'instruction de traitement qui identifie le document XML:

<?xml version="1.0" encoding="ISO-8859-1"?>

Dans cet exemple, il s'agit d'un document XML dont le jeu de caractères est l'ISO-Latin 1 (norme ISO 8859-1), et donc pas l'Unicode. Dans l'exemple précédent, le jeu de caractères était l'Unicode, avec encodage UTF-8 ou UTF-16, soit la valeur par défaut

 

- standalone='Yes' veut dire que toutes les recherches de déclarations se feront uniquement dans le document.

Un document XML commence donc généralement par la balise <?xml version="1.0" ?> qui peut avoir quelques attributs supplémentaires:

Nom de l'attribut

valeurs possibles

explications

version

1.0

(obligatoire) indique le numéro de version du standard auquel le document se conforme.

encoding

UTF-8, UTF-16, ISO-10646-UCS-2, ISO-10646-UCS-4, ISO-8859-1 à ISO-8859-9, ISO-2022-JP, Shift_JIS, EUC-JP

nom de l'encodage de caractères employé dans le fichier

standalone

yes, no

si le document XML fait référence à une DTD ou à des entités définies dans un autre fichier, il faut mettre "no". Sinon, on utilise "yes".

L'encodage est important car il permet au parseur de savoir comment interpréter le document. Sans cette information, il y a une erreur provoquée lors de la rencontre d’un caractère accentué.

2.1.2. Les instructions de traitement

<?nom param1 param2 ... ?> le nom est une application ou une fonction que l'on appelle en lui passant des paramètres.

Les instructions de traitement sont surtout utilisées par les applications qui génèrent du code XML comme les éditeurs XML ou par les applications qui interprètent le code XML comme les navigateurs.

2.1.3. Déclaration de type de document (DTD)

La DTD peut être référencée de la façon suivante:

<!DOCTYPE racine PUBLIC "identificateur public" "uri de la DTD">

Ici, "racine" identifie l'élément qui contient tous les autres dans le document, la mention PUBLIC et la chaîne de caractères qui suit, optionnelles, précise un identificateur public pour cette DTD, et enfin la chaîne de caractères qui la suit, obligatoire, précise la localisation de la DTD à l'aide d'une URI.

Très souvent, un appel à une DTD sera de la forme suivante:

<!DOCTYPE racine SYSTEM "racine.dtd">

La déclration d’une DTD de cette façon signifie que la DTD est dans un fichier nommé "racine.dtd" et qui se situe dans le même répertoire que le document.

Soulignons également qu'il est possible d'inclure la DTD à l'intérieur du document lui-même, de la façon suivante:

<!DOCTYPE racine [

  <!ELEMENT racine EMPTY>

]>

Dans cet exemple, la DTD est incluse dans le document (fournie entre crochets). Il s'agit d'une pratique assez rare, mais cette technique est aussi utilisée pour déclarer des entités.

2.2. L'arbre d'éléments

Les éléments sont les objets les plus importants des documents XML. En effet, fondamentalement, les documents XML sont des hiérarchies strictes d'éléments. Ainsi, il existe toujours un (et un seul) élément supérieur qui contient tous les autres. De plus, un élément peut contenir d'autres éléménts ou du texte (un type particulier d'élément), et se situe à l'intérieur d'un seul élément.

Chaque élément est défini de la façon suivante :

<nom> contenu de l'élément </nom>

Le nom indiqué par les balises d'ouverture et de clôture

  • doit commencer par une lettre,

§         peut comporter des chiffres, des lettres, les caractères moins (-), tiret souligné ('_'), point ('.')

§         la casse est discriminante

§         le nom ne peut commencer par XML que ce soit en minuscule, majuscule ou en combinaison des deux.

L'arbre d'éléments décrit la structure hiérarchique d'un élément. Les éléments les plus fins sont dits éléments terminaux.

2-2-1 Élément racine :

Un élément racine est le premier élément déclaré dans un document XML, qui contient tous les autres éléments. Dans notre exemple, l'élément PRODUIT est l'élément racine de notre document.

Exemple

< ?xml version='1.0' ?>

<PRODUIT>

<TOPIC>

                        <TITLE>Création d’un répertoire de schémas XML</TITLE>

                        <AUTHOR>Abderrazak MKADMI</AUTHOR>

            <PUBLISHER>EDIFRANCE</PUBLISHER>

 

</TOPIC>

<TOPIC>

                        <TITLE>Les bases de données relationnelles</TITLE>

            <AUTHOR>Imad Saleh</AUTHOR>

<PUBLISHER>Eyrolles</PUBLISHER>

</TOPIC>

</PRODUIT>

Comme nous avons vu, un seul élément racine est autorisé par document.

2.2.2 Élément vide

Un élément vide est un élément dont le contenu entre la balise d'ouverture et la balise de fermeture est vide (<baliseDOuverture suiteDAttributs></baliseDOuverture suiteDAttributs>); il peut être abrégé <baliseDOuverture suiteDAttributs /> (il ne faut pas croire qu'un élément vide ne contient pas d'information; les informations qu'il contient sont dans ses attributs).

Un élément vide s’écrit sous la forme suivante :

<exemple></exemple> ou  <exemple/>

3. Les attributs, les entités, les sections littérales

3.1. Présentation

L'arbre d'éléments XML peut contenir différents objets :

  • Des attributs : les éléments peuvent contenir des informations complémentaires stockées sous forme d'association nom=valeur. Ces informations permettront d'effectuer des traitements spécifiques (par des applications, des navigateurs ou des feuilles de style XSL) en utilisant des critères distincts des données affichées. Cela permet par exemple de gérer des liens.

-        Des entités : une entité est un objet disposant d'un nom et d'un contenu. Cet objet peut être interne (une chaîne de caractère), externe en format XML (autre fichier XML) ou non (fichier WORD par exemple). Une entité pourra être référencée sur un attribut.

-         Des sections littérales : une section littérale est une chaîne de caractères non interprétée par le parseur XML. Cela permet ainsi d'inclure des caractères spéciaux. Par exemple pour inclure des exemples de syntaxes XML dans une page XML.

-         Des données : toutes chaînes de caractères ne répondant pas aux éléments ci-dessus.

3.2. les attributs

Les attributs sont toujours associés aux éléments. Ils viennent en quelque sorte les qualifier. Ils sont toujours spécifiés dans la balise d'ouverture de l'élément.

3-2-1 utilisation

<exemple attribut= 'valeur'>

Le nom d'attribut respecte les mêmes règles que les noms d'éléments. La valeur est exprimée en des quotes ou des apostrophes et ne peut contenir les caractères ^,  % et &.

Exemple

<?xml version ="1.0" ?>

<article>

                <editeur nom ="EYROLLES">

                               <ed-adresse>

                                               <rue>1, rue Thénard</rue>

                                               <cp>75005</cp>

                                               <ville>Paris</ville>

                               </ed-adresse>

                </editeur>

                <editeur=nom="First Interactive">

                               <ed-adresse>

                                               <rue>13, rue Buffon</rue>

                                               cp>75005</cp>

                                               <ville>Paris</ville>

                               </ed-adresse>

                </editeur>

<topic>

                <title>XML : le guide de l’utilisateur</title>

                <author>Elliotte Rusty Harold</author>

                <editeur nom="EYROLLES"></editeur>

</topic>

<topic>

                <title>Moteurs de recherche pour le web</title>

                <author>Alfred, Emily Glossbrenner</author>

                <editeur nom="First Interactive"></editeur>

</topic>

</article>

Dans l'exemple ci-dessus, l'utilisation des attributs permet de simplifier l'écriture puisqu'elle n'oblige pas à réécrire les informations complètes sur un éditeur lorsque plusieurs ouvrages y font référence. Il pourrait être, cependant, nécessaire d'effectuer un traitement  supplémentaire (lors des impressions par exemple) afin de remplacer l'attribut par les informations correspondantes.

3.2.2. Utilisation des caractères spéciaux

Pour inclure des caractères spéciaux dans les données, il est nécessaire d'utiliser l'une des écritures suivantes :

  • &# suivi du numéro décimal du caractère dans les pages UNICODE

·        &#x suivi du numéro hexadécimal du caractère dans les pages UNICODE.

Exemple :

            &#38 et &#x26 sont équivalents à &

            &#x2200 est équivalent à "

En outre il existe aussi des entités prédéfinies pour les caractères utilisés par XML:

  • &gt pour   >,

-         &lt pour   <,

-         &amp pour   &

-         &apos pour   ',

-         &quot pour   '' 

3.2.4. Les attributs prédéfinis

Il existe un certain nombre d'attributs prédéfinis. C'est le cas par exemple de l'attribut xml:lang qui permet de définir la langue du document.

Exemple

<p xml :lang = 'fr'>Exemple</p>

Cet attribut est hérité par l'ensemble des éléments fils de l'élément sur lequel il est défini.

Autres attributs prédéfinis :

  • xml :space='preserve' ou xml :space='default' permet d'indiquer si les caractères d'espacement (espace, tabulation, rupture de ligne, ligne blanche) sont préservés ou si l'application peut appliquer le traitement par défaut.

3-3 Les entités paramétriques

Servent à définir des symboles qui seront utilisés ailleurs dans la DTD. Ce sont en quelque sorte des raccourcis d'écriture : partout où une entité est mentionnée, elle peut être remplacée par la chaîne de caractères qui lui est associée. Ce mécanisme s'apparente à un mécanisme de "macro"[2].

Exemple tiré de la spécification du langage HTML:

<!ENTITY % heading "H1|H2|H3|H4|H5|H6">

  • l'exemple ci-dessus a pour effet d'indiquer au système que toute occurence de %heading; doit être remplacée par H1|H2|H3|H4|H5|H6

La définition d'une entité peut elle-même faire référence à d'autres entités. La substitution est alors effectuée récursivement. Par exemple, avec les définitions supplémentaires suivantes:

<!ENTITY % list "UL | OL">
<!ENTITY % preformatted "PRE">
<!ENTITY % block
"P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">

L'entité %block; sera définie comme "P | H1 | H2 | H3 | H4 | H5 | H6 | UL | OL | PRE | DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS"

3-4 Les entités de caractères

Servent à donner un nom facilement lisible à des caractères qui ne sont peut-être pas représentables dans l'alphabet utilisé, ou qui ne sont pas disponibles au clavier.

Exemple tiré de la spécification du langage HTML:

<!ENTITY nbsp "&#160;">
<!ENTITY iexcl "&#161;">

Les entités de caractères définies dans une DTD peuvent être utilisées dans un document XML référençant cette DTD à l'aide de la notation &NomEntité;

3.5 Les entités internes

Les entités internes permettent de remplacer une valeur par une abréviation. Cette abréviation est appelée Entité Interne et doit être déclarée dans la déclaration du document.

Exemple : entité interne

<?xml version ="1.0" ?>

<?xml:stylesheet href=" 3b-EntiteInterne.xsl" type="text/xsl" ?>

<!DOCTYPE catalogue [

            <!ENTITY INTER "Internet " >

] >

<catalogue>

            <stage>

                        <intitule>XML et les bases de données</intitule>

                        <grp-produit>&INTER; </grp-produit>

            </stage>

</catalogue>

Lors de la référence à l’entité interne, son nom est préfixé par & et suffixé par ;.

L’ordre de déclaration des entités est sans importance.

3.6 Les sections littérales

Les sections littérales permettent de créer des chaînes contenant des caractères spéciaux.

Exemple

<exemple>contenu :

< ! [CDATA [ <TITLE>l’EDI et l’Internet</TITLE>]]>

</exemple>

C’est l’utilisation des délimiteurs < ! [CDATA [ et  ]]> qui détermine le contenu de la section littérale. Cette dernière ne sera pas interprétée. Cela signifie que l’élément « exemple » contient :

« contenu : <TITLE>l’EDI et l’Internet</TITLE> ».

3.7 Les entités externes

3.7.1 l’adressage par URL

Exemple d’une entité externe

<?xml version ="1.0" ?>

<?xml:stylesheet href=" 3b-EntiteExterne.xsl"  type="text/xsl" ?>

<!DOCTYPE catalogue [

            <!ENTITY INTER " Internet ">

            <!ENTITY Obj_Xmlp SYSTEM "3b_OBJ_XMLP.xml">

] >

<catalogue>

            <stage>

                        <intitule>XML et les bases de données</intitule>

                        <grp-produit>&INTER; </grp-produit>

                        &Obj_Xmlp;

            </stage>

</catalogue>

Les fichiers .xml référencés n’ont pas à contenir de prologue. En effet, celui-ci est inclu dans le document principal.

C’est le mot clé SYSTEM qui indique qu’il s’agit d’une référence de type URL.

3.7.2. Adressage par identificateur public (FPI[3])

L'adressage par identificateur public permet de réaliser une indirection via un fichier externe (fichier catalogue).

<!ENTITY nom PUBLIC "FPI"   "URL">

Le mot clé PUBLIC indique qu'il s'agit d'un FPI. IL est possible d'ajouter une URL qui sera utilisée lorsque l'application ne pourra pas résoudre l'identificateur public.

Exemple :

Code pour référencer les entités prédéfinies XHTML

< ! - - character entity set. Typical invocation :

< ! ENTITY % HTMLlat1  PUBLIC

                        "-//W3C//ENTITIES  Latin 1 for XHTML//EN"

                        http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent>

%HTMLlat1 ;

-->

 

Le FPI est de la forme: préfixe//auteur//description//CodeLangue

3.7.2.1. Résolution des identificateurs publics :

La résolution des adressages par FPI se fait de la façon suivante :

1. recherche d'un fichier catalogue à partir d'une variable d'environnement de type PATH,

2. Recherche dans le fichier catalogue d'une entrée correspondante au FPI,

3. Récupération de l’URL associée à l'identificateur,

4. Si l'identificateur n'est pas trouvé, utilisation de l’URL par défaut.

3.7.2.2. Avantages

L'utilisation de ce mode d'adressage augmente la maintenabilité de l'application en permettant une réutilisation des liens. Lorsqu'une URL change, il n'y a que le fichier catalogue à modifier que tous documents XML prennent en compte la modification.

3.8 Les entités non-XML

La déclaration de telles entités nécessite la définition préalable du format de l’entité, c’est à dire de l’application capable d’interpréter cette entité.

Exemple

< !DOCTYPE article [

            < !NOTATION perso SYSTEM  "winword.exe" >

            < !ENTITY exemple SYSTEM   "Nonxml.test"  NDATA  perso >

] >

<article>

            <title  test = 'exemple' >

</article>

La référence à une entité non-XML ne peut se faire qu’au niveau d’un attribut. Il n’est pas possible de référencer une entité non-XML dans la valeur d’un élément.

3.9 Récapitulatif sur les entités

1. nom est une référence à une entité interne ou externe XML

<TEST>&nom</TEST>                                             Autorisé

<TEST>Ceci est &nom ;</TEST>                              Autorisé

<TEST attribut=&nom ;></TEST>                             Autorisé

<TEST attribut =&nom ;>exemple</TEST>                Autorisé

 

2. nom  est une référence à une entité externe non-XML

<TEST attribut ='nom'></TEST>                                Autorisé

<TEST>'nom'</TEST>                                              Non Autorisé

Conseil d'écriture

1. élément versus attribut

Il n'est pas toujours facile de choisir entre élément et attribut, car il n'y a pas de règles absolues car tout peut se réduire à des éléments sans attributs.

Les critères de choix sont liés à :

·        La structure de l'information

- Structurée ou non structurée multi-lignes à  éléments

- Non structurée à attribut

·        Qui et comment est exploitée l'information

- Homme ou machine et type d'application

·        L'ordre de l'information a-t-il une importance

- Ordre important à éléments

- Ordre non important à attribut

(Le parseur traite et restitue les attributs sans règle imposée)

2 Inclure les méta-données sous forme d'attributs dans un élément vide

exemple

<exemple>

                  <meta  cat = 'Exemple'

                             num='7.3'

                             auteur='Mkadmi'

                             date_cre='2002-11-15'

                             date_mod=' '>

                  </meta>

      </exemple>

3 Utiliser des marquages méta-typographiques pour indiquer les éléments devant bénéficier de mise en forme particulière. Ce marquage n'indiquant pas la mise en forme à réaliser.

Exemple

<p>Dans l’exemple suivant le texte important est indiqué entre des marqueurs<me>spéciaux</me></p>

L’élément me indique ici le texte qui doit bénéficier d'une mise en forme particulière, mais n’indique nullement quelle mise en forme il faut appliquer.


Accueil            ISD            Equipe de recherche           Laboratoire Paragraphe            Enssib         ECP           Contact