[XML] Probleme validation XML avec DTD

Fermé
Pijay - 30 nov. 2007 à 17:16
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 30 nov. 2007 à 17:27
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.
A voir également:

1 réponse

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
30 nov. 2007 à 17:27
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 :)

2