《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于XML異構數(shù)據(jù)訪問中間件的設計與實現(xiàn)
基于XML異構數(shù)據(jù)訪問中間件的設計與實現(xiàn)
楊金璽1,2,柏文陽1
1.南京大學 計算機科學與技術系,江蘇 南京210093; 2.大慶榆樹林油田開發(fā)有限責任公司,黑龍
摘要: 提出了一個基于XML的異構數(shù)據(jù)訪問中間件模型,給出了該模型的體系結構并對各部分功能做了定義。詳細介紹了模型中XML模板與包裝器的設計和實現(xiàn)。
Abstract:
Key words :

摘  要: 提出了一個基于XML的異構數(shù)據(jù)訪問中間件模型,給出了該模型的體系結構并對各部分功能做了定義。詳細介紹了模型中XML模板與包裝器的設計和實現(xiàn)。
關鍵詞: XML語言  中間件  異構數(shù)據(jù)

  隨著信息化建設的不斷深入,不少企業(yè)與組織建立了各種應用系統(tǒng)。由于這些系統(tǒng)是在不同階段開發(fā)的,每個系統(tǒng)都有自己的運行環(huán)境和數(shù)據(jù)存儲方式,這些數(shù)據(jù)的格式不統(tǒng)一,各個應用系統(tǒng)彼此封閉,數(shù)據(jù)難以交換和共享。為了使這些數(shù)據(jù)能夠更好地實現(xiàn)資源共享,迫切需要建立一個公共的集成環(huán)境,對用戶提供統(tǒng)一和透明的訪問界面。利用中間件(Middleware)技術集成各種異構數(shù)據(jù)時,不用改變原始數(shù)據(jù)的存儲和管理方式,可集中為異構數(shù)據(jù)源提供一個統(tǒng)一的高層檢索服務,是實現(xiàn)異構數(shù)據(jù)集成的理想解決方案。
異構數(shù)據(jù)訪問中間件系統(tǒng)的核心就是要解決異構數(shù)據(jù)源的分布性、自制性和異構性。隨著分布式計算技術(如CORBA、XML等)的迅猛發(fā)展,使得原來的系統(tǒng)可以通過它們進行封裝,隱藏內(nèi)部結構,采用公共數(shù)據(jù)模型將局部共享數(shù)據(jù)進行封裝,對外提供公共訪問接口。異構數(shù)據(jù)訪問中間件為企業(yè)提供一致的、便于訪問的數(shù)據(jù)集合,從而解決信息孤島、數(shù)據(jù)質(zhì)量差、數(shù)據(jù)不一致等問題。
1  XML全局數(shù)據(jù)模式
  異構數(shù)據(jù)訪問中間件必須提供一種全局數(shù)據(jù)模式來統(tǒng)一異構源數(shù)據(jù)模式。異構數(shù)據(jù)集成的全局模式必須滿足:①能夠描述各種數(shù)據(jù)格式,無論其為結構化還是半結構化,無論它是支持所有的查詢語言還是簡單的文本查詢;②易于發(fā)布和進行數(shù)據(jù)交換,集成后的數(shù)據(jù)可以方便地以多種格式發(fā)布和便于應用交換數(shù)據(jù)。
