隨著信息化建設的不斷深入,不少企業與組織建立了各種應用系統。由于這些系統是在不同階段開發的,每個系統都有自己的運行環境和數據存儲方式,這些數據的格式不統一,各個應用系統彼此封閉,數據難以交換和共享。利用中間件(Middleware)技術集成各種異構數據時,不用改變原始數據的存儲和管理方式,可集中為異構數據源提供一個統一的高層檢索服務,是實現異構數據集成的理想解決方案。
異構數據訪問中間件系統的核心就是要解決異構數據源的分布性、自制性和異構性。隨著分布式計算技術(如CORBA、XML等)的迅猛發展,使得原來的系統可以通過它們進行封裝,隱藏內部結構,采用公共數據模型將局部共享數據進行封裝,對外提供公共訪問接口。異構數據系統是相關的多個數據庫系統的集合,可以實現數據的共享和透明訪問,每個數據庫系統在加入異構數據庫系統之前本身就已經存在,擁有自己的DBMS。異構數據庫的各個組成部分具有自身的自治性,實現數據共享的同時,每個數據庫系統仍保有自己的應用特性、完整性控制和安全性控制。
1 XML全局數據模式
異構數據訪問中間件必須提供一種全局數據模式來統一異構源數據模式。異構數據集成的全局模式必須滿足:①能夠描述各種數據格式,無論其為結構化還是半結構化,無論它是支持所有的查詢語言還是簡單的文本查詢;②易于發布和進行數據交換,集成后的數據可以方便地以多種格式發布和便于應用交換數據。
早期異構數據的集成系統通常采用關系或對象的數據模式作為全局模式。然而,它們并不能滿足網絡時代的Intranet/Internet應用所提出的高標準。隨著可擴展標記語言XML及其相關技術的發展,XML不僅成為了應用間交換數據的一種標準,也是萬維網重要的信息交換標準和表示技術之一。XML(Extensible Markup Language)即可擴展標記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標準通用標記語言)。Xml是Internet環境中跨平臺的,依賴于內容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言XML是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然XML占用的空間比二進制數據要占用更多的空間,但XML極其簡單易于掌握和使用。
XML是一種具有很強的數據描述能力的標記語言,它第一次提供了一種信息交換模式,此格式是可編輯、易理解并且可表示任何類型的結構化或半結構化的信息。XML 提供了豐富的數據構造和解析方法,能夠適應多樣并且不斷變化的網絡應用環境,被廣泛用于異構系統間的數據交換和互操作應用中。XML與Access,Oracle和SQL Server等數據庫不同,數據庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,XML僅僅是展示數據。事實上XML與其他數據表現形式最大的不同是:它極其簡單。這是一個看上去有點瑣細的優點,但正是這點使XML與眾不同。
2 系統框架
中間件是一種支持分布式應用的重要組件,它是一種獨立的系統軟件和服務程序。分布式應用借助中間件在不同的技術間共享資源,為應用提供統一的編程模型,處理異構、分布問題和管理計算資源及網絡通信。
大多數基于 XML 的數據集成系統框架采用Mediator/Wrapper架構,該架構的缺點是查詢效率不高。這是由于底層數據源的數據結構、數據模式、存儲方法、查詢能力差別很大。數據訪問中間件的設計是非常復雜的,包裝器同時要兼顧數據轉換、數據清洗等任務,并且這還僅是在查詢時觸發的處理。
基于XML的異構數據訪問中間件模型XHDAM的系統結構如圖1所示。XHDAM從分布式對象操作和異構數據集成二個方面解決系統互操作問題。首先,XHDAM基于CORBA技術,CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構,通用對象請求代理體系結構)是由OMG組織制訂的一種標準的面向對象應用程 序體系規范。或者說 CORBA體系結構是對象管理組織(OMG)為解決分布式處理環境(DCE)中,硬件和軟件系統的互連而提出的一種解決方案;OMG組織是一個國際性的非盈利組織,其職責是為應用開發提供一個公共框架,制訂工業指南和對象管理規范,加快對象技術的發展。CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構,通用對象請求代理體系結構)是由OMG組織制訂的一種標準的面向對象應用程 序體系規范。或者說 CORBA體系結構是對象管理組織(OMG)為解決分布式處理環境(DCE)中,硬件和軟件系統的互連而提出的一種解決方案;OMG組織是一個國際性的非盈利組織,其職責是為應用開發提供一個公共框架,制訂工業指南和對象管理規范,加快對象技術的發展。通過CORBA提供的ORB(Object Request Broker)實現分布計算環境中對象操作支持,使不同的應用系統能夠方便地與XHDAM交互,達到不同應用系統之間交互的目的,從而實現系統的透明性。
(1)客戶端:向CORBA服務器發出訪問請求。客戶端只提供統一的訪問界面,不處理業務邏輯關系和集成管理任務。
(2)CORBA公共服務:提供CORBA的標準服務,包括名字服務、事件服務、安全服務等。
(3)查詢處理器:當客戶請求時,分解全局查詢到局部查詢;當查詢結束時,負責將局部查詢結果匯總返回給客戶端。另外還負責局部查詢的優化,提高查詢效率。
(4)目錄服務:是XML存儲庫的一個摘要,包含XML存儲庫的靜態和動態信息。XML數據目錄服務可以自動、智能地建立目錄服務,并對信息自動搜索、自動分類、自動傳輸。
(5)事務服務:負責全局模式和局部模式之間的集成與分解關系,如全局事務到局部子事務的處理,全局查詢到局部子查詢的處理。
(6)包裝器:是一種目的語言資料類型的物件,可包裝語言的物件。當在 JavaScript 中設計程式的時候,你可以使用包裝器物件存取 Java 物件的方法和欄位;呼叫或存取包裝器里的方法或屬性,用以在 Java 物件上產生呼叫。對 Java 而言,JavaScript 物件是被包裝在類別為JSObject 的實體之中,并傳送給 Java。當 JavaScript 物件傳送給 Java 的時候,執行時期引撉會建立類型為 JSObject 的 Java 包裝器;當 JSObject 從 Java 傳送到 JavaScript 的時候,執行時期引撉會解開包裝,還原為原本的 JavaScript 物件類型。JSObject 類別提供了可呼叫 JavaScript 方法和檢查 JavaScript 屬性的介面。負責解決異構數據源的包裝問題,將分散在各處的數據源按照XML模板進行包裝。開始,包裝器一次性將數據源中的所有數據轉換到存儲庫中。當有新數據源追加到源數據庫時,就通過觸發器觸發包裝程序將源數據庫中的新數據包裝成XML數據加入存儲庫。客戶端對數據的訪問是通過查詢處理器訪問XML存儲庫實現的。
3 XML模板和包裝器的設計與實現
為了提供對XML 的支持,各大數據庫廠商紛紛對各自的數據庫產品進行了擴展,提供了基于模板的查詢。但各數據庫管理系統支持的查詢模板語法差異很大,不能互用。因此,訪問多個異構數據源時需要為不同類型的數據庫提供多個符合其相應語法的模板文件,這就增加了項目開發的復雜度。
3.1 XTemplate模板設計
XTemplate是一個適用于PHP的模板引擎。它允許把HTML代碼與PHP代碼分開存儲。XTemplate包含了許多有用的功能。比如:嵌套的程序塊,各種類型的插值變量。其代碼非常簡潔并且是優化的。Xtemplate是sugarCRM使用的模版技術,使用起來相對簡單。XTemplate使用了多種標簽和特殊操作符支持模板,使得模板在應付復雜的數據結構時尤為健壯。這里所列出概括的幾項功能,欲了解完整的細節和使用方法,請參閱XTemplate API文檔。自動數組填充和作用域切換,可在子模板作用域內訪問父級對象,可訪問數組索引,支持數據值的簡單匹配,自動渲染浮點型數組(不包含非對象的值),可執行模板中直接寫好的任意語句,支持模板的配置屬性,可通過配置項對象自定義模板方法,可用于服務端的JavaScript模板。
為了訪問不同的數據源,需要在模板文件中定義數據源的連接屬性。其中:數據庫連接屬性包括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 ′ [element] ′′
使用XTemplate定義的模板文件是格式正確(Well-formed)的XML文檔,且具有根元素,可用來提供數據源連接參數servername、dbms、dbparm、database、logid、logpass、autocommit。
具有xviewname屬性和xviewsql屬性的子元素稱為視圖模板元素,因為其提供了表征數據集的名稱和SQL語句的二個屬性。xviewname屬性提供視圖名稱,xviewsql屬性提供視圖SELECT語句。SELECT語句中可以用:p_xviewname:p_columnname的形式傳遞父視圖的列名給子視圖,以反映視圖間的連接關系。
如果子元素和屬性的值對應于數據源中的列名,且需要在解析執行時用檢索結果動態替換,則稱其為列元素和列屬性。列元素可以用xviewsqlcode 屬性指定以實際值替換代碼值。
一個使用XTemplate 定義的模板文件涉及的關系如表1所示。
基于表1,使用XTemplate 定義的一個模板文件如下:
oracle;UID=scott;PWD=tiger′″>
<員工列表>
<員工 xviewname=″員工″ xviewsql=″SELECT ENO,ENAME,SAL FROM? WHERE ENO=′E1′ or ENO=′E2′″>
<編號>ENO
<姓名>ENAME
<薪水>SAL
使用XTemplate解析程序處理上述模板返回XML文檔如下:
<員工列表>
<員工 員工序號=″1″>
<編號>E1
<姓名>J.Doe
<薪水>4000
<員工 員工序號=″2″>
<編號>E2
<姓名>M.Smith
<薪水>3400
使用XTemplate書寫的模板文件獨立于具體的數據庫管理系統,無需數據庫管理系統內置的功能模塊解析執行,而是由獨立于具體數據庫管理系統的軟件模塊解析執行并返回XML查詢結果。
XTemplate定義模板文件可以使沒有內置XML查詢功能的數據庫管理系統獲得對XML查詢的支持。采用XTemplate之后,結構化的數據源需要解釋執行的是XTemplate 解析執行軟件傳遞來的SQL語句,這是結構化的數據源通常會提供的標準功能。
3.2 包裝器的設計與實現
XML包裝器是整個模型中的重要組成部分,它將異構的數據源按照統一的數據模型進行包裝,在客戶端對數據的訪問都是針對統一的數據模型標準。包裝器結構如圖2所示。
XML包裝器是一個模板文件解析程序,只要傳入不同的模板文件即可生成對應的XML文檔。包裝器工作過程如下:從傳來的模板文件建立DOM對象,取得數據庫的連接屬性,進而連接數據庫;從XTemplate模板文件的xviewsql屬性獲得SELECT語句,在數據庫表或視圖中執行此查詢語句,建立視圖數據集;將數據集中的相關數據代入。XML即可擴展標記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標準通用標記語言)。Xml是Internet環境中跨平臺的,依賴于內容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言XML是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然XML占用的空間比二進制數據要占用更多的空間,但XML極其簡單易于掌握和使用。關鍵解析算法如下:
//predealdom方法建立視圖,復制建立的所有元素
Void predealdom(domobject& root) {
//視圖模板元素指有xviewsql屬性的元素
If (root 不是視圖模板元素){
對root所有子元素遞歸調用predealdom;
}
else {
視圖序號增加;
為root添加xviewindex屬性,值為當前視圖序號;
從xviewsql屬性獲得視圖SELECT語句;
if (SELECT語句中有參數){
查找相應祖先視圖取得實際值代入;
}
根據SELECT 語句建立視圖數據集;
if (不能創建視圖數據集){
errmsg=″xviewsql屬性值不是合法的SELECT語句″
return
}
else {
int RowCount=視圖數據集行數;
//復制當前節點RowCount
for (int row=1;row
復制root節點加入DOM;//DOM為模板對象
添加xviewindex和xviewrow屬性;
}
對root的所有子元素遞歸調用predealdom
}
}
//dealdom方法將列元素與列屬性替換為實際值
Void dealdom(domobject& root) {
If (root 有 xviewindex屬性){
Int index=root元素的xviewindex屬性值;
}
int row=root元素的xviewrow屬性值;
int AttrNums=root屬性數目;
int ElemNums=root子元素數目;
for (int i=0;i
取得root元素第i個屬性a[i];
if (a[i]是列屬性){
查找編號為xviewindex的視圖數據集的row行取得實際值替換;
}
}
for (int j=0;j< ElemNums;j++){
取得root元素第j個屬性e[j];
if (e[j]是列元素){
查找編號為index的視圖數據集的row行取得實際值替換;
if (e[i]有xviewcodesql屬性{
根據代碼SQL語句取得實際值代替代碼值;
}
}
}
對root的所有子元素遞歸調用dealdom
}
行業標記語言用于校驗生成的XML文檔是否合法。如果合法,則允許存入XML存儲庫中;否則應當修改對應的模板文件。
初始建立XML存儲庫時,一次性將所有歷史數據轉換裝入XML存儲庫。之后,有數據更新時觸發轉換操作,將相應的XML文檔加入到XML存儲庫中。
對于企業應用來說,訪問各種異構數據源是企業內部發展的需要,也是企業信息化建設的要求。本文提出的基于XML異構數據訪問中間件解決方案通過預先實現關系數據庫到XML數據的轉換,加快了訪問速度。最后,給出包裝器和XML模板的詳細設計和說明。
-
數據
+關注
關注
8文章
6909瀏覽量
88849 -
存儲
+關注
關注
13文章
4266瀏覽量
85686 -
HTML
+關注
關注
0文章
277瀏覽量
34572
發布評論請先 登錄
相關推薦
評論