XML技術(shù)基礎(chǔ)講座_第1頁
XML技術(shù)基礎(chǔ)講座_第2頁
XML技術(shù)基礎(chǔ)講座_第3頁
XML技術(shù)基礎(chǔ)講座_第4頁
XML技術(shù)基礎(chǔ)講座_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 XML技術(shù)基礎(chǔ)講座前言:XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語言)是由W3C(World Wide Web Consortium,萬維網(wǎng)聯(lián)盟)于1998年2月發(fā)布的一種標(biāo)準(zhǔn),同HTML一樣是SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語言)的一個簡化子集。由于它將SGML的豐富功能與HTML的易用性結(jié)合到了Web的應(yīng)用中,所以自推出以來,迅速得到軟件開發(fā)商的支持和程序開發(fā)人員的喜愛,顯示出強(qiáng)大的生命力。 由于XML較好地解決了HTML無法表達(dá)數(shù)據(jù)內(nèi)容等問題,使它在政府、金融、證券、郵電、保險、稅務(wù)、司法、

2、出版以及電子商務(wù)等方面得到了廣泛的應(yīng)用。 u XML技術(shù)入門 XML與HTML的比較 Internet提供了全球范圍的網(wǎng)絡(luò)互連與通信功能,Web技術(shù)的發(fā)展更是一日千里,其豐富的信息資源給人們的學(xué)習(xí)和生活帶來了極大的便利。特別是應(yīng)運而生的HTML(超文本標(biāo)記語言),以簡單易學(xué)、靈活通用的特性,使人們發(fā)布、檢索、交流信息都變得非常簡單,從而使Web成了最大的環(huán)球信息資源庫。然而,電子商務(wù)、電子出版、遠(yuǎn)程教育等基于Web的新興領(lǐng)域的全面興起使得傳統(tǒng)的Web資源更加復(fù)雜化、多樣化,數(shù)據(jù)量的日趨龐大對網(wǎng)絡(luò)的傳輸能力也提出更高的要求。同時,人們對Web服務(wù)功能的需求也達(dá)到更高的標(biāo)準(zhǔn),比如: 用戶需要對We

3、b進(jìn)行智能化的語義搜索和對數(shù)據(jù)按照不同的需求進(jìn)行多樣化顯示等個性化服務(wù); 公司和企業(yè)要為客戶創(chuàng)建和分發(fā)大量有價值的文檔信息,以降低生產(chǎn)成本,以及對不同平臺、不同格式的數(shù)據(jù)源進(jìn)行數(shù)據(jù)集成和數(shù)據(jù)轉(zhuǎn)化等等,這些需求越來越廣泛和迫切。 傳統(tǒng)的HTML由于自身特點的限制,不能有效地解決上述問題:作為一種簡單的表示性語言,它只能顯示內(nèi)容而無法表達(dá)數(shù)據(jù)內(nèi)容。而這一點恰恰是電子商務(wù)、智能搜索引擎所必需的。另外,HTML語言不能描述矢量圖形、數(shù)學(xué)公式、化學(xué)符號等特殊對象,在數(shù)據(jù)顯示方面的描述能力也不盡如人意。最重要的是:HTML只是SGML(Standard Generalized Markup Languag

4、e,標(biāo)準(zhǔn)通用標(biāo)記語言)的一個實例化的子集,可擴(kuò)展性差,用戶根本不能自定義有意義的標(biāo)記供他人使用。這一切都成為Web技術(shù)進(jìn)一步發(fā)展的障礙。 SGML是一種通用的文檔結(jié)構(gòu)描述標(biāo)記語言,為語法標(biāo)記提供了異常強(qiáng)大的工具,同時具有極好的擴(kuò)展性,因此在數(shù)據(jù)分類和索引中非常有用。但SGML復(fù)雜度太高,不適合網(wǎng)絡(luò)的日常應(yīng)用,加上開發(fā)成本高、不被主流瀏覽器所支持等原因,使得SGML在Web上的推廣受到阻礙。在這種情況下,開發(fā)一種兼具SGML的強(qiáng)大功能、可擴(kuò)展性以及HTML的簡單性的語言勢在必行。由此誕生了XML語言。 XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語言)是由W3C于19

5、98年2月發(fā)布的一種標(biāo)準(zhǔn)。它同樣是SGML的一個簡化子集,它將SGML的豐富功能與HTML的易用性結(jié)合到Web的應(yīng)用中,以一種開放的自我描述方式定義數(shù)據(jù)結(jié)構(gòu),在描述數(shù)據(jù)內(nèi)容的同時能突出對結(jié)構(gòu)的描述,從而體現(xiàn)出數(shù)據(jù)之間的關(guān)系。這樣所組織的數(shù)據(jù)對于應(yīng)用程序和用戶都是友好的、可操作的。 XML的優(yōu)缺點 XML的優(yōu)勢之一是它允許各個組織、個人建立適合自己需要的標(biāo)記集合,并且這些標(biāo)記可以迅速地投入使用。這一特征使得XML可以在電子商務(wù)、政府文檔、司法、出版、CAD/CAM、保險機(jī)構(gòu)、廠商和中介組織信息交換等領(lǐng)域中一展身手,針對不同的系統(tǒng)、廠商提供各具特色的獨立解決方案。 XML的最大優(yōu)點在于它的數(shù)據(jù)存儲

