TP1: Premiers pas

Ce travail propose un premier contact avec XML au travers un environnement de travail dédié. Il survole la création de document XML ainsi que leur validation à l'aide de DTD.

1. Installation d'un premier outils pour XML: Oxygen

L'outil Oxygen est un éditeur avancé pour XML écrit en Java. Bien que commercial et non libre, il est à l'heure actuelle une référence dans son domaine.

l'éditeur est proposé en version d'essai gratuite aux personnes s'inscrivant sur son site. Durant la première partie de nos TPs, nous allons utiliser une version d'essai. Il faut pour cela s'inscrire, obtenir une clé d'activation par e-mail et pour finir installer le logiciel.

1.1. Obtention d'une licence pour Oxygen

Rendez vous sur la page d'enregistrement des versions d'essai de Oxygen: http://www.oxygenxml.com/register.html et remplir convenablement les champs:

  1. renseignez vos noms, prénoms et mails;
  2. laisser le champ Company vide;
  3. choisissez pour le champ Country la valeur "France";
  4. remplissez le champ License type avec "Academic";
  5. laisser décochées les 2 checkboxes relatives aux mises à jours et offres;
  6. valider en cliquant sur le bouton Get trial licence.

Une clé d'activation va alors être envoyée au mail que vous avez spécifié.

1.2. Téléchargement et installation d'Oxygen

Le téléchargement du logiciel s'effectue sur la page http://www.oxygenxml.com/download_oxygenxml_editor.html.
Il est conseillé de choisir la version "All" (pour tout système), qui est une version sans installation et totalement portable.

Pour l'obtenir:

  1. cliquer sur l'onglet other de la page des téléchargements;
  2. cliquer sur le bouton download;
  3. sauvegarder sur le disque le fichier archive proposé.

Une fois l'archive téléchargée, la décompresser dans un répertoire approprié.

Pour lancer l'éditeur, depuis le répertoire d'installation:

  • oxygen.bat pour les systèmes windows;
  • oxygene.sh pour les systèmes linux.

Le logiciel fonctionnant en Java, il est impératif que votre configuration Java soit correcte.

Vous pouvez désormais lancer Oxygen une première fois. L'éditeur vous signalera une erreur à propos de la licence. Pour intégrer votre licence personnelle:

  • fermer la fenêtre d'erreur s'il y en a une;
  • dans la fenêtre d'enregistrement, faire un copier / coller de la licence que vous avez reçu par mail;
  • cliquer sur le bouton Accepter.

L'éditeur XML est maintenant fonctionnel.

2. Préparation de l'environnement de travail

La préparation de l'environnement de travail est assez simple:

  • créer un répertoire xml dans votre arborescence;
  • créer un sous-répertoire oxygen au répertoire xml;
  • créer un sous-répertoire TP1 au répertoire xml.

Une fois ces répertoires créés, nous pouvons lancer Oxygen et commencer à l'utiliser.

L'interface de l'éditeur est classique. Sur la gauche se trouve l'explorateur de projets, sur la droite la description du document et les fonction de transformations (que nous verrons plus tard). La partie centrale de l'interface est dédiée a l'édition de documents XML.

2.1 Création d'un projet XML

L'éditeur fonctionne avec la notion de projet. La première étape dans son utilisation est donc la création d'un projet dédié aux TPs. Pour cela:

  • dans le menu "Projet", cliquer sur l'item "Nouveau projet";
  • dans le menu "Projet" encore, cliquer sur l'item "Enregistrer le projet";
  • dans la boite de dialogue, nommer le projet "xml.xpr" et sélectionner le répertoire "xml/oxygen" créé précédemment;
  • cliquer sur le bouton "Enregistrer".

Le projet "xml" apparait alors dans l'explorateur de projet.

2.2. Ajout de fichiers au projet

