Module java.xml

Package javax.xml.validation


package javax.xml.validation

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

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

  • 文档类型定义(DTD) - XML内置的模式语言。
  • W3C XML模式(WXS) - 一种面向对象的XML模式语言。 WXS还提供了一种用于约束XML文档字符数据的类型系统。 WXS由 万维网联盟(W3C) 维护,是W3C推荐(即,经过批准的W3C标准规范)。
  • RELAX NG(RNG) - 一种基于模式的、用户友好的XML模式语言。 RNG模式也可以使用类型来约束XML字符数据。 RNG由 结构化信息标准促进组织(OASIS) 维护,是OASIS和 ISO(国际标准化组织) 标准。
  • Schematron - 一种基于规则的XML模式语言。 DTD、WXS和RNG旨在表达内容模型的结构,而Schematron旨在强制执行难以用其他模式语言表达的个别规则。 Schematron旨在补充用结构化模式语言编写的模式。 Schematron是 ISO标准

虽然JAXP支持验证作为XML解析器的一个特性,由 SAXParserDocumentBuilder 实例表示,但首选使用 Validation API。

JAXP验证API将实例文档的验证与XML文档的解析分离开来。这有几个优点,其中一些是:

  • 支持其他模式语言。 JAXP解析器实现仅支持可用XML模式语言的子集。验证API提供了一个标准机制,通过该机制,应用程序可以利用支持其他模式语言的专门验证库。
  • 轻松运行时关联XML实例和模式。 使用JAXP解析器指定用于验证的模式的位置可能会令人困惑。验证API使这个过程变得简单(请参见下面的 示例)。

使用示例 以下示例演示了如何使用验证API验证XML文档(为了可读性,省略了一些异常处理):

     // 将XML文档解析为DOM树
     DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
     Document document = parser.parse(new File("instance.xml"));

     // 创建一个能够理解WXS模式的SchemaFactory
     SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

     // 加载一个WXS模式,由Schema实例表示
     Source schemaFile = new StreamSource(new File("mySchema.xsd"));
     Schema schema = factory.newSchema(schemaFile);

     // 创建一个Validator实例,用于验证实例文档
     Validator validator = schema.newValidator();

     // 验证DOM树
     try {
         validator.validate(new DOMSource(document));
     } catch (SAXException e) {
         // 实例文档无效!
     }
 

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

自版本:
1.5