6、格式不受顯示格式的制約。一般來說,一篇文檔包括三個要素: 數(shù)據(jù)、結(jié)構(gòu)以及顯示方式。對于HTML來說,顯示方式內(nèi)嵌在數(shù)據(jù)中,這樣在創(chuàng)建文本時,要時時考慮輸出格式,如果因為需求不同而需要對同樣的內(nèi)容進(jìn)行不同風(fēng)格的顯示時,要從頭創(chuàng)建一個全新的文檔,重復(fù)工作量很大。此外HTML缺乏對數(shù)據(jù)結(jié)構(gòu)的描述,對于應(yīng)用程序理解文檔內(nèi)容、抽取語義信息都有諸多不便。 XML把文檔的三要素獨立開來,分別處理。首先把顯示格式從數(shù)據(jù)內(nèi)容中獨立出來,保存在樣式單文件(Style Sheet)中,這樣如果需要改變文檔的顯示方式,只要修改樣式單文件就行了。XML的自我描述性質(zhì)能夠很好地表現(xiàn)許多復(fù)雜的數(shù)據(jù)關(guān)系,使得基于XML的應(yīng)用

7、程序可以在XML文件中準(zhǔn)確高效地搜索相關(guān)的數(shù)據(jù)內(nèi)容,忽略其他不相關(guān)部分。XML還有其他許多優(yōu)點,比如它有利于不同系統(tǒng)之間的信息交流,完全可以充當(dāng)網(wǎng)際語言,并有希望成為數(shù)據(jù)和文檔交換的標(biāo)準(zhǔn)機(jī)制。 當(dāng)然,XML作為一個新建立的標(biāo)準(zhǔn),還有許多不足之處: 它在強(qiáng)調(diào)了數(shù)據(jù)結(jié)構(gòu)的同時,語義表達(dá)能力上略顯不足,例如定義了這樣一個標(biāo)記,如果不是在文檔中實際定義內(nèi)容,我們就無法知道是要表達(dá)家庭住址還是E-mail地址。另外,XML的有些技術(shù)尚未形成統(tǒng)一的標(biāo)準(zhǔn),充分支持XML的應(yīng)用處理程序很少,甚至瀏覽器對XML的支持也是有限的。 所以,XML還并不能完全取代HTML,畢竟HTML是最為方便、快捷的網(wǎng)上信息發(fā)布方

8、式。況且HTML是描述數(shù)據(jù)顯示的語言,而XML是描述數(shù)據(jù)及其結(jié)構(gòu)的語言,二者在功能上也是截然不同的。 u XML的使用前景 不管怎樣,Web的應(yīng)用將隨著XML的發(fā)展而更加精彩: 1. 商務(wù)的自動化處理 XML的豐富標(biāo)記完全可以描述不同類型的單據(jù),例如信用證、保險單、索賠單以及各種發(fā)票等。結(jié)構(gòu)化的XML文檔發(fā)送至Web的數(shù)據(jù)可以被加密。因此,XML有希望推動EDI(Electronic Data Interchange)技術(shù)在電子商務(wù)領(lǐng)域的大規(guī)模應(yīng)用。有興趣的同學(xué)可以訪問網(wǎng)站。 2. 信息發(fā)布 信息發(fā)布在企業(yè)的競爭發(fā)展中起著重要作用。服務(wù)器只需發(fā)出一份XM

9、L文件,客戶可根據(jù)自己的需求選擇和制作不同的應(yīng)用程序以處理數(shù)據(jù)。加上XSL(eXtensible Stylesheet Language)的幫助,使廣泛的、通用的分布式計算成為可能。 3. 智能化的Web應(yīng)用程序和數(shù)據(jù)集成 XML能夠更準(zhǔn)確地表達(dá)信息的真實內(nèi)容,其嚴(yán)格的語法降低了應(yīng)用程序的負(fù)擔(dān),也使智能工具的開發(fā)更為便捷。來自不同應(yīng)用程序的數(shù)據(jù)也能夠轉(zhuǎn)化到XML這個統(tǒng)一的框架中,進(jìn)行交互、轉(zhuǎn)化和進(jìn)一步的加工。 XML的優(yōu)點備受矚目,它的發(fā)展方興未艾,未來的Web將是XML的Web! u XML的開發(fā)工具 開發(fā)XML有許多工具可以使用: Notepad:最直接、最簡單的文本編輯工具,在Windo

10、ws附件中就可找到。 Microsoft XML Notepad: 微軟專門為設(shè)計XML文檔而提供的編輯軟件,可以借助它驗證XML文檔的有效性,詳細(xì)說明和下載地址: Visual InterDev:該軟件是用來開發(fā)Web應(yīng)用程序的,不僅僅局限于XML,還可以開發(fā)ASP、HTML、XSL樣式單等等。 Microsoft XML Tree Viewer: 利用這個軟件可以把XML文檔的內(nèi)容用樹的結(jié)構(gòu)形式顯示出來: Microsoft XML Validator: 該軟件可以檢查XML文檔是否是“格式良好的”以及其有效性,并對錯誤發(fā)出警告,它的下載地址是: Microsoft XSL Debugge

