|
2007 年 3 月 26 日
眾所周知,XML 仍然是過去十年中出現(xiàn)的最流行的技術之一。但 XML 到底有哪些優(yōu)勢?它可用于配置數(shù)據(jù)么?可用于數(shù)據(jù)交換么?可作為數(shù)據(jù)存儲媒介么?XML 到底有哪些用處?本文將提供一些信息供大家思考并鼓勵大家分享關于此主題的見解。
習慣于 XML
XML 不是什么新技術,大多數(shù)人都很好地掌握了其運作原理及其使用方法。但是,大家對 XML 的“殺手應用” —— 證明其創(chuàng)建必要的數(shù)據(jù)格式的最終用法。當您查看本文中它的一些最常見的用法時,您會很快發(fā)現(xiàn),在大量的各種應用程序中,即使是專家對于是否可使用 XML 也莫衷一是。
XML 配置數(shù)據(jù)
XML 的最早的用法之一,并且仍然是最流行的用法之一,就是將其用作一種數(shù)據(jù)格式存儲配置數(shù)據(jù)。幾乎是 XML 一流行,編程人員就開始用它來取代他們專有的配置文件。屬性文件、帶名稱 —— 值對的文本文件、逗號分隔值、專有數(shù)據(jù)格式 —— 所有這些都被丟棄以符合 XML 文檔,包括標記、元素、屬性和原文數(shù)據(jù)。
一種冗長的數(shù)據(jù)格式
這種 XML 應用程序的最明顯的問題是,根據(jù)定義,XML 是一種很冗長的數(shù)據(jù)格式。換句話說,用 XML 表達一件事情會占用大量空間。例如,以下是一個簡單的名稱 —— 值對文件片段:
firstName=Brett
lastName=McLaughlin
email=brett@newInstance.com
|
將其與 XML 編寫的本質相同的數(shù)據(jù)進行比較:
<?xml version="1.0"?>
<config-data>
<firstName>Brett</firstName>
<lastName>McLaughlin</lastName>
<email>brett@newInstance.com</email>
</config-data>
|
為了 XML 的“方便”引入了大量額外的字符。這就意味著為選擇使用 XML 技術犧牲了處理速度(讀取較少的字符自然花費較少的時間)。
XML 處理 API
與其他文本格式相比,XML 除了通常要使用額外的字符來表示數(shù)據(jù)以外,您還需要使用一些軟件來處理和讀取 XML。雖然可以編寫 XML 解析器,但您幾乎肯定希望使用各種平臺上可用的許多 XML 解析器中的一種。因此您將可能需要向軟件資源中添加一到兩個庫,然后學習使用那些 API。
雖然學習新的 API 沒什么壞處,但應意識到,您可能要使用自己編寫的新代碼替代讀入現(xiàn)有原文配置數(shù)據(jù)的工作代碼,使用必須使其在應用程序中可用的附加的庫。換句話說,您需要在編譯時和運行時使用新代碼和附加的依賴項替代工作代碼(假定您使用的是編譯過的語言,但您應該明白其中的含義)。
靈活性的代價
問題然后就集中在了代價與價值的對比。使用 XML 配置數(shù)據(jù)的代價是相當高的;我已提到了冗余性和資源需求,但是還有很多其他缺點。主要的優(yōu)點 —— 假定您意識到會用 XML 并不算什么優(yōu)點 —— 是靈活性。如果您已經(jīng)在使用 XML,或擁有可能使用多種語言的多個應用程序,所有這些程序共享配置數(shù)據(jù),則 XML 可能是一種非常可行的配置數(shù)據(jù)的策略。
雖然存在那個例外,但使用 XML 作為配置數(shù)據(jù)的格式到底有什么益處?我認為有幾個其他的原因,但是我不會告訴您 —— 我希望您能告訴我。查看 參考資料 部分,訪問 XML 和 Java 技術論壇,然后告訴我。我對于傾聽您關于 XML 配置數(shù)據(jù)的優(yōu)點的見解非常好奇。
XML 傳輸數(shù)據(jù)
除配置數(shù)據(jù)外,使用 XML 來在應用程序的組件和層之間 傳輸數(shù)據(jù)也日益流行。在此模式中,應用程序的不同部分使用 XML“語言”進行通信。雖然這比使用 XML 配置數(shù)據(jù)在技術上更具挑戰(zhàn)性,但幾乎同樣流行,并且這也成為了如 SOAP、數(shù)據(jù)綁定和 Web 服務等技術的基礎。
應用程序內數(shù)據(jù)傳輸
XML 最常見的用法之一是:作為一種數(shù)據(jù)格式在同一應用程序的不同部分之間傳輸信息。這實現(xiàn)起來很容易,因為是由同樣的程序員或程序員團隊控制發(fā)送和接收數(shù)據(jù)的結束。不幸的是,這也幾乎肯定是最壞 的 XML 傳輸數(shù)據(jù)的用法。
當您在同一應用程序中發(fā)送和接收數(shù)據(jù)時,增加了同樣的系統(tǒng)開銷,如配置應用程序的數(shù)據(jù)部分所討論的:冗余性、更大的文件和對 XML 解析器庫(最低水平的庫)的需求。而您實際上從使用 XML 中的獲益遠不及此。在大多數(shù)情況下,一個好得多的解決方案是:將序列化的數(shù)據(jù)或對象原型發(fā)送至您所使用的編程語言。這樣處理起來更快,因為傳輸數(shù)據(jù)占用的帶寬更少而且在接收端解碼更加容易。
應用程序間數(shù)據(jù)傳輸
XML 在此常規(guī)領域中的一個更好的用法是:使用 XML 作為數(shù)據(jù)傳輸格式在應用程序間傳輸數(shù)據(jù)。應用程序中有一個組件可將數(shù)據(jù)發(fā)送至業(yè)務伙伴應用程序中的另一個組件。而數(shù)據(jù)被編碼為 XML 格式。
這樣做有一些實實在在的優(yōu)點,因為您無需知道另一個應用程序的編程語言以及數(shù)據(jù)將如何使用的相關信息。反過來時也是如此;如果要接收數(shù)據(jù),您幾乎也無需了解發(fā)送數(shù)據(jù)的應用程序的信息。在這種情況下,XML 的冗余性缺點就不如所獲得的靈活性那么重要,況且其只需將數(shù)據(jù)編碼為 XML 數(shù)據(jù)格式而不是要遵循其他公司的編程規(guī)范或選擇其他技術。
主題變更:Web 服務
Web 服務、SOAP、WSDL 以及當前正在熱議的各種其他專門術語證明了其存在的價值。但是,各種可用的 Web 服務實際上只是應用程序間數(shù)據(jù)傳輸?shù)淖蛹?。通過某個其他公司或技術提供商提供的組件,您得以在應用程序間發(fā)送和接收數(shù)據(jù)。
惟一實質的區(qū)別在于 Web 服務通常要求 您使用 XML。因此問題的實質在于涉及 Web 服務時不是您想不想使用 XML;而是您到底要不要使用 Web 服務。而那就變成了另外一個大得多的問題:權衡使用 Web 服務功能的價值與處理提供程序、提供程序運行速度(與 XML 有關,可能也受帶寬、等待時間、特定提供程序以及一些其他因素的影響)和公司聲望的代價之間孰輕孰重。換句話說,XML 成為了一個可以忽略的因素,而不是一個控制因素。
結束語
雖然大多數(shù)文章為您展示特定問題的具體解決方案,而這篇文章旨在引導您進行思考。在大多數(shù)可能的 XML 應用程序中,沒有簡單的“正確”答案。有時 XML 似乎比其他備用程序好,而有時又幾乎肯定不 是這樣,但在許多情況下,它只是諸多選擇之一。您的任務是仔細思考文中詳細介紹的常規(guī)應用程序,然后試著為您在自己的業(yè)務和項目中遇到的特定問題設計一些應用程序。
我也鼓勵您在線查看各種 XML 論壇(參見 參考資料 部分中的鏈接),繼續(xù)進行這個討論。我將在 XML 和 Java 技術論壇恭候,希望能激起一些有趣的交談和辯論。因此仔細思考,然后訪問 developerWorks 論壇并發(fā)表您的高見。網(wǎng)上見。
參考資料
學習
- 您可以參閱本文在 developerWorks 全球網(wǎng)站上的 英文原文。
- 參閱本系列的第 2 部分,本文討論了數(shù)據(jù)綁定 API 和幾種數(shù)據(jù)綁定方法的優(yōu)點。
- XML 技術文檔庫:訪問 developerWorks XML 專區(qū),獲取大量的技術文章和技巧、教程、標準和 IBM 紅皮書。
獲得產(chǎn)品和技術
- IBM 試用版軟件:使用 IBM 試用版軟件構建您的下一個開發(fā)項目,該軟件可直接從 developerWorks 下載獲得。
討論
關于作者
 |
|

|
 |
Brett McLaughlin 自從 Logo 時代以來一直從事計算機方面的工作。(還記得那個小三角符號么?)最近幾年里,他已成為 Java 和 XML 社區(qū)中最著名的作家和程序員之一。他曾在 Nextel Communications 從事復雜企業(yè)系統(tǒng)的實現(xiàn);在 Lutris Technologies 進行實際應用服務器的編寫;最近他在 O'Reilly Media, Inc. 繼續(xù)編寫和編輯相關書籍。Brett 即將完成的書 Head Rush Ajax 將為 Ajax 引入飽受贊譽的創(chuàng)新的 Head First 方法。他的上一本書 Java 1.5 Tiger: A Developer's Notebook 是第一本可獲得的關于最新版本 Java 技術的書籍。而他的名著 Java and XML 仍然是在 Java 語言中使用 XML 技術的權威性著作之一。
|
|