一、引言
當前Web上流行的劇本語言是以HTML為主的語言結構,HTML是一種標記語言,而不是一種程式設計語言,主要的標記是針對顯示,而不是針對文檔內容本身結構的描述的。也就是說,機器本身是不能夠解析它的內容的,所以就出現了XML語言。XML (eXtensible Markup Language)語言是SGML語言的子集,它保留了SGML主要的使用功能,同時大大縮減了SGML的複雜性。XML語言系統建立的目的就是使它不僅能夠表示文檔的內容,而且可以表示文檔的結構,這樣在同時能夠被人類理解的同時,也能夠被機器所理解。XML要求遵循一定的嚴格的標準。XML剖析器比HTML瀏覽器更加要挑剔文法和結構,XML要求正在建立的網頁正確的使用文法和結構,而不是象HTML一樣,通過瀏覽器推測文檔中應該是什麼東西來實現HTML的顯示,XML使得剖析器不論在效能還是穩定性方面都更容易實現。XML文檔每次的分析結果都是一致的,不象HTML,不同的瀏覽器可能對同一個HTML作出不同的分析和顯示。
同時因為剖析器不需要花時間重建不完整的文檔,所以它們能比同類HTML能更有效地執行其任務。它們能全力以赴地根據已經包含在文檔中的那個樹結構建造出相應的樹來,而不用在資訊流中的混合結構的基礎上進行顯示。XML標準是對資料的處理應用,而不是只針對Web網頁的。任何類型的應用都可以在剖析器的上面進行建造,瀏覽器只是XML的一個小的組成部分。當然,瀏覽仍舊極其重要,因為它為XML工作人員提供用於閱讀資訊的友好工具。但對更大的項目來說它就不過是一個顯示視窗。因為XML具有嚴格的文法結構,所以我們甚至可以用XML來定義一個應用程式層的通訊協議,比如互連網開放貿易協議(Internet Open Trading Protocol)就是用XML來定義的。從某種意義上說,以前我們用BNF範式定義的一些協議和格式從原則上說都可以用XML來定義。實際上,如果我們有足夠的耐心,我們完全可以用XML來定義一個C++語言的規範。
當然,XML允許大量HTML樣式的形式自由的開發,但是它對規則的要求更加嚴格。XML主要有三個要素:DTD(Document Type Declaration——文件類型聲明)或XML Schema(XML大綱)、XSL(eXtensible Stylesheet Language——可擴充樣式語言)和XLink(eXtensible Link Language——可擴充連結語言)。DTD和XML大綱規定了XML檔案的邏輯結構,定義了XML檔案中的元素、元素的屬性以及元素和元素的屬性之間的關係;Namespace(名域)實現統一的XML文檔資料表示以及資料的相互整合;XSL是用於規定XML文檔呈現樣式的語言,它使得資料與其表現形式相互獨立,比如XSL能使Web瀏覽器改變文檔的標記法,例如資料的顯示順序的變化,不需要再與伺服器進行通訊。通過改變樣式表,同一個文檔可以顯示得更大,或者經過摺疊只顯示外面得一層,或者可以變為列印得格式。而XLink將進一步擴充目前Web上已有的簡單連結。
二、實現XML解析的說明
當然,從理論上說,根據XML的格式定義,我們可以自己編寫一個XML的文法分析器,但是實際上微軟已經給我們提供了一個XML文法解析器,如果你安裝了IE5.0以上版本的話,實際上你就已經安裝了XML文法解析器。可以從微軟網站(www.microsoft.com)下載最新的MSXML的SDK和Parser檔案。它是一個叫做MSXML.DLL的動態連結程式庫,最新版本為msxml3,實際上它是一個COM物件程式庫,裡面封裝了所有進行XML解析所需要的所有必要的對象。因為COM是一種以二進位格式出現的和語言無關的可重用對象。所以你可以用任何語言(比如VB,VC,DELPHI,C++ Builder甚至是劇本語言等等)對它進行調用,在你的應用中實現對XML文檔的解析。下面的關於XML文件物件模型的介紹是基於微軟最新的msxml3為基礎進行的。