11、r: 樣式單文件的復(fù)雜性使開發(fā)人員在編寫時容易出現(xiàn)錯誤,這個軟件就是幫助用戶調(diào)試樣式單文件的,把復(fù)雜枯燥的調(diào)試過程用可視化界面顯示出來。下載地址 : WordPerfect: 一種對開發(fā)XML和SGML提供高級支持的文字處理器,具有所見即所得的開發(fā)環(huán)境,提供向?qū)?、自動化控件的插入和文檔的自動生成等功能,它是一款收費的商業(yè)產(chǎn)品,支持Windows 95/98/2000和Linux平臺。詳情請訪問 SixPack: 為XML的解析和開發(fā)提供簡潔的界面,支持Macintosh平臺,并公開源代碼,詳情請訪問 Xray: 一種具有實時錯誤檢查的XML編輯器。它根據(jù)DTD或者XML Schema,允許用戶

12、創(chuàng)建格式良好的XML文檔或驗證文檔的有效性,并且支持多文檔編輯,是一款免費軟件,支持Windows 95/98/NT/2000平臺。詳情請訪問 u XML的文檔格式 首先介紹XML文檔內(nèi)容的基本單元元素,它的語法格式如下: 標(biāo)簽文本內(nèi)容/標(biāo)簽 元素是由起始標(biāo)簽、元素內(nèi)容和結(jié)束標(biāo)簽組成。用戶把要描述的數(shù)據(jù)對象放在起始標(biāo)簽和結(jié)束標(biāo)簽之間。例如: 王平 XML元素中還可以再嵌套別的元素,這樣使相關(guān)信息構(gòu)成等級結(jié)構(gòu)。下面的例子中,在的元素中包括了所有職員的信息,每位職員都由元素來描述,而元素中又嵌套了和元素。 例1: Lars Peterson 25000 Charlotte M. Cooper 34

13、500 除了元素,XML文檔中能出現(xiàn)的有效對象是:處理指令(PI)、注釋(Comment)、根元素(Root element)、子元素(sub element)和屬性(Attribute)。 處理指令(Processing Instruction) 處理指令給XML解析器提供信息,使其能夠正確解釋文檔內(nèi)容,它的起始標(biāo)識是“”。常見的XML聲明就是一個處理指令: 處理指令還可以有其他的用途,比如定義文檔的編碼方式是GB碼還是Unicode編碼方式,或是把一個樣式單文件應(yīng)用到XML文檔上用以顯示。 注釋 注釋是XML文件中用作解釋的字符數(shù)據(jù),XML處理器不對它們進(jìn)行任何處理。注釋是用“ ”引起來的

14、,可以出現(xiàn)在XML元素間的任何地方,但是不可以嵌套: 根元素和子元素 如果一個元素從文件頭的序言部分之后開始一直到文件尾,包含了文件中所有的數(shù)據(jù)信息,我們稱之為根元素。 XML元素是可以嵌套的,那么被嵌套在內(nèi)的元素稱為子元素。在前面的例子中,就是的子元素。 屬性 屬性給元素提供進(jìn)一步的說明信息,它必須出現(xiàn)在起始標(biāo)簽中。屬性以名稱/取值對出現(xiàn),屬性名不能重復(fù),名稱與取值之間用等號“=”分隔,并用引號(單引號、雙引號均可,建議用雙引號)把取值引起來。例如: 25000 上例中的屬性說明了薪水的貨幣單位是美元。 XML的語法 XML文檔的基本結(jié)構(gòu)由序言部分和一個根元素組成。序言包括了XML聲明和DT

15、D(或者是XML Schema),DTD(Document Type Definition,文檔類型定義)和XML Schema都是用來描述XML文檔結(jié)構(gòu)的,也就是描述元素和屬性是如何聯(lián)系在一起的。 例如,在例1的文檔前面加上如下的序言部分,就構(gòu)成了一個完整的XML文檔: 一個XML文檔中有且僅有一個根元素,其他所有的元素都是它的子元素,在例1中,就是根元素。 一個XML文檔首先應(yīng)當(dāng)是“格式良好的”(Well-Formed),該規(guī)定的正式定義位于: /TR/REC-xml ?!案袷搅己玫摹盭ML文檔除了要滿足根元素唯一的特性之外,還包括: 起始標(biāo)簽和結(jié)束標(biāo)簽應(yīng)當(dāng)

16、匹配:結(jié)束標(biāo)簽是必不可少的; 大小寫應(yīng)一致:XML對字母的大小寫是敏感的,和是完全不同的兩個標(biāo)簽,所以結(jié)束標(biāo)簽在匹配時一定要注意大小寫一致; 元素應(yīng)當(dāng)正確嵌套:子元素應(yīng)當(dāng)完全包括在父輩元素中,下面的例子就是嵌套錯誤: 正確的嵌套方式如下: 屬性必須包括在引號中; 元素中的屬性是不允許重復(fù)的。 XML文檔的“有效性”是指一個XML文檔應(yīng)當(dāng)遵守DTD文件或是Schema的規(guī)定,“有效的”XML文檔肯定是“格式良好的”,有關(guān)內(nèi)容我們會在以后詳細(xì)說明。 XML的名字空間(Namespace) XML文檔中很可能會定義許多名字相同而意義不同的元素或?qū)傩?,尤其在把不同的XML文檔合而為一時,更容易產(chǎn)生沖突

