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é.
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.
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 (< 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 < |
|
|
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.
<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.
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.
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) ]> |
<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.
<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é.
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.
<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 (< ->
< ...).
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.
#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 |
&
|
& |
<!ENTITY
amp "&#38;"> |
38
vaut & |
<
|
< |
<!ENTITY
lt
"&#60;"> |
60
vaut < |
>
|
> |
<!ENTITY
gt
">"> |
62
vaut > |
"
|
" |
<!ENTITY
quot """>
|
34
vaut " |
' |
' |
<!ENTITY
apos
"'"> |
39
vaut ' |
Si par exemple j'appelle l'entité amp, cela
donne & ce qui se traduit par &#38; c'est à dire & 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 :
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.
[18]
SectionDT
::= DébutDT DonnéesDT
FinDT
[19]
DébutDT
::=
'<![CDATA['
[20]
DonnéesDT
::= (Car* - (Car*
']]>' Car*))
[21]
FinDT ::= ']]>'
<?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>