(這里的XML不僅僅指XML腳本語(yǔ)言,還包括XML的一系列技術(shù),包括DTD,XSLT,XML SCHEMA,XPATH,DOM,SAX等等)
XML的本質(zhì)是什么?這個(gè)問(wèn)題對于很多XML的初學(xué)者來(lái)說(shuō)都不容易回答。因為XML涉及的方面太多,有人是為了寫(xiě)出更漂亮的網(wǎng)頁(yè)才從HTML進(jìn)一步學(xué)到XML;有人是為了學(xué)JAVA才來(lái)了解XML;有人是從數據庫到XML;有人是從UML到XML;當然還有一些人是從SOAP或者其他網(wǎng)絡(luò )協(xié)議而了解到XML。那么到底如何解釋XML的本質(zhì)呢?
我認為XML的本質(zhì)是數據,XML文檔實(shí)際上是對數據的格式化存儲,而XML的一系列技術(shù)都是圍繞著(zhù)數據來(lái)發(fā)展的。例如DTD、Schema是對數據格式的定義和檢驗;XSLT是對數據的轉換;DOM、SAX是對數據的提取和操作。
既然XML只是數據,而且是用文本形式存儲的數據,那么為什么不更簡(jiǎn)單的用普通文本來(lái)存儲數據呢?早期的一些程序員確實(shí)是這么做的,但是這么做的缺點(diǎn)是對于每一組數據,都需要專(zhuān)用的數據格式定義、檢驗、轉換和操作的程序。如果使用XML來(lái)存儲數據,由于XML的一系列技術(shù)已經(jīng)對以上的問(wèn)題提供了工具,我們只需要使用那些技術(shù)即可快捷的達到自己的目的。有人可能會(huì )說(shuō),使用數據庫不是更方便么?它也提供了以上的功能。確實(shí)如此,但是并不是每個(gè)地方都適用數據庫的,如果說(shuō)數據庫是大而全的數據解決方案的話(huà),XML可以用“舉重若輕,大象無(wú)形”來(lái)形容,這一點(diǎn)后面再討論。
XML的本質(zhì)決定了它在網(wǎng)頁(yè)制作方面比HTML更具有優(yōu)越性。傳統的網(wǎng)頁(yè)包括HTML+CSS,在這種模式中,數據和數據的顯示特性都包含在HTML中,CSS只是對顯示特性的一種補充;而XML網(wǎng)頁(yè)包括XML+XML Schema+XSL,其中XML存儲數據,XML Schema定義了數據的存儲格式,XSL定義了數據的顯示特性(其實(shí)它定義了如何將XML轉換為HTML,實(shí)際上就是定義了數據的顯示特性)。使用XML制作的網(wǎng)頁(yè)將數據、數據格式和顯示特性清晰的分為三個(gè)部分,在添加或者修改網(wǎng)頁(yè)的時(shí)候可以單獨的修改每個(gè)部分,從而得到更好的維護性和更高的制作效率。當然動(dòng)態(tài)網(wǎng)頁(yè)可以由Database+腳本語(yǔ)言(JSP、ASP、PHP)+HTML+CSS組成;同樣基于XML的動(dòng)態(tài)網(wǎng)頁(yè)可以由Database+中間程序(提取數據庫內容形成XML文檔)+XML+XML Schema+XSL組成?;?/span>XML的解決方案同樣保持了層次清晰的優(yōu)點(diǎn)。
對于XML和數據庫的比較,我的上一篇文章中有過(guò)討論()。從本質(zhì)上來(lái)說(shuō),XML和數據的本質(zhì)差不多,都是圍繞著(zhù)數據來(lái)提供一系列的解決方案,但是它們之間存在幾個(gè)顯著(zhù)的不同:1.XML是輕量級的數據解決方案,容易學(xué)習,可以用文本編輯器進(jìn)行編輯,一般的瀏覽器都支持XSLT,適用于數據量小的各種環(huán)境;2.XML是完全平臺無(wú)關(guān)的,不需要依賴(lài)于特定的操作系統、瀏覽器或者編程語(yǔ)言,而數據庫不是完全平臺無(wú)關(guān)的;3.XML是基于文本的,適合于網(wǎng)絡(luò )傳輸,你不能指望每個(gè)EJB的配置文檔都用數據庫來(lái)表示吧;4.XML和數據庫是可以互相結合和轉換的。
對數據的不同理解可以將XML應用到不同的方面。你可以這樣理解:XML是數據庫中的數據;Schema是數據庫的表;XSL是顯示數據的程序;也可以這么理解:XML是網(wǎng)頁(yè)素材;Schema是素材的數據結構;XSL是素材的顯示特性。同樣,在軟件建模方面,也可以用XML來(lái)替代UML。這是基于這么一種理解:Schema代表類(lèi)圖,它如同UML一樣存儲了類(lèi)的結構特性;XML代表對象,它存儲了類(lèi)的實(shí)例化對象的屬性數據;而XSL是對類(lèi)圖的轉換,即MDA(Model Driven Architecture,模型驅動(dòng)架構)中的提到的模型轉換。在UML中沒(méi)有模型轉換技術(shù),但是一些UML工具提供了代碼生成的功能(例如RationalRose),這中功能可以理解為模型轉換的一個(gè)特例。因此有人提出了用XSLT做代碼生成的建議,事實(shí)上這種代碼生成技術(shù)已經(jīng)比較成熟。由于XML Schema并不是天生就用來(lái)刻劃類(lèi)圖的,所以它在類(lèi)的繼承等方面存在一些不足之處,為了修正這些不足,OMG(Object Manage Group,對象管理組)組織提出了XMI(XML Metadata Interchange,XML元數據交換)標準,用來(lái)補充XML Schema在軟件建模方面的不足?,F在XMI已經(jīng)變成了各種軟件建模工具的通用存儲方式,可以將不同建模工具建立的模型互相轉換。
總的來(lái)說(shuō),XML是一種基于文本的、格式化的數據存儲技術(shù),它包括一系列的數據解決方案,它們是輕量級的、易于學(xué)習的、平臺無(wú)關(guān)的數據解決方案。弄清楚了這個(gè)概念再去學(xué)習XML,也許更有幫助。聯(lián)系客服