I am using Analytical Information Markup Language (AnIML) is the emerging ASTM XML standard for analytical chemistry data in my project. I have an xml data which I want to validate against an XSD file.But whenever I run the program it is showing an exception. I am using jav acode. My code is-
public class XMLValidator {
public static final String XML_FILE = "test_data.xml";
public static final String SCHEMA_FILE = "test.xsd";
public static void main(String[] args) {
XMLValidator XMLValidator = new XMLValidator();
boolean valid = XMLValidator.validate(XML_FILE, SCHEMA_FILE);
System.out.printf("%s validation = %b.", XML_FILE, valid);
}
private boolean validate(String xmlFile, String schemaFile) {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
Schema schema = schemaFactory.newSchema(new File(schemaFile));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(xmlFile)));
return true;
} catch (SAXException | IOException e) {
e.printStackTrace();
return false;
}
}
My XML file is
Modified XML
<?xml version="1.0" encoding="UTF-8"?>
<AnIML xmlns:xsi="urn:org:astm:animl:schema:core:draft:0.90" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xsi:noNamespaceSchemaLocation="https://github.com/AnIML/schemas/blob/master/animl-core.xsd" version="0.90" blu-fmt-v="1">
<ExperimentStepSet>
..
</ExperimentStep>
</ExperimentStepSet>
</AnIML>
The exception I got is
org.xml.sax.SAXParseException; systemId: file:/D:/test/xmlvalidator/test_data.xml; lineNumber: 2; columnNumber: 229; cvc-elt.1: Declaration of element 'AnIML' can not be found.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
at .....