请参见:
描述
类摘要 | |
---|---|
Schema | 不可变的语法存储表示形式。 |
SchemaFactory | 创建 Schema 对象的工厂。 |
SchemaFactoryLoader | 创建 SchemaFactory 的工厂。 |
TypeInfoProvider | 此类提供了对 ValidatorHandler 所确定的类型信息的访问。 |
Validator | 根据 Schema 检查 XML 文档的处理器。 |
ValidatorHandler | 处理 SAX 流的流验证器。 |
此包提供了用于 XML 文档验证的 API。Validation 是验证 XML 文档是否为指定 XML schema 的实例的过程。XML 模式定义了其实例文档将表示的内容模式(也称为 grammar 或 vocabulary)。
有多种流行的技术用于创建 XML 模式。最流行的技术包括:
以前的 JAXP 版本支持作为 XML 解析器的功能的验证,要么通过 SAXParser
实例,要么通过 DocumentBuilder
实例来表示。
JAXP 验证 API 从 XML 文档解析中分离出实例文档的验证。这具有几种优点,一些原因包括:
用例。以下示例演示了通过 Validation 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
实例进行关联。您不能既设置模式,又调用解析器工厂上的 setValidating(true)
。前者的技术将导致解析器使用新的验证 API,后者将导致解析器使用它们自己的内部验证工具。同时调整这两个选项将导致冗余行为或错误条件。