III. Les bases d'un document XML

 

         Nous possédons les outils nécessaires pour créer des documents au format XML, l'éditeur, le visualiseur, le parseur et le transformateur. Reste maintenant à connaître la syntaxe de ce méta-langage qu'est le XML.

Il possède des règles strictes de composition. Vous retrouverez ces règles sur le site du W3C en consultant la recommandation du XML (http://www.w3.org/TR/2000/REC-xml-20001006).

Cette recommandation est en anglais mais vous pouvez l'obtenir dans un grand nombre de langue à la page internet http://www.w3.org/XML/#trans notamment la version française (http://babel.alis.com/web_ml/xml/REC-xml.fr.html).

Ces traductions ne sont pas à jour, mais, elles donnent une bonne idée de ce qu'est le XML même avec les évolutions qu'il a subi depuis cette date.

Vous trouverez aussi la FAQ (Foire Aux Questions) sur le site GUTenberg à l'adresse http://www.gutenberg.eu.org/rubrique3.html dans la rubrique publication. Elle date de 1999 mais les questions et leurs réponses restent d'actualité.

 

 

III.1 Le Type des Documents

 

         Il existe plusieurs niveaux de documents XML. Ces derniers seront bien formés ou valides selon le degré de complexité et de rigidité de la structure du document. Nous allons étudier cela maintenant.

Les points suivants proposent une vue rapide de ce qui est possible, tout cela sera vu en détail dans le point III.2. Construction d'un document XML.

 

a. Les documents XML SDD

 

Ce sont des documents sans DTD (Definition Type of Document) d'où leurs appellations SDD (Standalone Document Declaration). Ces documents respectent les règles de construction de base sans suivre des règles définies dans un document tiers (DTD).

En effet, le XML suit les conventions du SGML qui impose, en plus du document que vous créez, qu'il lui soit associé un autre document qui contient la ´ grammaire ª indiquant les règles syntaxiques et structurelles d'utilisation des balises (éléments) crées dans le document. Cette ´ grammaire ª est appelée DTD. Elle n'est pas aisée à construire, mais, son rôle est d'éviter des écarts dans le formalisme du document XML.

XML dans un souci de simplification propose au choix du concepteur d'utiliser ou non une DTD.

Síil décide de ne pas l'utiliser (SDD) le document débute par une déclaration de document autonome comme suit :

 

<?xml version="1.0" standalone="yes"?>

 

Il existe un certain nombre de règles de base à respecter malgré tout lors de la construction de son document XML (voir point c). Si le document les respecte, le document est dit ´ bien formé ª.

 

b. Les documents valides

 

Ces documents possèdent une DTD, la respecte ainsi qu'ils respectent les règles de base de construction d'un document XML que l'on verra au point suivant. Ce document est donc lui aussi ´ bien formé ª.

Le document XML doit lui aussi posséder une déclaration. Cette déclaration va indiquer qu'il utilise des règles de construction définies dans une DTD.

 

Attention

 

Cette DTD peut être soit :

ÿ    externe, elle est alors située dans un autre fichier ayant l'extension .dtd

ÿ    interne, elle est alors située directement dans votre document xml.

Dans le dernier cas, vous pouvez omettre l'option standalone car celle-ci possède la valeur no par défaut.

 

La définition est généralement la suivante :

 

<?xml version="1.0"?>

<!DOCTYPE racine SYSTEM "URL ou chemin référençant le fichier DTD">

<racine>

...

</racine>

 

OU

 

<?xml version="1.0"?>

<!DOCTYPE racine PUBLIC "descriptif "

"URL ou chemin référençant le fichier DTD">

<racine>

...

</racine>

 

La DTD publique (PUBLIQUE) est une DTD ´ officielle ª que tout le monde peut utiliser en la nommant par son URL qui ne varie jamais. Par exemple, la DTD XHTML1.0 peut être utilisée de cette façon là.

 

c. Les règles de construction du document ´ bien formé ª ou conforme

 

Ces règles s'appliquent aux deux types de documents vus SDD et avec DTD.

Elles découlent des recommandations du W3C consultables à l'adresse http://www.w3.org/TR/REC-xml.html ou une ancienne version en français à líadresse http://babel.alis.com/web_ml/xml/REC-xml.fr.html.

 

Dans ce qui suit vous trouverez des notations dont la signification est la suivante :

 

A?

équivaut à A ou à rien ; A facultatif.

A B

équivaut à A suivi de B. La concaténation a priorité sur l'alternation. Ainsi, A B | C D est équivalent à (A B)|(C D).

A | B

équivaut à A ou à B mais pas aux deux.

A - B

équivaut à n'importe quelle chaîne qui correspond à A mais ne correspond pas à B.

A+

équivaut à une ou plusieurs apparitions de A. Cet opérateur a priorité sur la concaténation. Ainsi, A+ B est équivalent à (A+) B.

A*

équivaut à zéro, une ou plusieurs apparitions de A. Cet opérateur a priorité sur la concaténation. Ainsi, A* B est équivalent à (A*) B.

 

Voici quelques-unes des principales règles à suivre (Les lignes sur fond bleu en italique sont tirées des recommandations du W3C) :

 

Un document XML débute par un prologue ou déclaration XML contient un ou plusieurs éléments et des divers (des commentaires, instruction de traitements ou/et des séparateurs).

[1]   document   ::=  prologue  élément  Divers*

 

Tous les éléments du document sont inclus dans un élément racine qui s'ouvre avant tous les autres et qui se termine après tous les autres.

 

Un élément est délimité par une  balise ouvrante et fermante.

 

[39]   élément  ::=  BaliseŠlémVide  | BaliseO contenu  BaliseF

 

 

Une balise est définie de la façon suivante

BaliseO est la balise ouvrante

BaliseF est la balise Fermante

Le point d'interrogation (?) indique que la partie suffixée par ? est optionnelle.

[40]   BaliseO  ::=  '<' Nom (S Attribut)* S? '>'                                                                       

[41]   Attribut  ::=  Nom  Šgal  ValeurAtt                                                                                                                                                

[42]   BaliseF  ::=  '</' Nom S? '>'                                                                 

 

Le nom d'une même balise ouvrante et fermante doit utiliser la même casse.

<balise> est différente de <Balise>

 

Le nom d'une balise ne peut :

-commencer par un chiffre

-contenir d'espaces

-commencer par xml quelque soit la casse

 

 

Les balises doivent être fermées dans l'ordre inverse où elles ont été ouvertes, c'est la règle FOLC (First Open Last Close)

 

 

Une balise ne contenant pas díélément (balise vide) doit se terminer par le caractère /

<balise/> ou, si vous utilisez la syntaxe habituelle, <balise></balise>

 

 

Les attributs d'une balise sont entre guillemets

 

[41]   Attribut  ::=  Nom  Šgal  ValeurAtt

[10]   ValeurAtt   ::=  '"' ([^<&"] | Appel)* '"'        |"'" ([^<&'] | Appel)* "'"

 

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

 

 

Tous les caractères entrant dans la syntaxe XML doivent être codés explicitement comme en HTML (&lt; pour < ...)

 

 

Les espaces, les tabulations, les sauts de ligne peuvent être inclus dans la construction des  balises pour séparer les noms, des attributs, des valeurs, pour rendre le code plus lisible mais ces caractères ne doivent pas se situer juste après le signe indiquant l'ouverture d'une balise à savoir le signe <

 

 

 

Définition

 

Un élément est constitué d'une balise ouvrante et fermante ainsi que d'un contenu texte qui peut être vide, plus, éventuellement d'autres éléments. Le nom de l'élément est celui de la balise qui le délimite.

 

Exemple

 

<balise1><balise2>texteA</balise2></balise1>

L'élément balise1 contient l'élément balise2.

 

Un élément important est l'élément racine (root). Il va englober, délimiter et décrire tout le document. Le nom de la balise de départ qui le constitue est ce que vous désirez. Il est malgré tout conseillé de lui donner un nom qui va clairement caractériser le document.

Si vous créez un document portant sur l'organisation d'une université, si vous donnez comme nom à la balise de líélément racine : <truc>, ce n'est pas très parlant. Par contre <organisation_universite> le sera plus.

 

Définition

 

Une balise possède un nom, peut contenir 0 ou plusieurs attributs et délimite un élément.

Le nom peut être ce que vous désirez mais il doit être conforme aux règles décrivant un document ´ bien formé ª.

 

d. Les schémas

 

Il existe une alternative aux DTD qui commence à prendre de l'importance : les schémas.

Vous trouverez l'information sur le site du W3C : http://www.w3.org/XML/Schema.

La première recommandation date du 2 Mai 2001. Cet outil est encore très jeune et encore moins supportée à ce jour que les DTD.

Le XML Schema va pallier certains défauts du système avec DTD dont le principal est le non contrôle du type d'information que peut contenir un élément ou le contenu d'un attribut. De plus, le XML Schema est lui-même en XML ce qui n'est pas le cas de la DTD d'où une possibilité de contrôle avec les outils habituels.

Le problème que pose les schémas aujourd'hui est qu'à la différence des DTD ils n'étaient pas inclus dans la recommandation XML 1.0, ils ont été ajoutés ensuite d'où un petit nombre d'applications qui les gère.

 

 

III.2 Construction d'un document XML

 

         Un document XML ´ bien formé ª est constitué de plusieurs parties respectant les règles vues précédemment. Cette section va détailler la construction d'un document XML.

 

a. Le prologue

 

Le prologue est une déclaration de type de document qui doit se situer en première ligne. Les autres informations qui le constituent doivent se situer entre la première ligne et la ligne qui contient l'élément racine.

Selon la recommandation du W3C, la structure doit suivre les règles de construction suivantes :

 

[22]   prologue   ::=  DéclXML? Divers* (déclTypeDoc Divers*)?    

[23]   DéclXML   ::=  '<?xml' InfoVersion DéclCodage? DéclDocAuto?

 S? '?>'    

[24]   InfoVersion   ::=  S 'version' Šgal ("'" NumVersion "'" | '"'

NumVersion '"')    

[25]   Šgal   ::=  S? '=' S?   

[26]   NumVersion   ::=  ([a-zA-Z0-9_.:] | '-')+   

[27]   Divers   ::=  Commentaires | IT |  S

 

ÿ    La déclaration XML ( DéclXML)

 

Elle peut posséder trois propriétés :

 

La version (InfoVersion)

<?xml version="1.0"?>

 

Le type de codage des caractères utilisés (DéclCodage) non obligatoire

Par défaut le codage est UTF-8. Ce dernier est de plus en plus utilisé. Malgré tout, líISOLatin1 c'est à dire le codage ISO-8859-1 est lui aussi toujours díactualité. Il permet d'obtenir des accents dans les noms des éléments.

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

 

Le chargement d'une DTD (DéclDocAuto) non obligatoire

La propriété est standalone que l'on retrouve dans les documents SDD. Si la valeur associée est yes, il n'y a pas de DTD

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

 

ÿ    La déclaration du type de document

 

Cette déclaration, que l'on retrouve dans la partie ((déclTypeDoc Divers*)?), n'est pas obligatoire mais, si elle est utilisée, permet notamment, pour les documents valides, d'indiquer où se situe la DTD de référence. Dans ce cas, la propriété standalone vue ci-dessus dans la déclaration XML possède la valeur no (celle par défaut).

Cette déclaration ou définition est structurée de la façon suivante :

 

[28]  déclTypeDoc ::=  '<!DOCTYPE' S Nom (S IdExterne)? S? ('['

 (déclBalisage | AppelEP |    S)* ']' S?)? '>'

[29]  déclBalisage ::=  déclŠlément | DéclListeAtt | DéclEntité |

         DéclNotation | IT | Commentaires

 

Cette déclaration ressemble à ceci :

<!DOCTYPE élément-racine

déclaration concernant la DTD (accessibilité, chemin, URL)

[

 ensemble de déclarations (élément, attributs, entités, fragments de DTD)

]>

 

Exemple

 

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

<!DOCTYPE organisation-université SYSTEM "http://www.example.com/DTD/ou.dtd"

[

 <!ENTITY nomuniv="Paris VI Jussieu">

]>

 

Cette partie est détaillée dans le chapitre portant sur les DTD.

Sachez seulement que ce document dont l'élément racine est  organisation-université, est structuré, en respectant la ´ grammaire ª contenue dans le fichier de Définition de Type de Document dont l'URL est  http://www.example.com/DTD/ou.dtd.

De plus, lors du chargement de ce document (même sans transformation préalable), les occurrences de la chaîne &nomuniv situées dans le document XML, sont remplacées par le texte entre guillemets dans la déclaration de l'entité (ENTITY).

 

Dans le cas où vous désireriez déclarer des entités sans nécessairement utiliser une DTD, vous conservez la déclaration DOCTYPE, mais, vous n'indiquez pas de DTD. N'oubliez pas non plus d'affecter la valeur yes à l'option standalone.

 

Exemple

 

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

<!DOCTYPE organisation-université

[

 <!ENTITY nomuniv="Paris VI Jussieu">

]>

....

 

Cette partie n'est qu'une vue rapide de cette déclaration du type du document à ne pas confondre avec la Définition du Type de Document (DTD).

 

b. Les éléments

 

Une fois les déclarations effectuées, la construction du document peut débuter.

Un élément est constitué de la façon suivante :

 

[39]   élément  ::=  BaliseŠlémVide  | BaliseO contenu  BaliseF  

[43]   contenu  ::=  (élément  | DonnéesTextuelles  | Appel  | SectionDT

  | IT  | Commentaire)*

[44]   BaliseŠlemVide  ::=  '<' Nom (S Attribut)* S? '/>'

 

Un élément peut donc contenir :

 

Seulement du texte

<Président-université>Jean Dubois</Président-université>

D'autres éléments et éventuellement du texte

<Président-université>

<Prénom>Jean</Prénom><Nom>Dubois</Nom>

</Président-université>

Rien (élément vide)

<Image source="../IMAGES/logo.gif"/>

 

Dans le cas d'un élément vide, vous pouvez aussi conserver la syntaxe habituelle :

<Image source="../IMAGES/logo.gif"></Image>

 

Dans l'exemple, l'élément Image possède un attribut qui se nomme source et qui possède la valeur ../IMAGES/logo.gif.

 

N'oubliez pas que ces éléments doivent respecter les règles du document bien formé.

 

Remarque

 

Dans une même balise, un même attribut ne peut être présent qu'une seule fois. De plus, le contenu peut être défini par la DTD ou le schéma obligeant ainsi le rédacteur à suivre strictement la grammaire de cette balise.

Il est interdit d'utiliser des attributs commençant par xml: l'utilisation est réservée nous le verrons plus tard.

 

La syntaxe de l'attribut est le suivant :

 

[41]   Attribut  ::=  Nom  Šgal  ValeurAtt

[10]   ValeurAtt   ::=  '"' ([^<&"] | Appel)* '"' |"'" ([^<&'] | Appel)* "'"

[67]   Appel   ::=  AppelEntité | AppelCar    

[68]   AppelEntité   ::=  '&' Nom ';'

[69]   AppelEP   ::=  '%' Nom ';'

[5]   Nom   ::=  (Lettre | '_' | ':') (CarNom)*

[25]   Šgal   ::=  S? '=' S?

[3]   S   ::=  (#x20 | #x9 | #xD | #xA)+

 

(#x20 correspond à l'espace, #x9 au retour chariot, #xD au retour à la ligne, #xA à la tabulation et le signe + indique que l'on peut en avoir plusieurs.)

 

c. Les espaces de noms ou espaces de nommage

 

Imaginez que vous ayez à effectuer un travail de rédaction en groupe; une documentation sur les nouvelles technologies par exemple. Vous êtes en petits groupes, chacun de ces groupes rédige un document en XML dans un domaine particulier, téléphonie, informatique, wireless ...

Une fois les documents rédigés, tout est rassemblé pour ne faire plus qu'un seul document XML.

Et là, le parseur XML ne comprend plus rien car certains éléments portent le même nom.

De plus, vous aurez un autre problème car ces éléments, même si ils ont le même nom, ne décrivent pas la même chose. Par exemple l'élément dont la balise qui le caractérise est portable n'a pas la même signification en téléphonie qu'en informatique.

Comment s'y retrouver ?

Tout simplement en préfixant les noms des balises par un autre nom qui lui représente le document dans lequel cette balise  a une signification précise. On parle díun espace de noms (namespace).

On retrouve cela, par exemple, lors de l'utilisation  de XSLT le langage de transformation, les balises sont préfixées par le nom xsl.

 

Vous pouvez trouver les spécifications sur le site du W3 :

http://www.w3.org/TR/REC-xml-names/

 

Une partie de la grammaire est la suivante :

 

[1] NSAttName  ::= PrefixedAttName | DefaultAttName

[2] PrefixedAttName  ::= 'xmlns:' NCName 

[3] DefaultAttName  ::= 'xmlns'

[4] NCName  ::= (Letter | '_') (NCNameChar)*  /* An XML Name, minus

 the ":" */

[5] NCNameChar  ::= Letter | Digit | '.' | '-' | '_' | CombiningChar |

 Extender

[6] QName  ::= (Prefix ':')? LocalPart

[7] Prefix  ::= NCName

[8] LocalPart  ::= NCName

[9] STag  ::= '<' QName (S Attribute)* S? '>' 

[10] ETag  ::= '</' QName S? '>'

[11] EmptyElemTag  ::= '<' QName (S Attribute)* S? '/>'

 

En clair, la syntaxe de ces espaces de noms peut être résumée de la façon suivante :

 

 

 

Espace de noms

<motclé:balise xmlns:motclé='URL'>

 <motclé:balise2> ... </motclé:balise2>

 ...

 ...

</motclé:balise>

 

L'URL n'est pas vérifiée, vous pouvez mettre la valeur que vous voulez. Elle permet d'ajouter une information qui doit rendre l'ensemble de l'espace de nom unique.

La partie motclé correspond au nom qui est donné à l'espace de noms créé.

Pour alléger la syntaxe, il est possible d'omettre la partie motclé de l'espace de noms par défaut, celui qui englobe tous les autres.

 

Exemple

 

<NTIC:doc xmlns:NTIC='http://www.example.com'>

<NTIC:portable>Téléphone léger sans fils</NTIC:portable>

<informatique:portable xmlns:informatique='http://www.example.com'>

Ordinateur compact, léger pouvant fonctionner sur batterie

</informatique:portable>

</NTIC:doc>

 

devient alors

 

<NTIC xmlns='http://www.example.com'>

<portable>Téléphone léger sans fils</ portable>

<informatique:portable xmlns:informatique='http://www.example.com'>

Ordinateur compact, léger pouvant fonctionner sur batterie

</informatique:portable>

</NTIC>

 

Ce type de préfixe est utilisé dans d'autres langages tels php ou perl pour l'inclusion d'autres programmes ou fonctions, évitant ainsi une certaine confusion.

 

d. Les entités

 

Cet élément a déjà été évoqué dans le paragraphe portant sur le prologue. En effet, dans le prologue, l'entité permet le remplacement des références à un mot clé préfixé par le caractère &. Il va donc permettre de stocker des informations.

En XML les caractères spéciaux doivent être notés de manière explicite, comme cela doit l'être en HTML (< -> &lt; ...).

Les entités vont notamment permettre de stocker ces définitions évitant ainsi à l'utilisateur de devoir les ressaisir à chaque fois. Elles vont aussi permettrent de définir des caractères inaccessibles avec votre clavier.

Vous avez deux types de notations pour définir les caractères.

Si un caractère commence par # suivi d'un ou plusieurs chiffres ([0-9]+) et se terminant par le délimiteur ;, la notation est une notation décimale du code à insérer.

Si un caractère commence par #x suivi d'un ou plusieurs chiffres ou lettres jusqu'à F ([0-9a-fA-F]+) et se terminant par le délimiteur ;, la notation est une notation hexadécimale de ce code. La table de code utilisée est la table ISO/CEI 10646.

 

Exemple

 

#38 renvoie le caractère &

#x20 renvoie un espace.

 

Les différents types d'entités

 

Il en existe deux grands types :

 

¸    Les entités générales

Elles peuvent être internes ou externes (voir ci-dessous). Si elles sont externes, elles pourront être analysables ou non-analysables.

Ces entités sont déclarées à l'intérieur du document lui-même.

¸    Les entités paramètres

Ces entités ne sont disponibles que dans les DTD. Ce sont des entités analysables (voir ci-dessous).

Les appels aux entités paramètres se font en utilisant le caractère % suivi du nom de l'entité et du délimiteur de fin le point virgule (;).

Elles peuvent être internes (très rarement utilisé) ou externes (voir ci-dessous).

A partir du moment où vous utilisez une entité paramètre, la valeur de l'attribut standalone dans la déclaration XML doit posséder la valeur no (standalone="no").

 

Ces entités peuvent avoir d'autres spécificités :

 

¸    Les entités analysables ou parsées (parsed)

Ce sont des noms associés à des valeurs ou à des bouts de code XML. Une déclaration d'entités permet de les initialiser. Ensuite, dans le document, des appels à ces entités permettent de les remplacer par une valeur ou par un bout de code XML.

¸    Les entités non-analysables ou non-parsées

Ces entités ne sont pas analysables tout simplement parce que le contenu associé à l'entité est d'un format non compréhensible par le parseur XML. Cela peut par exemple être une image, un son, une vidéo ...

Cette entité doit être déclarée.

 

 

La déclaration d'entités

 

[70]   DéclEntité   ::=  DéclEG | DéclEP 

[71]   DéclEG   ::=  '<!ENTITY' S  Nom S DéfEntité S? '>'    

[72]   DéclEP   ::=  '<!ENTITY' S  '%' S Nom S DéfEP S? '>'    

[73]   DéfEntité   ::=  ValeurEntité  | (IdExterne DéclNdata?)    

[74]   DéfEP   ::=  ValeurEntité | IdExterne

 

Il existe à nouveau différents types de déclaration comme le montre la grammaire ci-dessus. Ces deux types de déclarations peuvent être utilisés aussi bien pour des entités générales que pour des entités paramétres.

 

ÿ    Les déclarations d'entités internes

Ces entités sont des entités analysables

<!ENTITY nom "valeur">

 

Exemple

<!ENTITY version "Form@Web V6.1">

 

¸    Les déclarations d'entités externes

Ces entités sont des entités non-analysables

Elles référencent des éléments à importer qui se situe dans d'autres documents que celui qui contient cette déclaration.

[75]   IdExterne   ::=  'SYSTEM' S LittéralSystème       

                                   | 'PUBLIC' S IdPubLittéral S LittéralSystème  

Le mot clé SYSTEM indique que l'entité est un document externe. Par contre, si ce document n'est plus accessible, le parseur provoquera une erreur. Pour éviter ce problème vous pouvez utiliser des documents PUBLIC (officiel) qui ne change jamais d'adresses. Souvent à un mot clé SYSTEM une ligne PUBLIC est ajoutée, si l'une des adresses est erronée l'autre prend le relais.

Exemple

<!ENTITY debut SYSTEM "XML/entete.xml">

<!ENTITY debut PUBLIC "FormatXML/LangueFr"

         "http://www.example.com/AUTRE/entete.xml">

 

¸    Les déclarations d'entités non analysables

Cette déclaration se rapproche de la déclaration ci-dessus à la différence prêt qu'elle inclus une nouvelle information qui est NDATA qui indique le format de l'élément inclus (GIF, PNG, ...).

[76]   DéclNdata   ::=  S 'NDATA' S Nom

 

Exemple

<!ENTITY logo SYSTEM "IMAGE/logo-societe.gif" NDATA GIF>

 

De plus, il existe 5 entités générales internes prédéfinies dans la recommandation XML :

 

Caractère

Appel 

Déclaration de l'entité

Code décimal

&

&amp;

<!ENTITY amp "&#38;#38;">

38 vaut &

<

&lt;

<!ENTITY lt       "&#38;#60;">

60 vaut <

>

&gt;

<!ENTITY gt      "&#62;">

62 vaut >

"

&quot;

<!ENTITY quot  "&#34;">

34 vaut "

'

&apos;

<!ENTITY apos  "&#39;">

39 vaut '

 

Si par exemple j'appelle l'entité amp, cela donne &amp; ce qui se traduit par &#38;#38; c'est à dire &#38; donc &.

´ ... les caractères < et & dans les déclarations de ´ lt ª et ´ amp ªsont déguisés doublement, de manière à satisfaire l'exigence que le remplacement d'entité soit bien formé. ª

 

L'appel d'entités

 

La grammaire est la suivante

 

[67]   Appel   ::=  AppelEntité | AppelCar    

[68]   AppelEntité   ::=  '&' Nom ';'  

[69]   AppelEP   ::=  '%' Nom ';'

[66]   AppelCar   ::=  '&#' [0-9]+ ';'       | '&#x' [0-9a-fA-F]+ ';' 

 

Une entité peut être appelée en utilisant le caractère & ou le caractère %.

Dans le cas ou le nom de l'entité est préfixé par le signe %, l'entité appelée est une entité paramètre. Elle se situe alors dans un document externe : une DTD. Il ne peut y avoir d'appel d'entités externes autre part que dans une DTD. La déclaration de l'entité paramètre dans la DTD se fait de la façon suivante :

 

Exemple

 

Extrait de la DTD XHTML1.1

<!ENTITY % XHTML.version  "-//W3C//DTD XHTML 1.1//EN" >

 

L'appel se fera de la manière suivante :

%XHTML.version

 

e. Autres éléments

 

Les commentaires

 

Comme pour tout document ressemblant à de la programmation, l'aspect commentaire est très important pour vous mais aussi pour ceux qui doivent soit travailler sur le même document, soit reprendre votre document pour y apporter des modifications.

 

En XML la syntaxe est la suivante :

 

[15]   Commentaires   ::=  '<!--' ((Car - '-') | ('-' (Car - '-')))* '-->'

 

Exemple

 

< !-- Ceci est un commentaire valide -->

 

 

Les sections CDATA

 

Lorsque vous désirez intégrer dans votre document des éléments tels ceux utilisés pour le balisage, des caractères spéciaux ..., vous pouvez utiliser des entités. Mais, si le contenu à intégrer est assez grand, l'utilisation de l'entité ne sera pas pratique.

Pour pallier ce problème, il existe des sections CDATA qui peuvent s'inclure n'importe où dans le document XML, qui vont transformer le contenu de ces sections en données textuelles c'est à dire, en données non analysables. Même si vous y insérez des éléments de balisage ceux si ne seront pas transformés et apparaîtrons tel quel dans votre document.  Ce système est souvent utilisé pour intégrer, par exemple, des formules mathématiques qui utilisent souvent des caractères spéciaux comme < ou > qui normalement définissent les limites des balises XML.

 

La syntaxe est la suivante

 

[18]   SectionDT   ::=  DébutDT DonnéesDT FinDT    

[19]   DébutDT   ::=  '<![CDATA['   

[20]   DonnéesDT   ::=  (Car* - (Car* ']]>' Car*))    

[21]   FinDT   ::=  ']]>'

 

Exemple

 

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

<!DOCTYPE mathematique [

<!ENTITY cp "Jacquenod F">

<!ELEMENT mathematique (inequation)>

<!ELEMENT inequation (formule,copyright)>

<!ELEMENT formule (#PCDATA)>

<!ELEMENT copyright (#PCDATA)>

]>

<mathematique>

<inequation>

<formule><![CDATA[La formule 2x + 3 > 5 doit etre delimitee par la balise <equation>formule</equation>]]></formule>

<copyright>

&cp;

</copyright>

</inequation>

</mathematique>

 

Résultat