楊慧慧
(1. 山東科技大學(xué),山東 青島 266510; 2. 泰山醫(yī)學(xué)院,山東 泰安 271016)
XML作為一種可擴(kuò)展的標(biāo)記語言在網(wǎng)絡(luò)中得到了非常廣泛的應(yīng)用,己經(jīng)成為網(wǎng)絡(luò)數(shù)據(jù)交換事實(shí)上的交換標(biāo)準(zhǔn)。信息時(shí)代的飛速發(fā)展和網(wǎng)絡(luò)應(yīng)用的日益普及促使了類如電子商務(wù)等應(yīng)用系統(tǒng)的產(chǎn)生,于各企業(yè)單位信息系統(tǒng)開發(fā)的階段性,往往缺乏統(tǒng)一的數(shù)據(jù)庫(kù)存儲(chǔ)機(jī)制,很難得以實(shí)現(xiàn)通用的、直接的信息交換。所以,如何實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)之間數(shù)據(jù)的交換,同時(shí)確保數(shù)據(jù)在交換過程中的安全,就成為這些應(yīng)用能否成功的關(guān)鍵問題。
XML是一種可擴(kuò)展的標(biāo)記語言,它與平臺(tái)、語言和協(xié)議無關(guān)的格式描述和自描述性使之很適用于不同應(yīng)用間的數(shù)據(jù)交換,逐漸成為一種在WWW上進(jìn)行信息描述和交換的標(biāo)準(zhǔn)。
XML是數(shù)據(jù)交換的媒介,與關(guān)系數(shù)據(jù)庫(kù)有很多相同之處,XML數(shù)據(jù)與數(shù)據(jù)庫(kù)數(shù)據(jù)的轉(zhuǎn)換對(duì)于保證數(shù)據(jù)傳輸至關(guān)重要,需要建立一個(gè)針對(duì)XML的安全通道,XML能夠與現(xiàn)有的數(shù)據(jù)庫(kù)管理系統(tǒng)實(shí)現(xiàn)自由的數(shù)據(jù)傳遞與轉(zhuǎn)換。XML的數(shù)據(jù)是樹狀結(jié)構(gòu),是半結(jié)構(gòu)化的,數(shù)據(jù)可能是嵌套的混合類型。而現(xiàn)在的主流數(shù)據(jù)庫(kù)均是關(guān)系型的,是結(jié)構(gòu)化的,字段數(shù)值是一些不可分割的最基本的實(shí)體屬性。數(shù)據(jù)在網(wǎng)絡(luò)中進(jìn)行交換的格式都是以XML文檔的形式表現(xiàn)的,它們?cè)谶M(jìn)行交換時(shí)有一個(gè)共同的特征,也即統(tǒng)一在一個(gè)相同的XML模式下。從這個(gè)角度來說,XML文檔與底層數(shù)據(jù)庫(kù)之間的轉(zhuǎn)換實(shí)際上就是XML模式與數(shù)據(jù)庫(kù)模式之間的轉(zhuǎn)換或映射。但并非所有系統(tǒng)都可以通過XML直接進(jìn)行數(shù)據(jù)交換。對(duì)于那些不能直接交換的系統(tǒng),可以采用中間件技術(shù)轉(zhuǎn)換后再通過XML實(shí)現(xiàn)數(shù)據(jù)交換。
兩者轉(zhuǎn)換的實(shí)質(zhì)是:
(1) 從XML文檔中的數(shù)據(jù)(存在方式可以是內(nèi)容、屬性值、元素名等)到關(guān)系模式中的字段的映射;
(2) 從XML文檔中的數(shù)據(jù)的相互位置關(guān)系到關(guān)系模式中元組與元組的關(guān)系及元組與字段的關(guān)系的映射。
XML數(shù)據(jù)模型與關(guān)系數(shù)據(jù)模型之間的轉(zhuǎn)換可以分為基于模板驅(qū)動(dòng)的映射和基于模型驅(qū)動(dòng)的映射兩種形式?;谀0弪?qū)動(dòng)的映射并不事先定義好XML文檔與其他數(shù)據(jù)之間的映射關(guān)系,而是在一個(gè)模板中嵌入帶參數(shù)的SQL命令,這些命令在轉(zhuǎn)換過程中被系統(tǒng)所識(shí)別和執(zhí)行,執(zhí)行的結(jié)果被替換到命令所在的位置,從而生成目標(biāo)XML文檔。它以XML文檔內(nèi)嵌的SQL執(zhí)行的數(shù)據(jù)結(jié)果集合為依據(jù),不涉及數(shù)據(jù)庫(kù)賴以存在的關(guān)系模式或?qū)ο竽J??;谀0宓霓D(zhuǎn)換方法的好處在于轉(zhuǎn)換的步驟比較簡(jiǎn)單,使用靈活,只要給出模板,就可以快速地生成相應(yīng)的XML文檔。不足之處在于,它只適合將其他類型的數(shù)據(jù)轉(zhuǎn)換為XML文檔,對(duì)于反向的轉(zhuǎn)換就無能為力了。基于模型驅(qū)動(dòng)的映射實(shí)現(xiàn)過程是:當(dāng)把數(shù)據(jù)從數(shù)據(jù)庫(kù)傳送到XML文檔或把數(shù)據(jù)從XML文檔傳送到數(shù)據(jù)庫(kù)時(shí),用一個(gè)具體的模型來實(shí)現(xiàn),而不是僅僅依賴內(nèi)嵌的SQL命令?;谀P万?qū)動(dòng)實(shí)現(xiàn)數(shù)據(jù)在數(shù)據(jù)庫(kù)和XML文檔間的雙向傳輸?shù)年P(guān)鍵是在數(shù)據(jù)庫(kù)模式和XML Schema或DTD之間建立雙向映射。具體的思路是把一個(gè)XML文檔表示為由數(shù)據(jù)對(duì)象構(gòu)成的樹,每一個(gè)元素類型和對(duì)象模式中的對(duì)象相對(duì)應(yīng),因此主要在面向?qū)ο髷?shù)據(jù)庫(kù)中使用,當(dāng)然通過傳統(tǒng)的關(guān)系-對(duì)象模型也可以映射到關(guān)系模式中。基于模型驅(qū)動(dòng)的映射又可以分為基于表映射和基于對(duì)象映射兩種:基于對(duì)象的映射雖然應(yīng)用廣泛,但是比較復(fù)雜,其適用于XML文檔與面向?qū)ο髷?shù)據(jù)庫(kù)和層次數(shù)據(jù)庫(kù)數(shù)據(jù)之間的轉(zhuǎn)換;基于表映射把XML文檔看作是具有特定結(jié)構(gòu)的序列表,直接與數(shù)據(jù)庫(kù)中的一張表格相對(duì)應(yīng),雖然在應(yīng)用上有所限制,但是操作非常簡(jiǎn)單。本文采用基于表映射來實(shí)現(xiàn)數(shù)據(jù)庫(kù)的表與XML文檔之間的轉(zhuǎn)換。
基于表的映射是將具有特定結(jié)構(gòu)的XML文檔理解成一張表,直接與數(shù)據(jù)庫(kù)中的表相對(duì)應(yīng)。就數(shù)據(jù)庫(kù)而言,一個(gè)最為簡(jiǎn)單的模型就是將文檔結(jié)構(gòu)定義為如下形式:
(1)打開從一個(gè)表上選取的數(shù)據(jù)集(數(shù)據(jù)集也可以通過多表之間的關(guān)系查詢得來);
(2)以數(shù)據(jù)集相關(guān)的表名創(chuàng)建文檔根元素;
(3)對(duì)于數(shù)據(jù)集中的每一條記錄中的每一字段,創(chuàng)建一個(gè)列元素,并且把該記錄對(duì)應(yīng)于該字段的值作為該列元素的值,如:;
(4)關(guān)閉數(shù)據(jù)集。
生成的XML文檔經(jīng)過加密和簽名之后將作為消息載體通過網(wǎng)絡(luò)被傳輸,一旦接收方接收到,就可以首先驗(yàn)證XML文檔的完整性,然后對(duì)加密的文檔進(jìn)行解密,最后讀取XML文檔生成標(biāo)準(zhǔn)SQL語句執(zhí)行數(shù)據(jù)庫(kù)操作。生成標(biāo)準(zhǔn)SQL語句的過程可以通過下面的步驟來完成:
(1)取得文檔根元素的名稱,即用于存儲(chǔ)操作的表名;
(2)創(chuàng)建SQL語句模板如:Insert into tablename values...,然后提取列元素名稱和元素值,分別將其加入到SQL語句模板中;
(3)在每個(gè)行元素結(jié)束時(shí),執(zhí)行上一步中創(chuàng)建的SQL語句,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的存儲(chǔ)操作。
要使XML能夠真正地在電子商務(wù)的環(huán)境中應(yīng)用,必須具有針對(duì)XML的安全傳輸機(jī)制。本文采用對(duì)XML文檔進(jìn)行加密和簽名的雙重安全保護(hù)的方法,用以保證數(shù)據(jù)在傳輸過程中的安全?;具^程如下圖所示,
1、 XML加密技術(shù)
XML文檔加密具有靈活的加密機(jī)制,它主要研究的是如何對(duì)同一文檔的不同部分進(jìn)行不同處理的情況。XML加密是W3C中的一個(gè)加密標(biāo)準(zhǔn),定義了一個(gè)對(duì)明文加密產(chǎn)生密文以及對(duì)密文解密恢復(fù)明文數(shù)據(jù)的過程。它包括加密語法和處理規(guī)則兩部分,前者描述加密數(shù)據(jù)的表示形式,后者描述加密的處理過程。其功能是對(duì)任意的數(shù)據(jù)(包括一個(gè)XML文檔,一個(gè)XML元素,或XML元素里的內(nèi)容)進(jìn)行加密,加密后的文檔仍然是格式良好的XML文檔。標(biāo)準(zhǔn)的XML加密語法結(jié)構(gòu)格式如下所示。
要加密的數(shù)據(jù)可以是整個(gè)XML文檔、XML元素或XML元素內(nèi)容,加密數(shù)據(jù)的結(jié)果是一個(gè)包含或引用密碼數(shù)據(jù)的XML加密元素。當(dāng)加密XML元素時(shí), 2、 XML簽名技術(shù) XML加密文檔在傳輸過程中的可靠性由XML簽名來實(shí)現(xiàn)。它不僅可以保證數(shù)據(jù)傳輸過程中的完整性和檢測(cè)可能對(duì)數(shù)據(jù)做的更改,而且也可以識(shí)別消息發(fā)送者的身份。消息通常采用發(fā)送者的私鑰進(jìn)行簽名,而采用相應(yīng)的公鑰進(jìn)行驗(yàn)證 。XML簽名按形式可分為分離式、封裝式和被封裝式簽名。下面是XML簽名的統(tǒng)一格式: ( ( ( )+ ( ( 對(duì)XML數(shù)字簽名的校驗(yàn)則包含兩個(gè)必需的步驟,分別是簽名校驗(yàn)(Signature Validation)和參考檢驗(yàn)(Reference Validation)。 (1)簽名校驗(yàn)(Signature Validation) 簽名校驗(yàn)就是對(duì) (2)參考檢驗(yàn)(Reference Validation) 參考檢驗(yàn)的過程則是先對(duì) 只有當(dāng)上述兩個(gè)步驟都成功時(shí),該XML數(shù)字簽名的校驗(yàn)才算通過。 XML由于其得天獨(dú)厚的優(yōu)勢(shì)已經(jīng)成為異構(gòu)數(shù)據(jù)交換技術(shù)的事實(shí)標(biāo)準(zhǔn),而且目前廣泛使用的各種數(shù)據(jù)庫(kù)產(chǎn)品無一例外地都對(duì)XML表現(xiàn)了強(qiáng)大的支持,最后從目前廣泛應(yīng)用的許多軟件產(chǎn)品也逐漸將XML作為其進(jìn)行格式轉(zhuǎn)換的橋梁,這種趨勢(shì)促使各種異構(gòu)的關(guān)系數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)交換采用XML作為標(biāo)準(zhǔn)。 1、XML與數(shù)據(jù)庫(kù)的API接口 要開發(fā)一個(gè)基于XML的數(shù)據(jù)交換系統(tǒng)需要同時(shí)借助于XML編程接口與數(shù)據(jù)庫(kù)編程接口。前者用于對(duì)XML文檔進(jìn)行解析、定位與查詢,所需要的技術(shù)可以是XMLDOM或XMLSAX;后者則是用于對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問,如對(duì)數(shù)據(jù)的查詢、更新與刪除等,這就需要使用ODBC、JDBC或ADO等。 2、數(shù)據(jù)交換模型的體系結(jié)構(gòu) XML的應(yīng)用框架分為三層:數(shù)據(jù)層、對(duì)數(shù)據(jù)進(jìn)行處理的邏輯應(yīng)用層、數(shù)據(jù)顯示與進(jìn)一步處理的客戶層。數(shù)據(jù)層一般都是指后端數(shù)據(jù)庫(kù)服務(wù)器,它們可能是SQL server,也可能是Oracle或DBZ;應(yīng)用層一方面從WEB服務(wù)器接收用戶的數(shù)據(jù)請(qǐng)求,另一方面完成在異構(gòu)數(shù)據(jù)庫(kù)之間通過XML進(jìn)行數(shù)據(jù)交換,并將交換后的數(shù)據(jù)在客戶端上發(fā)布;客戶層實(shí)際上就是一個(gè)具有WEB瀏覽器的瘦客戶端,用戶借助它來定制、執(zhí)行所需要的數(shù)據(jù)交換工作。 3、數(shù)據(jù)交換平臺(tái)的總體架構(gòu)模型 客戶層:客戶層只需要瀏覽器,所有的數(shù)據(jù)交換請(qǐng)求通過瀏覽器以Hr即發(fā)出,交換的結(jié)果也返回到客戶端瀏覽器; 應(yīng)用層:WEB服務(wù)器、數(shù)據(jù)交換核心、DJBC驅(qū)動(dòng)構(gòu)成平臺(tái)的應(yīng)用層,數(shù)據(jù)交換模塊。 數(shù)據(jù)層:由各種不同的異構(gòu)數(shù)據(jù)庫(kù)構(gòu)成,這些數(shù)據(jù)庫(kù)可以是本地的,也可以是遠(yuǎn)程的。 4、數(shù)據(jù)交換規(guī)則字典 有了數(shù)據(jù)交換的規(guī)則字典后,用戶首先在客戶端根據(jù)交換的需要選擇交換規(guī)則,如果沒有所需要的規(guī)則可以先定制規(guī)則。規(guī)則選定后,系統(tǒng)中的規(guī)則解析模塊對(duì)所選中的規(guī)則進(jìn)行解析并分解,以形成實(shí)際的與數(shù)據(jù)庫(kù)相對(duì)應(yīng)的SQL命令,再通過數(shù)據(jù)的提取、數(shù)據(jù)的轉(zhuǎn)換與數(shù)據(jù)寫入等模塊完成一次數(shù)據(jù)交換。 XML本身具有的與平臺(tái)無關(guān)、易于擴(kuò)展、交互性好、語義性強(qiáng)等特性,由于XML在數(shù)據(jù)表示和交換數(shù)據(jù)長(zhǎng)期存檔方面的優(yōu)勢(shì),使得XML數(shù)據(jù)庫(kù)必將在數(shù)據(jù)交換和公共數(shù)據(jù)平臺(tái)建立方面獲得廣泛應(yīng)用。 [1] Feng Tian,David DeWitt,Jianjun Chen.The Design and Performance Evaluation of Alternative XML Storage Strategies[J].ACM STG-MOD Recd.2002,31(1):5-10. [2] 孫宏偉,張樹生,周競(jìng)濤,等.基于模型驅(qū)動(dòng)的XML與數(shù)據(jù)庫(kù)雙向映射技術(shù)[J].計(jì)算機(jī)工程與應(yīng)用,2002,(4):201-202 [3] J.Fong,H.K.Wong,Z.Cheng.Converting relational database into XML documents with DOM[J].Information and Software Technology, 2003(45):335-355. [4] 彭濤,張力.基于本體和XML的數(shù)據(jù)交換研究[J].計(jì)算機(jī)工程, 2006,1(32):25-27.3 基于XML與異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)交換的模型設(shè)計(jì)
4 結(jié) 語
山東第一醫(yī)科大學(xué)(山東省醫(yī)學(xué)科學(xué)院)學(xué)報(bào)2011年2期