Un projet Oxygen peut contenir des fichiers et des répertoires. Nous allons tout d'abord créer un répertoire "TP1" dans le projet "xml":

  • faire un click droit dans l'explorateur de projet sur le projet "xml.xpr";
  • dans le menu contextuel, choisir l'item "Créer un répertoire";
  • dans la nouvelle fenêtre, entrer "TP1" comme nom de répertoire;
  • valider votre choix.

Un nouveau répertoire "TP1" apparait alors dans l'explorateur de projet. Nous pouvons des lors éditer un fichier XML:

  • dans le menu "Fichier", choisir l'item "Nouveau...";
  • dans la liste qui s'affiche, choisir "XML" et cliquer sur "Accepter";
  • dans la nouvelle fenêtre, laisser les paramètres par défaut et cliquer sur "Accepter";
  • un nouveau document vide apparait dans la partie centrale de l'éditeur.
  • copier le document suivant dans le document vide:
<?xml version="1.0" encoding="utf-8"?>

<!-- A list of books -->
<BookList>
    <Books>
        <Item cat="S">
            <Title>Number, the Language of Science</Title>
            <Author>Danzig</Author>
            <Price>5.95</Price>
            <Quantity>3</Quantity>
            <Comment>Should be read</Comment>
        </Item>
    </Books>
    <Categories desc="Miscellaneous categories">
        A list of categories
        <Category code="S" desc="Science"/>
        <Category code="I" desc="Science" note="Limited Stock"/>
        <Category code="C" desc="Computing"/>
        <Category code="X" desc="Crime"/>
        <Category code="F" desc="Fiction"/>
    </Categories>
</BookList>
  • dans l'explorateur de projet, faire un click droit sur le répertoire "TP1"
  • dans le menu contextuel, choisir l'item "Ajouter le fichier édité";
  • la fenêtre de sauvegarde du fichier édité apparait;
  • enregistrer le fichier en tant que "books.xml" dans le répertoire "xm/TP1".

Le fichier "books.xml" apparait dans le répertoire "{TP1}" de l'explorateur de projet et est aussi physiquement présent dans le répertoire "{ASI/TP1}".

3. Documents XML bien formés et valides

Nous nous intéressons maintenant aux notions de documents bien formés puis de documents valides.

3.1. Documents bien formés

