<texit info> author=E. Bruno title=XML TP1 </texit>
TP1 - Edition de documents XML bien-formés et valides
Objectifs
- Utilisation des outils de base pour la création et l’édition de documents XML.
- Vérification des documents bien formés et validation d’un document par rapport à une DTD.
- (Optionnel) Exemple de transformation avec XSLT vers HTML, XSL puis vers pdf.
Les outils pour l'édition et validation de documents
Les outils suivant sont utilisables pour l’édition :
- l’IDE eclipse
- L’éditeur Emacs http://www.gnu.org/software/emacs/emacs.html
- Le mode psgml http://sourceforge.net/projects/psgml/, avec le mode nxml et le mode tdtd http://www.menteith.com/tdtd/
- Le logiciel commercial xmlspy (http://www.xmlspy.com) disponible sous windows ou sous linux avec wine.
- Le logiciel commercial oxygen (http://www.oxygenxml.com) sur sis
/usr/local/Oxygen
Dans le cadre de ces TP, nous utiliserons
- eclipse comme interface d’édition http://eclipse.org/juno/
- Xerces2 version java (http://xerces.apache.org/) pour la validation en ligne de commande
- Saxon pour Java (http://saxon.sourceforge.net/#F9.4HE) comme processeur XSLT pour la transformation de document XML (Saxon est aussi un parseur XML et un processeur XQuery).
- Il faudra donc une machine virtuelle java installée JDK SE (au moins version 6) (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
Les recommendations
- Namespaces : http://www.w3.org/TR/xml-names11
Validation d’un document associé à une DTD
Le fichier books.dtd.zip décrit un modèle de document qui permet de représenter une collection de livres. Le fichier books-errors.xml est un document XML exemple qui est une instance de la dtd précédente, il contient des erreurs. Deux types d’erreurs peuvent apparaître. Des erreurs de non-conformité avec le langage XML (balises non fermés, …), on dira alors que le document n’est pas bien formé ; et des erreurs de non conformité par rapport à une DTD, on dira alors que le document n’est pas valide par rapport à cette DTD.
Pour vérifier la conformité d’un document à la norme XML, on utilise un editeur XML (eclipse pour nous) ou un parser (Xerces en ligne de commande) :
java -cp xerces-2_11_0/xercesImpl.jar:xerces-2_11_0/xercesSamples.jar:xerces-2_11_0/xml-apis.jar dom.Counter -v books-errors.xml
En fait, il s’agit d’un application java qui analyse le document en comptant les éléments mais au et à mesure elle vérifie le document.
Corriger les erreurs syntaxiques du document books-errors.xml
pour le rendre bien formé.
Pour valider un documents XML par rapport à une DTD, on ajoute un DOCTYPE dans le document pour le lier à cette
DTD (enlever le commentaire autour de celui qui est présent et modifier le chemin). Le parser l’utilisera pour vérifier la validité du document. Rendre le document books-errors.xml
valide par rapport à la dtd books.dtd
.
java -cp xerces-2_11_0/xercesImpl.jar:xerces-2_11_0/xercesSamples.jar:xerces-2_11_0/xml-apis.jar dom.Counter -v books.xml
Edition d’un document XML
En utilisant eclipse, exercez vous à ajouter des élements, des attributs et du texte en insérant deux ou trois nouveau livre dans le document XML.
Vous mettrez éventuellement la DTD à jour, et vous validerez le document modifié.
Espaces de noms
Modifier le document précédent en utilisant les espaces de noms. Vous structurerez de façon plus fine les auteurs pour leur ajouter un title
(Dr., Pr., Ms., Mrs., Miss). Pour distinguer les éléments ayant le même nom, vous définirez deux espaces de noms, un pour les livres et un pour les auteurs.
Création d’une définition de type de documents: DTD
Baliser des documents
Proposer une structuration XML pour les classes et interfaces de la javadoc http://java.sun.com/j2se/1.5.0/docs/api/index.html .Vous détaillerez un exemple avec les classes String
et StringBuilder
. Attention, le site Web est orienté présentation mais votre document XML devra décrire la structure logique. Vous utiliserez en particulier la possibilité de décrire des listes et des tableaux et les références internes.
Construire une DTD
A partir des balisages que vous venez de définir, proposer une DTD javadoc.dtd
et valider les deux documents.
Une DTD industrielle, Docbook
La DTD docbook (ainsi qu’une version simplifié) sont présentés sur les sites http://www.docbook.org et http://www.oasis-open.org/docbook/. Un exemple simple de document se trouve dans le fichier sample-docbook.xml.
La documentation complète de docbook écrite en XML se trouve ici : http://docbook.svn.sourceforge.net/viewvc/docbook/trunk/defguide/en/, une version HTML (générée automatiquement) est disponible ici : http://www.docbook.org/tdg/en/html/docbook.html.
La DTD est ici http://www.oasis-open.org/docbook/xml/
les feuilles de style là : http://sourceforge.net/projects/docbook/ (Plus d’information http://sagehill.net/docbookxsl/index.html).
Créer un document conforme à la DTD docbook
Écrire le manuel d’utilisation d’un projet que vous avez réalisé en utilisant la DTD docbook.
Transformer un document XML
Un document XML peut être transformé en un autre document XML (ou en un fichier texte) en utilisant des feuilles de style XSLT (celles-ci seront étudiées ultérieurement en cours, nous allons ici simplement les utiliser).
Trois feuilles de style sont proposées pour transformer un document XML valide pour la DTD docbook en
- HTML : docbook-xsl-1.77.1/html/docbook.xsl
- XHTML : docbook-xsl-1.77.1/xhtml/docbook.xsl
- XSL-FO : docbook-xsl-1.77.1/fo/docbook.xsl
Il faut utiliser un processeur XSLT (Saxon par exemple). La commande pour appliquer une feuille de style de xhtml est :
java -cp saxon9he.jar net.sf.saxon.Transform -strip:all -s:sample-docbook.xml -xsl:docbook-xsl-1.77.1/xhtml/docbook.xsl -o:sample-document.xhtml
Transformer le document de l’exercice précédent en un document HTML, puis en un document XHTML/XHTML5.
La troisième feuille de style produit un document XML dans un format appelé FO (Formating Object) qui décrit un document formaté. Ce document peut ensuite être converti vers un format propriétaire (dvi, ps, pdf, . . . ).
Pour réaliser cette transformation, divers outils sont disponibles par exemple FOP (http://xml.apache.org/fop/) .
java -cp saxon9he.jar net.sf.saxon.Transform -strip:all -s:sample-docbook.xml -xsl:docbook-xsl-1.77.1/fo/docbook.xsl -o:sample-document-fo.xml fop -fo sample-document-fo.xml -pdf sample-document-fo.pdf