模块 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 流的流式验证器。