Formation <xml>

© webmaster : www.inforweb.ch - contact : andre.balestrini@inforweb.ch - 1304 senarclens - 021 861 38 11 - 079 574 82 11 - ®

[< >] Ch. 2 / Principes de XML

[réf. p13 à 29]
>>> Principes de XML
>>>
Documents et fichiers XML
>>> Eléments, balises et données
>>> Arbres XML
>>> Attributs
>>> Nom XML
>>> Appel d'entité
>>> Section CDATA
>>> Commentaire
>>> Instructions de traitement
>>> Déclaration XML
>>> Vérification des contraintes de forme des documents
>>> OEM
Exemples pratiques de code XML

Si nécessaire commencer par une révision HTML : écriture des balises, lisibilité...


Principes de XML [réf. p13-14]
  1. Comment écrire des documents XML simples. Un langage ressemblant au HTML. [réf. p13/a]

  2. Bien que XML soit plus vague que HTML dans les balises qu'il autorise, il est plus stricte sur la façon de les écrire et de les positionner. On dit qu'un document XML doit être bien formé. Il n'accepte pas les erreur tolérée en HTML (balise non fermée, etc.). Avec HTML on parle de paragraphe, de ligne, de mise en forme générale, alors qu'avec XML on parle d'adresse, de nom, de bibliographie. Le XML ne sert pas à mettre en forme un document, mais en quelques sorte à le "marquer". [réf. p13/b]

  3. Exemple comparatif. [réf. p16/2/7]

    a) HTML (exm_003.txt) :

    <body>
      <h1>Devis de construction</h1>
      <p>Maison de campagne</p>
      <p>Six pièces</p>
      <p>Deux étages</p>
      <p>Coût : 450'000 euros</p>
      <p>Début de construction juin 2002, fin prévue pour octobre 2002</p>
    </body>

    b) XML (exm_004.txt) :
    <offre>
    <devis> <titre>Devis de construction</titre> <genre>Maison de campagne</genre> <pièces>Six pièces</pièces> <étages>Deux étages</étages> <coût>Coût : <estimation>450'000</estimation>euros</coût> <délais>Début de construction <début>juin 2002</début>, fin prévue pour <fin>octobre 2002</fin></délais> </devis>
    </offre>
    On constate dans ces exemples que les balises XML sont plus descriptives (métadonnées) que les balises HTML.


    Documents et fichiers XML [réf. p13-14]

  4. Un document XML contient du texte mais jamais de données binaires. [réf. p13/c]

  5. Exemple 2-1. Un document XML très simple mais complet (exm_005.xml) [réf. p14/a] :
    <person>
      Alan Turing
    </person>
  6. Un document c'est du texte. Il peut être soit stocké dans un fichier, mais aussi être enregistré dans une base de donnée ou encore généré à la volée par un script CGI sur un serveur web. Il peut également être stocké dans plusieurs fichiers et assemblé lors d'une exécution. S'il est servi par un serveur web, on lui assignera vraisemblablement un type MIME application/xml ou text/xml. Cependant des applications XML plus particulières peuvent nécessiter des types MIME plus spécifiques comme application/mathml+xml, application/XSLT+xml ou image/svg+xml. [réf. p14/a]


    Eléments, balises et données [réf. p14-15]

  7. Le documents 2-1 est composé d'un seul élément dont le type est person et dont les données textuelles sont Alan Turing [réf. p14/b]

  8. Syntaxe des balises XML (élément) :
    Chaîne de caractère délimitée par les signes < et > [réf. p14/c] + [réf. p53/6/1]

    La balises d'ouverture commence par :
    le signe < suivit du nom de l'élément puis du signe >

    La balises de fermeture commence par :
    le signe < suivit d'une barre oblique / suivit du nom de   l'élément puis du signe >

    Exemple :

    balise descriptive d'ouverture
    données textuelles à traiter balise descriptive de fermeture
    <père> Armand Duchemin </père>
    élément de type "père" début contenu de l'élément fin élément de type "père"

  9. Elément vide (sans balise de fermeture) :

    La balises est unique (ouverture-fermeture) :
    Signe < suivit du nom de l'élément puis d'une barre oblique / suivie du signe >

    Exemple : <saut_de_ligne/> [réf. 15/a]

  10. XML est sensible à la casse (révision html). La balise <père> est différente que <Père> ou que <pere>. Faite un choix définitif et adoptez-le. Ceci vous évitera pas mal de soucis ! [réf. p15/b]


    Arbres XML [réf. p15-17]

  11. Exemple 2-2. Arbre XML (exm_006.xml) [réf. p15] :
    <person>
      <name>
        <first_name>Alan</first_name>
        <last_name>Turing</last_name>
      </name>
      <profession>informaticien</profession>
      <profession>mathematicien</profession>
      <profession>cryptographe</profession>
    </person>

  12. Un arbre XML se compose d'éléments et de sous- éléments nommés aussi parents et enfants selon leurs position dans l'arbre. un sous-élément enfant à toujours un seul parent. Un élément parent peut avoir un ou plusieurs enfants.

  13. Au minimum, chaque document possède un élément sans parent qui se nomme élément racine (ou racine du document) et au minimum une donnée textuelle qui est le contenu de l'éléments.

    <person>
       Alan Turing
    </person>


  14. Le contenu d'un élément peut être un document narratif, un compte rendu, un essai d'un étudiant, une page web, etc.

  15. Exemple 2-3. Un document XML narratif (exm_007.xml) [réf. p17]
    Observer bien ce document et l'imbrication des balises :

    <biography>
    <name><first_name>Alan</first_name> <last_name>Turing</last_name>
    </name> fut le premier homme à mériter le nom d'<emphasize>informaticien</emphasize>. Bien que ses contributions dans le domaine soient trop longues à énumérer, les plus connues sont celles qui portent son nom : le <emphasize>Test de Turing</emphasize> et la
    <emphasize> Machine de Turing</emphasize>.

    <definition>Le <term>Test de Turing </term> est jusqu'à ce jour le test standard
    pour déterminer si un ordinateur est réellement intelligent. Ce test n'a jusqu'ici jamais été passé avec succès.</definition>

    <definition>La <term>Machine de Turing</term> est un automate abstrait à états finis comportant une mémoire infinie dont il peut être prouvé qu'il peut être équivalent à n'importe quel autre automate à états finis, contenant une quantité de mémoire quelconque mais fixe. Ainsi, ce qui est vrai pour une machine de Turing est vrai pour toute machine équivalente quelque soit son implémentation.</definition>

    <name><last_name>Turing</last_name></name> était aussi un parfait <profession>mathématicien</profession> et <profession>cryptographe</profession>.
    Son aide aux alliés fut cruciale pour décoder le système de communication allemand Enigma. Il se suicida le <date><day>7</day><month>juin</month><year>1954</year></date> après avoir été reconnu homosexuel et obligé de prendre des injections d'hormones féminines.
    </biography>


  16. Comme pour le HTML, les balises doivent être imbriquées correctement. Le principe d'imbrication est celui des poupées russes ou des parenthèses en mathématique (y - [x + z] ), première ouverte, dernière fermée. [Réf. p23/3/3]

    Juste (exm_008.txt) :
    <offre>
    <devis> <titre>Devis de construction</titre> <genre>Maison de campagne</genre> <pièces>Six pièces</pièces> <étages>Deux étages</étages> <coût>Coût : <estimation>450'000</estimation>francs</coût> <délais>Début de construction <début>juin 2002</début>, fin prévue pour <fin>octobre 2002</fin></délais> </devis>
    </offre>

    Faux (exm_009.xml) :

    <offre>
    <devis><titre>
       Devis de construction<genre>Maison de campagne</titre></genre>     
         <pièces>Six pièces</pièces>
         <étages>Deux étages</étages>
         <coût>Coût : <estimation>450'000 francs</coût></estimation>
         <délais>Début de construction <début>juin 2002</début>, fin prévue pour 
         <fin>octobre 2002</fin></délais>
     </devis>
    </offre>
  17. EXERCICE 1: Après avoir déterminé ensemble les balises, chaque élève crée sa fiche signalétique XML. Ceci en tenant compte qu'elles seront, par la suite, regroupées en un seul document XML.
    Attention : elle ne pourra pas encore être affichée, car elle n'est pas bien formée (caractères).

    Attributs [réf. p18-19]

  18. L'attribut est une paire "nom - valeur" associé à la balise d'ouverture.
    - Les noms sont séparé des valeurs par le signe = (et d'éventuels blancs optionnels)
    - Les valeurs sont entourées par de simples quotes ou des guillemets.

  19. Exemple 2-4. (exm_010.xml) [réf. p18] :
    <person>
      <name first="Alan" last="Turing"/>
      <profession value="informaticien"/>
      <profession value="mathématicien"/>
      <profession value="cryptographe"/>
    </person>

    ou moins bien mais juste (blancs optionnels)

    <person> <name first = "Alan" last = "Turing"/> <profession value = "informaticien"/> <profession value = "mathématicien"/> <profession value = "cryptographe"/> </person>
  20. Faut-il utiliser des sous-éléments ou des attributs? C'est l'éternelle question !
    Les attributs peuvent permettre de condenser le code, mais d'autre part, ils peuvent compliquer une mise en forme XSLT. Vous choisirez ce qui vous semble le mieux correspondre selon chaque cas. Comparer l'exemple 2-3. au 2-5.

  21. Exemple 2-5. Utilisation d'attributs. (exm_011.xml) [réf. p19] :

    <biography xmlns:xlink="http://www.w3.org/1999/xlink/namespace/">
    <image source="http://www.turing.org.uk/turing/pi1/bus.jpg" width="152" height="345"/>
    <person born='23/06/1912' died='07/06/1954'><first_name>Alan</first_name>
    <last_name>Turing</last_name> </person> fut le premier homme à mériter le nom d' <emphasize>informaticien</emphasize>.

    Bien que ses contributions dans le domaine soient trop longues à énumérer, les plus connues sont celles qui portent son nom le <emphasize xlink:type="simple" xlink:href="http://cogsci.ucsd.edu/~asaygin/tt/ttest.html">Test de Turing </emphasize> et la <emphasize xlink:type="simple" xlink:href="http://mathworld.wolfram.com/TuringMachine.html">
    Machine de Turing </emphasize>.

    <last_name>Turing</last_name> était aussi un parfait <profession>mathématicien</profession> et
    <profession>cryptographe</profession>. Son aide aux alliés fut cruciale pour décoder le système de communication allemand Enigma.<footnote source="The Ultra Secret, F.W. Winterbotham,1974">1</footnote>

    Il se suicida le <date><day>7</day><month>juin</month><year>1954</year></date> après
    avoir été reconnu homosexuel et obligé de prendre des injections d'hormones féminines. <footnote source="Alan Turing: the Enigma, Andrew Hodges, 1983">2</footnote>
    </biography>


  22. Nom XML [réf. p20-21]

  23. Les règles des noms d'éléments et des noms attributs sont les mêmes :
    - Le nom doit commence par une lettre, un caractère non standart ou un trait de soulignement _.
    - Il peut contenir des lettres a-z et A-Z, des chiffres 0-9.
    - Il peut contenir des caractères non standard ö, ç, é, accentués selon l'encodage utilisé (...)
    - Il peut contenir le trait de soulignement _ , tiret - et point.
    - Il n'est pas limité dans sa longueur (99'999 caractères).
    - Le : est réservé au espace de nom.
    - Ne doit pas contenir d'autres caractères de ponctuation (? ' £ $ % etc.)
    - Ne doit pas contenir de blanc.
    - Ne doit pas commencer par les trois lettres xml ensembles.
    - Ne doit pas commencer par un nombre, un trait d'union ou un point.


    Appel d'entité [réf. p21-22]

    Rappel html sur les caractères ASCII.

  24. Dans le contenu d'un éléments pas de caractère < car il représente l'ouverture d'une balise. Si on en a besoin, il faut dans ce cas l'échapper en utilisant l'appel d'entité &lt;
    Le parseur remplace cet appel par le bon caractère et il ne le confond pas avec une ouverture de balise.

  25. Le problème est identique avec le caractère & qui représente l'ouverture d'un appel d'entité. Il sera échappé avec l'entité &amp;

  26. Ces appels d'entité seront restitués comme indiqué ci-dessous. XML définit exactement cinq types d'entités :

    &lt; pour (<) : le signe inférieur à (ou chevron ouvrant).
    &amp; pour (&) : l'esperluette.
    &gt; pour (>) : le signe supérieur à (ou chevron fermant).
    &quot; pour (") : le signe guillemets.
    &apos; pour (') : le signe apostrophe ou simple quote.

  27. Dans le contenu d'un élément, seules les entités &lt; et &amp; doivent être utilisés en lieu et place des vrais caractères (les autres sont optionnelles) (exm_012.txt, exm_012.xml).

  28. Dans la valeur d'attributs, seules les entités &quot; et &apos; sont utiles pour éviter de confondre la fin de la valeur.


    Section CDATA [réf. p22-23]

  29. CDATA ou donnée de code (Code DATA) sert à intégrer du texte de code source (XML, HTML) dans le document, sans avoir besoin de faire des appels d'entités pour les caractères concernés. Pour ceci il suffit d'intégrer le code source dans une section CDATA (exm_013.xml) :

    <![CDATA[ et ]]>

    Tout ce qui se trouve dans la section, en lieu et place du " et ", sera traité comme une donnée textuelle brute.

  30. Seul le délimiteur de fin ]]> ne doit pas se trouver dans une section CDATA (exm_014.xml).


    Commentaire [réf. p23]

  31. Les commentaires sont là pour rendre le code source plus lisible et/ou comme mémo. Ils ne sont destiné à aucun programme. Un commentaire commence avec <!-- et se termine par -->

    <!--
    ceci est un commentaire ;-), il peut s'étendre aussi loin que je le désire, mais il doit respecter quelques règles qui sont indiquées ci-dessous -->

  32. Attention : Le double trait d'union -- ne doit pas apparaître dans le commentaire jusqu'au --> de fin. De ce fait, le triple trait d'union --- n'est également pas autorisé, etc.

  33. Les commentaires peuvent se placer partout, avant, après une balise ou dans le contenu de l'élément (données textuelles), mais obligatoirement après la déclaration XML. (ne peuvent pas se placer à l'intérieur d'une balise, entre <...>).


    Instructions de traitement [réf. p23-24]

  34. Avec le langage HTML les commentaires sont quelques fois utilisés comme instructions de traitement et celà peut causer des problèmes :

    <script language="JavaScript">
      <!--
        ici le script...
      //-->
    </script>


    C'est pourquoi en XML il existe l'instruction de traitement qui commence par <? et finit par ?>

  35. Après <? se trouve xml (appelé la cible) ou le nom de l'application concernée par l'instruction ou encore simplement un identifiant pour cette instruction. La partie restante contient du texte au format approprié des instructions destinées à l'application.

  36. Exemple d'une instruction classique XML (d'autres seront très différentes) :

    <?robots index="yes" follow="no"?>

    La cible "robots" du moteur de recherche doit indexer la page index="yes" et 'ignorer les liens relatifs au document follow="no".

  37. Comme le commentaire, elle peut être placée n'importe où dans le document XML, en dehors d'une balise y compris avant ou après l'élément racine. Mais après la déclaration XML.

  38. Exemple 2-6. Instruction de traitement xml-stylesheet (exm_015.txt) :

    <?xml-stylesheet href="person.css" type="text/css"?>
    <person>
       Alan Turing
    </person>

    EXERCICE 2 : Après avoir déterminé ensemble les attributs et autres commentaires,
    les ajouter à la fiche signalétique.



    Déclaration XML [réf. p25-26]

  39. La déclaration de traitement est optionnelle, mais vivement conseillée. Elle ressemble à une instruction de traitement mais n'en n'est pas une !

  40. Sa place est dans la première ligne du document et rien ne doit la précéder (blanc, commentaire, etc.), car le parseur utilise les cinq premier caractère <?xml afin de déterminer l'encodage (voir chapitre 5). Le tout doit être en minuscules.

  41. Exemple 2-7. Un document simple avec une déclaration XML
    (avec : exm_016.xml, sans : exm_017.xml)
    :

    <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
    <person>
       Alan Turing
    </person>

    Version : Indique la version XML utilisée pour écrire le document. La valeur 1.0 pourrait évoluer, mais pourrais également rester à 1.0, le langage XML étant suffisamment développé pour l'avenir. Les espaces de nom et les schémas peuvent évoluer sans pour autant que l'on ait besoin de toucher au langage XML (et pourtant : 2004, la version 1.1 sur w3c)

    Encoding : Indique le jeu de caractère utilisé pour écrire le document (iso-8859-1 = latin 1 ou europe de l'ouest). S'il n'est pas présent, le jeu de caractère UNICODE est utilisé par défaut. Doit se trouver avant standalone si standalone est utilisé !

    Standalone : Doit se trouver en dernier et indique si une DTD externe au document est utilisée (yes si pas utilisée). Si standalone est absent, la valeur NO est sélectionnée par défaut..


    Vérification des contraintes de forme des documents [réf. p27-29]

  42. Chaque document XML doit être bien formé. Pour celà il doit respecter quelques règles :

    - il ne doit y avoir qu'un seul élément racine.
    - à chaque balise de début doit correspondre une balise de fin.
    - les éléments ne doivent pas se recouvrir.
    - les valeurs des attributs doivent être double-quotées ('att' ou "att").
    - un élément ne doit pas avoir deux attributs avec le même nom.

    - aucun caractère < ou & non échappé ne doit apparaître dans les données textuelles d'un   élément ou d'un attribut.

    Liste non exhaustive. Un document peut être mal formé à bien des égards. Vous trouverez une liste complète au Chapitre 18 du livre "XML IN A NUTSHELL"

  43. Un parseur doit signaler les erreurs, mais il n'est pas autorisé à les corriger. L'objectif étant d'éviter les guerres de compatibilité qui ont tourmentés les 1ère version des navigateurs et qui continue aujourd'hui ! (différences d'affichage des pages dans Iexplorer et Netscape).

  44. La façon la plus simple pour vérifier un document est de le charger dans un navigateur web compatible XML. Si le document apparaît, c'est qu'il est bien formé. Si non, un message d'erreur s'affiche.

  45. Une fois que le document est bien formé, il peut être fourni à l'application qui doit le traiter (navigateur, base de données, etc.)

  46. Parseur Java libre de droit. [réf. p28-29]


    OEM : Exemples pratiques de code XML [réf. p24/3/4]

  47. Arbre généalogique, exemple :

    1. Version papier [réf. p24/3/4] :

    2. Version HTML (aucune précision sur les données) (exm_018.txt) :
      <table>
      <tr> <td>Armand Duchemin</td> <td>Sophie Duchemin</td> <td>Maria Duchemin</td> <td>Georges Duchemin</td> <td>Pauline Duchemin</td> <td>Jean-Pierre Duchemin</td> </tr> </table>

    3. Version XML (les balises nous informent sur chaque membre de cette famille) (exm_018.txt):
      <famille>
        <père>Armand Duchemin</père>
        <mère>Sophie Duchemin</mère>
         <enfants>
          <enfant>Maria Duchemin</enfant>
          <enfant>Georges Duchemin</enfant>
          <enfant>Pauline Duchemin</enfant>
          <enfant>Jean-Pierre Duchemin</enfant>
         </enfants>
      </famille>
  48. On peut encore améliorer l'information en ajoutant des balises selon nos besoins :

    Exemple complet : (exm_019.xml)

    Exemple sans l'attribut encoding="ISO-8859-1" : (exm_020.xml)
    Le navigateur ne comprend pas la balise <père> et lit <p?...

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <famille>
      <père>Armand <nom>Duchemin</nom></père>
      <mère>Sophie <nom>Duchemin</nom>
       <nom_de_jeune_fille>Jones</nom_de_jeune_fille></mère>
        <enfants>
         <enfant>Maria <nom>Duchemin</nom></enfant>
         <enfant>Georges L. <nom>Duchemin</nom> II</enfant>
         <enfant>Pauline M. <nom>Duchemin</nom></enfant>
         <enfant>Jean-Pierre J. <nom>Duchemin</nom></enfant>
        </enfants>
    </famille>
    
  49. EXERCICE 3 : Ajouter la déclaration XML adaptée dans la fiche signalétique et afficher le document dans Internet Explorer. Corriger les éventuelles erreurs.

  50. EXERCICE 4 : Corriger les erreurs des documents reçus
    ex_01.txt
    - ex_02.txt - ex_03.txt - ex_04.txt


  51. EXERCICE 5 : Exercice d'arborescence. Corriger le lien de l'image après l'avoir déplacée de dossier (ou déplacer le fichier index.html). (ex_005.zip)

O'REILLY : "XML IN A NUTSHELL"
OEM : "XML Web Training"
Réf.: ISBN 2-84177-143-1
Réf.: ISBN 2-7464-0395-1