Bonjour,
je voudrais valider un fichier XSD pour vérifier qu'il a bien été formé.
Dans ce fichier XSD, je n'ai, pour l'exemple et le test, utilisé que des balises par défaut et sans namespace.
voici le fichier XSD que je veux valider.
En cela, j'ai téléchargé les XSD et DTD se trouvant ici http://www.w3.org/2001/XMLSchema et j'utilise donc le fichier XMLSchema .xsd pour ma validation.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version='1.0' encoding='utf-8' ?> <schema xmlns='http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified' version='1.0'> <annotation> <documentation>...</documentation> </annotation> </schema>
Mais lorsque je lance la validation, j'ai l'erreur suivante:
Voici le code Java que j'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'xml:lang' to a(n) 'attribute declaration' component. at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.reportSchemaError(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.getGlobalDecl(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDAttributeTraverser.traverseLocal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDAbstractTraverser.traverseAttrsAndAttrGrps(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.processComplexContent(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.traverseComplexContent(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.traverseComplexTypeDecl(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.traverseLocal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseNamedElement(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseGlobal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.traverseSchemas(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source) at org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source) at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:594) at xx.yyy.zzzzzz.util.XMLUtils.validate(XMLUtils.java:226) at xx.yyy.zzzzzz.config.ConfigurationValidator.validateOneFragmentFile(ConfigurationValidator.java:303) at xx.yyy.zzzzzz.config.ConfigurationValidator.generateProcessXSD(ConfigurationValidator.java:123) at xx.yyy.zzzzzz.runner.SoftwareRunner.generateProcessXSDIfSpecifiedAndExit(SoftwareRunner.java:238) at xx.yyy.zzzzzz.runner.SoftwareRunner.main(SoftwareRunner.java:142)
L'exception est lancée au niveau du validator.validate(source);Je suis sous oracle JDK 6
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 final Source xsdSource = new SAXSource(new InputSource(xsdStream)); final Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(xsdSource); final Validator validator = schema.newValidator(); final Source source = new StreamSource(xmlFile); try { validator.validate(source); return true; } catch (SAXException e) { return false; }
J'arrive très bien à valider des fichiers XML contre des XSD.
J'obtiens cette exception uniquement lorsque j'essaie de valider un fichier XSD (qui n'est rien d'autre qu'un fichier XML aussi ...)
J'ai un peu cherché déjà, mais je sèche.
J'ai aussi téléchargé et mis dans mon CLASSPATH les lib xercesImpl et ses dépendances pour solutionner tout ceci, mais rien n'y fait.
Est ce que quelqu'un d'autre aurait une solution ?
Merci d'avance.
Cordialement,
Partager