軟件包 javax.xml.validation
此包提供了用于 XML 文檔驗(yàn)證的 API。請(qǐng)參見:
描述
類摘要 | |
---|---|
Schema | 不可變的語法存儲(chǔ)表示形式。 |
SchemaFactory | 創(chuàng)建 Schema 對(duì)象的工廠。 |
SchemaFactoryLoader | 創(chuàng)建 SchemaFactory 的工廠。 |
TypeInfoProvider | 此類提供了對(duì) ValidatorHandler 所確定的類型信息的訪問。 |
Validator | 根據(jù) Schema 檢查 XML 文檔的處理器。 |
ValidatorHandler | 處理 SAX 流的流驗(yàn)證器。 |
軟件包 javax.xml.validation 的描述
此包提供了用于 XML 文檔驗(yàn)證的 API。Validation 是驗(yàn)證 XML 文檔是否為指定 XML schema 的實(shí)例的過程。XML 模式定義了其實(shí)例文檔將表示的內(nèi)容模式(也稱為 grammar 或 vocabulary)。
有多種流行的技術(shù)用于創(chuàng)建 XML 模式。最流行的技術(shù)包括:
- Document Type Definition (DTD) -- XML 的內(nèi)置模式語言。
- W3C XML Schema (WXS) -- 面向?qū)ο蟮?XML 模式語言。WXS 還提供了用于約束 XML 文檔的字符數(shù)據(jù)的類型系統(tǒng)。WXS 通過 World Wide Web Consortium (W3C) 維護(hù),它是 W3C Recommendation(即公認(rèn)的 W3C 標(biāo)準(zhǔn)規(guī)范)。
- RELAX NG (RNG) -- 基于模式的、用戶友好的 XML 模式語言。RNG 模式也可以使用類型來約束 XML 字符數(shù)據(jù)。RNG 通過 Organization for the Advancement of Structured Information Standards (OASIS) 維護(hù),它既是 OASIS 標(biāo)準(zhǔn)也是 ISO (International Organization for Standardization) 標(biāo)準(zhǔn)。
- Schematron -- 基于規(guī)則的 XML 模式語言。相對(duì)于 DTD、WXS 和 RNG 是用于表示內(nèi)容模式的結(jié)構(gòu)而言,Schematron 的設(shè)計(jì)是為了實(shí)施難以或不能通過其他模式語言表示的個(gè)別規(guī)則。Schematron 是為了補(bǔ)充以結(jié)構(gòu)化模式語言(例如 aforementioned)編寫的模式。Schematron 正在成為一項(xiàng) ISO 標(biāo)準(zhǔn)。
以前的 JAXP 版本支持作為 XML 解析器的功能的驗(yàn)證,要么通過 SAXParser
實(shí)例,要么通過 DocumentBuilder
實(shí)例來表示。
JAXP 驗(yàn)證 API 從 XML 文檔解析中分離出實(shí)例文檔的驗(yàn)證。這具有幾種優(yōu)點(diǎn),一些原因包括:
- 支持額外的模式語言。 從 JDK 1.5 開始,兩種最流行的 JAXP 解析器實(shí)現(xiàn)(Crimson 和 Xerces)僅支持可用的 XML 模式語言的子集。Validation API 提供了標(biāo)準(zhǔn)的機(jī)制,應(yīng)用程序通過此機(jī)制可利用支持額外模式語言的規(guī)范驗(yàn)證庫(kù)。
- 簡(jiǎn)單的 XML 實(shí)例與模式的運(yùn)行時(shí)耦合。 指定要用于通過 JAXP 解析器驗(yàn)證的模式位置可能易于混淆。Validation API 使此過程變得簡(jiǎn)單(參見以下示例)。
用例。以下示例演示了通過 Validation API 驗(yàn)證 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 已經(jīng)與驗(yàn)證 API 進(jìn)行了集成。應(yīng)用程序可以通過驗(yàn)證 API 創(chuàng)建 Schema
,并通過使用 DocumentBuilderFactory.setSchema(Schema)
和 SAXParserFactory.setSchema(Schema)
方法將其與 DocumentBuilderFactory
或 SAXParserFactory
實(shí)例進(jìn)行關(guān)聯(lián)。您不能既設(shè)置模式,又調(diào)用解析器工廠上的 setValidating(true)
。前者的技術(shù)將導(dǎo)致解析器使用新的驗(yàn)證 API,后者將導(dǎo)致解析器使用它們自己的內(nèi)部驗(yàn)證工具。同時(shí)調(diào)整這兩個(gè)選項(xiàng)將導(dǎo)致冗余行為或錯(cuò)誤條件。