posts - 33,comments - 21,trackbacks - 0
          轉(zhuǎn)貼自賽迪網(wǎng)(http://tech.ccidnet.com/art/294/20021120/31320_1.html)

          XML(eXtensible Markup Language,可擴(kuò)展的標(biāo)記語言)是萬維網(wǎng)聯(lián)盟(W3C)創(chuàng)建的一組規(guī)范,用于在Web上組織、發(fā)布各種信息。它不僅可以滿足迅速增長(zhǎng)的網(wǎng)絡(luò)應(yīng)用的需求,還能夠確保網(wǎng)絡(luò)進(jìn)行交互操作時(shí)具有良好的可靠性與互操作性。

          XML的語法類似HTML,都是用標(biāo)簽來描述數(shù)據(jù)的。HTML的標(biāo)簽是固定的,我們只能使用,不能修改。XML則不同,它沒有預(yù)先定義好的標(biāo)簽可以使用,而是依據(jù)設(shè)計(jì)上的需要自行定義標(biāo)簽。XML是一個(gè)元語言,根據(jù)不同的行業(yè)和語義,可以派生出許許多多的協(xié)議和規(guī)范。目前的基本協(xié)議有XSL、XLink/Xpointer、Xpath、XHTML、Schema等。不同的行業(yè)和領(lǐng)域都可以制定自己的XML規(guī)范,用于橫向和縱向的信息交流和數(shù)據(jù)傳輸。XML規(guī)范有大有小,大的可以為全世界范圍內(nèi)的商務(wù)數(shù)據(jù)制定格式,像ebXML、Biztalk、eCo;小的有專門用于電子錢包的ECML,有為數(shù)學(xué)制定的MathML;還有為多媒體數(shù)據(jù)同步的SMIL,像XSL是專門用于顯示的,它制定了許多有顯示語義的標(biāo)簽;而XLink是描述文檔之間關(guān)系的語言。像Micrsoft 的CDF(Channel Definition Format)推送頻道“PUSH”技術(shù)應(yīng)用、WML(Wireless Market Language)無線商務(wù)應(yīng)用等等都是XML技術(shù)的具體應(yīng)用。XML給基于Web的應(yīng)用軟件賦予了強(qiáng)大的功能和靈活性,因此它給開發(fā)者和用戶帶來了許多好處。利用XML用戶可以方便地進(jìn)行本地計(jì)算和處理。XML格式的數(shù)據(jù)發(fā)送給客戶后,客戶可以用應(yīng)用軟件解析數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行編輯和處理。使用者可以用不同的方法處理數(shù)據(jù),而不僅僅是顯示它。XML文檔對(duì)象模式(DOM)允許用腳本或其它編程語言處理數(shù)據(jù),數(shù)據(jù)計(jì)算不需要回到服務(wù)器就能進(jìn)行。XML可以被利用來分離使用者觀看數(shù)據(jù)的界面,使用簡(jiǎn)單靈活開放的格式,可以給Web創(chuàng)建功能強(qiáng)大的應(yīng)用軟件。

          XML核心功能的有關(guān)特性和規(guī)范如下:

          1. 格式良好的(Well-Formed)XML文檔;

          2. 文檔類型定義(DTD);

          3. XML使用樣式—CSS(Cascading Style Sheet,層疊樣式表單)和XSL(eXtensible Style Language,可擴(kuò)展樣式語言);

          4. 文檔對(duì)象模型(DOM)—XML編程接口;

          5. XML 簡(jiǎn)單API(SAX)—XML編程接口;

          6. XML 命名空間(Namespace)和模式(Schema);

          7. 鏈接(XLink)和查詢;

          8. XPath(XML Path Language) 和 XPointer(XML Pointer Language);

          9. 轉(zhuǎn)換XML—XSL和XSLT(XSL Transformation);

          10. XML 和數(shù)據(jù)庫;

          11. 用于服務(wù)器協(xié)議— XML-RPC、SOAP(Simple Object Access Protocol,簡(jiǎn)單對(duì)象訪問協(xié)議)和WDDX(Web Distributed Data Exchange,分布式Web 數(shù)據(jù)交換)。

          XML 是一種具有描述數(shù)據(jù)功能的語言,它十分適合作為知識(shí)表示語言或作為組件及文件格式的表示方法。它還可以讓數(shù)據(jù)在不同的來源中,根據(jù)通用的語法規(guī)則來處理。而Java則是用于Internet、適合于分布式環(huán)境、提供了一個(gè)跨平臺(tái)的語言。XML和Java相結(jié)合主要原因是基于XML的語法提供了一種靈活的、標(biāo)準(zhǔn)的、健壯的Java編程方案,同時(shí),Java也將一種普遍的語義集合應(yīng)用于XML數(shù)據(jù)。既然Java和XML都是可移植的標(biāo)準(zhǔn),這兩種技術(shù)結(jié)合的結(jié)果也是可移植的,可以重用數(shù)據(jù)和移植行為。單獨(dú)使用XML或Java所能獲得的所有潛力還沒有被完全掌握,將它們結(jié)合就走進(jìn)了一個(gè)巨大的、新的國(guó)度。將XML應(yīng)用于Java的兩個(gè)主要的應(yīng)用是面向表示的出版業(yè)和企業(yè)中面向消息的中間件技術(shù)。

          Java和XML是在為不同客戶開發(fā)Web程序時(shí)形成得自然的匹配。從傳統(tǒng)的電話到最新的智能冰箱,利用和產(chǎn)生的信息都是在不同的系統(tǒng)平臺(tái)的服務(wù)器上交換。XML和Java的方便性和可延展性使它們?cè)谛碌腤eb上具有更多的功能:

          1. 結(jié)構(gòu)化—建立有任何復(fù)雜層次的數(shù)據(jù)模型;

          2. 可擴(kuò)展性—根據(jù)需要定義新的標(biāo)志;

          3. 驗(yàn)證—檢查數(shù)據(jù)在結(jié)構(gòu)上的正確性;

          4. 獨(dú)立與媒介—以多種方式發(fā)布內(nèi)容;

          5. 獨(dú)立于供應(yīng)商和平臺(tái)—使用標(biāo)準(zhǔn)的商業(yè)軟件,甚至文本工具處理任何符合(XML標(biāo)準(zhǔn))的文檔。

          上述這些功能使得XML技術(shù)被期望給面向網(wǎng)絡(luò)的應(yīng)用,特別是在數(shù)據(jù)交換領(lǐng)域帶來革命性的影響。Java 與XML一起使得新一代Web應(yīng)用成為可能。

          Java XML Pack 的由來


          因?yàn)閄ML的信息編碼容易閱讀、處理和產(chǎn)生,所以在許多信息交換中XML是一種首選的技術(shù)。Java可以認(rèn)為是XML的“同事”,因?yàn)檫@兩種語言都有相同的歷史背景(C++、 SGML),都具有簡(jiǎn)單性、方便性和可移植性,并且都繼續(xù)在工業(yè)上、學(xué)術(shù)上開發(fā)(W3C、JCP)。 理所當(dāng)然Java在服務(wù)器和客戶端的XML程序開發(fā)上成為一種首選語言。

          Java 軟件平臺(tái)為了建立基于XML的程序已經(jīng)全面地收集了API核心規(guī)范,具體有6個(gè)(JDK1.4)。它們分別是JAXP (Java API for XML Processing) 、JAXB (Java Architecture for XML Binding) 、JAXM (Java API for XML Messaging)、JAX-RPC (Java API for XML-based RPC)、JAXR (Java API for XML Registries)、JDOM (Java DOM)。簡(jiǎn)介如下:

          1.JAXP支持使用 DOM、 SAX和XSLT處理XML文檔。JAXP允許程序分析和轉(zhuǎn)換XML 文檔獨(dú)立于一個(gè)特殊的 XML 處理進(jìn)程。根據(jù)程序的需要,開發(fā)者們可以機(jī)動(dòng)地與XML處理機(jī)間交換而不用改變程序代碼。這樣,程序和工具開發(fā)者們能夠快速和容易地寫出可以支持XML的Java應(yīng)用程序。

          JAXP參數(shù)的實(shí)現(xiàn)包括一個(gè)支持SAX和DOM的、高質(zhì)量的解析器和一個(gè)支持XSLT的轉(zhuǎn)換引擎。最新的版本JAXP 1.1允許使用最近的 SAX-2和 DOM level 2, 同樣它也包括一個(gè)基于TrAX框架 (為XML轉(zhuǎn)換API)的XSLT。 而最初的版本JAXP 1.0支持 SAX-1 和 DOM level 1。JAXP 1.1將來可當(dāng)作一個(gè)用于JDK 1.1.8和更高平臺(tái)的、可選擇的包,也許將來還會(huì)包括在 J2SE(Java 2 Platform Standard Edition) 1.4和J2EE(Java 2 Platform Enterprise Edition)1.3 中。

          2.JAXB 提供了一個(gè)API工具,它可以自動(dòng)地在XML文檔和Java對(duì)象間建立映射。JAXB可以使XML方便使用編譯進(jìn)一個(gè)XML計(jì)劃的一個(gè)或多個(gè)類。已經(jīng)產(chǎn)生的類提供所有的有關(guān)XML解析和格式的細(xì)節(jié),它們能保證在計(jì)劃中的強(qiáng)制約束有效。在許多事件里,使用一個(gè)SAX(Simple API for XML)解析器或執(zhí)行一個(gè)DOM(Document Object Model) API是非常有效的。JAXB 1.0 將會(huì)成為一個(gè)Java 2平臺(tái)的可選擇性的包。

          3.JAXM 的可選擇包允許程序發(fā)送和接收用純Java API導(dǎo)向XML的文檔。 JAXM工具的SOAP(Simple Object Access Protocol) 1.1及其附件可使開發(fā)者能集中于為它們的程序建立、發(fā)送、接收和分解信息包,這樣就代替了低層次的XML通信程序。

          這個(gè)版本的JAXM規(guī)范包括Messaging Profiles概念。它的目的就是為了建立一個(gè)基礎(chǔ),使之可支持一類高層次基于標(biāo)準(zhǔn)的信息協(xié)議。 一個(gè)Profile的例子就是執(zhí)行ebXML 的傳輸、路由和打包的信息處理服務(wù),或者基于JAXM 的W3C 的XMLP。因此,Java技術(shù)開發(fā)者們?cè)谑褂肑AXM 時(shí),將有掛接XML信息的能力。

          這些高層次的協(xié)議常常在基本的基于SOAP信息之外,實(shí)現(xiàn)一些額外的功能。這個(gè)額外的功能對(duì)信息的安全性、可升級(jí)性及完整性經(jīng)常是有用的。

          JAXM 1.0 將可當(dāng)作一個(gè)可選擇的包用于J2SE。

          4.JAX-RPC為基于RPC協(xié)議的標(biāo)準(zhǔn)XML提供了一個(gè)獨(dú)立傳輸?shù)腁PI。JAX-RPC 1.0 將可當(dāng)作一個(gè)可選擇的包用于J2SE。JAX-RPC 將來也許會(huì)包括J2SE發(fā)行版或者J2EE。JAX-RPC 最近被 Executive Committee of the Java Community ProcessSM 認(rèn)可,并且已經(jīng)建立起專家組。 JAX-RPC 規(guī)范將作為 JSR-101被用于開發(fā) JCP 進(jìn)程。

          5.JAXR提供一個(gè)統(tǒng)一和標(biāo)準(zhǔn)的 Java API 來傳遞不同種類的XML Registries。 XML Registries 能夠建立、配置和發(fā)現(xiàn)Web服務(wù)器。

          現(xiàn)在的XML Registries規(guī)范有ISO 11179、OASIS、 eCo Framework、 ebXML 和 UDDI。 JAXR API 允許 Java 程序員通過不同的XML Registries使用一個(gè)簡(jiǎn)單、容易使用的抽象API。JAXR API的JAXR 信息模式使它方便在XML registries中記錄內(nèi)容和數(shù)據(jù)。

          JDK1.4的JAXR API規(guī)范包括在JAXR信息模式同ebXML Registry 和 UDDI Registry規(guī)范間建立的細(xì)節(jié)。

          JAXR API 工作在與Java APIs for XML相關(guān)的核心規(guī)范上,比如說 JAXP、JAXB、 JAX-RPC 和 JAXM, 以允許 Web 服務(wù)器包含J2EE平臺(tái)。

          JAXR 1.0 將當(dāng)作一個(gè)可選擇的包用于J2SE,將來也許會(huì)包括在J2EE中。

          6.JDOM是一種面向Java 的讀、寫和操作XML 文檔的API。JDOM 與現(xiàn)行的SAX 和DOM標(biāo)準(zhǔn)兼容,為Java 程序員提供了一個(gè)簡(jiǎn)單、輕量的XML 文檔操作方法。需要指出的是JDOM是專門為Java 程序員開發(fā)的,所以采用許多Java 語言的優(yōu)秀特性,比如方法重載、集合(Collections,這是在Java2中出現(xiàn)的數(shù)據(jù)操作類型)和類映射(Reflection)。

          JDOM 是一種使用XML 的獨(dú)特Java 工具包,用于快速開發(fā)XML應(yīng)用程序。它能夠替換org.w3c.dom 軟件包來有計(jì)劃地操作XML 文檔。實(shí)際上JDOM 和DOM 能夠并存。

          標(biāo)準(zhǔn)的 DOM 文件是由文字結(jié)點(diǎn)、元素結(jié)點(diǎn)、處理命令結(jié)點(diǎn)和其它許多的結(jié)點(diǎn)組成的。不過這些結(jié)點(diǎn)造成了一個(gè)松散的DOM 對(duì)象,也造成了應(yīng)用上的困難。由于JDOM具有沒有層次性的特點(diǎn),所以它將XML 文件建立成一個(gè)Java 對(duì)象,這種方法讓在Java 中使用XML 變得非常的容易,同時(shí)解決了DOM 應(yīng)用上的困難。其次,JDOM 采用類驅(qū)動(dòng),不需要像DOM 那樣進(jìn)行工廠化接口配置,所以JDOM 的使用是直截了當(dāng)?shù)摹S捎谑褂肑DOM對(duì)象就像使用Document、Element 和 Attribute 這些類的直接實(shí)例,所以創(chuàng)建一個(gè)新JDOM 對(duì)象在Java 語言中就像使用new 操作符一樣容易。

          Java 與 XML 的結(jié)合應(yīng)用


          建立一個(gè)良構(gòu)(Well-Formed)的XML 文檔及驗(yàn)證的實(shí)例

          對(duì)于一個(gè)XML文件是否符合Well-Formed 所規(guī)定的各項(xiàng)XML 基本語法,必須借助XML 分析器來加以檢查。比較常見的XML 分析器有Xerces、JAXP 和MSXML。

          一個(gè)XML 文檔是有明顯特征的。下面是一個(gè)XML 文檔的實(shí)例People.xml,代碼如下:

          <? xml version="1.0" encoding="GB2312"? >
          <PeopleInfo>
          <People PeopleId="YOUR">
              <PeopleName> 古董 </PeopleName>
              <PeopleSex>   男  </PeopleSex>
              <PeopleAge>   23  </PeopleAge>
          </People>
          <People PeopleId="SHEN">
              <PeopleName> 王冠 </PeopleName>
              <PeopleSex>   女  </PeopleSex>
              <PeopleAge>   25  </PeopleAge> 
          </People>
          </PeopleInfo>

          ?

          posted on 2006-11-22 17:17 英明 閱讀(310) 評(píng)論(0)  編輯  收藏 所屬分類: 編程

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永康市| 井研县| 黄平县| 托克逊县| 久治县| 铜陵市| 罗江县| 乐山市| 隆昌县| 加查县| 桂阳县| 定陶县| 珲春市| 普陀区| 洛扎县| 河南省| 观塘区| 岐山县| 阜阳市| 宁晋县| 龙门县| 同江市| 大理市| 桦甸市| 乐业县| 兴海县| 嘉兴市| 泸定县| 丹东市| 余江县| 祁东县| 富源县| 福贡县| 阿坝| 维西| 新巴尔虎左旗| 阜城县| 呼和浩特市| 桦川县| 安吉县| 阿拉尔市|