




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、below摘 要本文研究了xml解析技術(shù),介紹了sax,dom,和vtd-xml技術(shù)以及一種基于xml的數(shù)據(jù)通信模型。文中首先對(duì)xml產(chǎn)生背景和未來(lái)的發(fā)展趨勢(shì)進(jìn)行了介紹,分析了xml文檔數(shù)據(jù)解析的必要性以及快速解析理論。在第二章中具體講解了在xml文檔中的語(yǔ)法和相應(yīng)的格式和標(biāo)準(zhǔn)。第三章中詳細(xì)介紹了xml解析方式dom和sax,并對(duì)兩種方式進(jìn)行了性能的比較,并在最后介紹了vtd-xml解析技術(shù)。在分析了現(xiàn)有解析方式優(yōu)劣的基礎(chǔ)上,第四章重點(diǎn)討論了xml在監(jiān)控系統(tǒng)的數(shù)據(jù)通信模型中的設(shè)計(jì)與實(shí)現(xiàn)。關(guān)鍵詞:xml解析;dom;sax;虛擬令牌環(huán);數(shù)據(jù)通信模型abstractthis thesis stud
2、ies a parsing technology of extensible markup language,introduces sax,dom,vtd-xml and an communicationing model that based on xml technology.in the first part of the thesis,the developed background and developing trend of xml are introduced,the necessity of xmldocument parsing and fast parsing theor
3、y are also analyzed.the grammar and formsrelated to xml document are discussed in chapter two.the third part introduces thepresent parsing methods dom and sax and makes comparison of their performances,and introduces the vtd-xml parsing technology.on the basis of the first three chapters,chapter fou
4、r discusses the design and implement of xml technology in data communicationing model.keywords: xml parsing;dom;sax;vtd;data communicationing model目 錄i目 錄第一章 緒論31.1論文研究背景31.2論文研究?jī)?nèi)容及結(jié)構(gòu)3第二章 可擴(kuò)展標(biāo)記語(yǔ)言32.1xml技術(shù)的產(chǎn)生32.2xml文檔語(yǔ)法基礎(chǔ)32.2.1文檔說(shuō)明32.2.2標(biāo)記32.2.3實(shí)體引用32.2.4注釋32.2.5處理指令32.2.6cdata段32.3xml相關(guān)技術(shù)和標(biāo)準(zhǔn)32.3.1dt
5、d和模式32.3.2名域32.3.3xlink32.3.4xsl32.4本章小結(jié)3第三章 xml解析技術(shù)基礎(chǔ)33.1解析原理33.2xml解析器工作模式33.3文檔對(duì)象模型33.3.1dom結(jié)構(gòu)33.3.2dom的優(yōu)缺點(diǎn)33.4基于事件的簡(jiǎn)單應(yīng)用編程接口(sax)33.4.1sax結(jié)構(gòu)33.4.2sax的優(yōu)缺點(diǎn)33.5基于虛擬令牌環(huán)的xml解析技術(shù)33.5.1vtd-xml概述33.5.2vtd-xml原理結(jié)構(gòu)33.5.3vtd-xml優(yōu)點(diǎn)33.6本章小結(jié)3第四章 一種基于xml的數(shù)據(jù)通信模型的設(shè)計(jì)與實(shí)現(xiàn)34.1監(jiān)控系統(tǒng)的數(shù)據(jù)通信34.2系統(tǒng)模型的建立34.3系統(tǒng)實(shí)現(xiàn)34.3.1網(wǎng)絡(luò)文件傳輸3
6、4.3.2xml文件封裝協(xié)議34.3.3xml文件控制34.4本章小結(jié)3第五章 總結(jié)與展望3致謝3參考文獻(xiàn)3above3第一章 緒論1996年,w3c組織開(kāi)始設(shè)計(jì)一種web數(shù)據(jù)存儲(chǔ)和交換的標(biāo)準(zhǔn),這就是xml(extensible markuplanguage,可擴(kuò)展標(biāo)記語(yǔ)言),它使得現(xiàn)有的因特網(wǎng)協(xié)議和軟件更為協(xié)調(diào),從而簡(jiǎn)化了對(duì)數(shù)據(jù)的處理和傳輸。xml所擁有的可擴(kuò)展性、自描述性、自相容性以及跨文種等優(yōu)點(diǎn),使得它非常適于web上的數(shù)據(jù)交換與信息發(fā)布,被廣泛應(yīng)用到電子商務(wù)、電子政務(wù)、web服務(wù)等許多領(lǐng)域。目前很多國(guó)際著名的公司已完全加入到xml支持者的行列,如微軟ie6.0已廣泛使用了xml,net
7、scape新版本也將會(huì)支持xml,其它公司,包括ibm,adobe,sun和xerox等也宣布支持xml,并都在著手相關(guān)產(chǎn)品的研制。相對(duì)于html的“所見(jiàn)即所得”,xml將數(shù)據(jù)和顯示信息分離,被稱為“文檔數(shù)據(jù)庫(kù)”,這就使xml文檔很適合于描述數(shù)據(jù)庫(kù)中的數(shù)據(jù)。而其它非標(biāo)準(zhǔn)化、非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)換為xml文檔后,就可以將大量遺留數(shù)據(jù)實(shí)現(xiàn)信息共享和交換。xml解析技術(shù)是操作xml文檔的重要環(huán)節(jié),它在實(shí)現(xiàn)把非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為xml數(shù)據(jù)的過(guò)程中,起著重要的作用1 逯鵬.xml文檔解析技術(shù)及其應(yīng)用.鄭州工業(yè)大學(xué)學(xué)報(bào).2002年第23卷第4期.。1.1 論文研究背景xml(extensible markup
8、language)可擴(kuò)展標(biāo)記性語(yǔ)言,是w3c組織認(rèn)可的文檔數(shù)據(jù)格式標(biāo)準(zhǔn),是sgml(standard generalized markup language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)的子集,保留了sgml主要的使用功能,同時(shí)大大縮減了sgml的復(fù)雜性。它獨(dú)立于任何語(yǔ)言和體系結(jié)構(gòu),是公認(rèn)的下一代網(wǎng)絡(luò)標(biāo)記語(yǔ)言。由于xml文檔能應(yīng)用在不同平臺(tái)上,實(shí)現(xiàn)數(shù)據(jù)的協(xié)同工作,它現(xiàn)在已成為不可缺少的企業(yè)技術(shù)的一部分。比如,xml增加了在商場(chǎng)中的電子商務(wù)和交流溝通,以及公司內(nèi)部多樣數(shù)據(jù)的綜合。xml的使用因此而快速增長(zhǎng),分析家ron schmelzer預(yù)測(cè),到2006年,xml將由2003年網(wǎng)絡(luò)流量的3%上漲至24%,
9、并且到2008年將至少上漲至40%。然而,對(duì)不斷增長(zhǎng)的xml文檔的執(zhí)行引起了一個(gè)關(guān)鍵的問(wèn)題:由于文檔中每個(gè)元素都包含了相當(dāng)大的元數(shù)據(jù),所以xml文檔就包含了大量的數(shù)據(jù)。這便造成了程序處理的低效,并且給公司網(wǎng)絡(luò)、處理器和存儲(chǔ)結(jié)構(gòu)都帶來(lái)了很大的負(fù)載壓力,這就導(dǎo)致了xml的兩個(gè)關(guān)鍵問(wèn)題:冗長(zhǎng)和性能。1. 冗長(zhǎng):以xml格式儲(chǔ)存的數(shù)據(jù)要比以其他數(shù)據(jù)庫(kù)格式儲(chǔ)存占有的空間要大的多。2. 性能:由于xml固有的冗余特性,對(duì)xml數(shù)據(jù)的管理將增大應(yīng)用服務(wù)器的負(fù)擔(dān)。1.2 論文研究?jī)?nèi)容及結(jié)構(gòu)應(yīng)用xml文檔主要有三個(gè)技術(shù)環(huán)節(jié),包括對(duì)xml文檔的編輯、xml文檔的解析和顯示或使用xml文檔的數(shù)據(jù)。xml文檔的編輯目
10、前有兩種方式:一種是使用通用的編輯器生成xml文檔,如notepad;另一種是使用xml ide(集成開(kāi)發(fā)環(huán)境),如xmlspy等工具。也可以針對(duì)具體應(yīng)用開(kāi)發(fā)某種專用的可視化xml編輯器。xml文檔解析的主要任務(wù)是檢查編輯的xml文檔是否是結(jié)構(gòu)完整(well-formed)和合法的(validate)。如果xml解析器發(fā)現(xiàn)xml文檔中的數(shù)據(jù)或者結(jié)構(gòu)不完整,就會(huì)向應(yīng)用程序報(bào)告一個(gè)“致命”錯(cuò)誤,而且不再會(huì)以正常的方式向應(yīng)用程序傳遞數(shù)據(jù)或xml結(jié)構(gòu)。xml的解析技術(shù)在xml文檔的應(yīng)用過(guò)程中有著重要的作用,它的行為減少了應(yīng)用程序處理xml數(shù)據(jù)的負(fù)擔(dān),為應(yīng)用程序和數(shù)據(jù)庫(kù)提供了可操作的數(shù)據(jù)。換句話說(shuō),xm
11、l解析器是xml文檔應(yīng)用的基礎(chǔ)。本文章節(jié)安排如下:第一章對(duì)xml的發(fā)展、xml解析技術(shù)的分類和本文研究背景進(jìn)行了簡(jiǎn)要介紹。第二章介紹了xml文檔的特點(diǎn)和xml語(yǔ)法基礎(chǔ)以及相關(guān)技術(shù)和標(biāo)準(zhǔn),對(duì)全文的進(jìn)一步研究作了基礎(chǔ)性的鋪墊。第三章首先說(shuō)明了xml解析的必要性以及解析原理,并詳細(xì)講解了基于對(duì)象的解析方式(dom)和基于事件的解析方式(sax)。在此基礎(chǔ)上,進(jìn)一步比較了兩者的優(yōu)缺點(diǎn),分析了它們不能夠進(jìn)行普遍應(yīng)用的原因。然后介紹了vtd-xml解析結(jié)構(gòu)的原理。第四章在前三張的地主之上,重點(diǎn)研究了一種基于xml數(shù)據(jù)通信模型的設(shè)計(jì)與實(shí)現(xiàn)。第五章是本論文的結(jié)束部分,對(duì)全文做統(tǒng)一總結(jié),并簡(jiǎn)要概括了本文未詳細(xì)討
12、論的如何使vtd記錄具有唯一性的內(nèi)容。最后是致謝、參考文獻(xiàn)。below37第二章 可擴(kuò)展標(biāo)記語(yǔ)言2.1 xml技術(shù)的產(chǎn)生上個(gè)世紀(jì)的80年代,sgml(standard generalized markup language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)作為文檔說(shuō)明工具而被世人所知,并成為國(guó)際標(biāo)準(zhǔn)組織(iso)的一項(xiàng)國(guó)際標(biāo)準(zhǔn),即iso8879。不過(guò),由于sgml過(guò)于詳細(xì)和復(fù)雜,所以一直沒(méi)有在全球范圍內(nèi)被廣泛地采用。而從sgml衍生出來(lái)的html(hyper text markuplanguage,超文本標(biāo)記語(yǔ)言),憑借其簡(jiǎn)潔性使得每個(gè)人都可能創(chuàng)建web頁(yè)面并將它們推向外部世界,從而迅速成為在網(wǎng)上制作頁(yè)面的
13、標(biāo)準(zhǔn)語(yǔ)言格式2 norman walsh.a technical introduction to xml.。但是,隨著web的應(yīng)用越來(lái)越廣泛和深入,人們漸漸發(fā)現(xiàn)html的不一致和不可擴(kuò)展等缺陷嚴(yán)重阻礙了它的進(jìn)一步發(fā)展。盡管html推出了一個(gè)又一個(gè)新版本,卻始終滿足不了不斷增長(zhǎng)的需求。1996年11月,在波士頓sgml世界年會(huì)上,internet homepage的撰寫(xiě)標(biāo)準(zhǔn)html被宣告終結(jié),取而代之的是另一個(gè)電子文件格式化通用標(biāo)準(zhǔn)xml(extensible markup language,可擴(kuò)展標(biāo)記語(yǔ)言)。xml是一個(gè)更具彈性、更容易添加新功能而又具有統(tǒng)一標(biāo)準(zhǔn)的語(yǔ)言格式,它的目標(biāo)是以目前用h
14、tml尚不可能的方法在web上服務(wù)、接受和處理sgml。與用來(lái)定義某一類文件格式的html等傳統(tǒng)標(biāo)記語(yǔ)言不同,xml本身不是一個(gè)單一的標(biāo)記語(yǔ)言,而是一種元語(yǔ)言(meta-language),可以用來(lái)創(chuàng)造類別文件的格式定義,也就是在xml之中創(chuàng)造出很多不同的新標(biāo)記語(yǔ)言,用來(lái)定義不同的文件類別。2.2 xml文檔語(yǔ)法基礎(chǔ)xml解析器讀取兩類xml文檔:良構(gòu)文檔和有效文檔。良構(gòu)文檔語(yǔ)法上正確,滿足xml規(guī)范描述的生成規(guī)則,但不一定符合某個(gè)dtd。有效文檔則已經(jīng)針對(duì)某個(gè)dtd驗(yàn)證過(guò)了。xml文檔由兩個(gè)或多個(gè)主文檔實(shí)體組成:文檔首部、文檔實(shí)例以及可能擁有的任何處理指令。文檔首部就像一個(gè)引導(dǎo)記號(hào),給處理器
15、提供關(guān)于如何處理文檔主體(即文檔實(shí)例)的指示。處理指令可任意出現(xiàn)在文檔首部或文檔實(shí)例中。它們用于在xml分析器外給另一個(gè)處理應(yīng)用發(fā)送指示。xml文檔的基本語(yǔ)法由w3c創(chuàng)建的一個(gè)文檔所定義的一組規(guī)則所規(guī)定。在深入了解xml文檔結(jié)構(gòu)之前,先需要了解以下幾條基本語(yǔ)法規(guī)則3 陸新年,陸新宇等.xml揭秘入門(mén).應(yīng)用.精通.北京:清華大學(xué)出版社.2001.6: xml區(qū)分大小寫(xiě),元素的起始標(biāo)注必須正好匹配結(jié)束標(biāo)注。 所有起始標(biāo)注必須有結(jié)束標(biāo)注,即所有xml文檔都必須包含一個(gè)根元素,這個(gè)根元素是包含了文檔所有內(nèi)容的最外層元素。 元素必須正確的嵌套。文檔中元素不是孤立的(除非只有一個(gè)元素根元素),所有元素都必
16、須包含在以根元素開(kāi)始的元素層次中。 xml用五種預(yù)定義實(shí)體“<;”、“>;”、“&;”、“&apos;”和“";”來(lái)分別代替“”、“&”、“”和“”字符。 xml說(shuō)明優(yōu)先,即如果使用一個(gè)xml說(shuō)明,它必須最先出現(xiàn)。為了更好地理解xml語(yǔ)法的主要組成部分,圖2.1包含一個(gè)用來(lái)保存聯(lián)系信息的xml地址簿。下面用該例子來(lái)具體講解不同xml語(yǔ)法組成部分的作用。 frank rizzo 12 12 w street new york new york 10011 212-555-1212212-555-1213 frizzo frank's ratchet service
17、 圖2.1 xml地址簿文件2.2.1 文檔說(shuō)明所有的xml文檔都以首部開(kāi)始,即使首部中沒(méi)有任何內(nèi)容。文檔首部由出現(xiàn)次序固定的幾個(gè)部分組成,下面按順序列出4 heather williamson.xml技術(shù)大全.北京機(jī)械工業(yè)出版社.2002:l xml說(shuō)明文檔示例的第一句就是該文檔的xml說(shuō)明,它是xml文檔中最先出現(xiàn)的東西,由一個(gè)左尖括號(hào)、后跟一個(gè)問(wèn)號(hào)(沒(méi)有空格)、再跟三個(gè)字符xml組成。該說(shuō)明有三個(gè)組成部分: version=“1.0”是版本說(shuō)明,表示該文檔遵循xml1.0規(guī)范; encoding=“utf-8”是編碼說(shuō)明,表示采用utf-8作為編碼方式; standalone=“yes”
18、是獨(dú)立說(shuō)明,指出該文檔在一個(gè)文件里完成,不需要從外部導(dǎo)入文件。l 各種語(yǔ)句各種語(yǔ)句可能包括注釋,它們是描述文檔目的的記號(hào)。在圖2.1的文檔示例中,就是注釋。注釋可以出現(xiàn)在首部或文檔實(shí)例中,總是以“”字符結(jié)束。注釋是調(diào)試代碼的好方法,它不是為機(jī)器準(zhǔn)備的,而是供人閱讀的,因此分析器總是不理會(huì)“”中間的一切。此外,注釋不能嵌套在定義一個(gè)元素名的標(biāo)注內(nèi),且注釋中不能再包含注釋。l 文件類型說(shuō)明文件類型聲明在xml中用來(lái)在文件中詳細(xì)地說(shuō)明文件信息,其中包括文件根元素和文件類型定義(document type definition,dtd)5 elliotte rusty harold.xml使用大全.中
19、國(guó)水利出版社.2002。文件的文件類型聲明對(duì)于確定一個(gè)文件是否有效或是否僅僅是結(jié)構(gòu)良好的來(lái)說(shuō)是非常重要的。文件類型聲明有如下三個(gè)主要作用: 指定文件的根元素。 為文件定義元素、屬性和實(shí)體的細(xì)節(jié)(內(nèi)部dtd)。 指出文件的外部dtd。如果dtd完全嵌套在文檔中,那么它的說(shuō)明語(yǔ)句也在該文檔中,這叫做嵌套文檔類型說(shuō)明。如果鏈接dtd,那么說(shuō)明包括指示xml分析器到哪去尋找該dtd的鏈接信息,這叫做鏈接文檔類型說(shuō)明。地址簿文件的例子說(shuō)明了文件類型聲明的這些功能是怎樣實(shí)現(xiàn)的。在該例子中使用了下面的文件類型聲明:在文件類型聲明中明確地指定了文件的根元素是addressbook元素,文件的外部dtdaddr
20、essbook.dtd在文件的類型聲明中也被明確地引用。xml解析器使用這些dtd來(lái)驗(yàn)證文件是否有效。2.2.2 標(biāo)記標(biāo)記(tag)是xml語(yǔ)法中最顯而易見(jiàn)的組成部分,它被用來(lái)描述元素。在地址簿的例子中,元素city是由標(biāo)記和構(gòu)成的。為了便于理解,可以將“元素”這個(gè)主語(yǔ)理解為邏輯上的標(biāo)記片段,而“標(biāo)記”是指用來(lái)在xml文件中表示元素的文本字符串。xml元素可以是空的,這意味著元素可以不含有任何解析的字符數(shù)據(jù)。在html中的元素br就是一個(gè)空元素,因?yàn)樗缓腥魏巫址麛?shù)據(jù)。然而xml語(yǔ)法不允許在傳統(tǒng)的html風(fēng)格下使用標(biāo)記來(lái)使用元素br。xml中空元素的標(biāo)記必須在元素名之后用一個(gè)斜杠(/)用來(lái)指
21、出它是空的。因此,標(biāo)記在xml中的用法就變成了。html中空元素的語(yǔ)法來(lái)自結(jié)束標(biāo)記的格式。比如,html中元素head被編為一對(duì)標(biāo)記和。第二個(gè)標(biāo)記中的斜杠指出它是這對(duì)標(biāo)記中的結(jié)束標(biāo)記。空元素使用相同的方法來(lái)說(shuō)明沒(méi)有相應(yīng)的結(jié)束標(biāo)記。然而,仍然可以以“起始標(biāo)記/結(jié)束標(biāo)記”的形式來(lái)表示空元素。比如,可以使用來(lái)表示標(biāo)記,在xml語(yǔ)法中,這也是合法的。2.2.3 實(shí)體引用實(shí)體是構(gòu)成xml文件的基本單位,而這就是實(shí)體本身以及通常通過(guò)實(shí)體引用構(gòu)成的其它實(shí)體。實(shí)體引用在xml中被用來(lái)為數(shù)據(jù)篇幅與別名。實(shí)質(zhì)上,實(shí)體引用還是xml片段的唯一名稱。比如,地址簿文件通過(guò)實(shí)體引用來(lái)使用單引號(hào)()與和號(hào)(&)作為解析字符
22、數(shù)據(jù):frank's ratchet service實(shí)體引用在和號(hào)和分號(hào)之間。在該例中,'是作為單引號(hào)與和號(hào)的別名的實(shí)體引用。通常,xml解析可能會(huì)根據(jù)這些字符在xml中不同的結(jié)構(gòu)作用來(lái)解析這些字符。然而,通過(guò)實(shí)體引用,可以直接使用它們而不需考慮xml解析器的存在及帶來(lái)的問(wèn)題。2.2.4 注釋在xml文件中,注釋用來(lái)表示那些技術(shù)上不是文件內(nèi)容的信息。與編程語(yǔ)言中的注釋一樣,xml注釋被用來(lái)提供文件數(shù)據(jù)的說(shuō)明,這完全是為了用戶了解程序。換句話說(shuō),xml解析器和應(yīng)用程序通常會(huì)忽略注釋。技術(shù)上,解析器將注釋返回給應(yīng)用程序是有可能的,這對(duì)開(kāi)發(fā)支持注釋的xml應(yīng)用很有好處。注釋可以被
23、用在xml文件有解析字符數(shù)據(jù)出現(xiàn)的任何地方。為解析字符數(shù)據(jù)(cdata)片斷是這一規(guī)則的唯一例外。注釋可以出現(xiàn)在cdata片段,但他們并不作為注釋來(lái)處理。注釋以結(jié)束。對(duì)注釋的唯一限制就是在注釋中不能包含兩個(gè)連續(xù)的連字符。因?yàn)檫@會(huì)和xml的注釋語(yǔ)法發(fā)生沖突。在該例子中,下面的注釋被用來(lái)描述地址簿中特定的聯(lián)系人。這個(gè)注釋中包含的信息不被當(dāng)作是xml文件數(shù)據(jù)的一部分。2.2.5 處理指令xml語(yǔ)法不僅僅涉及了字符數(shù)據(jù)和標(biāo)記,其中還包含了處理指令。處理指令是一些用來(lái)由處理xml文件的應(yīng)用程序使用的特殊指令。xml解析器并不處理處理指令,相反,它將處理指令返回給應(yīng)用程序。處理指令通常以小問(wèn)號(hào)和問(wèn)號(hào)()結(jié)
24、束。最明顯的一個(gè)處理指令的例子就是眾所周知的xml處理指令,在地址簿的例子中是:這個(gè)處理指令指出了這個(gè)文件是基于xml版本1.0的。xml處理指令中的version屬性使得xml可以持續(xù)發(fā)展而不會(huì)由于存在不同的版本而產(chǎn)生問(wèn)題。這還使應(yīng)用程序在試圖處理一個(gè)不支持版本的文件時(shí),可以提示給用戶。2.2.6 cdata段未解析字符數(shù)據(jù)片段,也就是cdata片段,被用來(lái)在xml文件中將那些不需要xml解析器處理的內(nèi)容分開(kāi)。具體地說(shuō),xml文件的cdata片段包含的是不需要作為xml字符數(shù)據(jù)解析的內(nèi)容。通過(guò)將cdata片段之間來(lái)定義。下面是一個(gè)cdata片段的例子:!cdatajack tors1816
25、n streetnew yorknew york在該例子中,元素name和元素address不被當(dāng)作xml標(biāo)記,而其中的數(shù)據(jù)也不能被當(dāng)作解析的字符數(shù)據(jù),因?yàn)檫@些標(biāo)記被放在cdata片段中。為了使文件中的內(nèi)容被當(dāng)作xml標(biāo)記和解析的字符數(shù)據(jù)來(lái)處理,xml解析器必須能夠解析它。由于name標(biāo)記和address標(biāo)記被放在了未被解析的cdata片段中,所以它們不會(huì)被解析。盡管這個(gè)例子說(shuō)明了如何將一般的xml元素放在cdata片段中,通常使用cdata片段來(lái)將一段xml代碼引用出來(lái),尤其是在xml幫助以及其他xml文件中。2.3 xml相關(guān)技術(shù)和標(biāo)準(zhǔn)xml不是一項(xiàng)獨(dú)立的技術(shù),它包含了很多其他相關(guān)技術(shù)和標(biāo)
26、準(zhǔn),例如dtd、xml模式(schema)、名域(namespace)、xlink,、xpath、xpointer、xhtml、xsl、css、dom、sax和soap等。下面對(duì)其中幾項(xiàng)關(guān)鍵技術(shù)進(jìn)行簡(jiǎn)要介紹。2.3.1 dtd和模式xml提供兩種控制文檔內(nèi)容的機(jī)制,一種是dtd(document type definition,文檔類型定義),另一種是xml模式(schema)6 eric van der vlist.using w3c xml schema.。dtd定義文檔的語(yǔ)法,而文檔的語(yǔ)法反過(guò)來(lái)能夠讓xml語(yǔ)法分析程序確認(rèn)某個(gè)文檔標(biāo)記使用的合法性。dtd可以定義文檔的元素、元素的屬性以及
27、元素和屬性之間的關(guān)系。例如,dtd能夠規(guī)定何時(shí)及如何使用某元素,該元素表示什么以及如何在軟件中處理該元素。dtd分為內(nèi)部和外部?jī)煞N。內(nèi)部dtd被包含在xml主文檔之中,而外部dtd則是從xml主文檔中分離出來(lái)的一個(gè)單獨(dú)的文件。圖2.2是xml文檔的外部dtd7 邵敏,李力鴻,鄭震坤等.xml編程實(shí)踐網(wǎng)絡(luò)上的世界語(yǔ).北京:清華大學(xué)出版社.2002.12。屬性聲明實(shí)體聲明元素聲明實(shí)體引用圖2.2dtd示例(books.dtd)目前,在幾乎所有的行業(yè)和領(lǐng)域中,dtd都已存在。開(kāi)發(fā)者常常不需要建立他們自己的dtd,但如果未發(fā)現(xiàn)適合自己的已存在的dtd,也可以選擇使用現(xiàn)有的dtd的一部分并以它為基礎(chǔ)進(jìn)行
28、開(kāi)發(fā)。由于dtd存在結(jié)構(gòu)封閉、不支持名域、沒(méi)有數(shù)據(jù)類型和不是xml文檔等若干缺陷,w3c后來(lái)開(kāi)發(fā)了xml模式(schema)。通過(guò)提供對(duì)結(jié)構(gòu)和內(nèi)容的約束,xml模式定義一類xml文檔。使用模式指出文檔中允許哪些元素、它們可能有哪些屬性以及它們可能包含什么。xml模式是一個(gè)xml文檔,可以使用xml工具創(chuàng)建并編輯它。當(dāng)實(shí)際使用模式并將它應(yīng)用于一個(gè)良構(gòu)xml文檔,就會(huì)產(chǎn)生一個(gè)擴(kuò)充文檔,該過(guò)程稱為模式檢驗(yàn)。模式處理程序?qū)@示這個(gè)文檔是否符合該模式,即文檔是否有效。模式檢驗(yàn)比dtd檢驗(yàn)走的更遠(yuǎn),因?yàn)槟J娇梢员萪td對(duì)文檔強(qiáng)加更多約束(例如指定元素的文本內(nèi)容)。因此,xml模式雖然類似于dtd,卻比dt
29、d功能更強(qiáng)。2.3.2 名域xml名域(namespace)是一種“限定”一組元素和屬性的方法。它是在一個(gè)文檔中混合來(lái)自多個(gè)dtd的元素或多組名字并聲明哪些元素和屬性來(lái)自哪組名字的一條途徑。使用xml名域的主要原因有三個(gè):混合詞匯、混合文檔片斷以及確定保留名。使用名域說(shuō)明將一個(gè)uri引用與一個(gè)或多個(gè)xml元素聯(lián)系在一起,作為一個(gè)前綴將它們相互區(qū)分開(kāi)。如果兩個(gè)元素同名但uri前綴不同,那么它們就是不同的元素,從而避免了名稱沖突,擴(kuò)大了應(yīng)用范圍。 xml sample 210 1-868640-34-2 joe black professor 圖2.3名域示例從圖2.3中可以看出,“title”雖
30、然出現(xiàn)了兩次,但由于使用了“bk”和“authr”兩個(gè)不同的前綴,從而很容易地被區(qū)分開(kāi)來(lái)8 birbeck m.xml高級(jí)編程.機(jī)械工業(yè)出版社.2002.。2.3.3 xlinkxlink(xml linking language,xml鏈接語(yǔ)言)可以在xml中創(chuàng)建從某個(gè)資源到其他資源的超文本鏈接。使用xlink創(chuàng)建鏈接時(shí),其實(shí)是指定了兩個(gè)或更多資源,然后連接它們。連接叫做弧,并有一個(gè)方向。xlink表示資源之間或資源各部分之間的一種關(guān)系,而資源可以是賦予uri的任何東西。xlink的功能十分強(qiáng)大,與html和xhtml相比,它可以多向鏈接、注解鏈接、與不止兩個(gè)端點(diǎn)鏈接并能夠使用外部鏈接集。下
31、面是一個(gè)xml簡(jiǎn)單鏈接的例子:this works tooxlink規(guī)范引用另外兩個(gè)重要規(guī)范xpath(xml path language,xml路徑語(yǔ)言)和xpointer(xml pointer language,xml指針語(yǔ)言)。xpath用于表達(dá)從xml文檔中一點(diǎn)到另一點(diǎn)的路徑,“/recipebook/part3/recipe3”是一個(gè)xpath表達(dá)式,意思是要跟蹤該鏈接,應(yīng)從文檔頂層開(kāi)始,找到recipebook元素,然后在該元素內(nèi)找到第三個(gè)part元素,抵達(dá)此處后再尋找第三個(gè)recipe元素。xpointer是xlink用來(lái)結(jié)合x(chóng)path的機(jī)制,xpointer表達(dá)式總是寫(xiě)成xp
32、ointer(),括號(hào)內(nèi)是xpath表達(dá)式。與xlink一道使用xpath,可以構(gòu)造一個(gè)指向文檔內(nèi)特定點(diǎn)的鏈接。2.3.4 xsl目前,存在兩種顯示xml文檔的方法,一種是css(cascading style sheet,層疊樣式表),另一種就是下面主要討論的xsl(extensible stylesheet language,可擴(kuò)展樣式表語(yǔ)言)。xsl是一種專門(mén)為xml設(shè)計(jì)的樣式語(yǔ)言,它直接架構(gòu)在xml語(yǔ)法之上,是xml的一種應(yīng)用。xsl由兩個(gè)標(biāo)準(zhǔn)組成,一個(gè)是xslt(extensible stylesheetlanguage transformations,可擴(kuò)展樣式表語(yǔ)言轉(zhuǎn)換),另一個(gè)
33、是xslfo(extensiblestyle language formatting objects,可擴(kuò)展樣式語(yǔ)言格式化對(duì)象)。xslt是一種將xml文檔轉(zhuǎn)換成各種格式(如xml、html、pdf及sgml等)的新文檔的標(biāo)記語(yǔ)言,人們可以用它按照自己的意愿處理一個(gè)xml文檔。xslfo則是描述xsl格式化對(duì)象的xml詞匯,它提供大量的格式化命令,用來(lái)說(shuō)明新文檔以何種方式顯示給讀者。xml文檔xsl樣式表xml解析器xml解析器xml解析器源樹(shù)結(jié)果樹(shù)文檔存儲(chǔ)成像圖2.4xsl的工作過(guò)程利用xsl,一個(gè)xml文檔可以根據(jù)不同的表示要求有不同的表示形式。圖2.4表示了xsl的工作流程,該流程概括起
34、來(lái)說(shuō)就是:xsl處理器讀取一個(gè)xml文檔和一個(gè)xsl樣式表,輸出符合樣式表的xml文檔的表示形式。整個(gè)過(guò)程可以分為兩個(gè)子過(guò)程:樹(shù)轉(zhuǎn)換(tree transformation)和格式化(formatting)。樹(shù)轉(zhuǎn)換將源樹(shù)轉(zhuǎn)換成結(jié)果樹(shù)。其中源樹(shù)指的是轉(zhuǎn)換前的xml文檔,結(jié)果樹(shù)指的是處理器產(chǎn)生的新文檔,該新文檔可能是另一個(gè)xml文件、一個(gè)html文件甚至一個(gè)簡(jiǎn)單的文本文件。用xslt表示的轉(zhuǎn)換包含一組模板規(guī)則。一個(gè)模板規(guī)則分為兩部分:第一部分是模式(pattern),指定模板規(guī)則所適用的xml源文檔樹(shù)形結(jié)構(gòu);第二部分是模板(template),用來(lái)在與此模式匹配時(shí),將結(jié)果樹(shù)的一部分進(jìn)行輸出。xsl
35、t用xpath語(yǔ)言來(lái)選擇源樹(shù)中要進(jìn)行處理的節(jié)點(diǎn),指定處理該節(jié)點(diǎn)的不同方式的條件,并產(chǎn)生插入到結(jié)果樹(shù)中的文本。格式化將結(jié)果樹(shù)變?yōu)榭勺x的形式。而xslfo元素的主要作用就是頁(yè)面管理、流動(dòng)管理(內(nèi)容如何“注入”已創(chuàng)建的一系列頁(yè)面)和段落/字符管理。xslfo說(shuō)明了結(jié)果樹(shù)的顯示方式,該顯示方式是按照格式化對(duì)象(formatting object)和格式化屬性(formatting property)來(lái)描述的。xslfo文檔中的各種格式化對(duì)象指明內(nèi)容在頁(yè)面中的放置順序,但格式化的細(xì)節(jié)如頁(yè)面的大小、元素的尺寸、顏色、字體等必須由格式化屬性來(lái)說(shuō)明。格式化屬性是以格式化對(duì)象的屬性形式出現(xiàn),格式化對(duì)象元素可以包
36、含各種屬性,w3c總共定義了兩百多個(gè)屬性,多數(shù)屬性都可以應(yīng)用于一個(gè)以上的格式化對(duì)象元素。使轉(zhuǎn)換與格式化相分離的好處是,能夠通過(guò)選擇一個(gè)目標(biāo)xsl處理器理解的名域,來(lái)選擇按何種方式格式化試圖顯示的新文檔。最后,需要明確的是,xsl不僅僅是應(yīng)用樣式,當(dāng)使用xsl處理器時(shí),xml源文檔中的信息將被評(píng)價(jià)、重新安排,然后重新組裝。所以人們最終得到的是可以容易地添加、修改和重新排序的靈活的源信息。2.4 本章小結(jié)本章主要介紹了xml(extensible markup language)可擴(kuò)展標(biāo)記性語(yǔ)言的產(chǎn)生背景,較為詳細(xì)的講解了xml文檔的語(yǔ)法基礎(chǔ)和組成部分,簡(jiǎn)要介紹了它的相關(guān)標(biāo)準(zhǔn)。本章從總整體上對(duì)將要
37、研究xml解析技術(shù)做了基礎(chǔ)知識(shí)的鋪墊,以便后續(xù)章節(jié)的進(jìn)一步研究。第三章 xml解析技術(shù)基礎(chǔ)3.1 解析原理xml解析器是xml應(yīng)用的基礎(chǔ)。xml本身只是以純文本對(duì)數(shù)據(jù)進(jìn)行編碼的一種格式,要想利用xml,或者說(shuō)利用xml文件中所編碼的數(shù)據(jù),必須先將數(shù)據(jù)從純文本中解析出來(lái),因此,要求必須有一個(gè)能夠識(shí)別xml文檔信息的文本文件閱讀器(即xml解析器),用來(lái)解析xml文檔并提取其中的內(nèi)容。顯然,xml解析器在xml應(yīng)用程序中有著重要的地位。隨著xml越來(lái)越廣泛地被采用,高效解析xml文檔也變得越來(lái)越重要,尤其是對(duì)于那些要處理大量數(shù)據(jù)的應(yīng)用程序,這種技術(shù)尤為重要。選擇合適的xml解析技術(shù)對(duì)應(yīng)用系統(tǒng)的性能
38、有著較大的影響。不正確的解析會(huì)導(dǎo)致過(guò)度的內(nèi)存消耗和過(guò)長(zhǎng)的處理時(shí)間,從而大大降低系統(tǒng)的整體性能9 劉芳,肖鐵軍.xml應(yīng)用的基石:xml解析技術(shù).計(jì)算機(jī)工程與設(shè)計(jì).2005。xml文檔是由稱為“實(shí)體”的存儲(chǔ)單元組成的。它包含可解析或者不可解析的數(shù)據(jù)。可解析的數(shù)據(jù)由字符組成,其中有些是字符數(shù)據(jù),有些是標(biāo)記數(shù)據(jù)。標(biāo)記數(shù)據(jù)是對(duì)文檔存儲(chǔ)布局和邏輯結(jié)構(gòu)的描述。xml提供了在存儲(chǔ)結(jié)構(gòu)和邏輯布局上加上限制條件的機(jī)制。xml解析器(處理器)用來(lái)讀取xml文檔,利用它可以訪問(wèn)文檔的結(jié)構(gòu)和內(nèi)容。假定xml處理器代表應(yīng)用程序執(zhí)行了這個(gè)工作。根據(jù)xml處理器如何讀取xml文檔中的數(shù)據(jù)結(jié)構(gòu)以及它需要向應(yīng)用程序提供的信息,
39、規(guī)范描述了xml處理器所必需的行為。讀取一個(gè)xml數(shù)據(jù)的過(guò)程稱為解析。xml解析器根據(jù)是否驗(yàn)證合法性,可分為驗(yàn)證性和非驗(yàn)證性解析器;而根據(jù)解析方式的不同,又可分為基于樹(shù)的解析器(dom)和基于事件的解析器(sax)。xml文檔domsaxvtd圖3.1解析xmlxml解析器3.2 xml解析器工作模式負(fù)載均衡器xml解析器應(yīng)用服務(wù)器應(yīng)用服務(wù)器圖3.3xml解析器工作模式web服務(wù)器下面將對(duì)xml解析器的工作模式進(jìn)行簡(jiǎn)要的敘述。1) 負(fù)載均衡器接收來(lái)自internet的入站xml流量。2) 負(fù)載均衡器直接將xml流量定向到xml解析器。3) xml解析器解壓縮、解析、解釋和確認(rèn)xml流量,然后將
40、它路由給適當(dāng)?shù)膽?yīng)用服務(wù)器。4) xml解析器對(duì)應(yīng)從應(yīng)用服務(wù)器接收到的xml流量進(jìn)行轉(zhuǎn)換、確認(rèn)、加密和壓縮。5) xml解析器將對(duì)xml數(shù)據(jù)送給負(fù)載均衡器,隨后這些數(shù)據(jù)被送上internet。如圖3.2所示,xml解析器把原來(lái)由應(yīng)用服務(wù)器承擔(dān)的許多大量耗費(fèi)cpu時(shí)間的任務(wù)卸載到網(wǎng)絡(luò)上,這使得企業(yè)獲得線速性能的花費(fèi)大大降低了。與通過(guò)擴(kuò)展應(yīng)用服務(wù)器來(lái)獲得相同性能相比,利用xml解析器實(shí)現(xiàn)相同性能目標(biāo)的花費(fèi)僅為前者的1/10。3.3 文檔對(duì)象模型3.3.1 dom結(jié)構(gòu)首先本節(jié)將首先介紹一下什么是對(duì)象。對(duì)象是一個(gè)數(shù)據(jù)包:屬性(變量)和方法(函數(shù))的集合都被歸類在內(nèi)。按照對(duì)象層次關(guān)系,可以通過(guò)對(duì)象的屬性來(lái)
41、訪問(wèn)包含在對(duì)象中的數(shù)據(jù)值。方法就是函數(shù),它用來(lái)操作對(duì)象。方法一般和一個(gè)特定的對(duì)象聯(lián)系。事件是瀏覽器從用戶或環(huán)境中得到的某種輸入,例如,用戶提供的事件“click”。事件需要一些操作來(lái)觸發(fā),為響應(yīng)這些操作而編寫(xiě)的代碼就是事件句柄。實(shí)際上,每一個(gè)事件都可以是對(duì)象。例如:汽車、自行車等都是對(duì)象??梢哉f(shuō)“自行車”對(duì)象擁有一些屬性:make、model、year和color。甚至可以說(shuō)“自行車”對(duì)象擁有一些方法:goto()、stop()和reverse()。使用各種語(yǔ)言可以創(chuàng)建不同的對(duì)象,這些對(duì)象被稱為“用戶自定義對(duì)象”。但是,經(jīng)常使用的是“內(nèi)置”對(duì)象,這些內(nèi)置對(duì)象可以使用戶對(duì)web網(wǎng)頁(yè)以及web瀏覽
42、器進(jìn)行操作和訪問(wèn)。這套預(yù)先存在的對(duì)象形成了一個(gè)完整的模型,即文檔對(duì)象模型。對(duì)于有效的html和格式規(guī)范的xml文檔,dom(文檔對(duì)象模型)是一個(gè)api(應(yīng)用編程接口)。它定義了文檔的邏輯結(jié)構(gòu)以及訪問(wèn)和操作文檔的方式。在dom規(guī)范中,“文檔”這個(gè)術(shù)語(yǔ)得到廣泛的使用?,F(xiàn)在,xml越來(lái)越多地用來(lái)表示存儲(chǔ)在不同系統(tǒng)中的不同種類的信息,而很多這種信息以前都被認(rèn)為是數(shù)據(jù)而不是文檔。xml把這些數(shù)據(jù)看作文檔,并且利用dom來(lái)管理這些數(shù)據(jù)。dom是一種基于樹(shù)型的解析技術(shù),將xml文檔一次性解析,生成一個(gè)位于內(nèi)存中的對(duì)象樹(shù)用以描述該文檔。它可以實(shí)現(xiàn)對(duì)整個(gè)xml文檔的全面、動(dòng)態(tài)訪問(wèn)。dom是一種與平臺(tái)和語(yǔ)言無(wú)關(guān)的
43、接口,它允許程序和腳本動(dòng)態(tài)訪問(wèn)和修改文檔的內(nèi)容、結(jié)構(gòu)和類型。它定義了以下一系列的對(duì)象和方法對(duì)dom樹(shù)的節(jié)點(diǎn)進(jìn)行各種隨機(jī)操作:(1) document對(duì)象:作為樹(shù)的最高節(jié)點(diǎn),document對(duì)象是對(duì)整個(gè)文檔進(jìn)行操作的入口。(2) element和attr對(duì)象:這些節(jié)點(diǎn)對(duì)象都是文檔某一部分的映射,節(jié)點(diǎn)的定級(jí)層次恰好反映了文檔的結(jié)構(gòu);(3) text對(duì)象:作為element和attr對(duì)象的子節(jié)點(diǎn),text對(duì)象表達(dá)了元素或?qū)傩缘奈谋緝?nèi)容。text節(jié)點(diǎn)不再包含任何子節(jié)點(diǎn)。(4) 集合索引:dom提供了幾種集合索引方式,可以對(duì)節(jié)點(diǎn)按指定方式進(jìn)行遍歷。索引參數(shù)都是從0開(kāi)始記數(shù)的。dom樹(shù)中的所有節(jié)點(diǎn)都是從n
44、ode對(duì)象繼承而來(lái)的。node對(duì)象定義了一些最基本的屬性和方法,利用這些方法可以實(shí)現(xiàn)對(duì)樹(shù)的遍歷,同時(shí),根據(jù)屬性還可以得知節(jié)點(diǎn)的名稱、取值并判斷其類型。dom提供的api與編程語(yǔ)言無(wú)關(guān),所以對(duì)一些dom標(biāo)準(zhǔn)中沒(méi)有明確定義的接口,不同解析器的實(shí)現(xiàn)方法也可能有所差別。下圖給出了dom如何處理結(jié)構(gòu)化數(shù)據(jù)的簡(jiǎn)化試圖。dom使用一種屬性結(jié)構(gòu)對(duì)接口之間的關(guān)系進(jìn)行建模,但并沒(méi)有將實(shí)際的實(shí)現(xiàn)局限于某種屬性數(shù)據(jù)結(jié)構(gòu)。換句話說(shuō),從外面看dom像是一棵樹(shù);但是其數(shù)據(jù)的具體實(shí)現(xiàn)并不局限于某種樹(shù)型結(jié)構(gòu)。對(duì)諸如xml文檔這樣的結(jié)構(gòu)化數(shù)據(jù)來(lái)說(shuō),樹(shù)形結(jié)構(gòu)是一個(gè)顯而易見(jiàn)的模型。父元素表示樹(shù)的根部,每一個(gè)子元素代表根的子節(jié)點(diǎn),等等
45、。結(jié)構(gòu)化數(shù)據(jù)curly friessamuel adamsdom文檔圖3.3dom文檔對(duì)象的簡(jiǎn)化視圖3.3.2 dom的優(yōu)缺點(diǎn)dom以及廣義的基于樹(shù)的處理具有幾個(gè)優(yōu)點(diǎn)。首先,由于樹(shù)在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)做出更改。它還可以在任何時(shí)候在樹(shù)中上下導(dǎo)航,而不是像sax那樣是一次性的處理。dom使用起來(lái)也要簡(jiǎn)單得多。利用dom,開(kāi)發(fā)人員可以動(dòng)態(tài)地創(chuàng)建xml,遍歷文檔、增加/刪除/修改文檔內(nèi)容,具有較好的導(dǎo)航能力。因此,基于dom解析的應(yīng)用程序的編寫(xiě)比較簡(jiǎn)單。然而,dom解析也存在如下一些問(wèn)題:1) dom構(gòu)建整個(gè)文檔駐留內(nèi)存的樹(shù)。在內(nèi)存中加載整個(gè)文檔和構(gòu)建完整樹(shù)結(jié)構(gòu)成
46、本很高,尤其當(dāng)文檔非常大的時(shí)候。典型的dom樹(shù)的容量比文檔容量要大一個(gè)數(shù)量級(jí),所以它要消耗大量?jī)?nèi)存。2) 整個(gè)xml文檔必須一次解析完成,不可能只做部分解析。如果只需關(guān)注xml文檔的一小部分,那么創(chuàng)建那些永遠(yuǎn)不被使用的對(duì)象是極其浪費(fèi)的;dom解析器必須在應(yīng)用程序代碼取得控制權(quán)之前讀取整個(gè)文檔。對(duì)于非常大的文檔,這會(huì)引起顯著的延遲。3.4 基于事件的簡(jiǎn)單應(yīng)用編程接口(sax)3.4.1 sax結(jié)構(gòu)在用戶接口編程中,經(jīng)常會(huì)遇到“基于事件”這個(gè)詞。當(dāng)事件發(fā)生的時(shí)候,應(yīng)用程序需要對(duì)它們作出響應(yīng)。例如,對(duì)于點(diǎn)擊鼠標(biāo)事件,應(yīng)用程序中就必須有對(duì)它進(jìn)行響應(yīng)的程序?;谑录慕馕銎骱瓦@個(gè)很相似,但有一點(diǎn)不同,即
47、在解析的過(guò)程中,應(yīng)用程序可能不在程序員的控制之下。這是因?yàn)橐坏┦聞?wù)設(shè)置好了以后,用戶就不能調(diào)用解析器了,而是解析器在調(diào)用。事實(shí)上,這要比用戶接口編程容易得多。因?yàn)檫@不像鼠標(biāo)點(diǎn)擊事件那樣是不可預(yù)測(cè)的,xml解析事件的發(fā)生是一個(gè)可預(yù)測(cè)的序列。由于xml的元素合理地進(jìn)行了嵌套,因此可以確定每一個(gè)元素被打開(kāi)和關(guān)閉的時(shí)間以及許多其他問(wèn)題。簡(jiǎn)單的來(lái)講,基于事件的api直接向應(yīng)用程序報(bào)告解析事件(例如元素的開(kāi)始和結(jié)束)通常不創(chuàng)建內(nèi)部的數(shù)形結(jié)構(gòu)。應(yīng)用程序通過(guò)實(shí)現(xiàn)局部來(lái)處理不同的事件,這類似于在一個(gè)圖形化的接口中處理事件10 馬云,鐘萍等.xml寶典.電子工業(yè)出版社.2002。sax是一個(gè)用于處理xml的事件驅(qū)
48、動(dòng)的“推”模型。它不是w3c標(biāo)準(zhǔn),但它是一個(gè)得到了廣泛認(rèn)可的使用java開(kāi)發(fā)的api,大多數(shù)sax解析器在實(shí)現(xiàn)的時(shí)候都遵循標(biāo)準(zhǔn)。sax解析器不像dom那樣建立一個(gè)整個(gè)文檔的樹(shù)型表示,它采用回調(diào)機(jī)制,在讀取文檔時(shí)激活一系列的事件,這些事件被推給事件處理器。在sax中,其核心接口contenthandler報(bào)告基本解析事件及文檔事件,包括文檔開(kāi)始事件、元素開(kāi)始事件等等。處理特定的xml文件時(shí),需要為其創(chuàng)建一個(gè)實(shí)現(xiàn)了contenthandler的類來(lái)處理特定的事件。contenthandler接口其中一些主要的方法有startdocument、enddocument、startelement、end
49、element、characters等。如下圖中的例子11 賈素玲,王強(qiáng),許珂等.xml核心技術(shù).北京:高等教育出版社.2005.4所示。簡(jiǎn)單的xml文檔解析該文檔時(shí)調(diào)用的方法 mitsubishi lancerstartdocument()startelement(vehicles)startelement(car)characters(mitsubishi lancer)endelement(car)endelement(vehicles)enddocument()圖3.4sax解析示意圖3.4.2 sax的優(yōu)缺點(diǎn)sax最明顯的優(yōu)點(diǎn)就在于12 朱前飛,高芒.xml解析技術(shù)研究.電腦開(kāi)發(fā)與應(yīng)
50、用.2004年第17卷第11期:1) 它能解析任何大小的文件。因?yàn)闆](méi)有必要把整個(gè)文檔加載到內(nèi)存中,所以sax對(duì)內(nèi)存的消耗量比dom小得多,并不會(huì)隨著文件變大而增加。當(dāng)然,dom使用的實(shí)際內(nèi)存數(shù)量依賴于具體的解析器,但通常100kb的文檔會(huì)占用1mb的內(nèi)存。2) sax無(wú)需像dom那樣為所有節(jié)點(diǎn)創(chuàng)建對(duì)象,開(kāi)發(fā)人員可以根據(jù)需要?jiǎng)?chuàng)建自己的xml對(duì)象模型。3) sax本身很簡(jiǎn)單,而且速度快。這一點(diǎn)也很重要,因?yàn)樗箂ax的使用變得簡(jiǎn)單。在一個(gè)簡(jiǎn)單的序列中,sax可以得到文檔中的信息,它也是最快的方法之一。sax的缺點(diǎn)如下:(1) 不能隨機(jī)訪問(wèn)文檔。因?yàn)槲臋n沒(méi)有被保存在內(nèi)存中,所以不得不按照數(shù)據(jù)到達(dá)的順
51、序來(lái)處理它們。(2) 當(dāng)文檔包含許多內(nèi)部交叉引用時(shí),sax的實(shí)現(xiàn)是很困難的。因?yàn)閟ax解析器不能交流元信息,如dom的父/子支持,所以必須跟蹤解析器處在文檔層次的哪個(gè)位置,即維護(hù)文檔中事件的狀態(tài)。也就是說(shuō),為了維護(hù)數(shù)據(jù)結(jié)構(gòu),在這個(gè)結(jié)構(gòu)中保存有用戶所需要的環(huán)境信息,例如當(dāng)前元素祖先的屬性,復(fù)雜的搜索可能會(huì)使程序變得很亂。也許sax面臨的最大問(wèn)題是它沒(méi)有內(nèi)置如xpath所提供的那樣的導(dǎo)航支持。再加上它的單邊解析,這就意味著它不支持隨機(jī)訪問(wèn)。這些限制使sax很少被選擇用于操作或修改文檔。在具體分析了dom和sax解析方式之后,下面將給出一個(gè)具體的圖表,可以簡(jiǎn)明、清晰地看出兩種方式各自的優(yōu)缺點(diǎn)。表3.1兩種解析方式的比較 優(yōu)缺點(diǎn)解析方式優(yōu)點(diǎn)缺點(diǎn)dom易用性強(qiáng),遍歷簡(jiǎn)單,支持xpath解析速度太慢,內(nèi)存占用過(guò)高(原文件的5x10x),對(duì)于大文件來(lái)說(shuō)幾乎不可能使用sax解析速度快,內(nèi)存占用不與xml大小相聯(lián)系(可以做到xml漲內(nèi)存不漲)用性差,因?yàn)闆](méi)有結(jié)構(gòu)信息,無(wú)法遍歷,不支持xpath,可維護(hù)性差3.5 基于虛擬令牌環(huán)的xml解析技術(shù)3.5.1 vtd-xml概述vtd-xml便是對(duì)上述dom結(jié)構(gòu)和sa
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南省安陽(yáng)市文峰區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期1月期末化學(xué)試題(含答案)
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職政治學(xué)能力檢測(cè)試卷B卷附答案
- 臨床急救知識(shí)培訓(xùn)課件
- 酒吧員工禁止戀愛(ài)合同(2篇)
- 2025年反電信網(wǎng)絡(luò)詐騙法測(cè)試題庫(kù)及參考答案
- 自體輸血知識(shí)培訓(xùn)課件
- 農(nóng)資產(chǎn)品經(jīng)銷代理合作協(xié)議
- 共享單車租賃服務(wù)協(xié)議
- 睡前故事故事解讀
- 遼寧省大連市2024-2025學(xué)年高一上學(xué)期1月期末考試生物學(xué)試題(含答案)
- 數(shù)據(jù)挖掘?qū)д?第5章-分類-其他技術(shù)
- 年產(chǎn)4萬(wàn)噸鄰苯二甲酸酐的工藝設(shè)計(jì)
- 西醫(yī)醫(yī)師開(kāi)具中藥及中藥飲片處方權(quán)限考核試題及答案
- DB37-T 5026-2022《居住建筑節(jié)能設(shè)計(jì)標(biāo)準(zhǔn)》
- BACnet介紹解讀課件
- 全套IECQ QC080000-2017 有害物質(zhì)過(guò)程管理體系程序文件
- 《三角形的分類》-完整版課件
- 鐵路工程預(yù)算定額標(biāo)準(zhǔn)
- 叉車使用申請(qǐng)表
- 《中外歷史綱要上》第4課 西漢與東漢-統(tǒng)一多民族封建國(guó)家的鞏固(課件)(共23張PPT)
- [轉(zhuǎn)載]鄭桂華《安塞腰鼓》教學(xué)實(shí)錄
評(píng)論
0/150
提交評(píng)論