MDA之路

          MDA,UML,XML,Eclipse及Java相關(guān)的Blog
          posts - 53, comments - 494, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          XML的本質(zhì)討論

          Posted on 2005-02-28 11:44 wxb_nudt 閱讀(4624) 評論(14)  編輯  收藏 所屬分類: 技術(shù)雜談

          (這里的XML不僅僅指XML腳本語言,還包括XML的一系列技術(shù),包括DTD,XSLT,XML SCHEMA,XPATH,DOM,SAX等等)

          XML的本質(zhì)是什么?這個(gè)問題對于很多XML的初學(xué)者來說都不容易回答。因?yàn)?/SPAN>XML涉及的方面太多,有人是為了寫出更漂亮的網(wǎng)頁才從HTML進(jìn)一步學(xué)到XML;有人是為了學(xué)JAVA才來了解XML;有人是從數(shù)據(jù)庫到XML;有人是從UMLXML;當(dāng)然還有一些人是從SOAP或者其他網(wǎng)絡(luò)協(xié)議而了解到XML。那么到底如何解釋XML的本質(zhì)呢?

          我認(rèn)為XML的本質(zhì)是數(shù)據(jù),XML文檔實(shí)際上是對數(shù)據(jù)的格式化存儲,而XML的一系列技術(shù)都是圍繞著數(shù)據(jù)來發(fā)展的。例如DTDSchema是對數(shù)據(jù)格式的定義和檢驗(yàn);XSLT是對數(shù)據(jù)的轉(zhuǎn)換;DOMSAX是對數(shù)據(jù)的提取和操作。

          既然XML只是數(shù)據(jù),而且是用文本形式存儲的數(shù)據(jù),那么為什么不更簡單的用普通文本來存儲數(shù)據(jù)呢?早期的一些程序員確實(shí)是這么做的,但是這么做的缺點(diǎn)是對于每一組數(shù)據(jù),都需要專用的數(shù)據(jù)格式定義、檢驗(yàn)、轉(zhuǎn)換和操作的程序。如果使用XML來存儲數(shù)據(jù),由于XML的一系列技術(shù)已經(jīng)對以上的問題提供了工具,我們只需要使用那些技術(shù)即可快捷的達(dá)到自己的目的。有人可能會說,使用數(shù)據(jù)庫不是更方便么?它也提供了以上的功能。確實(shí)如此,但是并不是每個(gè)地方都適用數(shù)據(jù)庫的,如果說數(shù)據(jù)庫是大而全的數(shù)據(jù)解決方案的話,XML可以用“舉重若輕,大象無形”來形容,這一點(diǎn)后面再討論。

          XML的本質(zhì)決定了它在網(wǎng)頁制作方面比HTML更具有優(yōu)越性。傳統(tǒng)的網(wǎng)頁包括HTML+CSS,在這種模式中,數(shù)據(jù)和數(shù)據(jù)的顯示特性都包含在HTML中,CSS只是對顯示特性的一種補(bǔ)充;而XML網(wǎng)頁包括XML+XML Schema+XSL,其中XML存儲數(shù)據(jù),XML Schema定義了數(shù)據(jù)的存儲格式,XSL定義了數(shù)據(jù)的顯示特性(其實(shí)它定義了如何將XML轉(zhuǎn)換為HTML,實(shí)際上就是定義了數(shù)據(jù)的顯示特性)。使用XML制作的網(wǎng)頁將數(shù)據(jù)、數(shù)據(jù)格式和顯示特性清晰的分為三個(gè)部分,在添加或者修改網(wǎng)頁的時(shí)候可以單獨(dú)的修改每個(gè)部分,從而得到更好的維護(hù)性和更高的制作效率。當(dāng)然動態(tài)網(wǎng)頁可以由Database+腳本語言(JSPASPPHP+HTML+CSS組成;同樣基于XML的動態(tài)網(wǎng)頁可以由Database+中間程序(提取數(shù)據(jù)庫內(nèi)容形成XML文檔)+XML+XML Schema+XSL組成。基于XML的解決方案同樣保持了層次清晰的優(yōu)點(diǎn)。

          對于XML和數(shù)據(jù)庫的比較,我的上一篇文章中有過討論()。從本質(zhì)上來說,XML和數(shù)據(jù)的本質(zhì)差不多,都是圍繞著數(shù)據(jù)來提供一系列的解決方案,但是它們之間存在幾個(gè)顯著的不同:1.XML是輕量級的數(shù)據(jù)解決方案,容易學(xué)習(xí),可以用文本編輯器進(jìn)行編輯,一般的瀏覽器都支持XSLT,適用于數(shù)據(jù)量小的各種環(huán)境;2.XML是完全平臺無關(guān)的,不需要依賴于特定的操作系統(tǒng)、瀏覽器或者編程語言,而數(shù)據(jù)庫不是完全平臺無關(guān)的;3.XML是基于文本的,適合于網(wǎng)絡(luò)傳輸,你不能指望每個(gè)EJB的配置文檔都用數(shù)據(jù)庫來表示吧;4.XML和數(shù)據(jù)庫是可以互相結(jié)合和轉(zhuǎn)換的。

          對數(shù)據(jù)的不同理解可以將XML應(yīng)用到不同的方面。你可以這樣理解:XML是數(shù)據(jù)庫中的數(shù)據(jù);Schema是數(shù)據(jù)庫的表;XSL是顯示數(shù)據(jù)的程序;也可以這么理解:XML是網(wǎng)頁素材;Schema是素材的數(shù)據(jù)結(jié)構(gòu);XSL是素材的顯示特性。同樣,在軟件建模方面,也可以用XML來替代UML。這是基于這么一種理解:Schema代表類圖,它如同UML一樣存儲了類的結(jié)構(gòu)特性;XML代表對象,它存儲了類的實(shí)例化對象的屬性數(shù)據(jù);而XSL是對類圖的轉(zhuǎn)換,即MDAModel Driven Architecture,模型驅(qū)動架構(gòu))中的提到的模型轉(zhuǎn)換。在UML中沒有模型轉(zhuǎn)換技術(shù),但是一些UML工具提供了代碼生成的功能(例如RationalRose),這中功能可以理解為模型轉(zhuǎn)換的一個(gè)特例。因此有人提出了用XSLT做代碼生成的建議,事實(shí)上這種代碼生成技術(shù)已經(jīng)比較成熟。由于XML Schema并不是天生就用來刻劃類圖的,所以它在類的繼承等方面存在一些不足之處,為了修正這些不足,OMGObject Manage Group,對象管理組)組織提出了XMIXML Metadata InterchangeXML元數(shù)據(jù)交換)標(biāo)準(zhǔn),用來補(bǔ)充XML Schema在軟件建模方面的不足。現(xiàn)在XMI已經(jīng)變成了各種軟件建模工具的通用存儲方式,可以將不同建模工具建立的模型互相轉(zhuǎn)換。

          總的來說,XML是一種基于文本的、格式化的數(shù)據(jù)存儲技術(shù),它包括一系列的數(shù)據(jù)解決方案,它們是輕量級的、易于學(xué)習(xí)的、平臺無關(guān)的數(shù)據(jù)解決方案。弄清楚了這個(gè)概念再去學(xué)習(xí)XML,也許更有幫助。

          評論

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2005-03-13 22:25 by kenko
          總的來說,XML是一種基于本文的、格式化的數(shù)據(jù)存儲技術(shù)
          上面是倒數(shù)第二句開頭的一句話
          是不是應(yīng)該改為"總的來說,XML是一種基于文本的、格式化的數(shù)據(jù)存儲技術(shù)"

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2005-03-13 22:26 by kenko
          你真的很棒!!!向你學(xué)習(xí)!

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2005-03-14 18:52 by wxb_nudt
          謝謝關(guān)注,已經(jīng)修改!

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2005-03-28 17:10 by
          十分感謝wxb_nudt ,讓我思路清晰了很多!

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2005-07-15 21:32 by 雨雪霏霏
          基于文本的結(jié)構(gòu)化數(shù)據(jù)存儲技術(shù)
          沒什么好討論的啦

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2005-11-29 11:23 by 綠水
          “XML是一種基于文本的、格式化的數(shù)據(jù)存儲技術(shù)。”
          原來XML只是一個(gè)數(shù)據(jù)存儲格式。嗯,理解了,一語驚醒夢中人。

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2006-05-19 14:18 by robin
          我不是什么高手或權(quán)威,不敢說文章的論點(diǎn)是正確的,但至少我現(xiàn)在很贊同你的理解!我也一直在思考XML本質(zhì)的問題,你的文章給了我不少啟示!Thanks!

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2006-08-09 20:45 by ww
          拋磚引玉,“xml本質(zhì)”讓原子數(shù)據(jù)用另外一種思維方式得到了更自然的封裝。

          # 樓主對xml的本質(zhì)討論偏頗  回復(fù)  更多評論   

          2007-06-28 22:51 by 小于
          樓主對xml的總結(jié)性話語算不得錯(cuò)誤,但起碼是片面的。xml不僅僅是數(shù)據(jù)存儲,數(shù)據(jù)存儲只是它的一個(gè)方面,首先第一點(diǎn):XML最重要的作用是數(shù)據(jù)交換,而不是存儲。樓主應(yīng)該不需要我解釋數(shù)據(jù)交換和數(shù)據(jù)存儲的區(qū)別吧。在更多的領(lǐng)域,XML是做為數(shù)據(jù)轉(zhuǎn)化和傳輸?shù)妮d體。
          然后第二點(diǎn),也是非常重要的一點(diǎn):XML是一種語言,而非存儲。 xml的含義是可擴(kuò)展標(biāo)記語言,它有自己的語法結(jié)構(gòu),并可以表達(dá)一定的語義。 xml可以表達(dá)一定的語義,從本質(zhì)上說, xml可以存儲的不僅僅是數(shù)據(jù),而且可以是操作。xml語言的高明之處在于它不會區(qū)分?jǐn)?shù)據(jù)和程序(或者說對數(shù)據(jù)的操作),程序本身是數(shù)據(jù),數(shù)據(jù)也是程序。
          這似乎有些難以理解, 舉個(gè)例子, 假如你使用java寫以下函數(shù)
          int add(int a, int b)
          {
          return a +b
          }

          如果用xml來寫是以下形式

          <define-function return-type="int" name="add">
          <arguments>
          <argument type="int">a</argument>
          <argument type="int">b</argument>
          </arguments>
          <body>
          <return>
          <add value1="a" value2="b" />
          </return>
          </body>
          </define>

          也許你可以會問 這段代碼必須 由一個(gè)xml 解析器解析 才會有語義,而對于xml本身它僅僅只是數(shù)據(jù)。
          我覺得你可以用這種方式去理解,但是換一個(gè)角度,定義操作的標(biāo)簽(例如body, arguments return )假如僅僅是解析器的一部分, 而真真的語義仍然是xml本身。(這個(gè)時(shí)候,你還非要說xml本身不具有語義,是解析器賦予它語義嗎)。
          有些人說, xml僅僅是txt,只是作為一種存儲,語義都是解析器賦予的,那不盡要問:如果將C語言代碼看成txt,難道C語言本身也只是群字符串的存儲嗎? 遠(yuǎn)遠(yuǎn)不是!
          如果你從這個(gè)層面來理解xml, 那么就應(yīng)該明白xml為什么被稱為語言,而不是其他。 xml最重要的功能是能夠定義可擴(kuò)展的標(biāo)記,并使用這些標(biāo)記表達(dá)一定的語義。
          XML語言最重要的一點(diǎn)是 語義可構(gòu)造性。哈,如果你從語言的角度來理解xml,你會發(fā)現(xiàn)xml不僅僅是存儲數(shù)據(jù)。

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2007-07-02 21:42 by wxb_nudt
          非常感謝小于對我這篇文章的補(bǔ)充.時(shí)隔兩年多,當(dāng)初寫這篇文章的本意我已經(jīng)記不太清,不過現(xiàn)在看來,當(dāng)時(shí)確實(shí)較為偏頗.謝謝!

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2008-04-14 17:38 by music
          厲害,學(xué)習(xí)之

          # re: XML的本質(zhì)討論[未登錄]  回復(fù)  更多評論   

          2010-01-18 16:37 by Stephen
          學(xué)習(xí)!學(xué)習(xí)

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2011-05-13 23:25 by 老蘇
          XML的本質(zhì)是數(shù)據(jù)沒錯(cuò),不過XML的設(shè)計(jì)目的是用于通信,而不是用于存儲。它的數(shù)據(jù)定義和通信協(xié)議的定義其實(shí)非常相似!
          用于存儲,它的效率、功能和靈活性都不如數(shù)據(jù)庫,因?yàn)閿?shù)據(jù)庫也有很多單機(jī)版、嵌入式數(shù)據(jù)等可以高效的存儲。

          # re: XML的本質(zhì)討論  回復(fù)  更多評論   

          2011-05-13 23:31 by 老蘇
          應(yīng)該說,XML的功能是數(shù)據(jù)交換,而其本質(zhì),是一門標(biāo)記語言。
          主站蜘蛛池模板: 阿鲁科尔沁旗| 南涧| 柯坪县| 宁国市| 新民市| 雅安市| 长垣县| 新竹县| 项城市| 桐柏县| 水城县| 永寿县| 清水县| 行唐县| 衡水市| 家居| 宿迁市| 瓦房店市| 东乌珠穆沁旗| 临邑县| 襄汾县| 永顺县| 进贤县| 麦盖提县| 札达县| 南汇区| 内江市| 太和县| 黄龙县| 额尔古纳市| 神池县| 肇庆市| 杂多县| 永吉县| 奉新县| 五华县| 双牌县| 万州区| 宜章县| 上饶市| 罗田县|