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解析器的一个特性,由 SAXParser
或 DocumentBuilder
实例表示,但首选使用 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)
方法将其与 DocumentBuilderFactory
或 SAXParserFactory
实例关联。 您不应该 同时设置模式并调用 setValidating(true)
在解析器工厂上。前一种技术将导致解析器使用新的验证API;后者将导致解析器使用其自己的内部验证设施。 同时打开这两个选项将导致冗余行为或错误条件。
- 自版本:
- 1.5
-
ClassDescription语法的内存中不可变表示。创建
Schema
对象的工厂。当存在与模式工厂配置相关的问题时抛出。创建SchemaFactory
的工厂。此类提供了通过ValidatorHandler
确定的类型信息的访问。检查XML文档与Schema
的处理器。在SAX流上工作的流验证器。