cours Cours XML
© Magali Contensin ;
1999 - 2007
 

Structure d'un document

Un document XML, comme nous l'avons vu comporte des éléments avec ou sans attributs qui fournissent des méta-informations sur l'information i.e. sur le contenu du document. Un document XML comporte :

Prologue

Déclaration XML

<?xml version="1.0" [encoding = "encodage"] [standalone = "yes|no"] ?>

Cette déclaration (qui est en fait une instruction de traitement) contient des informations pour le processeur. Elle indique que ce document est conforme à la version 1.0 de la norme XML. Elle peut préciser le jeu de caractères utilisés dans le document (encoding) et s'il y a des références externes ou non (standalone).

Déclaration de type de document (DTD)

La DTD peut être incluse dans le document ou être dans un fichier externe. Elle est placée dans un fichier si elle doit servir dans plusieurs documents XML différents.
DTD externe
<!DOCTYPE element_racine SYSTEM|PUBLIC [nom] uri_DTD> <!DOCTYPE element_racine SYSTEM "uri_DTD"> <!DOCTYPE element_racine PUBLIC "nom" "uri_DTD">

DOCTYPE permet de déclarer le type du document, le nom de l'élément racine est précisé. SYSTEM indique que la DTD est stockée sur l'ordinateur à l'adresse précisée. PUBLIC est utilisé quand la DTD est publiée pour beaucoup de personnes, dans ce cas le processeur XML peut utiliser le nom pour retrouver cette DTD (ex une DTD publiée par le W3C), en cas d'échec il utilise l'uri.

