王 昕
[摘要]以數(shù)字化校園建設(shè)作為背景,基于XML在集成異構(gòu)數(shù)據(jù)源、數(shù)據(jù)的多種顯示等方面的重要應(yīng)用,探討數(shù)字化校園建設(shè)中的不同平臺/系統(tǒng)之間的數(shù)據(jù)交換及信息的處理和發(fā)布等方面的重要技術(shù)及解決方法。
[關(guān)鍵詞]校園網(wǎng) XML 數(shù)據(jù)交換
中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0420052-01
數(shù)據(jù)處理是數(shù)字化校園網(wǎng)建設(shè)的核心部分。在數(shù)字化校園網(wǎng)的建設(shè)中,可以用XML統(tǒng)一表示來自不同數(shù)據(jù)源的數(shù)據(jù),來實現(xiàn)學(xué)校各部門之間以及部門內(nèi)部各系統(tǒng)間的數(shù)據(jù)共享、數(shù)據(jù)交互。但是XML文檔本身只是一個文本文件,它需要能識別XML格式化信息的解析器來解析并提取其中的內(nèi)容。
在J2EE架構(gòu)中,有兩種基本方式對XML數(shù)據(jù)進(jìn)行解析并讀入到某個對象模型中,它們是DOM方式和SAX方式。DOM和SAX是兩種最流行的應(yīng)用于XML的編程API,這兩種技術(shù)的根本差別在于客戶應(yīng)用程序得到XML文檔數(shù)據(jù)的方式不同。SAX是事件驅(qū)動模型,這就意味著解析器識別出文檔特性時,客戶應(yīng)用程序不斷接到通知。相反地,DOM模型是基于對象的,整篇XML文檔作為分層次排列的對象來解析和存儲,客戶應(yīng)用程序可以隨機(jī)訪問這些對象。
在應(yīng)用程序的開發(fā)過程中,應(yīng)用程序不是直接對XML文檔進(jìn)行操作的,而是首先由XML解析器對XML文檔進(jìn)行解析,然后,應(yīng)用程序通過XML解析器所提供的DOM接口或SAX接口對解析結(jié)果進(jìn)行操作,從而間接地實現(xiàn)了對XML文檔的訪問。
我們在進(jìn)行數(shù)字化校園的系統(tǒng)開發(fā)時,根據(jù)具體的情況分別用到這兩種解析器,下面對這兩種解析器的解析步驟和相應(yīng)的操作進(jìn)行介紹。
一、基于DOM API的數(shù)據(jù)處理
(一)使用DOM解析XML文件
為了使用XML文件中的信息,必須解析文件以創(chuàng)建一個Document對象。在javax.xml.parsers中,jdkl.4提供的DoumentBuilder和DocumentBu
-ilderFactory組合可以對XML文件進(jìn)行解析,轉(zhuǎn)換成DOM文檔。Document對象是一個接口,因而不能直接將它實例化;一般情況下,應(yīng)用程序會相應(yīng)使用一個工廠。
具體的解析步驟如下:
1.創(chuàng)建一個解析器工廠,以利用這個工廠來獲得一個具體的解析器對象。
2.創(chuàng)建DocumentBuilder對象,這個對象代表了具體的DOM解析器。
3.解析XML文件以創(chuàng)建Document對象。
這樣就創(chuàng)建了一個XML的DOM文檔樹,然后可以開始構(gòu)建應(yīng)用程序來對DOM的文檔樹進(jìn)行訪問了。利用DOM,開發(fā)人員可以進(jìn)行動態(tài)地創(chuàng)建 XML文檔、遍歷結(jié)構(gòu)、添加、修改、刪除內(nèi)容等操作。DOM面向?qū)ο蟮奶匦?,使人們在處理和XML解析相關(guān)的事務(wù)時節(jié)省大量精力,是一種符合代碼重用思想的強(qiáng)有力的編程工具。
(二)基于DOM API的節(jié)點編輯
在對XML文檔進(jìn)行解析并獲得XML文檔的Document對象后,就可以開始構(gòu)建應(yīng)用程序來對DOM的文檔樹進(jìn)行訪問了。目前Sun公司推出的jdkl. 4測試版中的java API遵循了DOM level 2 Core推薦接口的語義說明,提供了相應(yīng)的Java語言的實現(xiàn)。在rg. xml. dom中,jdkl. 4提供了Document,DocumentType,Node,NodeList,Element,Text等接口,這些接口均是訪問DOM文檔所必須的。我們可以利用這些接口創(chuàng)建、遍歷、修改DOM文檔。
二、基于事件的數(shù)據(jù)處理
(一)SAX解析步驟
SAX在讀取XML流的同時處理它們,而分析這個代碼片斷的SAX處理器一般情況下將產(chǎn)生以下事件:startDocument、endDocument、startElement、endElement和characters。SAX API允許開發(fā)人員捕捉這些事件并對它們做出反應(yīng)。
SAX處理涉及以下幾步:
1.創(chuàng)建事件處理程序。
2.創(chuàng)建SAX解析器。
3.將事件處理程序分配給解析器。
4.解析文檔,同時向事件處理程序發(fā)送每個事件。
(二)事件驅(qū)動的文檔解析實例
SAX解析器對XML文檔進(jìn)行解析,將要使用的部分?jǐn)?shù)據(jù)提取到應(yīng)用程序,為了保存數(shù)據(jù)以便其他程序能夠調(diào)用數(shù)據(jù),我們可以采用Java提供的散列表類Hashtable來保存解析XML文件后的所有節(jié)點名字以及節(jié)點的數(shù)據(jù)值。哈希表HashTable是從Dictionary派生出來的,它具有一系列的關(guān)鍵字和數(shù)值,一個關(guān)鍵字對應(yīng)一個數(shù)值,識別主要是通過對象的哈希代碼hashCode識別。
程序中使用Hashtable類存儲數(shù)據(jù)時,首先要用Hashtable()創(chuàng)建一個散列表對象,然后使用put()方法將數(shù)據(jù)填入該對象中,查詢數(shù)據(jù)可以使用get方法。
三、數(shù)據(jù)交換流程的設(shè)計
XML為在不同的數(shù)據(jù)庫之間傳遞信息提供了理想的機(jī)制。從本質(zhì)上講,數(shù)據(jù)庫是專有的,即每個數(shù)據(jù)庫有不同的元素命名結(jié)構(gòu),不同的規(guī)格化級別,甚至描述枚舉信息的方法也不盡相同。利用DOM/SAX能夠簡化各種數(shù)據(jù)庫之間信息傳遞的方式。通過將DOM/SAX作為公共的傳輸機(jī)制,每個數(shù)據(jù)庫只需要以XML作為中介導(dǎo)入和導(dǎo)出即可。
用XML作為數(shù)據(jù)交換的中介,系統(tǒng)可以屏蔽掉后臺的多種數(shù)據(jù)源,用統(tǒng)一的XML文檔呈現(xiàn)給用戶。接收數(shù)據(jù)方根據(jù)數(shù)據(jù)XML文檔的類型可以對數(shù)據(jù)XML文檔進(jìn)行任意的業(yè)務(wù)處理。在數(shù)字化校園建設(shè)中,為了使基于XML的業(yè)務(wù)數(shù)據(jù)交換成為可能,就必須實現(xiàn)數(shù)據(jù)庫的XML數(shù)據(jù)存取,并且將XML數(shù)據(jù)同應(yīng)用程序集成,進(jìn)而使之同現(xiàn)有的業(yè)務(wù)規(guī)則相結(jié)合,并且加以利用,從而完成學(xué)校各部門之間以及學(xué)校與教育主管部門之間的交換數(shù)據(jù),實現(xiàn)教務(wù)數(shù)據(jù)的上傳下發(fā),真正使教育信息化成為一體化應(yīng)用,不再是信息孤島。
開發(fā)基于XML的動態(tài)應(yīng)用(如動態(tài)數(shù)據(jù)交換、動態(tài)信息發(fā)布),就是要能從數(shù)據(jù)庫中取出需要交換的數(shù)據(jù),并動態(tài)產(chǎn)生XML文檔在各個應(yīng)用程序之間傳遞,不同應(yīng)用系統(tǒng)中不同語言編寫的應(yīng)用程序就可正確識別和解析文檔中的數(shù)據(jù),實現(xiàn)數(shù)據(jù)的動態(tài)交換。
以上是在基于XML的數(shù)據(jù)交換技術(shù)在校園網(wǎng)中進(jìn)行共享數(shù)據(jù)的一種解決思路,希望能夠拋磚引玉,尋求一種更好的解決方案。
參考文獻(xiàn):
[1](美)Natanya Pitts,徐曉梅、龔志翔、王曉云等譯,XML技術(shù)內(nèi)幕,北京:機(jī)械工業(yè)出版社,2002.
[2]章明、許青松、沈錫臣,基于XML的數(shù)據(jù)交換共享平臺模型,清華大學(xué)學(xué)報(自然科學(xué)版),2003.01.