XML實現異構資料庫間轉換的實現與分析(轉)

來源:互聯網
上載者:User
xml|資料|資料庫|轉換 XML實現異構資料庫間轉換的實現與分析

類型: XML/Biztalk 收錄時間: 2002-4-8 9:20:00


XML中一種擴充的標記語言,它具有很好的擴充性標記.本文通過XML實現不同資料庫的定義,實現對XML資料庫的訪問和異構資料庫之間的互訪.  
  關鍵詞:XML  異構資料庫  資訊交換  資料庫訪問  
1  引言  
  XML(Extensible  Markup  Language)它是由W3C組織於1998年2月  
制定的一種通用語言規範,是SGML  的簡化子集,專門為  Web  應用程式而設計.XML作為一種可擴充性標記語言,其自描述性使其非常適用於不同應用間的資料交換,而且這種交換是不以預先規定一組資料結構定義為前提.XML最大的優點是它對資料描述和資料傳送能力,因此具備很強的開放性.為了使基於XML的業務資料交換成為可能,就必須實現資料庫的XML資料存取,並且將XML資料同應用程式整合,進而使之同現有的商務規則相結合.開發基於XML的Live App,如動態資訊發布、動態資料交換等,前提是必須有支援XML的資料庫支援.  XML  提供描述不同類型資料的標準格式  --  例如:約會記錄、購買定單、資料庫記錄、圖形、聲音等  --  並且可一致而正確地解碼、管理和顯示資訊.  XML一開始就建構在Unicode(統一碼)之上,提供了對多語種的支援,具有世界通用性.  

2  XML與資料庫的結合  
  XML資料來源有多種多樣,根據具體的應用,大概可分為下面三種:一種是XML純文字文檔;第二種是關係型資料庫;第三種則來源於其他各種應用資料,如郵件、目錄清單、商務報告等.其中,第一種來源,即XML純文字文檔是最基本的也是最為簡單的,將資料存放區於檔案中,其最大的優點在於可以直接方便地讀取,或者加以樣式資訊在瀏覽器中顯示,或者通過DOM介面編程同其他應用相連.第二種資料來源是對第一種來源的擴充,目的是便於開發各種Live App,其優點則在於通過資料庫系統對資料進行管理,然後在利用伺服器端應用(如ASP、JSP、Servlet)等進行動態存取.這種方式最適合於當前最為流行的基於三層結構的應用開發.第三種資料由於來源廣泛,因此需要具體情況具體對待.本文的分析主要針對前兩種資料來源進行分析.  
  對於XML文檔,可以通過DOM(Document  Object  Model)讀取XML文檔中的節點,是最基本也是最底層的XML存取技術.  DOM是W3C的一種技術標準,實際上是提供一組API來存取XML資料.  DOM可以通過JavaScript,VBScript等指令碼程式來實現,也可通過C++、Java等進階語言來實現.  
  其次,也可通過DSO(Data  Source  Object)進行XML的資料繫結可以方便地將XML節點同HTML標記捆綁,從XML文檔中讀取或寫入資料,就象訪問Microsoft  Access或Microsoft  SQL  Server一樣;而  HTTP+SQL是Microsoft新近提出的SOAP方案的核心,其基本原理是通過基於HTTP協議的URL方式直接存取SQL  SERVER資料庫,並返回以XML或HTML資料格式的文檔.  
  XML資料庫又分為兩種:一種是以XML原始格式儲存的資料庫我們稱為"native-XML資料庫";另一種是以XML格式存入和匯出,且它本身又是一個資料庫,我們稱為"XML-enabled資料庫".  
2.1  native-XML資料庫  
  對於native-XML資料庫的訪問,我們可以通過XQL語言來完成.  通過XQL我們可以對一個或多個XML檔案進行查詢,它返回一個封裝在根項目(sql:result)的節點集,這個節點集也是一個XML檔案.  
2.2  XML-enabled資料庫  
  因為資料是以XML格式存入和匯出,且它本身又是一個資料庫,這就涉及到異構資料庫間的互訪問題.  XML提供了一種串連關聯式資料庫和物件導向資料庫以及其他資料庫系統之間的訪問技術,也就是說我們可以先對關聯式資料庫和物件導向資料庫以及其他資料庫系統進行訪問,然後產生XML檔案,再將檔案存入資料庫或作其他處理.  

3  使用JSP串連資料庫並進行查詢產生  XML文檔   
  我們有許多方法可做到串連資料庫並進行查詢,產生  XML文檔.以下是通過JSP技術對SQL  Server儲存的  XML  文檔進行查尋並提取這些文檔,然後將其傳送給使用者.(SQL  Server資料庫本身就支援XML格式.對於不支援  XML  的資料庫,您可以將  XML  文檔儲存為字元大對象(CLOB),並以文字區塊的方式檢索文檔.)Java語言應用程式的開發人員提供了一個通用的SQL資料庫訪問和儲存結構,即JDBC,它是一種用於資料庫訪問的API(API),開發人員可以通過JDBC產品組件之一JDBC-ODBC橋來完成:與資料庫建立串連、發送語句、處理結果等工作.在與資料庫建立串連之前,必須將橋驅動程式類sun.jdbc.odbc.JdbcOdbcDriver添加到名為jdbc.drivers的java.lang.System屬性中,或用Java類載入器將其明確式載入.明確式載入代碼如下:  
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
  該驅動程式可用於Oracle、Sybase、等資料庫.我們可以用一個簡單的例子來說明如何在用JDBC介面來實現資料庫的串連,執行一個查詢(其結果為一組  XML  文檔),分析查詢結果,並將分析過的資料寫入輸出資料流中.以下是與此關係最密切的代碼部分:  