DTD interne
La DTD interne se déclare entre crochets dans le DOCTYPE. <!DOCTYPE librairie [ <!ELEMENT livre (titre, auteur, editeur..., commentaire?)> <!ELEMENT titre (#PCDATA)> ... <!ELEMENT commentaire (#PCDATA)> ]>

Instructions spécifiques pour les applications utilisant le document

Les instruction de traitement ou PI (processing instruction) permettent aux développeurs de placer des informations spécifiques pour une application à l'intérieur du document. Ces informations seront transmises à l'application. Elles ont la forme :
<?Application instruction+?>

On peut les utiliser dans n'importe quelle partie du document cependant elles sont en général utilisées dans le prologue.

<?XML ENCODING="UTF-8"?> ajoute une instruction pour donner la méthode de codage de caractères : 8 bits.

pour que IE5 puisse visualiser un document XML avec une feuille de style CSS on utilisera l'instruction de traitement :
<?xml-stylesheet type="text/css"?>

Voici un document XML bien formé qui n'utilise pas de DTD
<?xml version="1.0"?> <greeting>Hello, world!</greeting>

Arbre des éléments

Représentation du document sous forme d'arbre

Tout document structuré peut être représenté sous forme d'arbre. Prenons par exemple un fichier HTML : <HTML> <HEAD> <TITLE>essai</TITLE> </HEAD> <BODY> <P>Un texte <EM>important</EM> !</P> <P>autre texte</P> </BODY> </HTML>

arbre

Il y a des parents, des enfants, des frères. HTML est le parent des éléments HEAD et BODY qui sont des frères. EM est un enfant de P qui est un enfant de BODY. Le document a donc une structure logique. L'élément document, est l'élément racine qui contient tous les autres éléments et données du document (<HTML>...</HTML>).

Les noeuds d'un document XML peuvent être du type :

La racine de l'arbre n'est pas l'élément qui englobe tous les autres, comme avec HTML mais un élément de type Document qui comporte :

Éléments

Un élément non vide est constitué de trois parties, une balise ouvrante qui peut contenir des attributs, un contenu (des donnés et/ou d'autres éléments) et une balise fermante.

Les éléments vides ne contiennent ni texte, ni autres éléments, ils peuvent avoir des attributs.

Un nom d'élément doit commencer par une lettre ou un souligné, il peut comporter des chiffres, des lettres, des traits d'union, des points, double-points ou soulignés.

Il faut noter que les éléments sont sensibles à la casse, l'exemple ci-dessous est illégal :
<titre>...</TITRE>

Domaines de noms

Une nom d'élément peut être divisé en deux parties : domaine_de_nom:nom_element. Par exemple, xsl:template indique que l'élément template fait partie de xsl.

L'utilisation des domaines de noms n'est pas obligatoire, mais celà permet d'éviter les collisions lorsqu'on fusionne des éléments de mêmes domaines d'activité provenant de différentes sources.

les espaces de noms sont déclarés dans le document avec l'attribut xmlns:id, l'url permet de donner un domaine de nom par défaut (il peut y avoir plusieurs attributs de domaines de noms dans l'élément)
<element xmlns:prefixe=uri>

La portée est limitée à l'élément (si on le place dans la racine = tout le document). Mais on peut rencontrer dans les éléments inclus une autre déclaration de domaine de noms avec un préfixe identique, il remplace alors le précédent.

le préfixe permet d'associer un nom à un domaine de noms (utilisé quand il y a plusieurs domaines de noms dans l'élément parent). <pref:element>...</pref:element>

Attributs

propriete = "valeur" propriete = 'valeur'

Les attributs peuvent être facultatifs ou obligatoires, ils donnent des informations supplémentaires sur les éléments. Ils apparaissent uniquement dans la balise ouvrante d'un élément.

Attributs réservés
xml:lang

Sa valeur indique le langage de l'élément. Cette valeur est un code de langue ISO 639 (en minuscules) : fr, en, it,... suivi s'il y a des variantes pour la langue d'un tiret et d'un code de pays ISO 3166 (en majuscules). <livre xml:lang="en-US">

xml:space = "default | preserve"

Sa valeur indique si un espace blanc à l'intérieur d'un élément est significatif et ne doit pas être altéré par le processeur XML. Avec default le processeur XML est libre de faire ce qu'il veut avec les espaces. Si un élément doit se comporter comme le <pre> de HTML il faut utiliser preserve.

Entités

Internes
Appel d'une entité dans un document : &nom_entite;

Les caractères réservés de XML sont remplacés par des entités internes. Ces caractères sont les mêmes qu'en HTML : & < > " '. Les entités qui permettent de les représenter sont respectivement &amp; &lt; &gt; &quot; &apos;

Tous les caractères peuvent être remplacés par une entité qui donne leur code &#code_car; (par ex. &#65; pour le A).

Ces deux types d'entités étaient particuliers car prédéfinis, vous pouvez si vous le souhaitez définir vos propres entités par le biais de la DTD. La déclaration suivante :
<!ENTITY deg "&#176;"> permettra d'utiliser l'abréviation &deg; dans le document, par exemple :
il fait 25&deg;C.

Les entités peuvent appeler d'autres entités et peuvent provoquer leur inclusion dans le document XML.

Externes

Les entités externes ne sont pas contenues dans le document courant, le processeur XML ignore le contenu de l'entité et le transmet à l'application. Les entités non parsées peuvent être utilisées pour les fichiers images, les fichiers sons, les fichiers vidéo... Elles sont appelées comme valeur d'un attribut (comme en HTML on avait le chemin de l'image comme valeur de l'attribut src de l'élément img). Dans un document XML, l'attribut doit être déclaré de type ENTITY dans la DTD et la déclaration d'entité doit spécifier une NOTATION déclarée. Voici un extrait de DTD qui définit plage comme une notation JPEG et l'utilise comme valeur de l'attribut source de l'élément vide image. <!-- extrait de la DTD --> <!NOTATION JPEG SYSTEM "Joint Photographic Experts Group"> <!ENTITY plage SYSTEM "plage.jpg" NDATA JPEG> <!ATTLIST image source ENTITY #REQUIRED> <!-- appel dans le document --> <image source="plage"/>

NB : les graphiques sont simplement des liens vers une image plutôt que vers un texte, ils peuvent donc être créés de n'importe quelle manière supportée par les spécifications XLink et XPointer. Ils peuvent aussi être incorporés avec le mécanisme NOTATION et ENTITY.

Encodage des caractères

Le xml prend mieux en charge les caractères accentués que le HTML où on utilise des appels d'entités (par exemple : &eacute; pour é). Les spécifications XML indiquent que tous les processeurs XML devront accepter les codages UTF-8 et UTF-16 de la norme ISO 10646 qui couvre la plupart des langages humains.

ISO 646 : code ASCII, codage sur 7 bits (128 caractères) utilisé pour les langues non accentuées comme l'anglais (le 8eme bit de l'octet est un bit de contrôle).

ISO 8859/1 : codage sur 8 bits (256 caractères, le 8eme bit code les accents) pour les langues européennes accentuées (les 128 premiers caractères sont les mêmes que ceux de l'ISO 646).

ISO 10646 : permet de coder toutes les langues européennes et asiatiques. Grâce à des combinaisons d'adressage ou UTF (UCS Transformation Format) il permet d'utiliser un nombre variable de bits, selon les besoins d'une langue, UTF-8 (codage de 8 bits à 48 bits les 128 premiers car sont identiques au code ASCII, par contre il est incompatible avec ISO 8859-1 au delà du code 126), UTF-16 (jusqu'à 32 bits par combinaison).

Unicode : 16 bits permet de coder l'arabe, le chinois, ... en fonction du degré de codage, on a des appelations différentes : UCS-4 code sur 4 octets (32 bits), et UCS-2 code sur 16 bits (c'est le standard unicode).

L'encodage se précise dans la déclaration xml :
<?xml version="1.0" encoding="UTF-16"?>

Tous les ordinateurs ne peuvent pas prendre en charge le jeu de caractères avancé, le dénominateur commun reste l'ASCII. Les autres caractères peuvent être appelés par un codage (numéro ISO 10646) par exemple &#38; on peut aussi déclarer une entité pour les représenter :
<!ENTITY deg "&176;">
Il fait 30&deg; celsius.

Commentaires

<!-- commentaire -->

Les commentaires sont autorisés dans le document (après le prologue). Ils peuvent inclure n'importe quel type de données sauf le --, ils ne peuvent pas apparaître à l'intérieur des balises. Le processeur ne les transmet pas forcément à une application. <p <!-- balise ouvrante de paragraphe --> >

Sections CDATA

<![CDATA[ ... ]]> Section de données que le processeur XML n'interprétera pas Ces sections permettent de passer des caractères réservés à une application (par exemple un signe mathématique <).
haut
css html
imprimer