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流上工作的流验证器。