<

webmaster

le XML

Les Documents XML
  • les règles d'écriture
  • 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:

img1

  • un commentaire s'écrit entre et - - >et ne peut contenir le caractère tiret '-'
  • Les instructions pour les applications sont comprises entre et ?>

 

Exemple :

  • 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.

  • 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.

img2
                                    image : structure d'un document XML

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

  • Préciser qu'il s'agit d'un document XML
  • Identifier le jeu de caractères utilisé
  • Identifier la grammaire (DTD) utilisée

Les trois éléments sont facultatifs, mais il est en général préférable d'inclure 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
img3

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 : : Version du langage utilisé
  • L'encodage, s'il est spécifié, se retrouve dans l'instruction de traitement qui identifie le
    document XML:
    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
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
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:

img4
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:
img5

La déclaration 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:
img6

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éments 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 :
img7
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

img8
comme nous l'avons dit, un seul élément racine est autorisé par document. en occurrence ici on l'élément racine est
L'exemple ci-dessous par exemple est incorrect car il comporte plusieurs éléments père :
img9

                                                                                                         
2.2.2. Elé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 ();
il peut être abrégé (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 :
img10

  • 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 les 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
img11

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 &.
img12
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 :
& et & sont équivalents à &
∀ est équivalent à ∀

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

  • > pour >,
  • < pour <,
  • & pour &
  • &apos pour ',
  • " 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

img13
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".

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

img14

  • l'exemple ci-dessus a pour effet d'indiquer au système que toute occurrence 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:



"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 entit2s 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:
img15

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 ENTITES 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
img16

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

  • conseil d'écriture
  • é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 multilignes -> é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)

  • Inclure les métadonnées sous forme d'attributs dans un élément vide

img17

  • document bien forme et document valide: la DTD

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.
La DTD (Document Type Definition) est un composant optionnel du prologue XML, permet de différencier la notion de document bien formé ou valide
Un document bien formé est conforme aux règles syntaxiques du langage XML
Un document valide est conforme à la grammaire définie par la DTD
On choisit d'associer une DTD à un document si l'on veut vérifier sa validité
La DTD permet de spécifier la structure logique d'un document
C'est le parseur XML qui fonctionne en mode validant ou non, suivant son paramétrage ou la référence à une DTD

La DTD n'est pas décrite en XML, elle utilise sa propre syntaxe

L'écriture d'une DTD est la transposition d'un modèle de données (type MCD Merise ou modèle d'objets UML) au format XML.

5.1. référence a une DTD dans un document xml
img18
Dans ce cas le fichier DTD ne contient pas la déclaration  < !DOCTYPE …>.
Exemple : le fichier xml
img19

Exemple : La DTD : fichier DTDexterne.dtd
img20
Cependant, la définition de la DTD peut se faire dans le document XML lui-même enincluant dans le prologue l’ensemble des déclarations de la DTD.

 

5.2. déclaration interne et externe de la DTD
Un document XML peut contenir à la fois une référence à une DTD et une déclaration interne d’élément.
Dans ce cas si un élément est déclaré dans la DTD et dans le document, c’est toujours la déclaration interne qui prévaut.
img21

  • LES DIFFERENTS FORMATS DE DECLARATIONS

 C’est la définition du contenu type d’un document (sa grammaire). Il existe quatre types de déclarations :

  • Des éléments,
  • Des listes d’attributs,
  • Des entités
  • Des notations

6.1. les éléments
Exemple
img22
Cet exemple définit l'élément livre suivi de son modèle de contenu :

  • titre : information obligatoire présente une seule fois (1, 1), 
  • editeur? : le ? signifie que cette information est facultative (0, 1), 
  • chapitre+ : le + signifie que l'élément peut être répété (1,N), 
  • critique* : * signifie que l'élément est facultatif et qu'il peut être répété (0,N).

Autres exemples
img23

  • (titre_chapitre, corps_chapitre)+ : indique que le couple (titre_chapitre, corps_chapitre) est obligatoire et peut être répété.

img24

  • indique que l’élément chapitre est obligatoire, peut être répété et que chaque chapitre est constitué des éléments titre_chapitre et corps_chapitre dans cet ordre.

 

