Vous devez activer Javascript pour accéder à ce site
 

Semaine

RECHERCHE

Validation de documents XML

La validation des documents XML

Objectif

Valider des documents XML.

Activité de validation

On peut facilement vérifier si un document XML est « bien formé ». Il suffit de lui donner l'extension « .xml » (ou « .xhtml ») et de l'ouvrir dans navigateur, par exemple.

Cependant, il arrive qu'on veuille vérifier que le document est non seulement bien formé, mais aussi valable par rapport à des documents DTD locaux. Apprenons donc à valider des documents XML, en exécutant les directives qui suivent, car cela vous sera très utile dans vos travaux en XML.

La procédure que nous proposons suppose que vous connaissez bien les éléments de base d'un système d'exploitation, comme l'utilisation de la ligne de commande et l'exécution de programmes. Nous ne donnons la procédure que pour Windows, mais elle est très similaire sous MacOS ou Linux.

Procédure pour valider des documents XML

Avant de procéder à la validation, préparons notre environnement. Allez dans un répertoire, par exemple « C:\XML », et créez le fichier « monfichier.dtd » avec le contenu suivant, en utilisant le bloc-notes :

<!ELEMENT etudiant (numero,age)>
<!ELEMENT numero (#PCDATA)>
<!ELEMENT age (#PCDATA) >

Puis, créez un document appelé « mauvais.xml » avec le contenu suivant, toujours à l'aide du bloc-notes :

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
 <!DOCTYPE etudiant SYSTEM "monfichier.dtd">
 <etudiant><age>12</age></etudiant>

Il est important que les deux fichiers soient dans le même répertoire. En effet, la ligne DOCTYPE etudiant SYSTEM "monfichier.dtd" dans le fichier « mauvais.xml » indique qu'il devrait y avoir un fichier « monfichier.dtd » dans le même répertoire.

Vérifions maintenant si le fichier « mauvais.xml » est valable.

  1. D'abord, vous devez disposer d'une machine virtuelle Java récente (Java 21 ou mieux) sur votre ordinateur, incluant le compilateur Java : « javac ». Si vous n'en avez pas, il faut effectuer un enregistrement et une installation d'une telle machine. En outre, vous devez avoir sur votre ordinateur le SDK (aussi appelé JDK), pas uniquement le JRE. Sur la page qui se trouve à l'adresse Le téléchargement peut prendre plusieurs minutes. Il suffit ensuite de lancer le fichier exécutable que vous venez d'enregistrer sur votre ordinateur pour installer le SDK. Une fois le SDK installé, vous pouvez poursuivre l'activité de vérification. Si l'outil d'installation vous proposer de modifier les variables PATH et JAVAHOME, vous devez l'y autoriser. Si vous êtes incapable d'installer un logiciel sur votre ordinateur, nous vous invitons à joindre un technicien et à obtenir de l'aide. Nous ne pouvons pas, au sein du cours, vous offrir un soutien technique spécifique à votre ordinateur.
  2. Placez le fichier Validateur.java dans le répertoire où se trouvent déjà vos fichiers « mauvais.xml » et « monfichier.dtd », soit dans « C:\XML ». Votre fichier « Validateur.java » devrait avoir le contenu suivant :
    //fichier Validateur.java
    import java.io.*;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import javax.xml.parsers.*;
    /**
    * Ce programme est inspiré de Xerces-J. Il a été modifié
    * par Daniel Lemire pour le cours "Gestion de l'information 
    * avec XML".
    *
    * Date de la dernière modification: 5 novembre 2014.
    *
    * Il suffit de compiler le programme avec 
    * "javac Validateur.java".
    * On peut ensuite valider un document en faisant 
    * "java Validateur monfichier.xml".
    *
    */
    public class Validateur extends DefaultHandler {
    
        public Validateur() {
        }
      
        public void warning(SAXParseException ex) 
        throws SAXException {
            printError("Avertissement", ex);
        }
    
        public void error(SAXParseException ex) 
        throws SAXException {
            printError("Erreur", ex);
        }
    
        public void fatalError(SAXParseException ex) 
        throws SAXException {
            printError("Erreur fatale", ex);
        }
    
        protected void printError(String type, SAXParseException ex) {
            System.err.print("[");
            System.err.print(type);
            System.err.print("] ");
            if (ex== null) {
                System.out.println("!!!");
            }
            String systemId = ex.getSystemId();
            if (systemId != null) {
                int index = systemId.lastIndexOf('/');
                if (index != -1)
                    systemId = systemId.substring(index + 1);
                System.err.print(systemId);
            }
            System.err.print(" ligne: ");
            System.err.println(ex.getLineNumber());
            System.err.println(", colonne: ");
            System.err.print(ex.getColumnNumber());
            System.err.print(", description: ");
            System.err.print(ex.getMessage());
            System.err.println();
            System.err.flush();
    
        }
    
        public static void main(String argv[]) 
        throws org.xml.sax.SAXException,
        javax.xml.parsers.ParserConfigurationException {
            Validateur counter =  new Validateur();
            PrintWriter out = new PrintWriter(System.out);
            XMLReader parser = null;
            parser = SAXParserFactory.newInstance().newSAXParser().
            getXMLReader();
            parser.setContentHandler(counter);
            parser.setErrorHandler(counter);
            parser.setFeature("http://xml.org/sax/features/validation",
            true);
            parser.setFeature("http://xml.org/sax/features/namespaces",
            true);
            try {
               parser.parse(argv[0]);
            } catch (SAXParseException e) { 
            } catch (Exception e) {
                    System.err.println("erreur: Erreur de traitement -"
                    +e.getMessage());
            }
        }
    }
    
    (Vous pouvez le télécharger directement si vous préférez ne pas créer le fichier Java vous-même.)
  3. Ensuite, lancez la machine virtuelle Java avec une ligne de commande. Pour cela, il faut ouvrir une fenêtre de commande. Sous Windows 8 et versions ultérieures, cliquez en bas à gauche avec le bouton droit de la souris et sélectionnez «invite de commandes». Sous les versions précédentes de Windows, dans le menu « Démarrer », cliquez sur « Exécuter »; une fenêtre s'ouvre, tapez le nom de programme « cmd » pour ouvrir une fenêtre de commande. Notez qu'avec les versions plus anciennes de Windows, comme Windows 98, il faut taper « command.com ». Une fenêtre s'ouvre alors avec un fond noir, c'est la fenêtre de commande. Vous allez pouvoir y taper des lignes de commande pour vérifier si votre document XML est valable. Les commandes de base sont : « dir » (affiche le contenu d'un répertoire), « cd » (change de répertoire), « cd .. » (répertoire parent), « mkdir » (création d'un nouveau répertoire), « copy » (copie d'un fichier), « move » (déplacement d'un fichier), et « del » (supprime un fichier).
  4. Testez l'installation de votre machine virtuelle en tapant « java » suivi du retour de chariot. Vous devriez recevoir un message qui commence par :
    Usage: java [-options] class [args...]
               (to execute a class)
       or  java -jar [-options] jarfile [args...]
               (to execute a jar file)
    
    ou quelque chose de similaire. Testez aussi l'installation du compilateur en tapant « javac »; vous devriez voir un message qui commence par quelque chose comme :
    Usage: javac <options> <source files>
    
    Si ce n'est pas le cas, nous vous conseillons de vérifier l'installation de votre machine virtuelle et de procéder à sa réinstallation au besoin. Si tout est bien installé et que ça ne fonctionne toujours pas, vous devrez indiquer le chemin pour trouver le compilateur en tapant la ligne de commande
     PATH=adresse_du_fichier_javac.exe
    Le fichier « javac.exe » se trouve dans le dossier « bin » du dossier où vous avez installé le SDK. Par défaut, ce fichier se trouve dans le « C: ». L'adresse du répertoire contenant le fichier « javac.exe » est donc souvent de la forme « C:\Program Files\Java\jdkXXXX\bin ». Si vous ne savez plus où est installé le SDK, vous pouvez faire une recherche, à partir du menu « Démarrer » de Windows. Une fois le chemin indiqué, retapez la commande « javac» et cette fois, tout devrait fonctionner. Comme il peut être lourd de modifier la variable d'environnement PATH chaque fois, il est possible de la modifier une fois pour toute : allez dans « Démarrer », choisissez « Paramètres », puis « Panneau de configuration », et ouvrez « Système », cliquez sur l'onglet « Avancé »; cliquez ensuite sur le bouton « Variables d'environnement », sélectionnez « PATH » dans la liste des variables, cliquez sur le bouton « Modifier » et ajoutez, à la fin du contenu de la variable, « ;adresse_du_fichier_javac.exe », par exemple « ;C:\Program Files\Java\jdk21\bin ».
  5. Ensuite, placez-vous dans le dossier où se trouvent votre fichier XML et sa DTD. Vous savez toujours où vous vous trouvez dans l'arborescence de votre ordinateur, puisque chaque ligne de commande commence par l'adresse où vous êtes. La commande pour se déplacer est « cd adresse ». Par exemple, si la ligne commence par « C:\Documents and Settings\lucie> », vous êtes dans le dossier de lucie. Pour aller au dossier XML qui se trouve sur le disque C, il faut taper : « cd C:\XML », puis faire le retour de chariot. Une nouvelle ligne apparaît et commence par : « C:\XML> ». Maintenant que vous êtes dans le dossier où se trouve votre fichier XML, vous pouvez vérifier s'il est valable.
  6. Faites « javac Validateur.java » pour compiler le petit programme qui pourra vous servir à vérifier la validité des documents XML. Vous ne devriez pas avoir de mal avec la compilation. Par exemple, vous pourriez voir à l'écran :
    C:\XML>javac Validateur.java
    Note: Validateur.java uses or overrides a deprecated API.
    Note: Recompile with -deprecation for details.
    
    Vous pouvez ignorer les avertissements vous incitant à utiliser l'option « -deprecation ».
  7. Tapez la ligne de commande « java Validateur mauvais.xml », puis faites un retour de chariot. Il est important de respecter la casse dans les lignes de commande. Si rien de significatif ne s'affiche, votre fichier est valable, sinon, une description des erreurs s'affichera (en anglais). Si la machine virtuelle quitte avec l'erreur « java.lang.NoClassDefFoundError » alors que vous êtes bien dans le bon répertoire, faites alors « java -cp . Validateur mauvais.xml ».
  8. Pour quitter, vous n'avez qu'à fermer la fenêtre de commande.

Vérification de la procédure

Après avoir tapé la commande « java Validateur mauvais.xml » pour vérifier si le fichier « mauvais.xml » est valable, vous devriez obtenir le message d'erreur suivant indiquant qu'il manque un élément « numero » (le message exact peut varier et il pourrait être en français) :

 > java Validateur mauvais.xml
[Error] mauvais.xml:3:-1: Element "etudiant" does not allow "age" here.
[Error] mauvais.xml:3:-1: Element "etudiant" requires additional elements.

Pour vous assurer de bien comprendre, reprenez la procédure; créez un autre document appelé « bon.xml » avec le contenu suivant :

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE etudiant SYSTEM "monfichier.dtd">
<etudiant><numero>1</numero><age>12</age></etudiant>

Cette fois-ci, vous devriez, en vérifiant que le document est valable, obtenir le message suivant :

 > java Validateur bon.xml

Retour

Est-ce que vous avez pu vérifier si les fichiers « mauvais.xml » et « bon.xml » étaient valables? Si oui, passez aux autres activités, sinon cherchez encore un peu.


© Daniel Lemire, 2014. Tous droits réservés.