<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(4620) 評論(14)  編輯  收藏 所屬分類: 技術(shù)雜談

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

    XML的本質(zhì)是什么?這個問題對于很多XML的初學(xué)者來說都不容易回答。因為XML涉及的方面太多,有人是為了寫出更漂亮的網(wǎng)頁才從HTML進一步學(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ù)據(jù)的格式化存儲,而XML的一系列技術(shù)都是圍繞著數(shù)據(jù)來發(fā)展的。例如DTDSchema是對數(shù)據(jù)格式的定義和檢驗;XSLT是對數(shù)據(jù)的轉(zhuǎn)換;DOMSAX是對數(shù)據(jù)的提取和操作。

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

    XML的本質(zhì)決定了它在網(wǎng)頁制作方面比HTML更具有優(yōu)越性。傳統(tǒng)的網(wǎng)頁包括HTML+CSS,在這種模式中,數(shù)據(jù)和數(shù)據(jù)的顯示特性都包含在HTML中,CSS只是對顯示特性的一種補充;而XML網(wǎng)頁包括XML+XML Schema+XSL,其中XML存儲數(shù)據(jù),XML Schema定義了數(shù)據(jù)的存儲格式,XSL定義了數(shù)據(jù)的顯示特性(其實它定義了如何將XML轉(zhuǎn)換為HTML,實際上就是定義了數(shù)據(jù)的顯示特性)。使用XML制作的網(wǎng)頁將數(shù)據(jù)、數(shù)據(jù)格式和顯示特性清晰的分為三個部分,在添加或者修改網(wǎng)頁的時候可以單獨的修改每個部分,從而得到更好的維護性和更高的制作效率。當(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)點。

    對于XML和數(shù)據(jù)庫的比較,我的上一篇文章中有過討論()。從本質(zhì)上來說,XML和數(shù)據(jù)的本質(zhì)差不多,都是圍繞著數(shù)據(jù)來提供一系列的解決方案,但是它們之間存在幾個顯著的不同:1.XML是輕量級的數(shù)據(jù)解決方案,容易學(xué)習(xí),可以用文本編輯器進行編輯,一般的瀏覽器都支持XSLT,適用于數(shù)據(jù)量小的各種環(huán)境;2.XML是完全平臺無關(guān)的,不需要依賴于特定的操作系統(tǒng)、瀏覽器或者編程語言,而數(shù)據(jù)庫不是完全平臺無關(guān)的;3.XML是基于文本的,適合于網(wǎng)絡(luò)傳輸,你不能指望每個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ù)據(jù);而XSL是對類圖的轉(zhuǎn)換,即MDAModel Driven Architecture,模型驅(qū)動架構(gòu))中的提到的模型轉(zhuǎn)換。在UML中沒有模型轉(zhuǎn)換技術(shù),但是一些UML工具提供了代碼生成的功能(例如RationalRose),這中功能可以理解為模型轉(zhuǎn)換的一個特例。因此有人提出了用XSLT做代碼生成的建議,事實上這種代碼生成技術(shù)已經(jīng)比較成熟。由于XML Schema并不是天生就用來刻劃類圖的,所以它在類的繼承等方面存在一些不足之處,為了修正這些不足,OMGObject Manage Group,對象管理組)組織提出了XMIXML Metadata InterchangeXML元數(shù)據(jù)交換)標(biāo)準(zhǔn),用來補充XML Schema在軟件建模方面的不足。現(xiàn)在XMI已經(jīng)變成了各種軟件建模工具的通用存儲方式,可以將不同建模工具建立的模型互相轉(zhuǎn)換。

    總的來說,XML是一種基于文本的、格式化的數(shù)據(jù)存儲技術(shù),它包括一系列的數(shù)據(jù)解決方案,它們是輕量級的、易于學(xué)習(xí)的、平臺無關(guān)的數(shù)據(jù)解決方案。弄清楚了這個概念再去學(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只是一個數(shù)據(jù)存儲格式。嗯,理解了,一語驚醒夢中人。

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

    2006-05-19 14:18 by robin
    我不是什么高手或權(quá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é)性話語算不得錯誤,但起碼是片面的。xml不僅僅是數(shù)據(jù)存儲,數(shù)據(jù)存儲只是它的一個方面,首先第一點:XML最重要的作用是數(shù)據(jù)交換,而不是存儲。樓主應(yīng)該不需要我解釋數(shù)據(jù)交換和數(shù)據(jù)存儲的區(qū)別吧。在更多的領(lǐng)域,XML是做為數(shù)據(jù)轉(zhuǎn)化和傳輸?shù)妮d體。
    然后第二點,也是非常重要的一點:XML是一種語言,而非存儲。 xml的含義是可擴展標(biāo)記語言,它有自己的語法結(jié)構(gòu),并可以表達一定的語義。 xml可以表達一定的語義,從本質(zhì)上說, xml可以存儲的不僅僅是數(shù)據(jù),而且可以是操作。xml語言的高明之處在于它不會區(qū)分?jǐn)?shù)據(jù)和程序(或者說對數(shù)據(jù)的操作),程序本身是數(shù)據(jù),數(shù)據(jù)也是程序。
    這似乎有些難以理解, 舉個例子, 假如你使用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>

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

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

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

    # 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ù)沒錯,不過XML的設(shè)計目的是用于通信,而不是用于存儲。它的數(shù)據(jù)定義和通信協(xié)議的定義其實非常相似!
    用于存儲,它的效率、功能和靈活性都不如數(shù)據(jù)庫,因為數(shù)據(jù)庫也有很多單機版、嵌入式數(shù)據(jù)等可以高效的存儲。

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

    2011-05-13 23:31 by 老蘇
    應(yīng)該說,XML的功能是數(shù)據(jù)交換,而其本質(zhì),是一門標(biāo)記語言。
    主站蜘蛛池模板: 国产免费无码一区二区| 一二三四影视在线看片免费| 久久精品蜜芽亚洲国产AV| 中文免费观看视频网站| 亚洲AV日韩AV永久无码色欲| 久久亚洲av无码精品浪潮| 亚洲一区二区三区首页| aa级一级天堂片免费观看| 一级毛片在播放免费| 亚洲黄色在线视频| 亚洲av日韩av欧v在线天堂| 久久久久久亚洲av无码蜜芽 | 无码精品人妻一区二区三区免费看| 亚洲精品国产精品乱码不卡| 美丽姑娘免费观看在线观看中文版 | 亚洲综合无码无在线观看| 亚洲国产综合无码一区二区二三区| 免费无遮挡无码永久视频| 深夜a级毛片免费视频| 蜜芽亚洲av无码精品色午夜| 亚洲精品视频免费| 国产精品免费观看久久| 成全动漫视频在线观看免费高清版下载 | 国产99久久亚洲综合精品| 亚洲一区二区在线视频| 亚洲国产主播精品极品网红| 黄页网站在线观看免费高清| 日韩a级无码免费视频| 免费无码国产V片在线观看| 在线亚洲午夜片AV大片| 亚洲人成影院在线| 国产精品入口麻豆免费观看| 久久最新免费视频| 亚洲av永久无码天堂网| 亚洲导航深夜福利| 亚洲AV无码一区二区二三区软件| 亚洲中文字幕视频国产| 日产乱码一卡二卡三免费| 中文字幕av无码无卡免费| 一级毛片**不卡免费播| 免费无码又爽又刺激一高潮|