早期異構數(shù)據(jù)的集成系統(tǒng)通常采用關系或?qū)ο蟮臄?shù)據(jù)模式作為全局模式。然而,它們并不能滿足網(wǎng)絡時代的Intranet/Internet應用所提出的高標準。隨著可擴展標記語言XML及其相關技術的發(fā)展,XML不僅成為了應用間交換數(shù)據(jù)的一種標準,也是萬維網(wǎng)重要的信息交換標準和表示技術之一[1]。
XML是一種具有很強的數(shù)據(jù)描述能力的標記語言,它第一次提供了一種信息交換模式,此格式是可編輯、易理解并且可表示任何類型的結構化或半結構化的信息。XML 提供了豐富的數(shù)據(jù)構造和解析方法,能夠適應多樣并且不斷變化的網(wǎng)絡應用環(huán)境,被廣泛用于異構系統(tǒng)間的數(shù)據(jù)交換和互操作應用中。
2  系統(tǒng)框架
  中間件是一種支持分布式應用的重要組件,它是一種獨立的系統(tǒng)軟件和服務程序。分布式應用借助中間件在不同的技術間共享資源,為應用提供統(tǒng)一的編程模型,處理異構、分布問題和管理計算資源及網(wǎng)絡通信。
  大多數(shù)基于 XML 的數(shù)據(jù)集成系統(tǒng)框架采用Mediator/Wrapper架構,該架構的缺點是查詢效率不高。這是由于底層數(shù)據(jù)源的數(shù)據(jù)結構、數(shù)據(jù)模式、存儲方法、查詢能力差別很大。數(shù)據(jù)訪問中間件的設計是非常復雜的,包裝器同時要兼顧數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)清洗等任務,并且這還僅是在查詢時觸發(fā)的處理。為此本文采用從原始數(shù)據(jù)源中預先抽取、轉(zhuǎn)換、加載的思想,對數(shù)據(jù)源作預處理。
  基于XML的異構數(shù)據(jù)訪問中間件模型XHDAM(XML-based Heterogeneous Data Access Model)的系統(tǒng)結構如圖1所示。XHDAM從分布式對象操作和異構數(shù)據(jù)集成二個方面解決系統(tǒng)互操作問題。首先,XHDAM基于CORBA技術,通過CORBA提供的ORB(Object Request Broker)實現(xiàn)分布計算環(huán)境中對象操作支持,使不同的應用系統(tǒng)能夠方便地與XHDAM交互,達到不同應用系統(tǒng)之間交互的目的,從而實現(xiàn)系統(tǒng)的透明性。另外CORBA提供了完整的分布式對象操作環(huán)境,XHDAM通過它可以方便地獲得操作的完整性和安全性保證。另一方面,在系統(tǒng)間數(shù)據(jù)傳遞與互操作上,XHDAM采用XML作為數(shù)據(jù)描述與交換的語言,同時在XHDAM中通過XML模板來描述異構系統(tǒng)之間數(shù)據(jù)的關系和轉(zhuǎn)換方法。只要適當?shù)囟x統(tǒng)一的模板,一種系統(tǒng)的數(shù)據(jù)就能夠方便、準確地轉(zhuǎn)換為XML數(shù)據(jù)。

  (1)客戶端:向CORBA服務器發(fā)出訪問請求。客戶端只提供統(tǒng)一的訪問界面,不處理業(yè)務邏輯關系和集成管理任務。
  (2)CORBA公共服務:提供CORBA的標準服務,包括名字服務、事件服務、安全服務等。
  (3)查詢處理器:當客戶請求時,分解全局查詢到局部查詢;當查詢結束時,負責將局部查詢結果匯總返回給客戶端。另外還負責局部查詢的優(yōu)化,提高查詢效率。
  (4)目錄服務:是XML存儲庫的一個摘要,包含XML存儲庫的靜態(tài)和動態(tài)信息。XML數(shù)據(jù)目錄服務可以自動、智能地建立目錄服務,并對信息自動搜索、自動分類、自動傳輸。
  (5)事務服務:負責全局模式和局部模式之間的集成與分解關系,如全局事務到局部子事務的處理,全局查詢到局部子查詢的處理。
  (6)包裝器:負責解決異構數(shù)據(jù)源的包裝問題,將分散在各處的數(shù)據(jù)源按照XML模板進行包裝。開始,包裝器一次性將數(shù)據(jù)源中的所有數(shù)據(jù)轉(zhuǎn)換到存儲庫中。當有新數(shù)據(jù)源追加到源數(shù)據(jù)庫時,就通過觸發(fā)器觸發(fā)包裝程序?qū)⒃磾?shù)據(jù)庫中的新數(shù)據(jù)包裝成XML數(shù)據(jù)加入存儲庫。客戶端對數(shù)據(jù)的訪問是通過查詢處理器訪問XML存儲庫實現(xiàn)的。