注意,在安裝資料庫以後,您需要完成以下三件事情才能使此代碼工作:  
首先,將  DbOwner、DbUserid  和  DbPasswd  變數改為適合系統的適當值.  
//  一定要正確更改這三個字串,否則servlet  不會工作.  
DbUserid  =  "xxxxxx";  
DbPasswd  =  "xxxxxx";  
DbOwner  =  "xxxxxx";  
<!--使用SQL資料庫-->  
<!--首先匯入一些必要的packages-->  
<!--開始匯入packages-->  
<%@  page  info="package  dbxml.sax"%>  
<%@  page  import="org.xml.sax.*"%>  
<%@  page  import="org.xml.sax.InputSource"%>  
<%@  page  info="database  handler"%>  
<%@  page  import="java.io.*"%>  
<%@  page  import="java.util.*"%>  
<%@  page  import="java.sql.*"%>  
<%@  page  import="javax.servlet.*"%>  
<%@  page  import="javax.servlet.http.*"%>  
<!--匯入結束-->  
<%  
try  
{  
res.setContentType("text/xml");  
//載入使用適合您的系統的驅動程式  
//下面的代碼為載入JDBD-ODBC驅動程式  
try  
{  
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
}  
catch  (Exception  e)  
{  
System.out.println("Can't  get  the  driver!");  
e.printStackTrace();  
}  
//建立串連  
//第二步是用適當的驅動程式串連到DBMS,假定已建立來源資料庫test,在test中已建立表name  
String  url="jdbc:odbc:test";  
Connection  con=DriverManager.getConnection(url,  "administrator",  "password");  
//"administrator","password"是使用者名稱和口令  
//然後建立一個JDBC聲明  
Statement  stmt  =  con.createStatement();  
//執行聲明,顯示結果集。我們從每行取出  XML  文檔,  
//對其進行分析,然後列印  DOM  樹。當沒有更多的行時,rs.next()  返回false。  
ResultSet  rs=stmt.executeQuery(SQL);  
while  (rs.next())  
 {  
String  nextOrder  =  rs.getString(1).trim();  
Document  doc  =  null;  
StringReader  sr  =  new  StringReader(nextOrder);  
InputSource  iSrc  =  new  InputSource(sr);  
try  
{  
parser.parse(iSrc);  
doc  =  parser.getDocument();  
}  
catch  (Exception  e)  
{  
System.err.println("Sorry,  an  error  occurred:  "  +  e);  
}  

if  (doc  !=  null)  
printDOMTree(doc,  out);  
  }  

rs.close();  
stmt.close();  
con.close();  
%>  
  返回的XML文檔可以通過指定的XML模式來定義,三種模式為:RAW、AUTO、EXPLICIT。還可以用SELECT語句中附加FOR  XML來返回XML格式資料作為對XML模式的一種補充,通過在FOR  XML中指定DTD或XML  schema來達到對返回XML文檔的格式化.此外我們利用基於XML的UPDATE語句來更新資料庫中的記錄,SQL  Server支援基於XML的插入、刪除、修改等資料庫更新操作.  

4  XML模式與關係模式的相互轉換  
  為了完成異構資料庫間的通訊,必須實現RDMS→XML→RDMS的轉換.一個具體的XML模式到關係模式的資料轉換需要涉及較為複雜的XML格式分析處理及相應的資料庫操作及有效性校正.我們通過對XML的資料模型與關聯式模式的特徵的比較,認為兩者轉換的實質是(1)  從XML中的資料(存在方式可以是Content、屬性值、元素名等)到關係模式中欄位的映射;(2)  從XML中資料的相互位置關係到關係模式中元組與元組的關係及元組與欄位的關係的映射.  XML模式與關係模式的轉換的核心與實質就是按XPDL編寫的轉換規則和轉換規則的執行解釋方法,下面就依次分別介紹從XML模式到關係模式的轉換規則的組成部分和執行方法,以及從關係模式到XML模式的轉換規則的組成部分和執行方法.從XML模式到關係模式轉換的轉換規則指令碼:由關係模式的定義和XML模式到關係模式轉換規則的定義組成;從關係模式到XML模式轉換的轉換規則指令碼:由關係模式的定義和關係模式到XML模式轉換規則的定義組成.  
4.1  XML模式到關係模式轉換  
(1)關係模式定義  
下面是一個關係模式定義的例子  
<DataSchemaDefinition>  
<DataSource  id="iCategoryData"  type="ODBC"  sourcename="iCatSRC"  username="sa"  password=""  />  
<DataSchema>  
<Entity  id="category"  datasource="iCategoryData">  
<Structure>  
<Field  id="nodeid"  type="char"  length="10"  cannull="no"  primary_key="yes"  />  
…  
</Structure>  
<Constrain>  
<Reference  field="fathernodeid"  refentity="category"  reffield="nodeid">  
<ExceptionValue  value="0"  />  
</Reference>  
…  
</Constrain>  
</Entity>  
…  
</DataSchema>  
</DataSchemaDefinition>  
  一個關係模式的定義分兩部分:資料來源(Data  Source)定義和實體(包括關係實體)的定義。資料來源的定義不外乎ODBC/JDBC/BDE等幾種,定義它的目的在於轉換程式的跨平台的通用性。實體定義包含兩部分:結構定義和約束定義。結構定義類似關聯式資料庫的表定義,包含對每個欄位的類型、長度等的定義。約束定義則主要包含對欄位的外鍵和引用的約束定義。  
(2)XML模式到關係模式轉換規則(X2RConversion)的定義  
XML模式到關係模式的轉換的目標,是將某一種XML  Schema定義好的XML文檔中的Content部分、屬性值部分轉換成關係模式中的某個元組的某個欄位的值,而將他們之間的位置關係轉換成關係模式中的外鍵等應用關係。  
<X2RConversion>  
<Entrance>  
<Record  entity="category"  id="st_category"  path=".department">  
<Default  field="fathernodeid"  value="0"  />  
<Node  path="#id"  field="nodeid"  />  
…  
<Reference  field="rootnodeid"  reftype="entity"  refvalue="category[nodeid]"  refpos="0"  />  
<Record  entity="category"  id="run_category"  path=".department">  
<Node  path="#id"  field="nodeid"  />  
…  
<Reference  field="fathernodeid"  reftype="entity"  refvalue="category[nodeid]"  refpos="-2"  />  
…  
</Record>  
…  
</Record>  
</Entrance>  
</X2RConversion>  
  轉換的基本演算法是遍曆等待轉換的XML文檔的DOM樹,對於每個結點而言,從根到該結點的路徑作為其轉換標識.每一個轉換入口是一個轉換標識尾碼,當某一轉換入口轉換標識尾碼匹配當前結點的轉換標識,則啟動當前轉換入口對應的轉換規則.所有的轉換入口都定義在Entrance元素內.每一個轉換規則都是由一個Record元素開始的,一個Record元素的下層元素表示了其對應的元組的新記錄的建立、資料的轉換規則及其關聯元組的的新記錄的建立、資料的轉換規則,也就是說Record元素是可嵌套的.  
  此外,轉換還將遵循以下原則:任意兩個Record轉換執行個體的轉換位置所對應的元素絕不相同,但被Node標定的元素並不受該限制,也就是說在轉換演算法中只記住每個Record執行個體的執行位置;而在同層規則執行順序上,是按Default元素、Node元素、Reference元素、Record元素的次序的,一個次序在後的有效操作是可以覆蓋次序在前的有效操作的.  
4.2  關係模式到XML模式轉換  
(1)關係模式到XML模式的轉換規則(R2XConversion)的定義  
  從關係模式到XML模式的轉換,實質上是一個將一個預先定義好的視圖運行,並將當前視圖內容轉化成XML格式顯示.在具體實現上,我們是將格式和視圖定義融合在一起.在關係模式到XML模式的轉換中,關係模式定義段中的entity可以對應一個SQL查詢語句,也就是使用SQL語句代替原先在id中指明的表名,所有的資料準備基本在關係模式定義段已經完成.下面是一個關係模式到XML模式的轉換規則的樣本,它的執行是通過深度遍曆轉換規則,逐個分枝拓展建立,並最終完成整個XML文檔DOM樹的建立.同樣,其中僅支援一條路徑擴充出的子樹中的相對位置的關聯轉化,其具體結構與前面類似這裡就不贅述.  

5  結束語  
  目前資料庫已不再僅僅局限於儲存資料,而是向著更深層次、更多樣化發展,它已經廣泛運用於OLAP、OLTP、資料倉儲、資料採礦、移動計算、嵌入式計算和Web應用等諸多方面.現在,資料庫技術也已經深入到各行各業,尤其在媒體、金融、交通、商業等領域得到了廣泛應用.本文則著重講解了對XML資料庫的訪問技術和異構資料庫之間通過轉換成XML實現互訪.我們有理由相信,XML同資料庫的相結合將隨著XML技術的發展,會實現更強大的功能.  

參  考  文  獻  
[1]  http://www.xmlsoftware.com/  
[2]  楊鈺,盧銀娟,趙昊彤等,JSP網路開發技術.人民郵電出版社  
[4]  http://www.microsoft.com/xml/xsl/msxsl-f.htm  
[5]  http://www.51xml.com/forum/search_forum_xml.xml  
[6  ]  Michael  Morrison,et  al.XML揭秘---入門-應用-精通.  清華大學出版社,2000.8


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。