Rechercher : dans
Par :

[XML] Probleme validation XML avec DTD

Dernière réponse le 30 nov 2007 à 17:27:05 Pijay, le 30 nov 2007 à 17:16:43 
 Signaler ce message aux modérateurs

Bonjour,

Je suis débutant en XML.
J'ai developper un parser SAX sous JAVA pour lire un document XML.

J'ai écrit :

> le fichier XML "peronne.xml"
> le fichier DTD "individu.dtd"
> la classe JAVA "SaxParserPerso.java"

J'ai voulu tester la validation de mon fichier avec la DTD. Pour cela, j'ai spécifié dans ma classe JAVA :

SAXParserFactory spf = SAXParserFactory.newInstance();
//validation du document avec la DTD
spf.setValidating(true);

j'ai essayé aussi avec :

SAXParserFactory spf = SAXParserFactory.newInstance();
//validation du document avec la DTD
spf.setFeature("http://xml.org/sax/features/validation",true);


Le problème est que, même si le document XML n'est pas valide, aucune erreur de structure est détecté ????

Fichier XML :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE livre SYSTEM "individu.dtd">
   <livre>
       <personne> 
            <nom>Hetfield</nom>
            <prenom>James</prenom>
            <telephone>06-66-66-66-66</telephone>
            <email>hetfieldl@metallica.com</email>
       </personne>
       <personne>
             <telephone>06-69-69-69-69</telephone>
             <nom>Ulrich</nom>
             <prenom>Lars</prenom>
             <email>ulrich@metallica.com</email>
       </personne>
    </livre>


Fichier DTD :

<!ELEMENT livre (personne*) >
<!ELEMENT personne (nom,prenom,telephone,email?) >
<!ELEMENT nom (#PCDATA) >
<!ELEMENT prenom (#PCDATA) >
<!ELEMENT telephone (#PCDATA) >
<!ELEMENT email (#PCDATA) >


Comme vous pouvez le voir, la strucutre du document n'est pas valide car le "telephone" de la 2° personne est mal placé.
Lorsque le document est PARSER, tout se déroule normalement et aucune erreur de validation est détectée.

Logiquement, la lecture du document devrait s'arreté a cette balise mal placée ?
Comment activé la validation du document a partir d'une DTD ?
Le fait d'executer mon application sous Eclipse pose - t - il probleme pour la validation du document ?


Informations complémentaires : Je travail sous Debian(Linux) avec la plateforme Eclipse 3.2.
Si quelqu'un connait bien le domaine, toute aide ou explication serait la bienvenue.

Merci d'avance.
Configuration: Debian (Linux)
Eclipse 3.2

Meilleures réponses pour « [XML] Probleme validation XML avec DTD » dans :
Télécharger DriveImage XML VoirDriveImage XML est un programme permettant de faire des images du système (partitions et lecteurs logiques) à des fins de sauvegarde, à la manière de Norton Ghost. Ce programme permet : De créer des images des lecteurs logiques et des...
Présentation des DTD VoirLe rôle de la DTD XML permet d'utiliser un fichier afin de vérifier qu'un document XML est conforme à une syntaxe donnée. La norme XML définit ainsi une définition de document type appelée DTD (Document Type Definition), c'est-à-dire une grammaire...
Déclaration d'entités dans les DTD VoirDéclarer des entités XML permet de créer des entités, c'est-à-dire de déclarer un groupe d'éléments sous un nom afin de ne pas avoir à réécrire ces derniers plusieurs fois dans la DTD s'ils se répètent, dans le même esprit que les macros dans les...
Structure d'un document XML VoirQu'est-ce que le XML? La norme XML en tant que telle doit être vue comme un outil permettant de définir un langage (on dit alors qu'il s'agit d'un métalangage), permettant de créer des documents structurés à l'aide de balises. Une balise est une...

1

 kij_82, le 30 nov 2007 à 17:27:05

Bonsoir,

J'ai testé ton problème sous autre chose qu'éclipse et effectivement, la structure est bonne, mais la validation ne passe pas, justement du fait que certains éléments ne soient pas dans le bon ordre.

Je n'ai pas trop le temps de me pencher sur ton problème (we) mais voilà un code que j'utilise :

SAXParserFactory factory = SAXParserFactory.newInstance();			
			factory.setValidating(true);
			factory.setNamespaceAware(true);
			SAXParser parser = factory.newSAXParser();
			parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage" , "http://www.w3.org/2001/XMLSchema");			

			// --- Set Input source
			InputSource source = new InputSource(getConfig().getRoot() + '/' + getConfig().getData() + '/' + getXmlFile());
			
			// --- parse
			XMLReader reader = parser.getXMLReader();
			reader.setContentHandler(new DefaultHandler());
			reader.setErrorHandler(new DefaultHandler());
			reader.setEntityResolver( new MonPropreResolver() );
			reader.parse(source);		


Et il me semble que ca fonctionne bien.
A voir donc... bon courage :)


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82