|
XSD Validation in Java
Part:
1
2
3
This tutorial describes:
- Validation with XMLReader
- Using SAXParserFactory to Load Parsers
Validation with XMLReader
Unfortunately, I couldn't find any XML parsers provided in J2SDK 1.4.1_02 that
can validate XML structure against XSD rules. So I downloaded one of the most
popular XML parsers in the public domain, xerces-j 2.3.0, at:
http://xml.apache.org/dist/xerces-j.
Once I downloaded Xerces-J-bin.2.3.0.zip, I unzipped it into \local\xerces-2_3_0
directory. Make sure that xercesImpt.jar is in that directory.
Now I am ready to write a simple Java program to use "org.apache.xerces.parsers.SAXParser"
to validate any XML files against the specified XSD files:
/**
* XMLReaderValidator.java
* Copyright (c) 2002 by Dr. Herong Yang
*/
import java.io.IOException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
class XMLReaderValidator {
public static void main(String[] args) {
String parserClass = "org.apache.xerces.parsers.SAXParser";
String validationFeature
= "http://xml.org/sax/features/validation";
String schemaFeature
= "http://apache.org/xml/features/validation/schema";
try {
String x = args[0];
XMLReader r = XMLReaderFactory.createXMLReader(parserClass);
r.setFeature(validationFeature,true);
r.setFeature(schemaFeature,true);
r.setErrorHandler(new MyErrorHandler());
r.parse(x);
} catch (SAXException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}
private static class MyErrorHandler extends DefaultHandler {
public void warning(SAXParseException e) throws SAXException {
System.out.println("Warning: ");
printInfo(e);
}
public void error(SAXParseException e) throws SAXException {
System.out.println("Error: ");
printInfo(e);
}
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("Fattal error: ");
printInfo(e);
}
private void printInfo(SAXParseException e) {
System.out.println(" Public ID: "+e.getPublicId());
System.out.println(" System ID: "+e.getSystemId());
System.out.println(" Line number: "+e.getLineNumber());
System.out.println(" Column number: "+e.getColumnNumber());
System.out.println(" Message: "+e.getMessage());
}
}
}
Here is an XML file, dictionary_invalid_xsd.xml:
<?xml version="1.0"?>
<dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="dictionary.xsd">
<!-- dictionary_invalid_xsd.xml
Copyright (c) 2002 by Dr. Herong Yang
-->
<word acronym="yes">
<name>XML</name>
<definition reference="Herong's Notes">eXtensible Markup
Language.</definition>
<update date="23-Dec-2003"/>
</word>
<word symbol="true">
<name><</name>
<definition>Mathematical symbol representing the "less than" logical
operation, like: 1<2.</definition>
<definition>Reserved symbol in XML representing the beginning of
tags, like: <![CDATA[<p>Hello world!</p>]]>
</definition>
<update editor="Herong Yang"/>
</word>
<word symbol="no" acronym="false">
<name>extensible</name>
<definition>Capable of being extended.</definition>
</word>
</dictionary>
(Continued on next part...)
Part:
1
2
3
|