模块 java.xml

包 javax.xml.validation


javax.xml.validation

提供用于验证 XML 文档的 API。 Validation 是验证 XML 文档是指定 XML schema 实例的过程。 XML 模式定义其实例文档将表示的内容模型(也称为 grammarvocabulary )。

有许多流行的技术可用于创建 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