[XML] Probleme validation XML avec DTD
Pijay
-
kij_82 Messages postés 4260 Statut Contributeur -
kij_82 Messages postés 4260 Statut Contributeur -
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 :
j'ai essayé aussi avec :
Le problème est que, même si le document XML n'est pas valide, aucune erreur de structure est détecté ????
Fichier XML :
Fichier DTD :
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.
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:
- [XML] Probleme validation XML avec DTD
- Xml viewer - Télécharger - Édition & Programmation
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- Impossible d'utiliser ce numéro de téléphone pour la validation - Forum Gmail
- Commande en cours de validation fnac - Forum Consommation & Internet
1 réponse
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 :
Et il me semble que ca fonctionne bien.
A voir donc... bon courage :)
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 :)