Suppose you have the following XML Schema file :
(the full file path should be : org/daz/xml/validation/employee.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="employees" type="employeesType" />
<xsd:complexType name="employeesType">
<xsd:sequence>
<xsd:element name="employee" type="employeeType"
maxOccurs="unbounded" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="company" type="xsd:string" use="required" />
</xsd:complexType>
<xsd:complexType name="employeeType">
<xsd:sequence>
<xsd:element ref="name" />
<xsd:element ref="role" maxOccurs="unbounded" minOccurs="1" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required" />
</xsd:complexType>
<xsd:element name="name">
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:element>
<xsd:element name="role">
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:element>
</xsd:schema>
And This XML File :
(the full file path should be : org/daz/xml/validation/employee.xml)
<?xml version="1.0" encoding="UTF-8"?>
<employees company="ArxICT" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="employee.xsd">
<employee id="MHWDY">
<name>Mohammed Hewedy</name>
<role>SW Engineer</role>
</employee>
<employee id="MBSRY">
<name>Mohammed Besary</name>
<role>QA Engineer</role>
<role>Business Analyst</role>
</employee>
<employee id="EDWD">
<name>Eslam Dawood</name>
<role>SW Engineer</role>
</employee>
</employees>
Here's the code that validate the XML Againest the Schema :
package org.daz.xml.validation;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class EmployeeValidatorTest {
public void validate(String schemaFile, String xmlFile) {
try {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(getSource(schemaFile));
Validator validator = schema.newValidator();
ValidationHandler handler = new ValidationHandler();
validator.setErrorHandler(handler);
validator.validate(getSource(xmlFile));
if (handler.errorsFound == true) {
System.err.println("Validation Error : " + handler.exception.getMessage());
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private Source getSource(String resource) {
return new StreamSource(EmployeeValidatorTest.class.getClassLoader().getResourceAsStream(resource));
}
private class ValidationHandler implements ErrorHandler{
private boolean errorsFound = false;
private SAXParseException exception;
public void error(SAXParseException exception) throws SAXException {
this.errorsFound = true;
this.exception = exception;
}
public void fatalError(SAXParseException exception) throws SAXException {
this.errorsFound = true;
this.exception = exception;
}
public void warning(SAXParseException exception) throws SAXException {
}
}
/*
* Test
*/
public static void main(String[] args) {
new EmployeeValidatorTest().
validate("org/daz/xml/validation/employee.xsd", "org/daz/xml/validation/employee.xml");
}
}
related SO question: about "Cannot find the declaration of element "
http://stackoverflow.com/questions/3049779/cannot-validate-xml-doc-againest-cybs-xsd-schema-cannot-find-the-declaration-of/3049812#3049812
No comments:
Post a Comment