日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML实现异构数据库间转换的实现与分析

發布時間:2023/12/16 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML实现异构数据库间转换的实现与分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  XML中一種擴展的標記語言,它具有很好的擴展性標記.本文通過XML實現不同數據庫的定義,實現對XML數據庫的訪問和異構數據庫之間的互訪.
  關鍵詞:XML?異構數據庫?信息交換?數據庫訪問?
1?引言
  XML(Extensible?Markup?Language)它是由W3C組織于1998年2月制定的一種通用語言規范,是SGML?的簡化子集,專門為?Web?應用程序而設計.XML作為一種可擴展性標記語言,其自描述性使其非常適用于不同應用間的數據交換,而且這種交換是不以預先規定一組數據結構定義為前提.XML最大的優點是它對數據描述和數據傳送能力,因此具備很強的開放性.為了使基于XML的業務數據交換成為可能,就必須實現數據庫的XML數據存取,并且將XML數據同應用程序集成,進而使之同現有的業務規則相結合.開發基于XML的動態應用,如動態信息發布、動態數據交換等,前提是必須有支持XML的數據庫支持.?XML?提供描述不同類型數據的標準格式?--?例如:約會記錄、購買定單、數據庫記錄、圖形、聲音等?--?并且可一致而正確地解碼、管理和顯示信息.?XML一開始就建構在Unicode(統一碼)之上,提供了對多語種的支持,具有世界通用性.

2?XML與數據庫的結合
  XML數據源有多種多樣,根據具體的應用,大概可分為下面三種:一種是XML純文本文檔;第二種是關系型數據庫;第三種則來源于其他各種應用數據,如郵件、目錄清單、商務報告等.其中,第一種來源,即XML純文本文檔是最基本的也是最為簡單的,將數據存儲于文件中,其最大的優點在于可以直接方便地讀取,或者加以樣式信息在瀏覽器中顯示,或者通過DOM接口編程同其他應用相連.第二種數據來源是對第一種來源的擴展,目的是便于開發各種動態應用,其優點則在于通過數據庫系統對數據進行管理,然后在利用服務器端應用(如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),開發者可以通過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

轉載于:https://www.cnblogs.com/vcool/archive/2008/01/21/1047172.html

總結

以上是生活随笔為你收集整理的XML实现异构数据库间转换的实现与分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。