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:

<!ENTITY> et <![CDATA[]]>

La première est très pratique lorsqu'il y a redondance d'une information. Si vous pratiquez HTML, vous connaissez les entités de type &lt; ou &eacute;. XML n'en offre que cinq par défaut: &lt; (<), &gt; (>), &quot; ("), &apos; (') et &amp; (&). Cependant vous pouvez définir les vôtres que cela soit dans le document même ou dans sa DTD (si la DTD est externe, l'entité est accessible par tout document en faisant usage). Si dans notre exemple de document précédent nous avions déclaré:



<?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é.
L'autre balise, <![CDATA[]]> permet d'insérer une chaîne de caractères "telle qu'elle", autrement dit non interprétée par le moteur XML. Pour intégrer la chaîne < dans un document XML, on pourra taper: <![CDATA[<]]>.




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...
Pour vous donner une idée de l'apport de XML dans une application, vous pourrez essayer Ant, une Make puissant et multiplateforme (http://jakarta.apache.org/ant), FiJI, un générateur d'installeurs (http://www.sdv.fr/pages/casa/html/fiji.html), XT, un générateur de fichiers HTML basé sur les feuilles XSL (http://www.jclark.com/) ou encore Jext, un éditeur de code source (http://www.jext.org/). De nombreux outils pour XML ou l'intégrant sont disponibles sur le site alphaWorks d'IBM (http://www.alphaworks.com/). Ce site est une véritable mine d'or pour les fanatiques de XML (éditeurs, visualiseurs, dérivés, parsers validants, ...), n'hésitez donc pas à y pointer le bout de votre navigateur. Enfin, deux sites indispensables pour découvrir XML: http://www.w3c.org/ et http://www.xml.com/.

Après cette brève description de la norme XML, nous nous pencherons sur l'écriture de DTD et sur la gestion de XML dans une application Java.




Un fichier XML bien formé, non valide.



[ Index | Suivant ]



by Romain Guy