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é),
•
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 :
§
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
:
& et & sont équivalents à &
En
outre il existe aussi des entités prédéfinies pour
les caractères utilisés par XML:
-
< 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
<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".
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 " ">
<!ENTITY iexcl "¡">
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)
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.
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.
|