Présentation de XML |
Un document XML se présente sous la forme d'un simple fichier texte contenant des balises de type <balise> (ou "tag" en anglais). On trouve cinq type de balises en XML: les éléments (<balise>), les entités (é), les commentaires (<!-- commentaire -->), les instructions de traitement (<?xml ?>, <?php ?>) et les sections ignorées. La principale difficulté pour le débutant en XML est de bien comprendre qu'en réalité cette norme ne définit aucun élément par défaut. Comment savoir alors lesquels utiliser ? Nous atteignons ici la principale différence entre les deux types de documents XML pouvant exister. D'un côté nous avons les documents "bien formés" (c'est à dire que les balises sont fermées correctement, sans croisement, que les règles de syntaxe sont respectées, par exemple que les valeurs d'attributs sont bien entre guillemets doubles, etc...). De l'autre nous avons les documents valides, bien formés. Un document est déclaré valide s'il est accompagné d'un second document nommé DTD (Document Type Definition). Un tel fichier déclare l'ensemble des balises et des attributs des balises admissibles par le document lié à la DTD. L'écriture d'une DTD n'est pas toujours des plus aisées mais garantie une certaine rigueur dans l'utilisation de votre document. |
![]() Une interface réalisée en XML. |
Normalement, un document XML ne pouvant être validé par sa DTD ne devra pas être interprété par quelconque logiciel. Voici un exemple de document bien formé: |
<?xml version="1.0" ?> <magazine titre="Login:" numero="Septembre 2000"> <article rubrique="Pratique" titre="XML"> Text de l'article. </article> </magazine> |
Vous noterez l'en-tête obligatoire à tout document XML en première ligne. Comme vous le voyez, ce document est bien formé, mais cependant rien ne nous dit que nous l'avons écrit en respectant les règles attendues. Voici donc le même document, valide: |
<?xml version="1.0" ?> <!DOCTYPE magazine SYSTEM "magazine.dtd" > <!-- suite du fichier comme précédemment --> |
Et voici la DTD associée (magazine.dtd): |
<!ELEMENT magazine (article)* > <!ATTLIST magazine titre CDATA #REQUIRED numero CDATA #REQUIRED > <!ELEMENT article (#PCDATA) > <!ATTLIST article rubrique CDATA #REQUIRED titre CDATA #REQUIRED > |
Cette DTD indique que le document commence par la balise <magazine> (<!DOCTYPE magazine ...>), que cette balise doit posséder les attributs titre et numero, qu'elle peut contenir un nombre quelconque de balises <article> qui elles-mêmes doivent posséder les attributs rubrique et titre, et contenir du texte (#PCDATA). L'écriture d'une DTD ne pouvant être abordée de manière satisfaisante ici, nous apprendrons plus en détails comment en définir une dans un futur article. On remarquera enfin que l'on aurait pu remplacer SYSTEM "magazine.dtd" dans la balise <!DOCTYPE> par [ {contenu de magazine.dtd} ]. Cependant, dans la pratique, on utilise la notation [ DTD ] pour étendre localement des DTD et non en définir de complètes. Enfin, la balise <!DOCTYPE> commence, comme toutes les balises de "contrôle" par un point d'exclamation signifiant que cette balise fait partie de la norme XML définie par le W3C. |
![]() Une DTD (Document Type Definition). |
Documents XML |
![]() Page internet générée par XML et XSL. |
Si vous avez bien suivi, vous aurez peut être deviné qu'en réalité la
norme HTML n'est autre qu'une DTD de la norme XML ! En réalité, un
navigateur, pour vérifier la validité d'une page HTML, peut la gérer comme
un fichier XML en admettant par défaut une DTD correspondant au support de
la norme HTML en vigueur (actuellement HTML 4.0). Il est même possible de
trouver ces DTD sur Internet. Malgré ces ressemblances frappantes, XML
diffère quelque peu de son cousin. La première différence est d'ordre
syntaxique. Les balises dites "vides" (c'est à dire ne pouvant contenir
aucune autre balise ni aucune donnée) doivent s'écrire <balise /> en
XML. Prenons l'exemple de la balise <br> bien connue des créateurs
de sites personnels. Si jamais vous devez être amené à en faire usage dans
un document XML, vous devrez écrire: <br/>. Ce qui est d'ailleurs
d'une logique implacable (présence du signe de fermeture / dans la balise
même). Au delà de cette différence formelle, XML propose deux balises
spéciales extrêmement puissantes: |
<?xml version="1.0" ?> <!DOCTYPE magazine SYSTEM "magazine.dtd" [ <!ENTITY pra "Pratique" > ] > <!-- suite du document --> |
Chaque entité &pra; serait remplacée par la chaîne "Pratique". Notons que la définition de l'entité se fait dans une déclaration de DTD de type interne mélangée à une DTD externe (SYSTEM "fichier.dtd"). Nous aurions donc pu continuer le document ainsi: |
<article rubrique="&pra;" titre="XML">Article
XML</article> <artcile rubrique="&pra;" titre="3D">Article 3D</article> |
L'usage des entités peut faire gagner un temps très important ! Et
surtout faciliter la maintenance des documents en définissant par exemple
la mise à jour d'un logiciel dans une DTD utilisée par tous les documents
relatifs au logiciel. Une modification en entraîne une
infinité. |
![]() En provenance d'AlphaWorks, un parser validant. |
Applications |
XML est presque exclusivement associé à Java car l'universalité de ces
deux technologies les rend très complémentaires l'une de l'autre. La
majeure partie des logiciels tirant parti de XML sont donc écrits en Java.
Parmi les applications de XML on notera la génération de pages HTML depuis
des documents XML et leur feuilles de styles associées (feuilles XSL,
écrites en... XML !), mais aussi description d'interfaces graphiques,
bases de données, descriptions hiérarchicales (par exemple pour des scènes
graphiques modélisées en 3D), propriétés utilisateurs, etc... |
![]() Un fichier XML bien formé, non valide. |
by Romain Guy |