DOMResult result = new DOMResult();
try {
validator.validate(source, result);
Document augmented = (Document) result.getNode();
// do whatever you need to do with the augmented document...
}
catch (SAXException ex) {
System.out.println(args[0] + " is not valid because ");
System.out.println(ex.getMessage());
}
}
}
這個過程的輸入和輸出都有一定的限制。不能用于所有的流輸入和輸出。SAX 源可以擴展成 SAX 結(jié)果,DOM 源擴展成 DOM 結(jié)果,但是 SAX 源不能擴展成 DOM 結(jié)果,反之亦然。如果需要這么做,首先擴展成匹配的結(jié)果:SAX 對 SAX、 DOM 對 DOM,然后使用 TrAX 的恒等轉(zhuǎn)換改變模型。
但不建議使用這種技術(shù)。將文檔需要的全部信息放在一個實例中,要比分解成實例和模式更可靠。您可以驗證,但并非所有的人都能驗證。
類型信息
W3C XML Schema Language 在很大程度上依賴于類型 這一概念。元素和屬性被聲明為 int、double、date、duration、person、PhoneNumber 或其他您能夠想到的類型。Java Validation API 提供了一種手段來報告這些類型,雖然令人吃驚的是該特性獨立于包的其他部分。
類型用 org.w3c.dom.TypeInfo 對象表示。這個簡單的接口通過 清單 5 來說明,它給出了類型的本地名和名稱空間 URI。還可以告訴您它是否派生自其他類型。除此以外,理解這種類型就是您的程序的任務(wù)了。Java 語言沒有說明它的含義,或者將其轉(zhuǎn)化成 double 和 java.util.Date 這樣的 Java 類型。
清單 5. DOM TypeInfo 接口
package org.w3c.dom;
public interface TypeInfo {
public static final int DERIVATION_RESTRICTION;
public static final int DERIVATION_EXTENSION;
public static final int DERIVATION_UNION;
public String getTypeName();
public String getTypeNamespace()
public boolean isDerivedFrom(String namespace, String name, int derivationMethod);
}
要獲得 TypeInfo 對象,需要向 Schema 對象請求 ValidatorHandler 而不是 Validator。ValidatorHandler 實現(xiàn)了 SAX 的 ContentHandler 接口。然后將該處理程序安裝到 SAX 解析器中。
還要在 ValidatorHandler(不是解析器)中安裝您自己的 ContentHandler,ValidatorHandler 將把擴展的事件轉(zhuǎn)發(fā)到您的 ContentHandler。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |