Module  java.xml

Package javax.xml.validation

提供用于验证XML文档的API。 验证是验证XML文档是指定的XML 模式的实例的过程。 XML模式定义其实例文档将表示的内容模型(也称为语法词汇 )。

有许多流行的技术可用于创建XML模式。 一些最受欢迎的包括:

虽然JAXP支持将验证作为XML解析器的特征,由SAXParserDocumentBuilder实例表示,但优选的是Validation API。

JAXP验证API将实例文档的验证与XML文档的解析分离。 这是有利于几个原因,其中一些是:

  • 支持额外的架构langauges。 JAXP解析器实现只支持可用的XML模式语言的一部分。 验证API提供了一种标准机制,通过该机制应用程序可以利用支持附加模式语言的专业化验证库。
  • XML实例和模式的简单运行时耦合。 指定用于使用JAXP解析器进行验证的模式的位置可能会令人困惑。 验证API使此过程简单(参见下面的example )。

Usage example.以下示例演示如何使用Validation API验证XML文档(为了可读性,未显示某些异常处理):

  // parse an XML document into a DOM tree
     DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
     Document document = parser.parse(new File("instance.xml"));

     // create a SchemaFactory capable of understanding WXS schemas
     SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

     // load a WXS schema, represented by a Schema instance
     Source schemaFile = new StreamSource(new File("mySchema.xsd"));
     Schema schema = factory.newSchema(schemaFile);

     // create a Validator instance, which can be used to validate an instance document
     Validator validator = schema.newValidator();

     // validate the DOM tree
     try {
         validator.validate(new DOMSource(document));
     } catch (SAXException e) {
         // instance document is invalid!
     } 

JAXP解析API已经与验证API集成。 应用程序可以创建一个Schema通过验证API,并将其与关联DocumentBuilderFactory或者SAXParserFactory可通过使用实例DocumentBuilderFactory.setSchema(Schema)SAXParserFactory.setSchema(Schema)方法。 您不应同时设置模式,并在解析器工厂调用setValidating(true) 前一种技术将导致解析器使用新的验证API; 后者将使解析器使用自己的内部验证设施。 同时打开这两个选项将导致冗余行为或错误条件。

从以下版本开始:
1.5