【正文】
被廣泛應(yīng)用到電子商務(wù)、電子政務(wù)、 Web 服務(wù)等許多領(lǐng)域。相對于 HTML 的“所見即所得”, XML 將數(shù)據(jù)和顯示信息分離,被稱為“文檔數(shù)據(jù)庫”,這就 使 XML 文檔很適合于描述數(shù)據(jù)庫中的數(shù)據(jù)。 XML 解析技術(shù)是操作 XML文檔的重要環(huán)節(jié),它在實現(xiàn)把非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為 XML 數(shù)據(jù)的過程 中,起著重要的作用 [1]。它獨立于任何語言和體系結(jié)構(gòu),是公認(rèn)的下一代網(wǎng)絡(luò)標(biāo)記語言。比如, XML 增加了在商場 中的電子商務(wù)和交流溝通,以及公司內(nèi)部多樣數(shù)據(jù)的綜合。 然而,對不斷增長的 XML 文檔的執(zhí)行引起了一個關(guān)鍵的問題:由于文檔中每2 XML 快速解析技術(shù) 個元素都包含了相當(dāng)大的元數(shù)據(jù),所以 XML 文檔就包含了大量的數(shù)據(jù)。 1. 冗長:以 XML 格式儲存的數(shù)據(jù)要比以 其他數(shù)據(jù)庫格式儲存占有的空間要大的多。 論文研究內(nèi)容及結(jié)構(gòu) 應(yīng)用 XML 文檔主要有三個技術(shù)環(huán)節(jié),包括對 XML 文檔的編輯、 XML 文檔的解析和顯示或使用 XML 文檔的數(shù)據(jù)。也可以針對具體應(yīng)用開發(fā)某種專用的可視化XML 編輯器。如果 XML 解析器發(fā)現(xiàn) XML 文檔中的數(shù)據(jù)或者結(jié)構(gòu)不完整,就會向應(yīng)用程序報告一個“致命”錯誤,而且不再會以正常的方式向應(yīng)用程序傳遞數(shù)據(jù)或 XML 結(jié)構(gòu)。換句話說, XML 解析器是 XML 文檔應(yīng)用的基礎(chǔ)。 第二章介紹了 XML 文檔的特點和 XML 語法基礎(chǔ)以及相關(guān)技術(shù)和標(biāo)準(zhǔn),對全文的進一步研究作了基礎(chǔ)性的鋪墊。在此基礎(chǔ)上,進一步比較 第一章 緒論 3 了兩者的優(yōu)缺點,分析了它們不能夠進行普遍應(yīng)用的原因。 第四章 在前三張的地主之上, 重點研究了 一種基于 XML 數(shù)據(jù)通信模型的設(shè)計與實現(xiàn)。 最后是致謝、參考文獻。不過,由于 SGML 過于詳細(xì)和復(fù)雜,所以一直沒有在全球范圍內(nèi)被廣泛地采用。 但是,隨著 Web 的應(yīng)用越來越廣泛和深入,人們漸漸發(fā)現(xiàn) HTML 的不一致和不可擴展等缺陷嚴(yán)重阻礙了它的進一步發(fā)展。 1996 年 11 月,在波士頓 SGML 世界年會上, Inter Homepage 的撰寫標(biāo)準(zhǔn) HTML 被宣告終結(jié),取而代之的是另一個電子文件格式化通用標(biāo)準(zhǔn) ——XML( Extensible Markup Language,可擴展標(biāo)記語言)。與用來定義某一類文件格式的 HTML 等傳統(tǒng)標(biāo)記語言不同, XML 本身不是一個單一的標(biāo)記語言,而是一種元語言( metalanguage),可以用來創(chuàng)造類別文件的格式定義,也就是在 XML 之中創(chuàng)造出很多不同的新標(biāo)記語言,用來定義不同的文件類別。良構(gòu)文檔語法上正確,滿足 XML 規(guī)范描述的生成規(guī)則,但不一定符合某個 DTD。 XML 文檔由兩個或多個主文檔實體組成:文檔首部、文檔實例以及可能擁有6 XML 快速解析技術(shù) 的任何處理指令。處理指令可任意出現(xiàn)在文檔首部或文檔實例中。 XML 文檔的基本語法由 W3C 創(chuàng)建的一個文檔所定義的一組規(guī)則所規(guī)定。 ? 所有起始標(biāo)注必須有結(jié)束標(biāo)注,即所有 XML文檔都必須包含一個根元 素,這個根元素是包含了文檔所有內(nèi)容的最外層元素。文檔中元素不是孤立的(除非只有一個元素 ——根元素),所有元素都必須包含在以根元素開始的元素層次中。lt;”、“ amp。amp;”、“ amp。quot;”來分別代替“ ”、“ ”、“ amp。 ? XML 說明優(yōu)先,即如果使用一個 XML 說明,它必須最先出現(xiàn)。下面用該例子來具體講解不同 XML 語法組 成部分的作用。文檔首部由出現(xiàn)次序固定的幾個部分組成,下面按順序列出 [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。s Ratchet Service/pany /contact /addressbook 8 XML 快速解析技術(shù) 文檔示例的第一句 ?xml version=“ ” encoding=“ UTF8” standalone=“ yes” ?就是該文檔的 XML 說明,它是 XML 文檔中最先出現(xiàn)的東西,由一個左尖括號、后跟一個問號(沒有空格)、再跟三個字符 xml 組成。 ? 各種語句 各種語句可能包括注釋,它們是描述文檔目的的記號。注釋可以出現(xiàn)在首部或文檔實例中,總是以“ !”字符開始,以“ ”字符結(jié)束。此外,注釋不能嵌套在定義一個元素名的標(biāo)注內(nèi),且注釋中不能再包含注釋。 文件的文件類型聲明對于確定一個文件是否有效或是否僅僅是結(jié)構(gòu)良好的來說是非常重要的。 ? 為文件定義元素、屬性和實體的細(xì)節(jié)(內(nèi)部 DTD) 。 如果 DTD 完全嵌套在文檔中,那么它的說明語句也在該文檔中,這叫做嵌套文檔類型說明。地址簿文件的例子說明了文件類型聲明的這些功能是怎樣實現(xiàn)的。 XML 解析器使用這些 DTD 來驗證文件是否有效。在地址簿的例子中,元素 city 是由標(biāo)記 city和 /city構(gòu)成的。 XML 元素可以是空的,這意味著元素可以不含有任何解析的字符數(shù)據(jù)。然而 XML 語法不允許在傳統(tǒng)的 HTML 風(fēng)格下使用 br標(biāo)記來使用元素 br。因此, br標(biāo)記在XML 中的用法就變成了 /br。比如, HTML 中元素 head 被編為一對標(biāo)記 ——head和 /head??赵厥褂孟嗤姆椒▉碚f明沒有相應(yīng)的結(jié)束標(biāo)記。比如,可以使用 br/br來表示br/標(biāo)記,在 XML 語法中,這也 是合法的。實體引用在 XML 中被用來為數(shù)據(jù)篇幅與別名。比如,地址簿文件通過實體引用來使用單引號(’)與和號( amp。apos。在該例中, amp。是作為單引號與和號的別名的實體引用。然而,通過實體引用,可以直接使用它們而不需考慮 XML 解析10 XML 快速解析技術(shù) 器的存在及帶來的問題。與編程語言中的注釋一樣, XML 注釋被用來提供文件數(shù)據(jù)的說明,這完全是為了用戶了解程序。技術(shù)上,解析器將注釋返回給應(yīng)用程序是有可能的,這對開發(fā)支持注釋的 XML 應(yīng)用很有好處。為解析字符數(shù)據(jù)( CDATA)片斷是這一規(guī)則的唯一例外。 注釋以 !開始,并以 結(jié)束。因為這會和 XML 的注釋語法發(fā)生沖突。 !–This is my good friend Frank.. 這個注釋中包含的信息不被當(dāng)作是 XML 文件數(shù)據(jù)的一部分。處理指令是一些用來由處理 XML 文件的應(yīng)用程序使用的特殊指令。處理指令通常以小問號和問號( ?)開始而已問號和大于號( ?)結(jié)束。 xml 處理指令中的version 屬性使得 XML 可以持續(xù)發(fā)展而不會由于存在不同的版本而產(chǎn)生問題。 第二章 可擴展標(biāo)記語言 11 CDATA 段 未解析字符數(shù)據(jù) 片段,也就是 CDATA 片段,被用來在 XML 文件中將那些不需要 XML 解析器處理的內(nèi)容分開。通過將 CDATA 片段 ![CDATA[和 ]]之間來定義。為了使文件中的內(nèi)容被當(dāng)作 XML 標(biāo)記和解析的字符數(shù)據(jù)來處理, XML 解析器必須能夠解析它。盡管這個例子說明了如何將一般的 XML 元素放在 CDATA 片段中,通常使用 CDATA 片段來將一段 XML 代碼引用出來,尤其是在 XML 幫助以及其他 XML 文件中。下面對其中幾項關(guān)鍵技術(shù)進行簡要介紹。 12 XML 快速解析技術(shù) DTD 定義文檔的語法,而文檔的語法反過來能夠讓 XML 語法分析程序確認(rèn)某個文檔標(biāo)記使用的合 法性。例如, DTD 能夠規(guī)定何時及如何使用某元素,該元素表示什么以及如何在軟件中處理該元素。內(nèi)部 DTD 被包含在 XML 主文檔之中,而外部DTD 則是從 XML 主文檔中分離出來的一個單獨的文件。 目前,在幾乎所有的行業(yè)和領(lǐng)域中, DTD 都已存在。 由于 DTD 存在結(jié)構(gòu)封閉、不支持名域、沒有數(shù)據(jù)類型和不是 XML 文檔等若干缺陷, W3C 后來開發(fā)了 XML 模式( Schema)。使用模式指出文檔中允許哪些元素、它們可能有哪些屬性以及它們可能包含什么。當(dāng)實際使用模式并將它應(yīng)用于一個良構(gòu) XML 文檔,就會產(chǎn)生一個擴充文檔,該過程稱為!ENTITY%Attdecl―CDATAREQUIRED‖ !ELEMENT books(book+) !ELEMENT book(author,title,price) !ELEMENT author(PCDATA) !ELEMENT title(PCDATA) !ELEMENT price(PCDATA) !ATTLIST book category%Attdecl published%Attdecl 屬性聲明 實體聲明 元素聲明 實體引用 圖 DTD 示例 ( ) 第二章 可擴展標(biāo)記語言 13 模式檢驗。模式檢驗比 DTD 檢驗走的更遠(yuǎn),因為模式可以比 DTD 對文檔強加更多約束(例如指定元素的文本內(nèi)容)。 名域 XML 名域( Namespace)是一種“限定”一組元素和屬性的方法。使用 XML 名域的主要原因有三個:混合詞匯、混合文檔片斷以及確定保留名。如果兩個元素同名但 URI 前綴不同,那么它 們就是不同的元素,從而避免了名稱沖突,擴大了應(yīng)用范圍。 ?xml version=’’? libraryentry xmlns:authr=‖‖xmlns:bk=‖‖ bk:book bk:titleXML Sample/bk:title bk:pages210/bk:pages bk:isbn1868640342/bk:isbn authr:author authr:firstnameJoe/authr:firstname authr:lastnameBlack/authr:lastname authr:titleProfessor/authr:title /authr:author /bk:book /libraryentry 圖 名域示例 14 XML 快速解析技術(shù) XLink XLink( XML Linking Language, XML 鏈接語言)可以在 XML 中創(chuàng)建從某個資源到其他資源的超文本鏈接。連接叫做弧,并有一個方向。 XLink 的功能十分強大,與 HTML 和 XHTML 相比,它可以多向鏈接、注解鏈接、與不止兩個端點鏈接并能夠使用外部鏈接集。 XPath 用于表達從XML 文檔中一點到另一點的路徑,“ /recipeBook/Part[3]/Recipe[3]”是一個 XPath表達式,意思是要跟蹤該鏈接,應(yīng)從文檔頂層開始,找到 recipeBook 元素,然后在該元素內(nèi)找到第三個 Part 元素,抵達此處后再尋找第三個 Recipe 元素。與 XLink 一道使用 XPath,可以構(gòu)造一個指向文檔內(nèi)特定點的鏈接。 XSL 是一種專門為 XML 設(shè)計的樣式語言,它直接架構(gòu)在 XML 語法之上,是XML 的一種應(yīng)用。 第二章 可擴展標(biāo)記語言 15 XSLT 是一種將 XML 文檔轉(zhuǎn)換成各種格式(如 XML、 HTML、 PDF 及 SGML 等)的新文檔的標(biāo)記語言,人們可以用它按照自己的意愿處理一個 XML 文檔。 利用 XSL,一個 XML 文檔可以根據(jù)不同的表示要求有不同的表示形式。整個過程可以分為兩個子過程:樹轉(zhuǎn)換( tree transformation)和格式化( formatting)。其中源樹指的是轉(zhuǎn)換前的 XML 文檔,結(jié)果樹指的是處理器產(chǎn)生的新文檔,該新文檔可能是另一個 XML 文件、一個 HTML 文件甚至一個簡單的文本文件。一個模板規(guī)則分為兩部分:第一部分是模式( pattern),指定模板規(guī)則所適用的 XML 源文檔樹形結(jié)構(gòu);第二部分是模板( template),用來在與此模式匹配時,將結(jié)果樹的一部分進行輸出。 格式化將結(jié)果樹變?yōu)榭勺x的形式。 XSLFO說明了結(jié)果樹的顯示方式,該顯示方式是按照格式化對象( formatting object)和格式化屬性( formatting property)來描述的。格式化屬性是以格式化對象的屬性形式出現(xiàn),格式化對象元素可以包含各種屬性, W3C 總共定義了兩百多個屬性,多數(shù)屬性都可以應(yīng)用于一個以上的格式化對象元素。最后,需要明確的是, XSL不僅僅是應(yīng)用樣式,當(dāng)使用 XSL 處理器時, XML 源文檔中的信息將被評價、重新安排,然后重新組裝。 本章小結(jié) 本章主要介紹了 XML( eXtensible Markup Language) ——可擴展標(biāo)記性語言的產(chǎn)生背景,較為詳細(xì)的講