在您装载一个Schema对象到内存以后, 您能采用第二个方法,通过Schema对象使用Validator 验证XML 文件。首先您从Schema对象中创建一个Validator 对象。然后调用在Validator 对象中的validate() 方法来验证:
Validator v = schema.newValidator();
v.validate(new StreamSource(xml));
Validator对象接受java.xml.transform.Source作为输入。这意味着, 它可接受基于事件, SAX 源(SAXSource) 和基于对象, 文档对象模型(DOM) 源(DOMSource) 。接受DOMSource作为输入, Validator能由指定的Schema对象验证一个在内存中的DOM文件或节点。
Validator v = schema.newValidator();
v.validate(new DOMSource(<DOM NODE>));
如果要验证一个DOM 节点或指定的SAXSource,您也可考虑Validator方法。既使SAX 驱动器的执行是来自另外的一个供营商这个方法仍然可以运作。
第三个方法是创建一个特殊设计的javax.xml.validation.ValidatorHandler来验证SAX 事件:
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
XMLReader reader = spf.newSAXParser().getXMLReader();
ValidatorHandler vh = schema.newValidatorHandler();
//key is to set "ValidatorHandler" as ContentHandler
//so that SAX event can be validated
reader.setContentHandler(vh);
reader.parse(xml);
注意验证SAX事件, 您需要设置ValidatorHandler 为ContentHandler 。
使用ValidatorHandler, 您也能利用模式验证一个JDOM 文件。 实际上, 任一个可在一个SAX流顶部建立或可产生SAX事件的对象模型(譬如XOM 和DOM4J)能由SVF利用一个模式来验证XML 文件。这是可能的,因为ValidationHandler 能验证一个SAX流。以下代码片断说明了一个JDOM文件是如何利用一个模式来验证的,假设你已经获取了前面例子中显示的ValidatorHandler:
SAXOutputter so = new SAXOutputter(vh);
so.output(jdomDocument);
SAXOutputter 对象为JDOM 文件释放SAX事件。 SAX 事件然后由ValidatorHandler验证。
您能使用SVF做的其它事是, 譬如在转换以后验证XML或获得模式类型信息。使用SVF的更多信息请参考:Easy and Efficient XML Processing: Upgrade to JAXP 1.3
运行例代码
范例程序包伴有本提示。范例程序包中的代码包括编码实例和展示技术报道信息。在这个程序包里还有额外范例。 例如, 其中一个例子比较使用新的SVF模式验证性能和设置二个模式属性的前面的方法。 其它范例显示利用模式怎么验证Transformer的输出。安装和运行范例:
1.下载sample file并解压缩其内容。你能在形如<install_dir>\ValidationFramework的目录中看到解压缩出来的目录。例如,如果你解压缩内容到一台Windows机器上的C:\中,你最近创造的目录就应该是C:\ValidationFramework 。解压缩出来的内容包括一个README文件,此文件中包括了运行例子的介绍。你能使用在J2SE 5.0或者Java WSDP 1.6平台上的JAXP 1.3来运行例程序。你也能下载在java.net 上的JAXP 项目页面中的standalone JAXP 1.3 implementation 。
2.运行ValidationFramework 目录中的ant图标。要编译使用如下的命令:
ant compile