17、。名字空間就是為了解決這個問題而提出的。它用URI(Uniform Resource Indicator,統(tǒng)一資源指示器)加以區(qū)別,是在XML文件的元素和屬性中出現(xiàn)的所有名稱的集合。如下例: pr:payment xmlns:pr=“http:/www. Lars Peterson Reimburse expenses 199.76 有了名字空間,用戶就可以保證在文件中使用的名稱是唯一的。對元素的屬性xmlns進(jìn)行定義就表示對該元素指定了一個名字空間。namespace_name必須是一個有效的URI。 如果省略local_prefix(本地前綴),這時就構(gòu)成了缺省名字空間: payment

18、xmlns=“ 1234 500.00 12-03-2000 如果對一個元素定義了缺省名字空間,那么該元素及其子元素,包括它們的屬性都會自動地成為該名字空間的一部分,不用再在每一個元素和屬性前面一一標(biāo)明了。 在開始部分,我們對XML這個新興的技術(shù)做了一個概述,對它的優(yōu)缺點進(jìn)行了分析,并對其美好的應(yīng)用前景進(jìn)行了展望。在后半部分則對XML文檔的相關(guān)語法、格式做了簡要的描述,并介紹了幾種有用的開發(fā)工具。在以后的內(nèi)容中,我們會全面展開,深入到XML技術(shù)內(nèi)部,去探索一下這個美妙的世界! 如何顯示XML的數(shù)據(jù) XML文檔本身只描述數(shù)據(jù)內(nèi)容,它的顯示功能由樣式單來完成。利用樣式單技術(shù)時,輸出平臺不局限于顯示

19、器,可以是打印機(jī)、繪圖儀或者是多媒體播放器。使用獨立的樣式單文件指定顯示格式的一大優(yōu)勢在于:對同一份數(shù)據(jù)文件可以指定不同的樣式風(fēng)格,應(yīng)用在不同的場合,使數(shù)據(jù)能夠更合理、更有針對性地表現(xiàn)出來,提高了數(shù)據(jù)的重用性。 目前,W3C正式推薦的樣式單標(biāo)準(zhǔn)有兩種: 一種是層疊樣式單CSS(Cascading Style Sheets);另一種是可擴(kuò)展樣式單語言XSL。 CSS最初是用于指定HTML文檔顯示格式的,現(xiàn)在也可用來對XML文檔進(jìn)行簡單的樣式規(guī)劃。CSS在HTML中的應(yīng)用極為廣泛,但它在文本置換、依據(jù)文本內(nèi)容而決定顯示方式、對數(shù)據(jù)進(jìn)行排序等智能化的顯示功能上略顯不足。 而XSL則較好地解決了CSS

20、的這些問題,它最常用的功能是將XML的標(biāo)記轉(zhuǎn)換成為HTML的標(biāo)記并顯示輸出。而且XSL還可以將XML文檔向任何其他格式的結(jié)構(gòu)文檔進(jìn)行轉(zhuǎn)換。這種功能在B2B的商務(wù)模式中有著很好的應(yīng)用前景。 XSL利用模式匹配的方法,選擇XML文檔中需要處理的元素屬性,再針對這些特定的對象制定相應(yīng)的轉(zhuǎn)換規(guī)則。借助XSL,我們還可以添加新的元素屬性,對所有元素/屬性進(jìn)行重新排序、循環(huán)處理、條件判斷等程序化的控制,使其適應(yīng)各種復(fù)雜的需求。 在XML文檔中引用XSL的格式如下: 一個XML文檔只能引用一個XSL樣式單。XML解析器在處理XML文檔時,遇到處理指令后,會載入指定的XSL樣式單,然后根據(jù)其中的規(guī)則進(jìn)行相應(yīng)的

21、轉(zhuǎn)換處理。 綁定XML Web服務(wù)器與客戶機(jī)之間的數(shù)據(jù)傳遞方式有三種: HTML頁面、XML文檔以及XML數(shù)據(jù)島。其中,XML數(shù)據(jù)島通過特定的標(biāo)簽把XML數(shù)據(jù)直接嵌入到HTML文檔中。采用數(shù)據(jù)島作為交互手段,不僅可以使數(shù)據(jù)具備一定的語義信息,同時還能保持HTML原有的一些特色,如利用客戶端腳本程序?qū)崿F(xiàn)動態(tài)信息交換等。 XML數(shù)據(jù)島的實現(xiàn)方法是在HTML文檔中使用標(biāo)簽。代碼的嵌入方式有兩種: 直接嵌入(如例)和外部引用(如例)。 例: XML definitions 例: XML ID=“MyXMLData” SRC=“ 在插入數(shù)據(jù)島之后,就可以把XML中的元素同HTML元素鏈接在一起,利用HT