img25

  • editeur | auteur : indique que ces éléments sont obligatoires et que l’ordre est indifférent.

6.1.1. Déclaration d'un élément de données
La déclaration d'un élément fils (niveau le plus fin) se fait de la façon suivante
img26

L'élément nom peut contenir toute donnée XML (y compris des sections littérales) mais ne peut pas contenir des données non-XML.
6.1.2. Déclaration d'un élément à modèle mixte
Cette définition autorise la mixité entre données et élément.
img27
Un chapitre peut contenir des données (#PCDATA) et/ou un élément nomme p et/ou un élément nommé exemple. Ces éléments étant facultatifs et pouvant apparaître plusieurs fois.
6.1.3. Déclaration d'un contenu libre: ANY
Il est possible d'indiquer que le contenu d'un élément est libre (donnée ou autres éléments) en précisant le mot clé ANY
img28

  • Cette déclaration peut être très pratique en phase de conception car elle permet de définir des structures et de les affiner au fur et à mesure de l'avancement du projet.
      • Déclaration d'un Elément vide 

 

img29
6.3. la liste d’attributs
Comme cela été vu au chapitre sur la syntaxe XML, un attribut est un couple nom=valeur. La définition des attributs dans une DTD va permettre de spécifier les attributs qui pourront ou devront être associés à un élément, et éventuellement leurs valeurs par défaut.
Cette déclaration se fait par :
img29

La déclaration d'attributs peut être répétée et se fait sous la forme suivante :
nom-attribut type valeur-défaut
Six types d'attributs sont reconnus : 

  • CDATA pour indiquer que la valeur de l'attribut est une séquence de caractères (y compris des entités de caractères)
  • IDpour indiquer que la valeur de l'attribut est un symbole commençant par une lettre et ne contenant que des lettres, des chiffres, ou les caractères - _ : et . (la valeur doit être unique sur l'ensemble d'un document)
  • IDREF pour indiquer que la valeur de l'attribut est un symbole défini comme valeur de l'attribut ID d'un autre élément de document
  • IDREFS comme IDREF, mais plusieurs valeurs séparées par des espaces sont autorisées
  • ENTITY pour utilisateurs avancés (pas abordés dans le cadre de ce cours)
  • ENTITIES NMTOKEN NMTOKENS

énumération une énumération de valeurs possibles se fait en mettant entre parenthèses les valeurs séparées par des |. Exemple: 
img30

Il existe quatre valeurs par défault:


Le symbole prédéfini #IMPLIED

indique que l'application traitant le document fournira la valeur par défaut

Le symbole prédéfini #REQUIRED

indique l'auteur du document doit définir l'attribut en question

Le symbole prédéfini #FIXED suivi d'une valeur (chaîne de caractères entre guillemets)

indique que l'attribut ne peut prendre que la valeur mentionnée

Une des valeurs d'une énumération, ou une chaîne de caractères compatibles avec le type associé à l'attribut

 

indique qu'en l'absence d'indication explicite,

l'attribut prendra la valeur indiquée ici

  • les domaines de noms (namespaces)

Un des objectifs de XML est l'interopérabilité. Pour cela on suppose que chacun doit essayer de s'appuyer sur des DTD standards afin de faciliter la compréhension des structures dedocuments.
Il est donc courant d'utiliser plusieurs DTD pour construire un document XML.
Des conflits de noms peuvent alors survenir si deux éléments portent des noms identiques dans deux DTD différentes (par exemple fn=fonction dans MathML, fn=foot notes dans Basic-Text).
Pour éliminer ces conflits de noms, on a recours aux domaines de noms (ou appelés aussi espaces de nommage). Le principe consiste préfixer chaque nom d'élément par un nom qui identifie le domaine auquel il fait référence (par exemple math:fn pour l'élément mathématique fn et text:fn pour l'élément bas de page).
Les avantages de cette structuration :

  • Les espaces de noms permettent de lever les ambiguïtés sur des éléments de DTD différentes qui porteraient le même nom (nom de produit, nom de personne, ..),
  • Les espaces de noms favorisent la modularité des documents XML et les sources multiples de ces derniers,
  • Les espaces de nom permettent, indirectement, de rendre plus lisible un document XML contenant des informations de sources diverses.
par David Matjaba