【正文】
ocket Server,啟動(dòng)監(jiān)聽: DT_Net_InitServer(TRUE)。 參數(shù): nIDSocket- Client 端套接字句柄 pstrFileName-文件名稱 (全部路徑 ) pszReName-文件重命名 (7) 中止文件發(fā)送 DWORD DT_Net_AbortFile(unsigned int nIDSocket)。 包括文件發(fā)送完畢、接收到文件、文件發(fā)送中斷的回調(diào)。 DWORD DT_Net_InitServer(BOOL bIsServer = TRUE)。 (7) 業(yè)務(wù)邏輯層:實(shí)際上就是整個(gè)系統(tǒng)的用戶接口,或者說是系統(tǒng)功能的實(shí)現(xiàn)層,包括打印單據(jù)、防作弊、報(bào)警處理、用戶管理、查詢統(tǒng)計(jì)、費(fèi)用計(jì)算、實(shí)時(shí)監(jiān)控、基礎(chǔ)數(shù)據(jù)錄入、系統(tǒng)管理等。 業(yè)務(wù)邏輯層 數(shù)據(jù)表示層 XML 文件封裝 XML 文件解析 XML 文件控制層 文件傳輸層 標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié) 議層 物理鏈路層 圖 層次結(jié)構(gòu)模型 30 XML 快速解析技術(shù) (5) XML 文件封裝 /解析層:這是兩個(gè)相逆的過程,也是兩種相對(duì)應(yīng)的操作。 Socket 一般用來描述 IP 地址和端口,是一個(gè)通信鏈接的句柄。 (3) 文件傳輸層:使用 Socket(套接字)技術(shù)實(shí)現(xiàn)文件的傳輸。站點(diǎn)之間若要相互傳送數(shù)據(jù), 則只能通過監(jiān)控中心來轉(zhuǎn)發(fā),更增加了監(jiān)控中心和站點(diǎn)之間收發(fā)數(shù)據(jù)的復(fù)雜性。 (2) 監(jiān)控中心 → 站點(diǎn) 28 XML 快速解析技術(shù) 如監(jiān)控中心發(fā)往站點(diǎn)的基礎(chǔ)數(shù)據(jù)與系統(tǒng)運(yùn)行參數(shù)、監(jiān)控中心收到站點(diǎn)發(fā)來的數(shù)據(jù)后回發(fā)的確認(rèn)應(yīng)答信息、監(jiān)控中心給站點(diǎn)的遠(yuǎn)程控制指令等。它可實(shí)現(xiàn)計(jì)算機(jī)和計(jì)算機(jī)、計(jì)算機(jī)和終端以及終端與終端之間的數(shù)據(jù)信息傳遞。 第四章 一種基于 XML的數(shù)據(jù)通信模型的設(shè)計(jì)與實(shí)現(xiàn) 27 第四章 一種基于 XML 的數(shù)據(jù)通信模型的設(shè)計(jì)與實(shí)現(xiàn) 前邊介 紹了 XML解析技術(shù)的基本知識(shí),這一章來研究一下 XML在數(shù)據(jù)通信中的應(yīng)用。基于這個(gè)數(shù)據(jù)用 DOM 處理大的 XML 文件幾乎是不可能的。它所提取出來的記錄( record)信息格式如下圖所示: VTDXML 優(yōu)點(diǎn) 這里有一組數(shù)據(jù),取自于 VTDXML 的官方網(wǎng)站: VTDXML 的解析速度是 SAX( with NULL content handler)的 ~。使用 VTDXML 將同時(shí)帶來易用性和高性能的雙重優(yōu)點(diǎn),它相比 DOM 的優(yōu)勢(shì)是毋庸置疑的。事實(shí)上, VTDXML 的隨機(jī)存取能力在提供最好的可用性能中起到了重要的作用。 對(duì)軟件開發(fā)者來說, VTDXML 提供了諸多的好處。該令牌是基于虛擬令牌描述符的二進(jìn)制編碼規(guī)范。 VTDXML 是一種新型的、開源的、非提取性的 XML 處理方式。 VTD( Virtual Token Descriptor) ——虛擬令牌描述符,是一種類似于 DOM和 SAX 的處理模式,但是它具有這兩種解析方式都不具備的優(yōu)點(diǎn)。再加上它的單邊解析,這就意味著它不支持隨機(jī)訪問。 (2) 當(dāng)文檔包含許多內(nèi)部交叉引用時(shí), SAX 的實(shí)現(xiàn)是很困難的。這一點(diǎn)也很重要,因?yàn)樗?SAX 的使用變得簡(jiǎn)單。因?yàn)闆]有必要把整個(gè)文檔加載到內(nèi)存中,所以 SAX 對(duì)內(nèi)存的消耗量比 DOM 小得多,并不會(huì)隨著文件變大而增加。處理特定的 XML 文件時(shí),需要為其創(chuàng)建一個(gè)實(shí)現(xiàn)了 ContentHandler 的類來處理特定的事件。 SAX 是一個(gè)用于處理 XML 的事件驅(qū)動(dòng)的“推”模型。因?yàn)檫@不像鼠標(biāo)點(diǎn)擊事件那樣是不可預(yù)測(cè)的, XML 解析事件的發(fā)生是一個(gè)可預(yù)測(cè)的序列。例如,對(duì)于點(diǎn)擊鼠標(biāo)事件,應(yīng)用程序中就必須有對(duì)它進(jìn)行響應(yīng)的程序。如果只需關(guān)注XML 文檔的一小部分,那么創(chuàng)建那些永遠(yuǎn)不被使用的對(duì)象是極其浪費(fèi)的; DOM解析器必須在應(yīng)用程序代碼取得控制權(quán)之前讀取整個(gè)文檔。 然而, DOM 解析也存在如下一些問題: 1) DOM 構(gòu)建整個(gè)文檔駐留內(nèi)存的樹。它還可以在任何時(shí)候在樹中上下導(dǎo)航,而不是像 SAX 那樣是一次性的處理。對(duì)諸如 XML 文檔這樣的結(jié)構(gòu)化數(shù)據(jù)來說,樹形結(jié)構(gòu)是一個(gè)顯而易見的模型。 DOM 提供的 API 與 編程語言無關(guān),所以對(duì)一些 DOM 標(biāo)準(zhǔn)中沒有明確定義的接口,不同解析器的實(shí)現(xiàn)方法也可能有所差別。 (4) 集合索引: DOM 提供了幾種集合索引方式,可以對(duì)節(jié)點(diǎn)按指定方式進(jìn)行遍歷。 DOM 是一種與平臺(tái)和語言無關(guān)的接口,它允許程序和腳本動(dòng)態(tài)訪問和修改文檔的內(nèi)容、結(jié)構(gòu)和類型?,F(xiàn)在, XML 越來越多地用來表示存儲(chǔ)在不同系統(tǒng)中的不同種類的信息 ,而很多這種信息以前都被認(rèn)為是數(shù)據(jù)而不是文檔。這套預(yù)先存在的對(duì)象形成了一個(gè)完整的模型,即文檔對(duì)象模型??梢哉f“自行車”對(duì)象擁有一些屬性: make、 model、 year 和 color。事件是瀏覽器從用戶或環(huán)境中得到的某種輸入,例如,用戶提供的事件“ click”。對(duì)象是一 個(gè)數(shù)據(jù)包:屬性(變量)和方法(函數(shù))的集合都被歸類在內(nèi)。 5) XML 解析器將對(duì) XML 數(shù)據(jù)送給負(fù)載均衡器,隨后這些數(shù)據(jù)被送上 Inter。 1) 負(fù)載均衡器接收來自 Inter 的入站 XML 流量。根據(jù) XML 處理器如何讀取 XML 文檔中的數(shù)據(jù)結(jié)構(gòu)以及它需要向應(yīng)用程序提供的信息,規(guī)范描述了 XML處理器所 必需的行為。標(biāo)記數(shù)據(jù)是對(duì)文檔存儲(chǔ)布局和邏輯結(jié)構(gòu)的描述。不正確的解析會(huì)導(dǎo)致過度的內(nèi)存 消耗和過長(zhǎng)的處理時(shí)間,從而大大降低系統(tǒng)的整體性能 [9]。 XML 本身只是以純文本對(duì)數(shù)據(jù)進(jìn)行編碼的一種格式,要想利用 XML,或者說利用 XML 文件中所編碼的數(shù)據(jù),必須先將數(shù)據(jù)從純文本中解析出來,因此,要求必須有一個(gè)能夠識(shí)別 XML 文檔信息的文本文件閱讀器(即 XML 解析器),用來解析 XML 文檔并提取其中的內(nèi)容。所以人們最終得到的是可以容易地添加、修改和重新排序的靈活的源信息。 XSLFO 文檔中的各種格式化對(duì)象指明內(nèi)容在頁面中的放置順序,但格式化的細(xì)節(jié)如頁面的大小、元素的尺寸、顏色、XML 文檔 XSL 樣式表 XML解析器 XML解析器 XML解析器 源樹 結(jié)果 樹 文檔 存儲(chǔ) 成像 圖 XSL 的工作過程 16 XML 快速解析技術(shù) 字體等必須由格式化屬性來說明。 XSLT 用 XPath 語言來選擇源樹中要進(jìn)行處理的節(jié)點(diǎn),指定處理該節(jié)點(diǎn)的不同方式的條件,并產(chǎn)生插入到結(jié)果樹中的文本。 樹轉(zhuǎn)換將源樹轉(zhuǎn)換成結(jié)果樹。 XSLFO則是描述 XSL 格式化對(duì)象的 XML 詞匯,它提供大量的格式化命令,用來說明新文檔以何種方式顯示給讀者。 XSL 目前,存在兩種顯示 XML 文檔的方法,一種是 CSS( Cascading Style Sheet,層疊樣式表),另一種就是下面主要討論的 XSL( Extensible Stylesheet Language,可擴(kuò)展樣式表語言)。下面是一個(gè) XML 簡(jiǎn)單鏈接的例子: p xmlns:xlink=― ?????????????? a xlink:type=―simple‖xlink:href=―‖this works too/a XLink 規(guī)范引用另外兩個(gè)重要規(guī)范 XPath( XML Path Language, XML 路徑語言)和 XPointer( XML Pointer Language, XML 指針語言)。使用 XLink 創(chuàng)建鏈接時(shí),其實(shí)是指定了兩個(gè)或更多資源,然后連接它們。使用名域說明將一個(gè) URI 引用與一個(gè)或多個(gè) XML 元素聯(lián)系在一起,作為一個(gè)前綴將它們相互區(qū)分開。因此, XML 模式雖然類似于 DTD,卻比 DTD 功能更強(qiáng)。 XML 模式是一個(gè) XML 文檔,可以使用 XML 工具創(chuàng)建并編輯它。開發(fā)者常常不需要建立他們自己的 DTD,但如果未發(fā)現(xiàn)適合自己的已存在的 DTD,也可以選擇使用 現(xiàn)有的 DTD 的一部分并以它為基礎(chǔ)進(jìn)行開發(fā)。 DTD 分為內(nèi)部和外部?jī)煞N。 DTD 和模式 XML 提供兩種控制文檔內(nèi)容的機(jī)制,一種是 DTD( Document Type Definition,文檔類型定義),另一種是 XML 模式( Schema) [6]。由于 name 標(biāo)記和 address 標(biāo)記被放在了未被解析的 CDATA 片段中,所以它們不會(huì)被解析。具體地說, XML 文件的 CDATA 片段包含的是不需要作為 XML 字符數(shù)據(jù)解析的內(nèi)容。最明顯的一個(gè)處理指令的例子就是眾所周知的 xml 處理指令,在地址簿的例子中是: ?xml version=‖‖encoding=―UTF8‖standalone=―yes‖? 這個(gè)處理指令指出了這個(gè)文件是基于 XML 版本 的。 處理指令 XML 語法不僅僅涉及了字符數(shù)據(jù)和標(biāo)記,其中還包含了處理指令。對(duì)注釋的唯一限制就是在注釋中不能包含兩個(gè)連續(xù)的連字符。 注釋可以被用在 XML 文件有解析字符數(shù)據(jù)出現(xiàn)的任何地方。 注釋 在 XML 文件中,注釋用來表示那些技術(shù)上不是文件內(nèi)容的信息。apos。)作為解析字符數(shù)據(jù): panyFrankamp。 實(shí)體引用 實(shí)體是構(gòu)成 XML 文件的基本單位,而這就是實(shí)體本身以及通常通過實(shí)體引用構(gòu)成的其它實(shí)體。第二個(gè)標(biāo)記中的斜杠指出它是這對(duì)標(biāo)記中的結(jié)束標(biāo)記。 XML 中空元素的標(biāo)記必須在元素名之后用一個(gè)斜杠( /)用來指出它是空的。為了便于理解,可以將“元素”這個(gè)主語理解為邏輯上的標(biāo)記片段,而“標(biāo)記”是指用來在 XML文件中表示元素的文本字符串。在該例子中使用了下面的文件類型聲明: !DOCTYPE addressbook SYSTEM―‖ 在文件類型聲明中明確地指定了文件的根元素是 addressbook 元素,文件的外 第二章 可擴(kuò)展標(biāo)記語言 9 部 DTD—— 在文件的類型聲明中也被明確地引用。 ? 指出文件的外部 DTD。 ? 文件類型說明 文件類型聲明在 XML 中用來在文件中詳細(xì)地說明文件信息,其中包括文件根元素和文件類型定義( Document Type Definition, DTD) [5]。在圖 的文檔示例中, !–This is my good friend 就是注釋。apos。 為了更好地理解 XML 語法的主要組成部分,圖 包含一個(gè)用來保存聯(lián)系信息的 XML 地址簿。apos;”和“ amp。 ? XML 用五種預(yù)定義實(shí)體“ amp。在深入了解 XML 文檔結(jié)構(gòu)之前,先需要了解以下幾條基本語法規(guī)則 [3]: ? XML 區(qū)分大小寫,元素的起始標(biāo)注必須正好匹配結(jié)束標(biāo)注。文檔首部就像一個(gè)引導(dǎo)記號(hào),給處理器提供關(guān)于如何處理文檔主體(即文檔實(shí)例)的指示。 XML 文檔語法基礎(chǔ) XML 解析器讀取兩類 XML 文檔:良構(gòu)文檔和有效文檔。盡管 HTML 推出了一個(gè)又一個(gè)新版本,卻始終滿足不了不斷增長(zhǎng)的需求。 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)記語言)作為文檔說明工具而被世人所知,并成為國(guó)際標(biāo)準(zhǔn)組織( ISO)的一項(xiàng)國(guó)際標(biāo)準(zhǔn),即 ISO8879。然后介紹了 VTDXML解析結(jié)構(gòu)的原理。 本文章節(jié)安排如下: 第一章對(duì) XML 的發(fā)展 、 XML 解析技術(shù)的分類 和本文研究背景進(jìn)行了簡(jiǎn)要介紹。 XML 文檔解析的主要任務(wù)是檢查編輯的 XML 文檔是否是結(jié)構(gòu)完整( Wellformed)和合法的( Validate)。 2. 性能:由于 XML 固有的冗余特性,對(duì) XML 數(shù)據(jù)的管理將增大應(yīng)用服務(wù)器的負(fù)擔(dān)。 XML 的使用因此而快速增長(zhǎng),分析家 Ron Schmelzer 預(yù)測(cè),到 2021 年, XML 將由 2021 年網(wǎng)絡(luò)流量的 3%上漲至 24%,并且到 2021 年將至少上漲至 40%。 論文研究背景 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ù)雜性。目前很多國(guó)際著名 的 公司已完全加入到 XML 支持者的行列,如微軟 已廣泛使用了 XML,Netscape 新版本也將會(huì)支持 XML,其它公司,包括 IBM, Adobe, Sun 和 Xerox等也宣布支持 XML,并都在著手相關(guān)產(chǎn)品的研制。在分析了現(xiàn)有解析方式優(yōu)劣的基礎(chǔ)上,第四章重點(diǎn)討論了XML 在監(jiān)控系統(tǒng)的數(shù)據(jù)通信模型中的設(shè)計(jì)與實(shí)現(xiàn)。摘 要 摘 要 本文研究了 XML 解析技術(shù),介紹了 SAX, DOM,和 VTDXML 技術(shù)以及一種基于 XML 的數(shù)據(jù)通信模型 。第三章中詳細(xì)介紹了 XML解析方式 DOM 和 SAX,并對(duì)兩種方式進(jìn)行了性能的比較 ,并在最后介紹了VTDXML 解析技術(shù) 。 XML 所擁有的可擴(kuò)展性、自描述性、自相容性以及跨文種等優(yōu)點(diǎn),使得它非常適于 Web 上的數(shù)據(jù)交換與信息發(fā)布,被廣泛應(yīng)用到電子商務(wù)、電子政務(wù)、 Web 服務(wù)等許多領(lǐng)域。 XML 解析技術(shù)是