Selon le W3C, un document XML est dit "bien formé" (well formed) si:

  • il possède un élément racine;
  • les éléments XML le composant ont une balise de fermeture;
  • les balises de même signification respectent la même casse;
  • les éléments XML sont positionnés correctement (structure d'arbre);
  • Les valeurs d'attribut XML sont toujours être entre guillemets.

Nous allons utiliser l'interface de l'éditeur afin de s'assurer qu'un document est bien formé.

Remplacer le contenu du document "books.xml" par le contenu suivant:

<?xml version="1.0" encoding="utf-8"?>

<!-- A list of books -->
<BookList>
   <Books>
       <Item cat="S">
           <Title>Number, the Language of Science</Tit>
               <Author>Danzig</Author>
               <Price>5.95</Price>
               <Quantity>3</Quantity>
               <Comment>Should be read</Comment>
       </Item>
       <Item cat="F">
           <Title>Tales of Grandpa Cat</Title>
           <Publisher state="trusted">Associated Press</Publisher>
           <Author>Wardlaw, Lee</Author>
           <Price>6.58</Price>
           <Quantity>5</Quantity>
       </Item>
       <Item cat="S">
           <Title>Language &amp; the Science of Number</Title>
           <Author>Danzig</Author>
           <Price>8.95</Price>
           <Quantity>5</Quantity>
       </Item>
       <Item cat="S">
           <Title>Evolution of Complexity in Animal Culture</Title>
           <Author>Bonner</Author>
           <Price>5.95</Price>
           <Quantity>2</Quantity>
       </Item>
       <Item cat="X">
           <Title>Patterns of Crime in Animal Culture</Title>
           <Author>Bonner</Author>
           <Price>15.95</Price>
           <Quantity>0</Quantity>
       </Item>
       <Livre categorie="F" taxe="sept">
           <Titre>When We Were Very Young</Titre>
           <Auteur>Milne, A. A.</Auteur>
           <Prix>12.50</Prix>
           <Quantite>1</Quantite>
       </Livre>
       <Item cat="A">
           <!-- Put here a comment on this item -->
           <Title>Learn Java Now</Title>
           <Author>Stephen R. Davis</Author>
           <Publisher>Microsoft Corporation</Publisher>
           <Price>9.95</Price>
           <Quantity>12</Quantity>
       </Item>
       <Item cat="C" tax="12.5">
           <?testpi1 here is a message for an application?>
           <Title>Design Patterns</Title>
           <Author>Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides</Author>
           <Publisher>Addison Wesley</Publisher>
           <Price>49.95</Price>
           <Quantity>2</Quantity>
       </Item>
   </Books>
   <Categories desc="Miscellaneous categories">
       A list of categories
       <Category code="S" desc="Science"/>
       <Category code="I" desc="Science" note="Limited Stock"/>
       <Category code="C" desc="Computing">
       <Category code="X" desc="Crime"/>
       <Category code="F" desc="Fiction/>
       </Categories>
</BookList>

Une fois le document enregistré, des erreurs sont pointées par l’éditeur. Ces erreurs font que le document édité ne peut pas être considéré comme bien formé.

En utilisant l’éditeur, corriger le document afin de le rendre bien formé.

3.2. Documents valides

Selon le W3C, un document XML valide (valid XML document) est un document XML bien formé qui se conforme aussi aux règles d’un modèle (ou schéma) de documents donné par une DTD ou un XML Schema.

Nous allons vérifier que notre document "book.xml" par rapport à une DTD. La première étape consiste à intégrer la DTD que nous voulons utiliser comme modèle au projet courant. Pour cela nous retournons dans l’interface d’Oxygen :

  • dans le menu "Fichier", choisir l’item "Nouveau" ;
  • dans la nouvelle fenêtre, choisir "dtd" et cliquer sur le bouton "Accepter" ;
  • L’éditeur affiche un nouvel onglet vide qu’il faut remplir avec le code suivant :
<!-- Definition d'un element Author qui contient des caracteres "parsables" -->
<!ELEMENT Author ( #PCDATA ) >

<!-- Definition d'un element BookList qui contient un element Books et un element Categories -->
<!ELEMENT BookList ( Books, Categories ) >

<!-- Definition d'un element BookList qui contient un ou plusieurs elements Item -->
<!ELEMENT Books ( Item+ ) >

<!ELEMENT Categories ( #PCDATA | Category )* >
<!ATTLIST Categories desc CDATA #REQUIRED > <!-- Remarquer la definition d'un attribut -->

<!ELEMENT Category EMPTY >
<!-- Remarquer la définition de plusieurs attributs -->
<!-- IMPORTANT remarquer la definition d'un ID (valeur unique dans le document)-->
<!ATTLIST Category code ID #REQUIRED >
<!ATTLIST Category desc NMTOKEN #REQUIRED >
<!ATTLIST Category note CDATA #IMPLIED >

<!ELEMENT Item ( Author | Price | Publisher | Quantity | Title )* >

<!-- Remarquer la definition d'une liste d'attributs -->
<!-- IMPORTANT remarquer la definition d'un IDREF (doit prendre la valeur d'un ID)-->
<!ATTLIST Item                            
       cat IDREF #REQUIRED    
       tax NMTOKEN #IMPLIED >  

<!ELEMENT Price ( #PCDATA ) >

<!ELEMENT Publisher ( #PCDATA ) >

<!ELEMENT Quantity ( #PCDATA ) >

<!ELEMENT Title ( #PCDATA ) >
  • faire ensuite un "click droit" sur le répertoire "TP1" du projet ;
  • dans le menu contextuel, choisir l’item "Ajouter le fichier édité" ;
  • dans la nouvelle fenêtre, enregistrer le fichier dans le répertoire "ASI/TP1" en le nommant "books.dtd".

Un deuxième fichier, "books.dtd" est alors accessible depuis l’explorateur de projet. Il nous reste à lier le fichier XML à la DTD afin d’expliciter le modèle. Pour cela, dans le fichier "books.xml", remplacer la ligne :

<?xml version="1.0" encoding="utf-8"?>

par les lignes:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE BookList SYSTEM "books.dtd">

Sauvegardez ensuite le fichier "books.dtd".

De nouvelles erreurs sont apparues dans le document "books.xml". Ces erreurs empêchent de considérer le document comme valide.

En vous aidant de l’éditeur, corriger le fichier "books.xml" afin de le rendre valide.

4. Première DTD, premier fichier XML

Maintenant que vous êtes familiarisés avec l’environnement "Oxygen", vous allé définir une DTD qui permettra de gérer une collection d’œuvres d’arts. Cette DTD devra être telle que :

  • Sont considérées comme œuvre d’art des peintures, des sculptures, des films, des livres ;
  • Chaque œuvre possède un auteur qui lui même est défini par son nom, son prénom, sa date de naissance et sa date de mort (s’il l’est) ;
  • Les peintures possèdent un medium (peinture à l’huile, aquarelle, Encre, Gouache, fresque, ...) et une dimension (longueur, largeur) ;
  • Les sculptures ont un matériel (marbre, calcaire, bronze, ...) ;
  • Les films ont une durée et un genre (aventure, science fiction, ...) ;
  • les livres ont un nombre de pages ;
  • films et livres possèdent une date de parution ;
  • peintures et sculptures ont un lieu d’exposition (penser au cas ou elles sont détruites) ;

Vous créez la DTD représentant la description ci-dessus puis un fichier XML bien formé et valide envers cette DTD et décrivant au moins les oeuvres d’arts suivantes :

  • La Grande Odalisque (peinture) ;
  • L’École d’Athènes (Peinture) ;
  • Le Groupe du Laocoon (sculpture) ;
  • Le penseur (Sculpture) ;
  • Le grand secret (Livre) ;
  • Le rouge et le Noir (Livre) ;
  • Full Metal Jacket (Film) ;
  • La ligne rouge (Film) ;

N’oubliez pas, google est votre ami...

5. Création de DTD à postériori

Le but de ce dernier exercice est de créer une DTD depuis un document XML existant.

Soit le document XML suivant :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE BookList SYSTEM "books.dtd">

<BookList>
<book>
 <bookinfo>
   <title>An Example Book</title>
   
   <author>
     <firstname>first author first name</firstname>
     <surname>first author  surname</surname>
     <affiliation>
       <address><email>Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</email></address>
     </affiliation>
   </author>

  <author>
     <firstname>second author first name</firstname>
     <surname>second author surname</surname>
     <affiliation>
       <address><email>Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</email></address>
     </affiliation>
   </author>

   <copyright>
     <year>2000</year>
     <holder>Copyright string here</holder>
   </copyright>

   <abstract>
     <para>If your book has an abstract then it should go here.</para>
   </abstract>
 </bookinfo>

 <preface>
   <title>Preface</title>

   <para>Your book may have a preface, in which case it should be placed
     here.</para>
 </preface>
     
 <chapter>
   <title>My First Chapter</title>

   <para>This is the first chapter in my book.</para>

   <sect>
     <title>My First Section</title>
     <para>This is the first section in my book.</para>
     <sect>
       <title>my title</title>
       Écriture très intéressante...
     </sect>
   </sect>
 </chapter>

 <chapter id="ch02">

   <para>This is the first chapter in my book.</para>

   <title>My First Chapter</title>

   <sect>
     <title>My First Section</title>

     <para>This is the first section in my book.</para>
   </sect>
 </chapter>
</book>

</BookList>

Ecrire la DTD book.dtd de façon à ce que le document soit valide.

Vérifier la validité du document envers la DTD grâce à Oxygen.