與 HTML 相比,XML 的優(yōu)勢之一在于其可擴展性。有了這種特性,XML 就可以用 HTML 中不可能的方式來描述信息。本月,Todd 演示了如何構(gòu)建用 Java 處理 XML 的框架,同時,適當(dāng)?shù)亟Y(jié)合了兩種語言的固有可擴展性。
介紹
我在上個月展示了有關(guān) XML在企業(yè)中地位的案例(有關(guān)上月欄目,請參閱 參考資料)。除了 XML的發(fā)布方面之外,我還有意地試圖集中講解了應(yīng)用集成和數(shù)據(jù)交換問題。我演示了使用通??捎玫腏ava 工具來對 XML做語法分析和驗證有多容易,還將這些方法與更傳統(tǒng)的特定方法作了比較。
本月,我要沿這條思路深入探索--語法分析和確認(rèn)到目前為止還不錯,但還不是很成功。目前的問題通常涉及到對做過語法分析的信息進行某些處理。但是,如果不理解用于生成信息的標(biāo)記,該怎么辦?跟我一起沿著Java 和 XML 的邊界再前進一點,我還將向您展示如何使用 Java來解決這個問題。
XML標(biāo)記:怎么辦?
讓我們直入問題的中心。需要處理的 XML 特性是其定義新標(biāo)記的能力。XML的標(biāo)記說明與其相關(guān)的內(nèi)容含義(以及有關(guān)其它標(biāo)記)的一些事項。因為XML 中的標(biāo)記集是開放的(它與 HTML 不同,HTML中的標(biāo)記集是封閉的),所以,不可能構(gòu)建可以立即處理整個標(biāo)記集的應(yīng)用。這就為這種處理引入了一點不確定性。到底如何處理不理解的標(biāo)記呢?
應(yīng)用程序可以忽略新標(biāo)記。這是在瀏覽器戰(zhàn)爭最激烈時,瀏覽器供應(yīng)商通常采用的方法。的瀏覽器供應(yīng)商喜歡在其產(chǎn)品的每一個發(fā)行版中定義新標(biāo)記,而每個瀏覽器版本都默默地忽略那些不理解的標(biāo)記。這種方法很安全,但并不令人滿意。
組織可以將標(biāo)記集標(biāo)準(zhǔn)化。這種方法聰明地回避了整個問題。定義一個標(biāo)準(zhǔn)標(biāo)記集和一個文檔類型定義(DTD),然后拒絕任何不符合該模型的XML。對很多問題而言,這確實是正確的解決方案。例如,銷售訂單就符合良好定義的模式。如果允許電子貿(mào)易伙伴定義新標(biāo)記(至少是沒有約束-這可能成為某些具有良好約束的標(biāo)記定義(如宏)的適用性的理由),那么什么也得不到。不幸的是,不是所有的應(yīng)用程序(例如XML 瀏覽器)都適合這種方法。
應(yīng)用程序可以試著想出如何處理新標(biāo)記。瀏覽器和內(nèi)容顯示工具、以及其它通用的 XML工具必須在出現(xiàn)新的、但卻有效的標(biāo)記時正確操作。有幾種方法來解決這種問題??蓴U展樣式表語言(XSL) 正是這樣一種嘗試。XSL提供一個轉(zhuǎn)換工具箱,該工具箱允許定義從不理解的標(biāo)記集到所理解的標(biāo)記集合的映射或轉(zhuǎn)換(例如,從XML 到 HTML)。但是,這種解決方案也有其限制。
可以構(gòu)建新的框架。雖然以上每一個解決方案都存在,但是,我們將全面討論另一種解決方案。我們的解決方案要求允許瀏覽器或XML工具尋找并下載設(shè)計成處理新標(biāo)記的代碼,然后將這些代碼集成到應(yīng)用程序中。要做到這點,我們將構(gòu)建新的框架。
在討論構(gòu)建這種解決方案的事項之前,需要對 XML再多了解一點。特別是,需要理解如何在應(yīng)用程序中操縱XML。需要理解文檔對象模型 (DOM)。
DOM
DOM 是獨立于平臺、中立于編程語言的API,它允許程序從應(yīng)用中訪問和修改 XML 文檔的內(nèi)容和結(jié)構(gòu)。
作為其核心,DOM定義了代表構(gòu)成 XML文檔的所有對象的一系列類型:元素、屬性、實體引用、注釋、文本數(shù)據(jù)、處理指示和其余對象。(本文使用 對象這個詞來泛指 XML 文檔的組成部件。)DOM最初被認(rèn)為是存在于瀏覽器中,現(xiàn)在已有了廣泛得多的作用。還需要指出的是:DOM不是特定于 XML 的。它同樣很好地適用于 HTML。
介紹
我在上個月展示了有關(guān) XML在企業(yè)中地位的案例(有關(guān)上月欄目,請參閱 參考資料)。除了 XML的發(fā)布方面之外,我還有意地試圖集中講解了應(yīng)用集成和數(shù)據(jù)交換問題。我演示了使用通??捎玫腏ava 工具來對 XML做語法分析和驗證有多容易,還將這些方法與更傳統(tǒng)的特定方法作了比較。
本月,我要沿這條思路深入探索--語法分析和確認(rèn)到目前為止還不錯,但還不是很成功。目前的問題通常涉及到對做過語法分析的信息進行某些處理。但是,如果不理解用于生成信息的標(biāo)記,該怎么辦?跟我一起沿著Java 和 XML 的邊界再前進一點,我還將向您展示如何使用 Java來解決這個問題。
XML標(biāo)記:怎么辦?
讓我們直入問題的中心。需要處理的 XML 特性是其定義新標(biāo)記的能力。XML的標(biāo)記說明與其相關(guān)的內(nèi)容含義(以及有關(guān)其它標(biāo)記)的一些事項。因為XML 中的標(biāo)記集是開放的(它與 HTML 不同,HTML中的標(biāo)記集是封閉的),所以,不可能構(gòu)建可以立即處理整個標(biāo)記集的應(yīng)用。這就為這種處理引入了一點不確定性。到底如何處理不理解的標(biāo)記呢?
應(yīng)用程序可以忽略新標(biāo)記。這是在瀏覽器戰(zhàn)爭最激烈時,瀏覽器供應(yīng)商通常采用的方法。的瀏覽器供應(yīng)商喜歡在其產(chǎn)品的每一個發(fā)行版中定義新標(biāo)記,而每個瀏覽器版本都默默地忽略那些不理解的標(biāo)記。這種方法很安全,但并不令人滿意。
組織可以將標(biāo)記集標(biāo)準(zhǔn)化。這種方法聰明地回避了整個問題。定義一個標(biāo)準(zhǔn)標(biāo)記集和一個文檔類型定義(DTD),然后拒絕任何不符合該模型的XML。對很多問題而言,這確實是正確的解決方案。例如,銷售訂單就符合良好定義的模式。如果允許電子貿(mào)易伙伴定義新標(biāo)記(至少是沒有約束-這可能成為某些具有良好約束的標(biāo)記定義(如宏)的適用性的理由),那么什么也得不到。不幸的是,不是所有的應(yīng)用程序(例如XML 瀏覽器)都適合這種方法。
應(yīng)用程序可以試著想出如何處理新標(biāo)記。瀏覽器和內(nèi)容顯示工具、以及其它通用的 XML工具必須在出現(xiàn)新的、但卻有效的標(biāo)記時正確操作。有幾種方法來解決這種問題??蓴U展樣式表語言(XSL) 正是這樣一種嘗試。XSL提供一個轉(zhuǎn)換工具箱,該工具箱允許定義從不理解的標(biāo)記集到所理解的標(biāo)記集合的映射或轉(zhuǎn)換(例如,從XML 到 HTML)。但是,這種解決方案也有其限制。
可以構(gòu)建新的框架。雖然以上每一個解決方案都存在,但是,我們將全面討論另一種解決方案。我們的解決方案要求允許瀏覽器或XML工具尋找并下載設(shè)計成處理新標(biāo)記的代碼,然后將這些代碼集成到應(yīng)用程序中。要做到這點,我們將構(gòu)建新的框架。
在討論構(gòu)建這種解決方案的事項之前,需要對 XML再多了解一點。特別是,需要理解如何在應(yīng)用程序中操縱XML。需要理解文檔對象模型 (DOM)。
DOM
DOM 是獨立于平臺、中立于編程語言的API,它允許程序從應(yīng)用中訪問和修改 XML 文檔的內(nèi)容和結(jié)構(gòu)。
作為其核心,DOM定義了代表構(gòu)成 XML文檔的所有對象的一系列類型:元素、屬性、實體引用、注釋、文本數(shù)據(jù)、處理指示和其余對象。(本文使用 對象這個詞來泛指 XML 文檔的組成部件。)DOM最初被認(rèn)為是存在于瀏覽器中,現(xiàn)在已有了廣泛得多的作用。還需要指出的是:DOM不是特定于 XML 的。它同樣很好地適用于 HTML。