22、ML的表現(xiàn)手法顯示XML數(shù)據(jù),這種鏈接關(guān)系被稱為綁定(Binding)。綁定的方式按照HTML元素的性質(zhì)可以分為兩種:單值對象和表格對象。 單值對象的數(shù)據(jù)綁定需要在HTML元素中設(shè)置DATASRC屬性和DATAFLD屬性。DATASRC屬性是區(qū)分XML數(shù)據(jù)島對象的唯一標(biāo)識,并且必須加上前綴“#”;DATAFLD屬性則標(biāo)識了數(shù)據(jù)島中的元素對象。例3就是把一個HTML文本輸入框與元素進(jìn)行了綁定。 例: 至于表格對象,主要是與HTML中的標(biāo)簽綁定。一般地,可以借助DSO(Data Source Object,數(shù)據(jù)源對象)等ActiveX控件更方便、有效地處理表格數(shù)據(jù)。具體使用方法在以后的內(nèi)容中將做詳

23、細(xì)介紹。 訪問XML Document Object Model(文檔對象模型)簡稱為DOM,是對Web文檔進(jìn)行應(yīng)用開發(fā)、編程的應(yīng)用程序接口(API),是W3C公布的一種跨平臺的、與語言無關(guān)的接口規(guī)范。 DOM采用對象模型和一系列的接口來描述XML文檔的內(nèi)容和結(jié)構(gòu),即利用對象把文檔模型化。這種對象模型實現(xiàn)的基本功能包括: 描述文檔表示和操作的接口; 接口的行為和屬性; 接口之間的關(guān)系以及互操作。 DOM對結(jié)構(gòu)化的XML文檔進(jìn)行解析,文檔中的指令、元素、實體、屬性等所有個體都可以用對象模型表示。整個文檔的邏輯結(jié)構(gòu)類似一棵樹,生成的對象模型就是樹的節(jié)點,每個對象同時包含了方法和屬性。 利用DOM,

24、開發(fā)人員可以進(jìn)行動態(tài)地創(chuàng)建XML文檔、遍歷結(jié)構(gòu)、添加/修改/刪除內(nèi)容等操作。DOM面向?qū)ο蟮奶匦?,使人們在處理和XML解析相關(guān)的事務(wù)時節(jié)省大量精力,是一種符合代碼重用思想的強(qiáng)有力編程工具。 驗證XML XML文檔必須嚴(yán)格遵守語法規(guī)范,即都必須是“格式良好的”。同時,XML文檔還應(yīng)當(dāng)符合語義方面的規(guī)范,即是“有效的”。對XML文檔有效性的檢查稱為對XML的“驗證”(Validation)。 “格式良好的”是對XML文檔最基本的要求。凡是“格式良好的”XML文檔都可以被XML解析器解析,進(jìn)而生成對象樹,以便接受進(jìn)一步的處理。而且“有效的” XML必定是“格式良好的”。在此基礎(chǔ)上,還要遵守DTD或X

25、ML Schema的語法規(guī)定,只有這樣才能保證XML文檔的易讀性,同時還能充分地體現(xiàn)數(shù)據(jù)信息之間的關(guān)系,從而更好地描述數(shù)據(jù)。 DTD可以定義XML文檔的詞匯和語法。利用正則表達(dá)式,DTD除了可以說明XML文件中哪些元素是必需的、哪些是可選的、元素所能包含的屬性等元素本身信息外,還可以描繪元素之間的結(jié)構(gòu)信息。比如,某個元素可以嵌套哪些子元素、子元素的個數(shù)以及出現(xiàn)次序、是否可選等等。 典型的DTD格式如下: 以DOCTYPE聲明為起始標(biāo)志,告訴解析器以下內(nèi)容屬于DTD; 位于DOCTYPE后的DTD名稱,必須與XML文檔中的根元素完全一致,后面再跟著一個“”號,接下來才是DTD正文。 DTD有兩種

26、使用方式: 內(nèi)嵌式(如例)和引用式(如例)。它們在XML文檔中的位置都必須位于根元素出現(xiàn)之前。 例4(內(nèi)嵌式) XML data 例(引用式): XML data Employees.dtd是單獨定義的文檔。目前,DTD是W3C推薦的驗證XML文檔有效性的唯一正式規(guī)范,但它也有著許多不足: DTD過于復(fù)雜,要熟悉它的語法、標(biāo)記集合需要一定的時間和精力,而且DTD采用的是非XML語法規(guī)則,不能用XML工具進(jìn)行操作處理; DTD對數(shù)據(jù)類型定義支持不夠,所定義的數(shù)據(jù)類型有限,并且都是針對屬性而設(shè)立,無法滿足電子商務(wù)等Web應(yīng)用所需要的豐富數(shù)據(jù)類型; 擴(kuò)展機(jī)制復(fù)雜,也很脆弱,最大的弊病在于不能表達(dá)元素

27、之間的相互關(guān)系; DTD不支持名稱空間的機(jī)制。 以上種種缺陷,促使W3C組織致力于尋求一種新的機(jī)制來取代DTD。在眾多的標(biāo)準(zhǔn)之中, Microsoft公司為主提出的XML Schema較為引人注目。它具有完全符合XML語法、豐富的數(shù)據(jù)類型、良好的可擴(kuò)展性以及易被DOM等XML解析器處理等優(yōu)點。 最后介紹一個用于XML驗證的小工具:xmlvalidator.exe。它可以用來驗證XML文檔是“格式良好的”以及“有效的” u XML的顯示XSL樣式單(上)一、XML文檔轉(zhuǎn)換原理 數(shù)據(jù)格式轉(zhuǎn)換的重要思想是要把XML文檔視為一種樹結(jié)構(gòu),轉(zhuǎn)換的過程就是從源樹生成結(jié)果樹的過程。XSL樣式單定義了源樹和結(jié)果

