TP XML du 22/10
Programmation avec DOM et SAX
On dispose d'un document XML et de sa DTD qui utilise une entité.
Le document XML décrit les animaux d'un Zoo. On veut faire une visite médicale systématique des jeunes animaux du Zoo. Etudiez et comprenez la structure de l'instance.
Programmation avec DOM
- Ecrivez un programme en Java avec JAXP qui ajoute un attribut qui ait ce rôle pour les animaux de moins d'un an. On n'utilisera pas Document#getElementsByTagName() : on se forcera à parcourir le document d'une manière récursive. Dans un premier temps, on se contentera de modifier le DOM sans enregistrer les modifications. Le programme devra valider le document avec sa DTD.
- Complétez votre programme pour qu'il sérialise le document modifié dans un fichier.
- Dans cet exercice, modifiez l'instance de sorte qu'elle contredise la DTD. Que se passe-t-il ? Branchez un gestionnaire d'erreurs sur votre parseur.
- Dans l'instance XML, remplacez les références d'entité par des références absolues :
- Avant :
<!DOCTYPE zoo SYSTEM "zoo.dtd" [
<!ENTITY % notations SYSTEM "notations.ent">
.../...
- Après :
<!DOCTYPE zoo SYSTEM "http://www.zooooo.com/xml/zoo.dtd" [
<!ENTITY % notations SYSTEM "http://www.zooooo.com/xml/notations.ent">
.../...
Branchez un résolveur d'entité sur votre parseur, de sorte qu'il intercepte ces URLs et fournisse les ressources appropriées.
- On veut séparer ce qui est documentaire (les éléments img, b, info, danger, commentaire, etc) de ce qui est structure de données (les autres éléments)... Déclarez dans la DTD et utilisez dans le document XML source 2 espaces de nommage pour identifier ces 2 familles. Vous n'utiliserez pas de préfixe pour les éléments de structures de données, vous en utiliserez un pour les éléments documentaires. Utilisez un URN et un URL pour les 2 URIs d'espace de nom.
- Que fait le parseur XML lorsqu'il rencontre votre URL d'espace de nom ?
- Il en parle à son parfrère.
- Rien.
- Il essaye de lire la DTD à l'adresse indiquée.
- Il est obligé de trouver la DTD à l'adresse indiquée, sinon ça plante.
- Corrigez votre programme pour qu'il fonctionne à nouveau.
Programmation avec SAX
Refaite les mêmes exercices avec SAX en utilisant JAXP au lieu de DOM. On pourra réutiliser le même gestionnaire d'erreur et le même résolveur d'entité que précedemment.
Faites une variante du programme qui, au lieu d'ajouter un attribut, ajoutera un élément.