【正文】
性、自相容性以及跨文種等優(yōu)點(diǎn),使得它非常適于 Web 上的數(shù)據(jù)交換與信息發(fā)布,被廣泛應(yīng)用到電子商務(wù)、電子政務(wù)、 Web 服務(wù)等許多領(lǐng)域。目前很多國際著名 的 公司已完全加入到 XML 支持者的行列,如微軟 已廣泛使用了 XML,Netscape 新版本也將會(huì)支持 XML,其它公司,包括 IBM, Adobe, Sun 和 Xerox等也宣布支持 XML,并都在著手相關(guān)產(chǎn)品的研制。相對(duì)于 HTML 的“所見即所得”, XML 將數(shù)據(jù)和顯示信息分離,被稱為“文檔數(shù)據(jù)庫”,這就 使 XML 文檔很適合于描述數(shù)據(jù)庫中的數(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ù)的過程 中,起著重要的作用 [1]。 論文研究背景 XML( eXtensible Markup Language) ——可擴(kuò)展標(biāo)記性語言,是 W3C 組織認(rèn)可的文檔數(shù)據(jù)格式標(biāo)準(zhǔn),是 SGML( Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語言)的子集,保留了 SGML 主要的使用功能,同時(shí)大大縮減了 SGML的復(fù)雜性。它獨(dú)立于任何語言和體系結(jié)構(gòu),是公認(rèn)的下一代網(wǎng)絡(luò)標(biāo)記語言。 由于 XML 文檔能應(yīng)用在不同平臺(tái)上,實(shí)現(xiàn)數(shù)據(jù)的協(xié)同工作,它現(xiàn)在已成為不可缺少的企業(yè)技術(shù)的一部分。比如, XML 增加了在商場 中的電子商務(wù)和交流溝通,以及公司內(nèi)部多樣數(shù)據(jù)的綜合。 XML 的使用因此而快速增長,分析家 Ron Schmelzer 預(yù)測,到 2021 年, XML 將由 2021 年網(wǎng)絡(luò)流量的 3%上漲至 24%,并且到 2021 年將至少上漲至 40%。 然而,對(duì)不斷增長的 XML 文檔的執(zhí)行引起了一個(gè)關(guān)鍵的問題:由于文檔中每2 XML 快速解析技術(shù) 個(gè)元素都包含了相當(dāng)大的元數(shù)據(jù),所以 XML 文檔就包含了大量的數(shù)據(jù)。這便造成了程序處理的低效,并且給公司網(wǎng)絡(luò)、處理器和存儲(chǔ)結(jié)構(gòu)都帶來了很大的負(fù)載壓力,這就導(dǎo)致了 XML 的兩個(gè)關(guān)鍵問題:冗長和性能 。 1. 冗長:以 XML 格式儲(chǔ)存的數(shù)據(jù)要比以 其他數(shù)據(jù)庫格式儲(chǔ)存占有的空間要大的多。 2. 性能:由于 XML 固有的冗余特性,對(duì) XML 數(shù)據(jù)的管理將增大應(yīng)用服務(wù)器的負(fù)擔(dān)。 論文研究內(nèi)容及結(jié)構(gòu) 應(yīng)用 XML 文檔主要有三個(gè)技術(shù)環(huán)節(jié),包括對(duì) XML 文檔的編輯、 XML 文檔的解析和顯示或使用 XML 文檔的數(shù)據(jù)。 XML 文檔的編輯目前有兩種方式:一種是使用通用的編輯器生成 XML 文檔,如 Notepad;另一種是使用 XML IDE(集成開發(fā)環(huán)境),如 XMLSPY 等工具。也可以針對(duì)具體應(yīng)用開發(fā)某種專用的可視化XML 編輯器。 XML 文檔解析的主要任務(wù)是檢查編輯的 XML 文檔是否是結(jié)構(gòu)完整( Wellformed)和合法的( 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)用過程中有著重要的作用,它的行為減少了應(yīng)用程序處理 XML 數(shù)據(jù)的負(fù)擔(dān),為應(yīng)用程序和數(shù)據(jù)庫提供了可操作的數(shù)據(jù)。換句話說, XML 解析器是 XML 文檔應(yīng)用的基礎(chǔ)。 本文章節(jié)安排如下: 第一章對(duì) XML 的發(fā)展 、 XML 解析技術(shù)的分類 和本文研究背景進(jìn)行了簡要介紹。 第二章介紹了 XML 文檔的特點(diǎn)和 XML 語法基礎(chǔ)以及相關(guān)技術(shù)和標(biāo)準(zhǔn),對(duì)全文的進(jìn)一步研究作了基礎(chǔ)性的鋪墊。 第三章首先說明了 XML 解析的必要性以及解析原理,并詳細(xì)講解了基于對(duì)象的解析方式( DOM)和基于事件的解析方式( SAX)。在此基礎(chǔ)上,進(jìn)一步比較 第一章 緒論 3 了兩者的優(yōu)缺點(diǎn),分析了它們不能夠進(jìn)行普遍應(yīng)用的原因。然后介紹了 VTDXML解析結(jié)構(gòu)的原理。 第四章 在前三張的地主之上, 重點(diǎn)研究了 一種基于 XML 數(shù)據(jù)通信模型的設(shè)計(jì)與實(shí)現(xiàn)。 第五章是本論文的結(jié)束部分,對(duì)全文做統(tǒng)一總結(jié),并簡要概括了本文未詳細(xì)討論的如何使 VTD 記錄具有唯一性的內(nèi)容。 最后是致謝、參考文獻(xiàn)。 4 XML 快速解析技術(shù) 第二章 可擴(kuò)展標(biāo)記語言 5 第二章 可擴(kuò)展標(biāo)記語言 XML 技術(shù)的產(chǎn)生 上個(gè)世紀(jì)的 80 年代, SGML( Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語言)作為文檔說明工具而被世人所知,并成為國際標(biāo)準(zhǔn)組織( ISO)的一項(xiàng)國際標(biāo)準(zhǔn),即 ISO8879。不過,由于 SGML 過于詳細(xì)和復(fù)雜,所以一直沒有在全球范圍內(nèi)被廣泛地采用。而從 SGML 衍生出來的 HTML( Hyper Text MarkupLanguage,超文本標(biāo)記語言),憑借其簡潔性使得每個(gè)人都可能創(chuàng)建 Web頁面并將它們推向外部世界,從 而迅速成為在網(wǎng)上制作頁面的標(biāo)準(zhǔn)語言格式 [2]。 但是,隨著 Web 的應(yīng)用越來越廣泛和深入,人們漸漸發(fā)現(xiàn) HTML 的不一致和不可擴(kuò)展等缺陷嚴(yán)重阻礙了它的進(jìn)一步發(fā)展。盡管 HTML 推出了一個(gè)又一個(gè)新版本,卻始終滿足不了不斷增長的需求。 1996 年 11 月,在波士頓 SGML 世界年會(huì)上, Inter Homepage 的撰寫標(biāo)準(zhǔn) HTML 被宣告終結(jié),取而代之的是另一個(gè)電子文件格式化通用標(biāo)準(zhǔn) ——XML( Extensible Markup Language,可擴(kuò)展標(biāo)記語言)。XML 是一個(gè)更具彈性、更容易添加新功能而又具有統(tǒng)一標(biāo)準(zhǔn) 的語言格式,它的目標(biāo)是以目前用 HTML 尚不可能的方法在 Web 上服務(wù)、接受和處理 SGML。與用來定義某一類文件格式的 HTML 等傳統(tǒng)標(biāo)記語言不同, XML 本身不是一個(gè)單一的標(biāo)記語言,而是一種元語言( metalanguage),可以用來創(chuàng)造類別文件的格式定義,也就是在 XML 之中創(chuàng)造出很多不同的新標(biāo)記語言,用來定義不同的文件類別。 XML 文檔語法基礎(chǔ) XML 解析器讀取兩類 XML 文檔:良構(gòu)文檔和有效文檔。良構(gòu)文檔語法上正確,滿足 XML 規(guī)范描述的生成規(guī)則,但不一定符合某個(gè) DTD。有效文檔則已經(jīng)針對(duì)某個(gè) DTD 驗(yàn)證過了。 XML 文檔由兩個(gè)或多個(gè)主文檔實(shí)體組成:文檔首部、文檔實(shí)例以及可能擁有6 XML 快速解析技術(shù) 的任何處理指令。文檔首部就像一個(gè)引導(dǎo)記號(hào),給處理器提供關(guān)于如何處理文檔主體(即文檔實(shí)例)的指示。處理指令可任意出現(xiàn)在文檔首部或文檔實(shí)例中。它們用于在 XML 分析器外給另一個(gè)處理應(yīng)用發(fā)送指示。 XML 文檔的基本語法由 W3C 創(chuàng)建的一個(gè)文檔所定義的一組規(guī)則所規(guī)定。在深入了解 XML 文檔結(jié)構(gòu)之前,先需要了解以下幾條基本語法規(guī)則 [3]: ? XML 區(qū)分大小寫,元素的起始標(biāo)注必須正好匹配結(jié)束標(biāo)注。 ? 所有起始標(biāo)注必須有結(jié)束標(biāo)注,即所有 XML文檔都必須包含一個(gè)根元 素,這個(gè)根元素是包含了文檔所有內(nèi)容的最外層元素。 ? 元素必須正確的嵌套。文檔中元素不是孤立的(除非只有一個(gè)元素 ——根元素),所有元素都必須包含在以根元素開始的元素層次中。 ? XML 用五種預(yù)定義實(shí)體“ amp。lt;”、“ amp。gt;”、“ amp。amp;”、“ amp。apos;”和“ amp。quot;”來分別代替“ ”、“ ”、“ amp?!薄ⅰ啊焙汀啊薄弊址?。 ? XML 說明優(yōu)先,即如果使用一個(gè) XML 說明,它必須最先出現(xiàn)。 為了更好地理解 XML 語法的主要組成部分,圖 包含一個(gè)用來保存聯(lián)系信息的 XML 地址簿。下面用該例子來具體講解不同 XML 語法組 成部分的作用。 第二章 可擴(kuò)展標(biāo)記語言 7 圖 XML 地址簿文件 文檔說明 所有的 XML 文檔都以首部開始,即使首部中沒有任何內(nèi)容。文檔首部由出現(xiàn)次序固定的幾個(gè)部分組成,下面按順序列出 [4]: ? XML 說明 ?xml version=‖‖encoding=―UTF8‖standalone=―yes‖? !DOCTYPE addressbook SYSTEM―‖[ !ENTITY amp― ‖ !ENTITY apos― ‖ ] addressbook !–This is my good friend Frank.. contact nameFrank Rizzo/name address12 12 w Street/address cityNew York/city stateNew York/state zip10011/zip phone voice2125551212/voice fax2125551213/fax /phone / web panyFrankamp。apos。s Ratchet Service/pany /contact /addressbook 8 XML 快速解析技術(shù) 文檔示例的第一句 ?xml version=“ ” encoding=“ UTF8” standalone=“ yes” ?就是該文檔的 XML 說明,它是 XML 文檔中最先出現(xiàn)的東西,由一個(gè)左尖括號(hào)、后跟一個(gè)問號(hào)(沒有空格)、再跟三個(gè)字符 xml 組成。該說明有三個(gè)組成部分: ? version=“ ”是版本說明,表示該文檔遵循 規(guī)范; ? encoding=“ UTF8”是編碼說明,表示采用 UTF8 作為編碼方式 ; ? standalone=“ yes”是獨(dú)立說明,指出該文檔在一個(gè)文件里完成,不需要從外部導(dǎo)入文件。 ? 各種語句 各種語句可能包括注釋,它們是描述文檔目的的記號(hào)。在圖 的文檔示例中, !–This is my good friend 就是注釋。注釋可以出現(xiàn)在首部或文檔實(shí)例中,總是以“ !”字符開始,以“ ”字符結(jié)束。注釋是調(diào)試代碼的好方法,它 不是為機(jī)器準(zhǔn)備的,而是供人閱讀的,因此分析器總是不理會(huì)“ !”和“ ”中間的一切。此外,注釋不能嵌套在定義一個(gè)元素名的標(biāo)注內(nèi),且注釋中不能再包含注釋。 ? 文件類型說明 文件類型聲明在 XML 中用來在文件中詳細(xì)地說明文件信息,其中包括文件根元素和文件類型定義( Document Type Definition, DTD) [5]。 文件的文件類型聲明對(duì)于確定一個(gè)文件是否有效或是否僅僅是結(jié)構(gòu)良好的來說是非常重要的。文件類型聲明有如下三個(gè)主要作用: ? 指定文件的根元素。 ? 為文件定義元素、屬性和實(shí)體的細(xì)節(jié)(內(nèi)部 DTD) 。 ? 指出文件的外部 DTD。 如果 DTD 完全嵌套在文檔中,那么它的說明語句也在該文檔中,這叫做嵌套文檔類型說明。如果鏈接 DTD,那么說明包括指示 XML 分析器到哪去尋找該DTD 的鏈接信息,這叫做鏈接文檔類型說明。地址簿文件的例子說明了文件類型聲明的這些功能是怎樣實(shí)現(xiàn)的。在該例子中使用了下面的文件類型聲明: !DOCTYPE addressbook SYSTEM―‖ 在文件類型聲明中明確地指定了文件的根元素是 addressbook 元素,文件的外 第二章 可擴(kuò)展標(biāo)記語言 9 部 DTD—— 在文件的類型聲明中也被明確地引用。 XML 解析器使用這些 DTD 來驗(yàn)證文件是否有效。 標(biāo)記 標(biāo)記( tag)是 XML 語法中最顯而易見的組成部分,它被用來描述元素。在地址簿的例子中,元素 city 是由標(biāo)記 city和 /city構(gòu)成的。為了便于理解,可以將“元素”這個(gè)主語理解為邏輯上的標(biāo)記片段,而“標(biāo)記”是指用來在 XML文件中表示元素的文本字符串。 XML 元素可以是空的,這意味著元素可以不含有任何解析的字符數(shù)據(jù)。在HTML 中的元素 br 就是一個(gè)空元素,因?yàn)樗缓腥魏巫址麛?shù)據(jù)。然而 XML 語法不允許在傳統(tǒng)的 HTML 風(fēng)格下使用 br標(biāo)記來使用元素 br。 XML 中空元素的標(biāo)記必須在元素名之后用一個(gè)斜杠( /)用來指出它是空的。因此, br標(biāo)記在XML 中的用法就變成了 /br。 HTML 中空元素的語法來自結(jié)束標(biāo)記的格式。比如, HTML 中元素 head 被編為一對(duì)標(biāo)記 ——head和 /head。第二個(gè)標(biāo)記中的斜杠指出它是這對(duì)標(biāo)記中的結(jié)束標(biāo)記。空元素使用相同的方法來說明沒有相應(yīng)的結(jié)束標(biāo)記。然而,仍然可以以“起始標(biāo)記 /結(jié)束標(biāo)記”的形式來表示空元素。比如,可以使用 br/br來表示br/標(biāo)記,在 XML 語法中,這也 是合法的。 實(shí)體引用 實(shí)體是構(gòu)成 XML 文件的基本單位,而這就是實(shí)體本身以及通常通過實(shí)體引用構(gòu)成的其它實(shí)體。實(shí)體引用在 XML 中被用來為數(shù)據(jù)篇幅與別名。實(shí)質(zhì)上,實(shí)體引用還是 XML 片段的唯一名稱。比如,地址簿文件通過實(shí)體引用來使用單引號(hào)(’)與和號(hào)( amp。)作為解析字符數(shù)據(jù): panyFrankamp。apos。s Ratchet Service/pany 實(shí)體引用在和號(hào)和分號(hào)之間。在該例中, amp。apos。是作為單引號(hào)與和號(hào)的別名的實(shí)體引用。通常, XML 解析可能會(huì)根據(jù)這些字符在 XML 中不同的結(jié)構(gòu)作用來解析 這些字符。然而,通過實(shí)體引用,可以直接使用它們而不需