3  XML模板和包裝器的設計與實現(xiàn)
  為了提供對XML 的支持,各大數(shù)據(jù)庫廠商紛紛對各自的數(shù)據(jù)庫產(chǎn)品進行了擴展,提供了基于模板的查詢。但各數(shù)據(jù)庫管理系統(tǒng)支持的查詢模板語法差異很大,不能互用。因此,訪問多個異構數(shù)據(jù)源時需要為不同類型的數(shù)據(jù)庫提供多個符合其相應語法的模板文件,這就增加了項目開發(fā)的復雜度。針對各數(shù)據(jù)庫管理系統(tǒng)不能互用的問題,提出一種獨立于具體數(shù)據(jù)庫管理系統(tǒng)的模板腳本語言XTemplate,以支持各種結構化數(shù)據(jù)源的包裝。包裝器按照XML模板的數(shù)據(jù)模式將異構數(shù)據(jù)源中的數(shù)據(jù)包裝成XML數(shù)據(jù)。
3.1 XTemplate模板設計
  為了訪問不同的數(shù)據(jù)源,需要在模板文件中定義數(shù)據(jù)源的連接屬性。其中:數(shù)據(jù)庫連接屬性包括servername、dbparm、database、logid、logpass、autocommit;代碼SQL語句屬性為xviewsqlcode;視圖名稱屬性為xviewname;視圖SQL語句屬性為xviewsql。表達式中的Eq和Attvalue含義分別來自XML元語言[xml25]和[xml10]。
  [1]ServernameAttr∷=′xviewsqlcode′ Eq AttValue
  [2]DbparmAttrr∷=′xviewsqlcode′ Eq AttValue
  [3]DatabaseAttr∷=′xviewsqlcode′ Eq AttValue
  [4]LogidAttr∷=′xviewsqlcode′ Eq AttValue
  [5]LogpassAttr∷=′xviewsqlcode′ Eq AttValue
  [6]AutocommitAttr∷=′xviewsqlcode′ Eq AttValue
  [7]XviewnameAttr∷=′xviewname′ Eq AttValue
  [8]XviewsqlAttr∷=′xviewsql′ Eq AttValue
  [9]XviewsqlcodeAttr∷=′xviewsqlcode′ Eq AttValue
  XTemplate 對XML元語言中的起始標簽Stag[xml40]作了如下擴展,其中Name、S、Attribute分別來自[xml15]、[xml3]和[xml41]:
  Stag∷=′<′ Name (S XviewnameAttr | S XviewsqlAttr | S XviewsqlcodeAttr | S Attribute)*? ′>′
  最后,XTemplate 模板文件定義如下,其中prolog、element分別來自[xml39]和[xml22]:
  xtemplatefile∷=prolog ′<xtemplate′ [ServernameAttr] [DbparmAttr] [DatabaseAttr] [LogidAttr] [LogpassAttr] [AutocommitAttr]> [element] ′</xtemplate>′
  使用XTemplate定義的模板文件是格式正確(Well-formed)的XML文檔,且具有根元素<xtemplate>,可用來提供數(shù)據(jù)源連接參數(shù)servername、dbms、dbparm、database、logid、logpass、autocommit。
