[XSD] targetNameSpace - erreur à la verification

targetNameSpace - erreur à la verification [XSD] - XML/XSL - Programmation

Marsh Posté le 08-08-2008 à 16:50:45    

Bonjour
 
J'ai un problème avec un xsd. J'ai un code java vérifiant si un xml est conforme à une xsd
 

Code :
  1. try {
  2.        DocumentBuilderFactory fabriqueAnalyseur =
  3.                               DocumentBuilderFactory.newInstance();
  4.        DocumentBuilder analyseur = fabriqueAnalyseur.newDocumentBuilder();
  5.        Document document = analyseur.parse(new File("C:/Documents and Settings/jsomsanith/Bureau/machin.xml" ));
  6.        SchemaFactory fabrique = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
  7.        fabrique.setErrorHandler(new ErrorHandler(){
  8.         public void fatalError( SAXParseException e ) throws SAXException {
  9.             System.out.println("ERREUR FATALE" );
  10.             e.printStackTrace();
  11.         }
  12.         public void error( SAXParseException e ) throws SAXException {
  13.             System.out.println("ERREUR" );
  14.             e.printStackTrace();
  15.         }
  16.         public void warning( SAXParseException e ) throws SAXException {
  17.             System.out.println("AVERTISSEMENT" );
  18.             e.printStackTrace();
  19.         }
  20.        });
  21.        InputSource sourceEntree = new InputSource("C:/Documents and Settings/jsomsanith/Bureau/machin.xsd" );
  22.        SAXSource sourceXSD = new SAXSource(sourceEntree);
  23.        Schema schema = fabrique.newSchema(sourceXSD);
  24.        Validator validateur = schema.newValidator();
  25.        validateur.validate(new DOMSource(document));
  26.      }
  27.      catch (SAXException e) {
  28.        e.printStackTrace();
  29.      }
  30.      catch (ParserConfigurationException e) {
  31.        e.printStackTrace();
  32.      }
  33.      catch (IOException e) {
  34.        e.printStackTrace();
  35.      }


 
Au lancement, j'ai cette erreur:
 

Code :
  1. ERREUR :  'cvc-elt.1: Cannot find the declaration of element 'Truc'.'
  2. org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'Truc'.
  3. at com.sun.org.apache.xerces.internal.jaxp.validation.Util.toSAXParseException(Util.java:109)
  4. at com.sun.org.apache.xerces.internal.jaxp.validation.ErrorHandlerAdaptor.error(ErrorHandlerAdaptor.java:104)
  5. at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
  6. at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
  7. at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1944)
  8. at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)
  9. at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.startElement(ValidatorHandlerImpl.java:335)
  10. at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:205)
  11. at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.characters(ToXMLSAXHandler.java:524)
  12. at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.characters(ToXMLSAXHandler.java:467)
  13. at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:229)
  14. at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:215)
  15. at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:121)
  16. at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:85)
  17. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:615)
  18. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:661)
  19. at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:300)
  20. at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.process(ValidatorImpl.java:220)
  21. at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:141)
  22. at javax.xml.validation.Validator.validate(Validator.java:82)
  23. at Test.main(Test.java:216)


 
Lorsque je retire targetNamespace, ça marche.... Or je suis obligé de respecter la xsd avec le targetNameSpace.
 

Code :
  1. <xs:schema xmlns:mpr="..." xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dico="..." xmlns:ns1="..." targetNamespace="..." elementFormDefault="unqualified" attributeFormDefault="unqualified" version="0.1">


(Les "..." sont des textes que j'ai remplacé par des ... pour le forum)
 
Quelqu'un aurait une explication et/ou une solution?
 
Merci d'avance


Message édité par zhamos_kh le 08-08-2008 à 16:52:58
Reply

Marsh Posté le 08-08-2008 à 16:50:45   

Reply

Marsh Posté le 11-08-2008 à 10:43:02    

up

Reply

Marsh Posté le 11-08-2008 à 14:54:03    

si au moins on savais à quoi ressemble ton XML et ce que c'est que ce "Truc" qui fait tout planter...
 
clairement, ton XML utilise ne balise "Truc" ou un attribut "Truc" ou je ne sais quel autre truc, et il n'est pas correctement défini dans ta XSD. Problème de préfixe peut-être ?


Message édité par MagicBuzz le 11-08-2008 à 14:54:54
Reply

Marsh Posté le 11-08-2008 à 18:01:04    

Salut
 
Mon xml est simple:

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Truc>
  3. <Type>T</Type>
  4. </Truc>


 
(J'ai changé le nom du tag qui n'est pas 'Truc' ni dans la xsd, ni dans l'xml mais je suis sur qu'ils correspondent, j'ai fais du copier/coller du nom)
 
D'après le message, il n'arrive pas à trouver la definition du 1er tag alors qu'il est bien défini:

Code :
  1. <xs:element name="Truc">
  2.  <xs:complexType>
  3.   <xs:complexContent>
  4.    <xs:extension base="machin1">
  5.     <xs:sequence minOccurs="0">
  6.      <xs:element name="machin2" type="machin3" minOccurs="0"/>
  7.     </xs:sequence>
  8.    </xs:extension>
  9.   </xs:complexContent>
  10.  </xs:complexType>
  11. </xs:element>


 
Bref, il est certain que la xsd est bonne (testé par des personnes tiers)
Qu'est-ce que tu appelles "Problème de préfixe"?


Message édité par zhamos_kh le 11-08-2008 à 18:02:40
Reply

Marsh Posté le 11-08-2008 à 19:18:15    

<machin:Truc>
 
c'est ça que j'appelle un préfixe. Tu lui a collé un préfix à la déclaration à ton XSD ? parceque si t'en indique pas, de mémoire il y en a un qui est créé automatiquement, je sais plus du tout quoi par contre (voir la RFC du XSD) et là à aucun endroit dans ton code je vois que tu lui dit de ne pas préfixer les éléments du schéma de ton XSD.
 
si tu colles ton XSD dans la définition du fichier XML plutôt que de passer par une verrue en Java, ça donne quoi ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed