Valid XHTML     Valid CSS2    

XML en L2, université d'Angers

    gilles.hunault@univ-angers.fr

 

T.P. numéro 3

 

Table des matières cliquable

  1. Créer un document XML qui respecte une grammaire DTD

  2. Créer un document XML qui respecte une grammaire XSD

  3. DTD et paramètres

  4. Validité suivant la grammaire

  5. Créer des grammaires DTD et XSD

  6. Non unicité des grammaires DTD et XSD

  7. Vérification des vérificateurs

  8. Rajout de contraintes

 

Il est possible d'afficher toutes les solutions via  ?solutions=1  et de les masquer via  ?solutions=0 .

 

1. Créer un document XML qui respecte une grammaire DTD

Nous admettrons pour ce qui suit qu'une molécule est définie par une liste d'atomes avec le nom des atomes, leur notation et le nombre de ces atomes fournis en attributs. Par exemple la molécule d'eau H2O est définie par l'atome de nom hydrogène, de notation H en nombre 2 et par l'atome de nom oxygène, de notation O et en nombre 1 (qui peut donc être omis). Après avoir lu soigneusement le fichier suivant nommé molecule.dtd, écrire un fichier eau.xml valide pour cette grammaire DTD. On utilisera un outil en ligne de commande pour vérifier cette validité. On pourra ignorer les accents.

Fichier molecule.dtd :


     <!ELEMENT molecule (atome)+ >
     <!ELEMENT atome    EMPTY    >
     
     <!ATTLIST atome    nom      CDATA  #REQUIRED >
     <!ATTLIST atome    lettre   CDATA  #REQUIRED >
     <!ATTLIST atome    nombre   CDATA  "1"       >
     

Est-ce que cette grammaire DTD autorise les chaines vides pour les noms, lettres et nombres ?

Est-ce qu'il faut respecter l'ordre des attributs tel qu'il est défini dans la grammaire DTD ?

Solution :  

 

2. Créer un document XML qui respecte une grammaire XSD

On décide maintenant d'utiliser la grammaire molecule.xsd suivante pour stocker les mêmes informations.

Fichier molecule.xsd :


     <?xml version="1.0" encoding="UTF-8"?>
     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     
       <xsd:element name="molecule">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element maxOccurs="unbounded" ref="atome"/>
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
     
       <xsd:element name="atome">
         <xsd:complexType>
           <xsd:sequence>
             <xsd:element ref="nom"/>
             <xsd:element ref="nombre"/>
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
     
       <xsd:element name="nom">
         <xsd:complexType>
            <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                  <xsd:attribute name="lettre" use="required" type="xsd:string"/>
               </xsd:extension>
            </xsd:simpleContent>
         </xsd:complexType>
       </xsd:element>
     
       <xsd:element name="nombre" type="xsd:integer"/>
     
     </xsd:schema>
     

Ecrire un fichier eau2.xml valide pour cette grammaire XSD. On utilisera un outil en ligne de commande pour vérifier cette validité. Là encore, on pourra ignorer les accents.

Est-ce que cette grammaire XSD autorise les chaines vides pour les noms, lettres et nombres ?

Solution :  

 

3. DTD et paramètres

On structure un dessin 2D élémentaire selon les règles suivantes. Un dessin est un cercle, un rectangle ou un triangle. Un cercle est défini par un centre et un rayon, un rectangle par son csg (coin supérieur gauche), une longueur et une largeur, un triangle par trois points. Chaque élément graphique peut avoir une couleur parmi les mots prédéfinis bleu, rouge, jaune ou vert. Ecrire un fichier dessin.xml qui dans un viewport bleu de 500 pixels de large et 300 de haut, met un "soleil" jaune de rayon 15 pixels en (450,50), une plage rectangulaire verte qui fait toute la largeur et qui fait 100 pixels de haut. Pour les plus fort(e)s, rajouter une petite étoile de mer rouge en bas à gauche à l'aide de trois triangles bien choisis. A défaut, on placera juste un triangle plein et en rouge. On pourra s'inspirer du dessin ci-dessous et de la syntaxe SVG.

                              non su

Ecrire ensuite la "vraie" version en SVG de ce dessin.

Comment vérifier que ce dessin est valide au sens de la grammaire de SVG ?

Quel logiciel, du type paint, gimp ou photoshop, permet de lire et d'écrire des fichiers SVG ?

Donner les grammaires DTD et XSD associées au fichier dessinTP.xml. On nommera dessin.dtd et dessin.xsd les fichiers-grammaires correspondants. On essaiera de paramétrer l'attribut couleur qui est commun.

Solution :  

 

4. Validité suivant la grammaire

Ecrire un fichier minimal ouimaisnon.xml qui est valide pour la grammaire g1.dtd mais non valide pour la grammaire g2.dtd. Fournir ensuite un fichier livre.xml valide pour g2.dtd.

Solution :  

 

5. Créer des grammaires DTD et XSD

Disons qu'un trajet ferroviaire est représenté schématiquement mais obligatoirement par un numéro identifiant de trajet, un type de train, un lieu de départ et un lieu d'arrivée. Ces informations sont éventuellement complétées, lorsqu'elles sont disponibles, par deux informations ts (pour time stamp en anglais) qui fournissent respectivement la date et heure de départ et la date et heure d'arrivée.

Voici un exemple de fichier XML regroupant deux trajets, nommé trajets.xml.

Fichier trajets.xml :


     <trajets>
       <trajet id="tr02436">
            <train>TGV </train>
            <depart>Angers</depart>
            <arrive>Paris Montparnasse</arrive>
       </trajet>
       <trajet id="tr5897">
            <train>Micheline </train>
            <depart ts="2016-09-08 13:00">Troyes</depart>
            <arrive ts="2016-09-08 17:08">Dijon</arrive>
       </trajet>
     </trajets>
     

Donner pour ce fichier trajets.xml une grammaire DTD minimale et raisonnable qui permet de décrire les trajets ferroviaires puis une grammaire XSD équivalente.

Solution :  

 

6. Non unicité des grammaires DTD et XSD

Ecrire une grammaire pour le fichier films2 en DTD puis en XSD. Où y a-t-il des choix à faire ? Pourquoi ne peut-on pas parler de la grammaire DTD d'un fichier ?

Peut-on créer automatiquement des grammaires à partir d'exemples ? Que faut-il attendre de ce genre de production automatique ?

Solution :  

 

7. Vérification des vérificateurs

Pour vérifier un document XML, on utilise une grammaire DTD ou XSD. Mais comment vérifier une grammaire DTD ou XSD ?

On pourra utiliser les grammaires incorrectes bad.dtd et bad.xsd associées respectivement aux fichiers baddtd.xml et badxsd.xml pour vérifier votre vérification de vérificateurs (!).

Solution :  

 

8. Rajout de contraintes

Reprendre l'exercice 1 (la molécule) et définir un schéma XSD plus restrictif que la DTD avec les règles suivantes :

  • le nom de l'atome doit comporter au moins deux lettres (au fait, pourquoi ?)
  • le nombre d'atomes doit être un entier non négatif
  • l'attribut lettre de l'atome doit comporter au moins une lettre en majuscule, suivie au maximum d'une lettre en minuscule (pourquoi ?)

Solution :  

 

 

Code-source php de cette page.

 

 

retour gH    Retour à la page principale de   (gH)