軟件包 javax.xml.validation
此包提供了用于 XML 文檔驗證的 API。請參見:
描述
類摘要 | |
---|---|
Schema | 不可變的語法存儲表示形式。 |
SchemaFactory | 創建 Schema 對象的工廠。 |
SchemaFactoryLoader | 創建 SchemaFactory 的工廠。 |
TypeInfoProvider | 此類提供了對 ValidatorHandler 所確定的類型信息的訪問。 |
Validator | 根據 Schema 檢查 XML 文檔的處理器。 |
ValidatorHandler | 處理 SAX 流的流驗證器。 |
軟件包 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 通過 World Wide Web Consortium (W3C) 維護,它是 W3C Recommendation(即公認的 W3C 標準規范)。
- RELAX NG (RNG) -- 基于模式的、用戶友好的 XML 模式語言。RNG 模式也可以使用類型來約束 XML 字符數據。RNG 通過 Organization for the Advancement of Structured Information Standards (OASIS) 維護,它既是 OASIS 標準也是 ISO (International Organization for Standardization) 標準。
- Schematron -- 基于規則的 XML 模式語言。相對于 DTD、WXS 和 RNG 是用于表示內容模式的結構而言,Schematron 的設計是為了實施難以或不能通過其他模式語言表示的個別規則。Schematron 是為了補充以結構化模式語言(例如 aforementioned)編寫的模式。Schematron 正在成為一項 ISO 標準。
以前的 JAXP 版本支持作為 XML 解析器的功能的驗證,要么通過 SAXParser
實例,要么通過 DocumentBuilder
實例來表示。
JAXP 驗證 API 從 XML 文檔解析中分離出實例文檔的驗證。這具有幾種優點,一些原因包括:
- 支持額外的模式語言。 從 JDK 1.5 開始,兩種最流行的 JAXP 解析器實現(Crimson 和 Xerces)僅支持可用的 XML 模式語言的子集。Validation API 提供了標準的機制,應用程序通過此機制可利用支持額外模式語言的規范驗證庫。
- 簡單的 XML 實例與模式的運行時耦合。 指定要用于通過 JAXP 解析器驗證的模式位置可能易于混淆。Validation API 使此過程變得簡單(參見以下示例)。
用例。以下示例演示了通過 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,后者將導致解析器使用它們自己的內部驗證工具。同時調整這兩個選項將導致冗余行為或錯誤條件。