Olá
Bom independente que seja o tópico, a questão é a sua dúvida, mas se for possível verificar antes é ideal para o fórum.
Mas que seja, caso não tenha esclarecido, vou tentar ajudar.
Fiz um post sobre esse assunto, creio que ajude no que está querendo.
Validação feita pelo SAX…
Um exemplo de XSD
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="howto">
<xs:complexType>
<xs:sequence>
<xs:element name="topic" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="number" type="xs:integer" />
<xs:element name="url" type="httpURI" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="httpURI">
<xs:restriction base="xs:anyURI">
<xs:pattern value="http://.*" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Um exemplo do XML baseado neste XSD
<?xml version="1.0" encoding="ISO-8859-1"?>
<howto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="howto howto.xsd">
<topic>
<title>Java</title>
<number>10</number>
<url>http://www.rgagnon.com/topics/java-xml.html</url>
</topic>
<topic>
<title>PowerBuilder</title>
<number>12</number>
<url>http://www.rgagnon.com/topics/pb-powerscript.htm</url>
</topic>
<topic>
<title>Javascript</title>
<number>1</number>
<url>http://www.rgagnon.com/topics/js-language.html</url>
</topic>
<topic>
<title>VBScript</title>
<number>8</number>
<url>http://www.rgagnon.com/topics/wsh-vbs.html</url>
</topic>
</howto>
Classe java validando, note que usei o XMLReader, mas também posso não usar.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class SAXValidationXML {
private static final String URI_VALIDATION = "http://xml.org/sax/features/validation";
private static final String URI_SCHEMA = "http://apache.org/xml/features/validation/schema";
private static final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
private static final String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
private static final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
private static final String FILE_XML = "howto.xml";
private static final String FILE_SCHEMA = "howto.xsd";
public SAXValidationXML() throws ParserConfigurationException, SAXException, IOException {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setValidating(true);
spf.setFeature(URI_VALIDATION, true);
spf.setFeature(URI_SCHEMA, true);
SAXParser sp = spf.newSAXParser();
sp.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
sp.setProperty(SCHEMA_SOURCE, getFileInput(FILE_SCHEMA));
//XMLReader só valida.
XMLReader xmlReader = sp.getXMLReader();
xmlReader.setErrorHandler(new EHandler());
xmlReader.setEntityResolver(new EResolver());
xmlReader.parse(new InputSource(getFileInput(FILE_XML)));
//Se quiser usar para parsear o XML/Validar
//sp.parse(getFileInput(FILE_XML), new DHandler());
}
public static void main(String[] args) {
try {
new SAXValidationXML();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private class DHandler extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println("QName " + qName);
}
/*
* Se preferir pode usar essa classe e implementar os metodos
* resolveEntity
* error
* warning
* fatalerror
*
* Implementando esses metodos não precisa utilizar o XMLREADER.
*
*/
@Override
public InputSource resolveEntity(String publicId, String systemId) throws IOException, SAXException {
return new InputSource(getFileInput(FILE_XML));
}
@Override
public void error(SAXParseException e) throws SAXException {
System.out.println("Main.ParserHandler.error()");
System.err.println(e.getLineNumber() + ", " + e.getColumnNumber());
}
@Override
public void warning(SAXParseException e) throws SAXException {
System.out.println("Main.ParserHandler.warning()");
}
@Override
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("Main.ParserHandler.fatalError()");
}
}
[/code]
//Essas duas classe são usadas somente para o XMLREADER.
[code]
private class EResolver implements EntityResolver {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws IOException, SAXException {
return new InputSource(getFileInput(FILE_XML));
}
}
private class EHandler implements ErrorHandler {
@Override
public void error(SAXParseException e) throws SAXException {
System.out.println("Main.ParserHandler.error()");
System.err.println(e.getLineNumber() + ", " + e.getColumnNumber());
}
@Override
public void warning(SAXParseException e) throws SAXException {
System.out.println("Main.ParserHandler.warning()");
}
@Override
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("Main.ParserHandler.fatalError()");
}
}
private InputStream getFileInput(String name) throws FileNotFoundException {
return new FileInputStream(new File(name));
}
}
Anexei também o projeto para fazer testes.
Olhando mais um pouco sobre validações de xml e xsd, vi que tem uma API para isso, XMLBeans.
Não testei, mas vi que é uma ferramenta bastante poderosa.
Vale a pena dar uma espiada nela…
Segue os links
- http://javafree.uol.com.br/topic-851661-Validar-XML-com-SCHEMA.html
- http://emarineli.wordpress.com/2009/06/25/validaco...derosas-com-o-apache-xmlbeans/
- http://www.guj.com.br/java/32063-aprendendo-apache-xmlbeans
- http://robsonp.com/01/2011/xml-com-xmlbeans/
Espero ter ajudado
Flwss