28、樹中對應(yīng)部分的轉(zhuǎn)換規(guī)則,每條規(guī)則中包含了一個模板,并對應(yīng)著一種模式。模板定義了轉(zhuǎn)換的結(jié)果,而模式則規(guī)定了需要進(jìn)行轉(zhuǎn)換的元素或?qū)傩詫ο蟆?XML中引用XSL的語法格式如下: 如果在聲明部分引用了多個XSL樣式單,則只有第一個樣式單會生效,其余的都會被忽略掉。 XSL的格式轉(zhuǎn)換功能在復(fù)雜的電子商務(wù)解決方案中大有用武之地。比如,A公司和B公司都是生產(chǎn)機(jī)器零件的廠家,在貨物清單中都包含了產(chǎn)品序列號以及質(zhì)量等級評分。A公司的文件格式如下: 12980-235 200 而B公司的文件格式有所不同,相關(guān)信息都出現(xiàn)在元素的屬性中: 這樣,雖然兩個公司的產(chǎn)品完全一樣,但由于文檔格式的差異給雙方的貿(mào)易往來設(shè)置了障

29、礙。而使用XSL樣式單可以輕松地把A公司的文檔轉(zhuǎn)換成B公司的格式,反之亦然。 二、XML文檔轉(zhuǎn)換步驟 XML文檔的轉(zhuǎn)換過程分為兩步: 首先是根據(jù)XML文檔構(gòu)造源樹,然后根據(jù)XSL規(guī)則將源樹轉(zhuǎn)換為結(jié)果樹。目前,這種轉(zhuǎn)換協(xié)議已經(jīng)日趨完善,并從XSL中獨立出來,成為W3C正式推薦的標(biāo)準(zhǔn),稱為XSLT(XSL Transformations); 生成結(jié)果樹后,就可以對其進(jìn)行解釋,產(chǎn)生一種適合顯示、打印或是播放的格式,這一步稱為格式化(Formatting)。 XSL處理器負(fù)責(zé)實現(xiàn)轉(zhuǎn)換過程。首先,XML文檔被解析成DOM樹存放在內(nèi)存中,接著對文檔進(jìn)行分析,每一個DOM樹中的節(jié)點都會與一個模式相比較,當(dāng)二

30、者匹配時,就會按照模板中定義的規(guī)則進(jìn)行轉(zhuǎn)換,否則繼續(xù)往下匹配。如此循環(huán),直至整個文檔處理完畢。 三、XSL文檔標(biāo)準(zhǔn)格式 XSL文檔的標(biāo)準(zhǔn)格式如下: . XSL文檔本身是格式良好的XML文檔,所以在書寫時要注意標(biāo)簽的匹配問題。既是XSL的聲明語句,也是根元素,必須位于文件的首部。通常也要利用xmlns屬性指明XSL的名稱空間。樣式單中所有的模板規(guī)則都由標(biāo)簽標(biāo)明。模板規(guī)則可以說明處理的對象(元素/屬性)、處理的方式或是轉(zhuǎn)換的結(jié)果。此時,我們可以把該標(biāo)簽類似地理解為編程語言中函數(shù)的概念。 四、XSL的語法結(jié)構(gòu) XSL的邏輯語法結(jié)構(gòu)包括循環(huán)和條件判斷。這兩種結(jié)構(gòu)使用戶能夠靈活地書寫轉(zhuǎn)換規(guī)則。循環(huán)判斷是

31、通過元素實現(xiàn)的,它的可選屬性包括select和order-by。循環(huán)結(jié)構(gòu)能夠遍歷整個結(jié)果集合,而不必針對每一條結(jié)果都單獨書寫轉(zhuǎn)換規(guī)則。它的標(biāo)準(zhǔn)語法格式為: . 條件判斷結(jié)構(gòu)分為if語句和Case語句兩種形式。if語句是簡單地對條件進(jìn)行判斷,結(jié)果為真就執(zhí)行條件內(nèi)部的規(guī)則,因此可以把if條件與簡單的布爾表達(dá)式聯(lián)合使用。下面這個例子就是對薪水超過100萬元的職員輸出“Overpaid employee”信息: Overpaid employee Case語句是對多種情況的分支判斷。該語句包括、和三個元素。下面的例子是對薪水不足1萬元的職員輸出“No tax”,對超過5萬元的職員輸出“High tax

32、 rate”,對介于其間的職員輸出“Normal tax rate”信息: No tax High tax rate Normal tax rate 五、XSL的模板規(guī)則 標(biāo)簽內(nèi)的文本內(nèi)容描述了轉(zhuǎn)換結(jié)果的形式,稱為輸出模板。屬性match的取值把模板規(guī)則與指定的元素或?qū)傩韵啾容^,只有匹配的DOM節(jié)點才會被處理,其余的節(jié)點將被忽略。整個過程中最先匹配的是樹的根節(jié)點,根節(jié)點用“/”表示: output template for root element 然后匹配其他節(jié)點,此時,只要在引號中指明要處理的元素對象名稱即可。如果在引號中出現(xiàn)的是“*”,那么表示該規(guī)則適用于所有的未單獨指定處理的元素節(jié)點。

