模块 java.xml
包 javax.xml.validation
包javax.xml.validation
提供用于验证 XML 文档的 API。 Validation 是验证 XML 文档是指定 XML schema 实例的过程。 XML 模式定义其实例文档将表示的内容模型(也称为 grammar 或 vocabulary )。
有许多流行的技术可用于创建 XML 模式。一些最受欢迎的包括:
- Document Type Definition (DTD) - XML 的内置模式语言。
- W3C XML Schema (WXS) - 一种面向对象的 XML 模式语言。 WXS 还提供了一个类型系统来约束 XML 文档的字符数据。 WXS 由 万维网联盟 (W3C) 维护,是 W3C Recommendation(即批准的 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 文档的解析分离开来。这有几个原因,其中一些是有利的:
- Support for additional schema languages. JAXP 解析器实现仅支持可用 XML 模式语言的一个子集。 Validation API 提供了一种标准机制,应用程序可以通过该机制利用支持其他模式语言的专业化验证库。
- Easy runtime coupling of an XML instance and schema. 指定用于 JAXP 解析器验证的模式位置可能会造成混淆。验证 API 使此过程变得简单(请参阅下面的 例子)。
Usage example . 以下示例演示了使用验证 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 集成。应用程序可以使用验证 API 创建一个 Schema ,并使用 DocumentBuilderFactory.setSchema(Schema) 和 SAXParserFactory.setSchema(Schema) 方法将其与 DocumentBuilderFactory 或 SAXParserFactory 实例相关联。 You should not 都设置了模式并在解析器工厂上调用了 setValidating(true)。前一种技术将导致解析器使用新的验证 API;后者将导致解析器使用它们自己的内部验证工具。 Turning on both of these options simultaneously will cause either redundant behavior or error conditions.
- 自从:
- 1.5
-
类描述语法的不可变内存表示。创建
Schema对象的工厂。当架构工厂的配置存在问题时抛出。创建SchemaFactory的工厂。此类提供对ValidatorHandler确定的类型信息的访问。根据Schema检查 XML 文档的处理器。适用于 SAX 流的流式验证器。