高 鵬,周 揚△,萬文琦,焦煜媛
(1.甘肅省地震局蘭州觀象臺,甘肅 蘭州 730046;2.甘肅省地震局張掖中心地震臺,甘肅 張掖 734300)
近年來隨著地震的頻發,各種用于震害評估的軟件系統也在不斷增多。數據庫在震害評估中廣泛應用。但由于各個應用系統的功能與應用不同,所采用的硬件環境和軟件環境也不同,各種應用系統構建有各自獨立的服務器與數據庫。各種異構數據源之間信息不能共享,從而形成了信息孤立。如何高效收集與集成各種數據庫之間的數據與共享成為目前急需解決的問題。本研究提出一種基于XML/VS.NET的關系數據庫集成方案,采用.NET提供的數據庫訪問中間件,實現異構數據源之間的連接與訪問[1]。XML數據作為一種半結構化的數據模型,在異構數據集成方面具有很好的應用,采用XML數據文件實現關系數據庫之間的數據傳輸與交換[2]。
根據系統需求,需要實現異構數據庫之間的數據抽取、轉換與集成。系統應該具較好的適應性和擴展性,在不影響系統整體功能的前提下,應該具有較高的穩定性和較低的耦合性。按照多層架構的模式將系統自上而下分為表現層、表示邏輯層、業務邏輯層、數據層。表現層:實現用戶與系統的良好交互,通過友好的系統界面為用戶提供具體的應用。同時系統提供公共服務應用,為這些不同的服務方式提供統一的出口。表示邏輯層:接受來自表現層的請求,分析數據類型,然后通過業務服務組件執行業務功能。業務邏輯層:是實現系統功能的關鍵核心部分。包括:業務功能接口、XML數據轉換中間件處理模塊、數據庫連接訪問中間件處理模塊。通過數據庫連接訪問中間件實現不同數據源的連接訪問[3],從而進行數據抽取。異構數據源中抽取的數據通過XML數據轉換中間件模塊進行轉換與映射,處理成為可以加載顯示的數據格式。在加載數據的過程中,通過業務功能接口實現整合數據的加載與顯示。數據層:包括多個異構數據庫,主要由交換數據庫、資源數據庫組成。交換數據庫主要存儲不同系統的專業數據,如震害調查數據、活斷層數據、地震小區劃數據[4]等。資源數據庫根據需求存儲抽取的數據資料。系統體系結構如圖1所示。

圖1 系統體系結構圖
ADO.NET是微軟.NET平臺提供的一種數據訪問技術,是由一系列數據庫相關類和接口組成的類庫。它提供了連接模式和無連接模式的數據訪問[5]。無連接模式的優點是程序使用數據庫進行連接,并在完成訪問和交互后釋放連接,從而減少系統服務器的負載,使數據訪問更加靈活。并且ADO.NET支持XML文檔,運用XML文檔進行數據交互,通過ADO.NET對不同異構數據源進行訪問。
工廠模式的定義是一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中,核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處可以使工廠方法模式在系統不修改具體工廠角色的情況下引進新的產品。數據工廠通過構建一個數據庫連接訪問類,所有訪問數據庫的行為都通過這個類實現。另外,通過動態配置數據庫連接配置文件,實現對數據庫的動態訪問。在具體開發過程中,設計思想根據工廠模式,對不同的數據庫對象進行封裝,形成一個公共抽象類。這個公共抽象類給用戶提供通用接口,用戶通過訪問接口實現對不同數據庫的連接與訪問。具體的功能實現由這個公共抽象類的子類完成。通過工廠模式的數據庫訪問可以降低應用程序模塊之間的耦合度,同時還可以提高代碼的復用性,并使模塊擴展變得容易實現。
用戶通過調用DBFactory類中的CreateInstance獲取一個DBAccess類的實例,DBAccess類是一個核心抽象類,它定義了應用程序與數據庫交互所使用的各種方法和屬性。由DBAccess類自動判斷用戶需要連接的數據庫,并進行訪問。在不更改應用程序的前提下實現了對異構數據源的訪問。
XML數據處理中間件模塊通過數據連接訪問處理模塊提取數據進行轉換。XML數據處理中間件模塊主要包括數據映射子模塊、數據分析子模塊、數據加載子模塊。集成模型如圖2所示。

圖2 基于XML的數據集成模型圖
(1)數據映射子模塊,主要完成關系數據庫與XML數據之間的雙向映射與轉換。
(2)數據分析子模塊,主要負責XML數據的分析處理,將XML數據解析為一棵對象樹。
(3)數據加載子模塊,主要負責將解析完成后的數據進行加載,展示給用戶。
實現XML數據模型與關系數據庫之間的數據轉換,主要通過模板驅動和模型驅動兩種形式[6]。模板驅動方法是使用SQL命令嵌入到XML文件中,通過中間件中的程序讀取模塊中的SQL命令,實現從數據庫中抽取數據轉換為XML文檔。這種方法的優點是簡單易于實現,缺點是只能實現從數據庫到XML文檔的單向映射。模型驅動方法是在數據庫和XML文檔之間預定義映射模型,通過這種模型把XML文檔結構映射成為數據庫結構模型[7]。這種方法可以方便地實現XML文檔和數據庫之間的雙向映射,具體做法是將XML文檔轉換為一棵對象樹,將對象模型映射為關系模型,本系統采用模型映射的方式。
(1)讀取XML文檔,將其構建為一棵帶有架構的樹[8]。其中XML文檔包含兩部分內容,架構部分和數據部分。
(2)將XML文檔中架構部分的數據類型[9]、屬性映射成為關系數據庫表的各個字段。
(3)XML文檔中的數據部分根據映射規則,映射到異構數據庫相應的表中。在數據映射過程中,如果是簡單數據類型,則直接將數據映射到相應的數據庫表中。如果是復雜元素,則通過“主鍵-外鍵”對應關系映射到數據庫表中[10]。
(1)首先通過數據連接訪問模塊抽取異構數據源中的數據,這個過程根據用戶需求動態構造出相應的SQL語句進行抽取[11]。
(2)由于XML文檔是一種半結構化的數據結構[12],所以在將數據表轉換為XML文檔之前需要定義一個中間轉換對象類,這個類定義了數據庫表中的字段,即數據表中的字段對應對象類中的成員變量。
(3)通過中間轉換類完成對XML文檔的架構定義,確定XML文檔架構中的屬性及數據類型。然后遍歷類對象中的數據,通過定義的映射關系生成一棵帶架構的樹狀XML文檔。
在整合地震信息的過程中,分別從地圖空間及屬性數據庫、地質資料數據庫、活斷層數據庫、地震小區劃等數據庫中抽取數據,轉換整合成為有效的信息資源。這些資源可以被查詢瀏覽,以及提供詳細的地震信息。地震信息在Web頁面上的展現如圖3所示。 圖中的圓點顯示近一年所發生的地震,圓點的大小代表地震震級的大小。

圖3 地震信息在Web頁面上的展現圖
本研究的數據集成方案雖然在很大程度上降低了勞動量,提高了數據集成的效率,但卻需要人為地定義轉換規則,編寫數據轉換中間類。在一些相關的應用中發現轉換過程時間過長、轉換規則與轉換中間類的編寫相對復雜。這需要在今后的工作中進一步完善轉換模型與提高轉換效率。