33、比如下例中的第二個模板就表示要處理除元素之外的所有節(jié)點: output template output template 此外,XSL中還可以使用路徑指示符來指定一些特殊位置的元素與模板相匹配?!?”代表任意深度位置,如用來匹配文檔中任何位置的元素;而如果是,則表明是匹配元素的后繼節(jié)點中所有元素。另外一個路徑指示符是“/”,表示直接的父子節(jié)點關(guān)系。將剛才例子中的“/”換為“/”,就意味著匹配的是元素子節(jié)點中的元素。 很顯然,某些樹節(jié)點在XSL中可能會對應(yīng)多個模板,在這種情況下,只有最后一個對應(yīng)模板會生效,前面的模板規(guī)則都會被XSL處理器忽略掉。 u XML的顯示XSL樣式單(下)一、XSL模板

34、的使用 XSL在輸出模板中描述輸出格式,這些格式可以是各種字符串、標(biāo)簽符號、節(jié)點值或者是一些XSL語法結(jié)構(gòu),如條件判斷、循環(huán)處理等。在許多應(yīng)用場合中,輸出模板中需要使用節(jié)點的取值,此時可以根據(jù)需要使用元素輸出節(jié)點值,最直接的使用方式是,這樣可以輸出當(dāng)前節(jié)點及其所有后繼節(jié)點的取值。而如果僅僅是想輸出指定節(jié)點的取值,可以利用select屬性進(jìn)行限定(select屬性可以是任意合法的路徑表達(dá)式): 上述第一個表達(dá)式匹配的對象是當(dāng)前節(jié)點的所有子節(jié)點中名稱為的元素,第二個表達(dá)式匹配的對象則是當(dāng)前節(jié)點中所有后繼節(jié)點中名為的元素。注意: 在XSL樣式單中必須有一個模板規(guī)則與根元素相匹配。 在確定了模板規(guī)則與

35、元素相匹配之后,就可以激活模板,這項任務(wù)由元素完成。它和元素相結(jié)合就如同編程中的函數(shù)調(diào)用:前者是調(diào)用指令,而后者就是函數(shù)體。對于不同的元素需要調(diào)用不同的模板進(jìn)行處理。為了激活樣式單中的模板規(guī)則,要在根元素模板規(guī)則中使用元素,這樣就會層層作用使整個樣式單文件生效: 直接使用元素表示不加區(qū)分地對當(dāng)前節(jié)點的所有子節(jié)點應(yīng)用模板,而在select屬性中書寫匹配式則能夠限定作用對象: 上述第一個模板與XML文檔的根元素相匹配,并對根節(jié)點以下的所有元素應(yīng)用模板規(guī)則。然后,一旦遇到標(biāo)簽,就插入一個標(biāo)簽作為空白段落,接著對元素和元素分別應(yīng)用模板規(guī)則。最后,經(jīng)過轉(zhuǎn)換顯示的結(jié)果是36磅字體的職員名字和用斜體字表示的

36、職員薪水。 二、XSL的擴(kuò)展規(guī)則 1. 路徑指示符 除了前面介紹的“/”和“/”路徑指示符,以及統(tǒng)配符“*”,還有幾個符號可以用來對模板的匹配對象進(jìn)行限制: 當(dāng)前節(jié)點指示符為“.”; 父節(jié)點指示符為“.”; 屬性指示符為“”。 上述“”表示對指定元素中的某個屬性進(jìn)行匹配,如語句表示對元素中的屬性應(yīng)用模板規(guī)則。 2. 過濾匹配符 除了路徑指示符之外,還可以對作用對象進(jìn)行條件過濾或是排序,以進(jìn)一步調(diào)整應(yīng)用效果。過濾時,一般是以子元素(或?qū)傩裕┦欠翊嬖冢ɑ蚱淙≈担闃?biāo)準(zhǔn): 子元素存在:即/EmployeeSalary存在,選擇含有子元素的所有元素; 子元素取值:即EmployeeSalary 250

37、00,選擇含有子元素,且Salary取值大于25000的所有元素; 屬性存在: EmployeeID,選擇含有屬性的元素; 屬性取值: 即EmployeeID =“1234”,選擇所有屬性ID值為1234的元素。 3. 其他擴(kuò)展過濾 其他的一些附加功能的過濾符,按功能分為:比較操作符、布爾操作符和集合索引。 比較操作符的書寫格式和功能如下所示: 操作符 功能 $eq$ 等于 $ne$ 不等 $lt$ 小于 $le$ 小于或等于 $gt$ 大于 $ge$ 大于或等于 需要說明的是:表格中的操作符在比較字符時對大小寫是敏感的,如果要忽略大小寫的不同含義,在每個操作符前面加上前綴字母“i”即可,如“

38、$ieq”。 布爾操作符書寫格式和功能說明如下: 操作符 功能 $and$ 邏輯與 $or$ 邏輯或 $not$ 取非 對過濾的結(jié)果可以通過集合索引進(jìn)行再過濾。例如,EmployeeSalary2就是選擇第2個含有子元素的所有元素。此外,XSL還提供了集合索引函數(shù)供用戶使用:index方法表示過濾結(jié)果的索引號,end方法表示最后一個過濾結(jié)果。使用方法如下所示: Employeeindex() $lt$ 2 Employeeend() 上述第一個表達(dá)式的選擇結(jié)果是元素的第1和第2個子元素, 第二個表達(dá)式的選擇結(jié)果是元素的最后一個子元素。在缺省狀態(tài)下,模板規(guī)則對元素的匹配順序是按照節(jié)點在XML文檔