具有xviewname屬性和xviewsql屬性的子元素稱為視圖模板元素,因為其提供了表征數(shù)據(jù)集的名稱和SQL語句的二個屬性。xviewname屬性提供視圖名稱,xviewsql屬性提供視圖SELECT語句。SELECT語句中可以用:p_xviewname:p_columnname的形式傳遞父視圖的列名給子視圖,以反映視圖間的連接關系。
如果子元素和屬性的值對應于數(shù)據(jù)源中的列名,且需要在解析執(zhí)行時用檢索結果動態(tài)替換,則稱其為列元素和列屬性。列元素可以用xviewsqlcode 屬性指定以實際值替換代碼值。
  一個使用XTemplate 定義的模板文件涉及的關系如表1所示。

  基于表1,使用XTemplate 定義的一個模板文件如下:
  <?xml version=″1.0″ encoding=″gb2312″?>
  <xtemplate dbms=″odbc″dbparm=″connectstring=′DNS=
  oracle;UID=scott;PWD=tiger′″>
     <員工列表>
         <員工 xviewname=″員工″ xviewsql=″SELECT ENO,ENAME,SAL FROM  WHERE ENO=′E1′ or ENO=′E2′″>
         <編號>ENO</編號>
         <姓名>ENAME</姓名>
         <薪水>SAL</薪水>
          </員工>
     </員工列表>
  </xtemplate>
  使用XTemplate解析程序處理上述模板返回XML文檔如下:
  <?xml version=″1.0″ encoding=″gb2312″?>
     <員工列表>
         <員工 員工序號=″1″>
          <編號>E1</編號>
          <姓名>J.Doe</姓名>
          <薪水>4000</薪水>
     </員工>
  <員工 員工序號=″2″>
          <編號>E2</編號>
          <姓名>M.Smith</姓名>
          <薪水>3400</薪水>
  </員工>
  </員工列表>
  使用XTemplate書寫的模板文件獨立于具體的數(shù)據(jù)庫管理系統(tǒng),無需數(shù)據(jù)庫管理系統(tǒng)內(nèi)置的功能模塊解析執(zhí)行,而是由獨立于具體數(shù)據(jù)庫管理系統(tǒng)的軟件模塊解析執(zhí)行并返回XML查詢結果。這樣,針對不同數(shù)據(jù)庫管理系統(tǒng)設計的模板在語法上取得了一致。
  XTemplate定義模板文件可以使沒有內(nèi)置XML查詢功能的數(shù)據(jù)庫管理系統(tǒng)獲得對XML查詢的支持。采用XTemplate之后,結構化的數(shù)據(jù)源需要解釋執(zhí)行的是XTemplate 解析執(zhí)行軟件傳遞來的SQL語句,這是結構化的數(shù)據(jù)源通常會提供的標準功能。結構化的數(shù)據(jù)源返回的數(shù)據(jù)集仍由XTemplate解析執(zhí)行軟件轉(zhuǎn)換為XML結果文檔,并返回給調(diào)用者。
