TP 3: XSchema

W3C: Wold Wide Web ConsortiumXML : eXtended Markp Language

1. Introducion

XML Schema a été publié comme recommandation par le W3C en mai 2001. c’est un langage de description de format de document XML permettant de définir en détail la structure d’un document XML.
Comme une DTD, un schema permet de décrire la grammaire d’un document XML et permet donc de le valider. Contrairement à une DTD, un schéma est lui même un document XML. Il permet de plus de spécifier bien plus en détail la structure d’un document XML et n’est pas limité à la description d’une grammaire.

La dernière recommandation de XML schema par le W3C est disponible à l’adresse : http://www.w3.org/XML/Schema. Cette recommandation est en partie traduite en français à l’adresse : http://xmlfr.org/w3c/TR/xmlschema-0/

Deux très bon tutoriels sur les XML Schemas sont disponibles ici :

2. Outil de validation de XSchema

Les XML schemas permettent de valider des documents XML. Cette validation peut se faire en utilisant un outil simple. Afin de mettre en place cet outil :
  1. télécharger le fichier validate.jar.zip attaché à ce TP et décompresser l’archive jar dans un répertoire approprié.
  2. dans le même répertoire créer un fichier de lancement :
    • Sous linux, ce fichier se nomme "validate" et contient :
      java -cp validate.jar Validate $*
    • Sous windows, ce fichier se nomme "validate.bat" et contient :
      @echo off
      @java -cp validate.jar Validate %*
Lancer la commande "validate" permet de vérifier la validité d’un document XML par rapport à un XML schéma.

3. XSchema pour la gestion de livres

Nous allons créer un XML Schema destiné à définir la structure de notre collection de livres.
Un schéma permettant de spécifier la grammaire d’un document, il est possible de décrire un schéma exprimant la même grammaire qu’une DTD. Partant de ce principe, nous allons pour le document books-tp4-schema.xml écrire un schéma nommé books.xsd qui représente la DTD books.dtd suivante :

<!ELEMENT BookList ( Books, Categories ) >

<!ELEMENT Books (Book)+ >

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

<!ELEMENT Category EMPTY >
<!ATTLIST Category code ID #REQUIRED >
<!ATTLIST Category desc NMTOKEN #REQUIRED >
<!ATTLIST Category note CDATA #IMPLIED >

<!ELEMENT Book ( Author | Comment | Price | Publisher | Quantity | Title )* >
<!ATTLIST Book cat IDREF #REQUIRED    
              tax NMTOKEN #IMPLIED >
                           
<!ELEMENT Author ( #PCDATA ) >
<!ATTLIST Author top CDATA #IMPLIED>

<!ELEMENT Comment ( #PCDATA ) >
<!ELEMENT Price ( #PCDATA ) >

<!ELEMENT Publisher ( #PCDATA ) >
<!ATTLIST Publisher state CDATA #IMPLIED>

<!ELEMENT Quantity ( #PCDATA ) >
<!ELEMENT Title ( #PCDATA ) >​

En plus des contraintes spécifiques à la DTD, votre schéma devra être tel que :
  1. le titre d’un livre (Title) est une chaine de caractère ;
  2. un livre peut avoir de 1 à 10 auteurs (Author) ;
  3. le commentaire (Comment) d’un livre est une chaine de caractère ;
  4. le prix (Price) d’un livre est un nombre réel ;
  5. la quantité (Quantity) d’un livre est un entier positif ;
  6. l’attribut "tax" d’un livre est un nombre réel ;
Une fois votre schéma créé, placez le dans le même répertoire que le fichier books-tp4-schema.xml afin de vérifier la validité du document XML par rapport à son schéma.

4. Schéma modulaire

Après validation du schéma précédent, créer un nouveau fichier de schéma qui validera le même document que précédemment mais qui sera écrit sous forme modulaire (avec des références entre types.)

5. Retour sur l'art

Nous allons maintenant utiliser le gain d’expressivité des XML schemas afin de reconstruire une collection d’œuvres d’art.
Cette nouvelle collection sera composé de deux grands ensembles :
  1. les personnes pouvant être auteurs ou propriétaires d’une œuvre ;
  2. les œuvres elles mêmes.
La description des différents éléments composant le schéma est la suivante :
  • une personne est décrite par :
    • un nom puis au moins un prénom qui sont des chaines de caractères,
    • parfois un pseudonyme qui est une chaine de caractère,
    • une date de naissance,
    • une date de mort (si la personne est morte),
    • une liste référençant les œuvres dont elle est l’auteur,
    • une liste référençant les œuvres dont elle est propriétaire,
  • toute personne peut être identifiée de manière unique ;
  • sont considérées comme œuvre d’art les peintures, les sculptures, les films, les livres ;
  • Chaque œuvre possède au moins un auteur qui est une personne ;
  • Chaque œuvre possède un et un seul titre qui contient au maximum 80 caractères ;
    • Les peintures possèdent :
      • un medium (peinture à l’huile, aquarelle, Encre, Gouache, fresque, ...),
      • une dimension (longueur, largeur) en cm,
    • Les sculptures sont décrites par :
      • les matériaux utilisés (marbre, calcaire, bronze, ...),
      • leurs dimension (longueur, largeur, hauteur) en cm quand celles-ci sont disponibles,
    • Les films possèdent dans l’ordre :
      • une durée en minutes,
      • un genre (aventure, science fiction, ...),
      • un résumé qui doit contenir entre 50 et 250 lettres ;
      • une liste d’acteurs référençant les personnes ayant tourné dans le film,
    • les livres sont définis par :
      • un nombre de pages,
      • un identifiant unique qui est leur ISBN ;
    • 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 le schéma XML représentant la description ci-dessus puis un fichier XML bien formé et valide envers ce schéma et décrivant au moins les œuvres d’arts suivantes et leurs auteurs :
Pour chacune de ces œuvres, le ou les auteurs devront être renseignés. Pour les propriétaires, ceux-ci ne devront être renseignés que s’ils sont connus.
Dans le cas des films, au moins 2 acteurs doivent être renseignés.

6. Exploitation de la collection d'oeuvres d'art

Une fois la collection d’œuvre d’art créée, assurez vous de sa validité. Vous testerez ensuite le contenu de la collection grâce aux requêtes XPath correspondantes au demandes ci-dessous :
  1. Lister les œuvres de Jean-Auguste-Dominique Ingres ;
  2. Lister toutes les personnes qui sont des acteurs ;
  3. Lister toutes les sculptures ;
  4. Lister les œuvres dont le titre contient le motif "grand" ;