39、中出現(xiàn)的前后次序排定的。但在特定的應(yīng)用場合中,可能需要對原有的順序進(jìn)行調(diào)整,此時需要使用order-by屬性。使用方法如下所示: 上述第一個例子表示應(yīng)按姓名的字母升序排列,比如“Bob”應(yīng)當(dāng)排在“Tom”之前,而第二個例子則表示按照薪水的多少對職員進(jìn)行排序。 u XML與HTML的結(jié)合(上)、XML的局限性 目前,許多Web網(wǎng)站的內(nèi)容數(shù)據(jù)都存放在數(shù)據(jù)庫或數(shù)據(jù)文件中。對于Web程序開發(fā)人員來說,如果要想把有用的信息從數(shù)據(jù)庫中提取出來,傳統(tǒng)的方法是在服務(wù)器端編寫腳本程序(如VBScript、JavaScript、CGI、ASP、Perl等等),通過對數(shù)據(jù)庫執(zhí)行SQL查詢得到相關(guān)記錄,然后把查詢結(jié)果

40、組織成HTML頁面返回給客戶端,用戶使用瀏覽器觀察最終結(jié)果。 為了提高系統(tǒng)服務(wù)的靈活性、可擴(kuò)展性,使服務(wù)對象范圍更廣,許多商業(yè)網(wǎng)站都盡可能地把商務(wù)規(guī)則、原始數(shù)據(jù)和表現(xiàn)形式當(dāng)做相互獨立的服務(wù)分別提供。HTML那種蘊(yùn)數(shù)據(jù)于顯示之中的方式顯然不合乎這種需求。因此,把原始數(shù)據(jù)存放在XML文檔中,使用樣式單文件顯示內(nèi)容是XML技術(shù)適合于電子商務(wù)的優(yōu)勢所在。但從本質(zhì)上來說,XSL技術(shù)不是面向數(shù)據(jù)顯示的,它是一種格式轉(zhuǎn)換技術(shù),在顯示手段和方式上都遠(yuǎn)不及HTML那樣豐富。對編程人員來說,一種較為理想的方案是把HTML和XML兩種技術(shù)相結(jié)合,優(yōu)勢互補(bǔ),使真正的原始數(shù)據(jù)在能夠保持本來意義和結(jié)構(gòu)的同時,還能充分利用

41、HTML那千變?nèi)f化的顯示技巧。XML數(shù)據(jù)島就是這種技術(shù)融合的產(chǎn)物,它使用標(biāo)簽把XML數(shù)據(jù)直接嵌入到HTML頁面中,從而實現(xiàn)了二者的優(yōu)勢互補(bǔ)。 、IE中數(shù)據(jù)島的處理方式 為了能夠處理這種內(nèi)嵌XML代碼的HTML頁面,Internet Explorer 4.0(以下簡稱IE 4.0)引入了DSO(Data Source Objects,數(shù)據(jù)源對象)技術(shù),用Java Applet實現(xiàn)。 例如: 上述例子中,CODE屬性指明了DSO Java小程序,MAYSCRIPT屬性保證用戶端腳本能夠處理數(shù)據(jù)對象,PARAM標(biāo)簽指明了XML文檔的位置。 使用Java的局限性在于只能在HTML文檔中說明XML的UR

42、L地址,而不能直接將XML標(biāo)簽嵌入其中,這就和真正的數(shù)據(jù)島方案還有一定的差距。微軟在Internet Explorer 5.0(以下簡稱IE 5.0)中對DSO技術(shù)進(jìn)行了擴(kuò)展,突破了以往的限制,使HTML和XML真正地融合到了一起。HTML頁面中支持直接使用標(biāo)簽。 例如: some XML 只要保證每個數(shù)據(jù)島的ID都是唯一的,就可以在頁面中的任何必要的地方嵌入數(shù)據(jù)島,并且這些DSO彼此都是相互獨立的。 除了上面例子中的這種直接嵌入方式,還可以使用外部引用方式鏈接數(shù)據(jù)島。 例如: 這樣,只有當(dāng)公司的客戶對象繼續(xù)使用IE 4.0,并且為了解決這部分客戶的兼容性問題時,Java Applet才是編程人員要考慮的選擇方案。 在IE 5.0所實現(xiàn)的DSO技術(shù)中,如果數(shù)據(jù)是通過SQL語言對數(shù)據(jù)庫進(jìn)行查詢得到的結(jié)果,那么就把它們存放在ADO(ActiveX Data Objects)記錄集中。服務(wù)器把這種ActiveX控件(通常是ADO記錄集)發(fā)送到客戶端,由客戶端腳本程序做進(jìn)一步的處理。實際上,IE 5.0就是把XML數(shù)據(jù)島作為一種特殊的ADO記錄集進(jìn)行處理的。 、XML的數(shù)據(jù)綁定 (1)ADO記錄集的映射 XM

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論