3.2 包裝器的設計與實現(xiàn)
  XML包裝器是整個模型中的重要組成部分,它將異構的數(shù)據(jù)源按照統(tǒng)一的數(shù)據(jù)模型進行包裝,在客戶端對數(shù)據(jù)的訪問都是針對統(tǒng)一的數(shù)據(jù)模型標準。包裝器結構如圖2所示。

  XML包裝器是一個模板文件解析程序,只要傳入不同的模板文件即可生成對應的XML文檔。包裝器工作過程如下:從傳來的模板文件建立DOM對象,取得數(shù)據(jù)庫的連接屬性,進而連接數(shù)據(jù)庫;從XTemplate模板文件的xviewsql屬性獲得SELECT語句,在數(shù)據(jù)庫表或視圖中執(zhí)行此查詢語句,建立視圖數(shù)據(jù)集;將數(shù)據(jù)集中的相關數(shù)據(jù)代入。關鍵解析算法如下:
  //predealdom方法建立視圖,復制建立的所有元素
  Void predealdom(domobject& root) {
    //視圖模板元素指有xviewsql屬性的元素
    If (root 不是視圖模板元素){
       對root所有子元素遞歸調(diào)用predealdom;
    }
    else {
       視圖序號增加;
       為root添加xviewindex屬性,值為當前視圖序號;
       從xviewsql屬性獲得視圖SELECT語句;
       if (SELECT語句中有參數(shù)){
          查找相應祖先視圖取得實際值代入;
       }
       根據(jù)SELECT 語句建立視圖數(shù)據(jù)集;
       if (不能創(chuàng)建視圖數(shù)據(jù)集){
          errmsg=″xviewsql屬性值不是合法的SELECT語句″
          return
       }
       else {
          int RowCount=視圖數(shù)據(jù)集行數(shù);
           //復制當前節(jié)點RowCount
          for (int row=1;row<RowCount;row++){
             復制root節(jié)點加入DOM;//DOM為模板對象
             添加xviewindex和xviewrow屬性;
      }
         對root的所有子元素遞歸調(diào)用predealdom
      }
  }
  //dealdom方法將列元素與列屬性替換為實際值
  Void dealdom(domobject& root) {
      If (root 有 xviewindex屬性){
         Int index=root元素的xviewindex屬性值;
      }
      int row=root元素的xviewrow屬性值;
      int AttrNums=root屬性數(shù)目;
      int ElemNums=root子元素數(shù)目;
      for (int i=0;i<AttrNums;i++){
         取得root元素第i個屬性a[i];
         if (a[i]是列屬性){
         查找編號為xviewindex的視圖數(shù)據(jù)集的row行取得實際值替換;
         }
        }
        for (int j=0;j< ElemNums;j++){
          取得root元素第j個屬性e[j];
          if (e[j]是列元素){
        查找編號為index的視圖數(shù)據(jù)集的row行取得實際值替換;
       if (e[i]有xviewcodesql屬性{
        根據(jù)代碼SQL語句取得實際值代替代碼值;
         }
        }
  }
  對root的所有子元素遞歸調(diào)用dealdom
  }
  行業(yè)標記語言用于校驗生成的XML文檔是否合法。如果合法,則允許存入XML存儲庫中;否則應當修改對應的模板文件。
  初始建立XML存儲庫時,一次性將所有歷史數(shù)據(jù)轉(zhuǎn)換裝入XML存儲庫。之后,有數(shù)據(jù)更新時觸發(fā)轉(zhuǎn)換操作,將相應的XML文檔加入到XML存儲庫中。
  對于企業(yè)應用來說,訪問各種異構數(shù)據(jù)源是企業(yè)內(nèi)部發(fā)展的需要,也是企業(yè)信息化建設的要求。本文提出的基于XML異構數(shù)據(jù)訪問中間件解決方案通過預先實現(xiàn)關系數(shù)據(jù)庫到XML數(shù)據(jù)的轉(zhuǎn)換,加快了訪問速度。最后,給出包裝器和XML模板的詳細設計和說明。
參考文獻
1   W3C Recommendation.Extensible Markup Language(XML) 1.0.http://www.w3.org/tr/1998/rec-xml-19980210,1998
2   Shanmugasundaram J.Efficienttly Publushing Relational Data as XML Document.In:Proceedings of the VLDB Conference,Egypt,2000
3   莊冠華.基于XML的數(shù)據(jù)集成技術的研究與應用.南京大學碩士研究生畢業(yè)論文,2004
4   李冠宇,劉軍,張俊.分布式異構數(shù)據(jù)集成系統(tǒng)的研究與實現(xiàn).計算機應用研究,2004;21(3)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。
主站蜘蛛池模板: 中文字幕日韩精品一区二区三区| 做受视频60秒试看| 91大神在线看| 成年人黄色毛片| 亚洲人成无码网www| 精品一区二区三区四区五区六区| 国产无套中出学生姝| AV无码久久久久不卡蜜桃| 日日夜夜精品视频| 亚洲午夜久久久久久尤物| 男人的j插女人的p| 国产三级精品三级男人的天堂| 18精品久久久无码午夜福利| 女人张开腿让男人插| 丹麦大白屁股hdxxxx| 欧美一卡2卡3卡4卡公司| 人妻免费久久久久久久了| 色偷偷人人澡人人爽人人模| 国产日韩在线视频| 91天堂素人精品系列全集亚洲| 年轻人影院www你懂的| 久久国产精品-国产精品| 欧美另类69xxxx| 亚洲色欲久久久综合网东京热| 美女国产毛片a区内射| 国产午夜福利短视频| 菠萝蜜亏亏带痛声的视频| 在线天堂中文www官网| 一级一级毛片看看| 日日AV色欲香天天综合网| 五月婷中文字幕| 欧美性色欧美a在线播放| 人与动性xxxxx免费| 精品无人区一区二区三区| 国产亚洲欧美日韩精品一区二区 | 亚洲综合天堂网| 精品福利视频一区二区三区| 国产产无码乱码精品久久鸭| 色综合天天综合中文网| 国产色在线播放| a级午夜毛片免费一区二区|