![高級數(shù)據(jù)庫技術(shù)-第6章_Web數(shù)據(jù)庫_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/e3abbabf-4b6c-447e-8609-c5201d9f5228/e3abbabf-4b6c-447e-8609-c5201d9f52281.gif)
![高級數(shù)據(jù)庫技術(shù)-第6章_Web數(shù)據(jù)庫_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/e3abbabf-4b6c-447e-8609-c5201d9f5228/e3abbabf-4b6c-447e-8609-c5201d9f52282.gif)
![高級數(shù)據(jù)庫技術(shù)-第6章_Web數(shù)據(jù)庫_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/e3abbabf-4b6c-447e-8609-c5201d9f5228/e3abbabf-4b6c-447e-8609-c5201d9f52283.gif)
![高級數(shù)據(jù)庫技術(shù)-第6章_Web數(shù)據(jù)庫_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/e3abbabf-4b6c-447e-8609-c5201d9f5228/e3abbabf-4b6c-447e-8609-c5201d9f52284.gif)
![高級數(shù)據(jù)庫技術(shù)-第6章_Web數(shù)據(jù)庫_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/27/e3abbabf-4b6c-447e-8609-c5201d9f5228/e3abbabf-4b6c-447e-8609-c5201d9f52285.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第6章章 Web數(shù)據(jù)庫數(shù)據(jù)庫 Web 數(shù)據(jù)庫是近年來發(fā)展很快的一種數(shù)據(jù)庫技術(shù),它是基于Web模式的DBMS的一種信息服務(wù)。它以Web這種瀏覽器/服務(wù)器模式為平臺,將客戶端融入Web瀏覽器。它能充分發(fā)揮DBMS高效的數(shù)據(jù)存儲和管理能力,為Internet用戶提供了更為方便、內(nèi)容豐富的服務(wù)。6.1 Web數(shù)據(jù)庫的體系結(jié)構(gòu)數(shù)據(jù)庫的體系結(jié)構(gòu)6.1.1 Web數(shù)據(jù)庫的主要優(yōu)點數(shù)據(jù)庫的主要優(yōu)點 基于Web的數(shù)據(jù)庫應(yīng)用具有以下幾大優(yōu)點: 1)能夠在多平臺、多操作系統(tǒng)上應(yīng)用; 2) 它能提供高性能的管理應(yīng)用, 實現(xiàn)了基于WWW標準接口的網(wǎng)絡(luò)數(shù)據(jù)庫的開發(fā); 3) 能夠通過網(wǎng)絡(luò)實現(xiàn)數(shù)據(jù)庫的遠程存取和動態(tài)交互;
2、4) 使得管理更方便, 而且提高了二次開發(fā)的簡捷性, 使操作簡單、維護方便。 5) 基于WWW 標準開放式接口的數(shù)據(jù)庫的擴展更加方便。 6) 提供通用的圖形用戶接口界面;6.1.2 主機集中式模式 主機集中式模式主要應(yīng)用在早期的數(shù)據(jù)庫應(yīng)用系統(tǒng)中,它是一種主機-終端模式,所有的計算任務(wù)和數(shù)據(jù)管理都集中在主機上。該模式的優(yōu)點是對具有大量的定型處理的應(yīng)用有較高的效率,其不足在于對主機的性能要求高,網(wǎng)絡(luò)的負載重,而且用戶終端本身不具有圖形用戶界面,程序開發(fā)的自由度小,工作效率低。6.1.3 客戶端/服務(wù)器模式 數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)逐漸從主機集中式向客戶機/服務(wù)器模式(即C/S 模式)的方向發(fā)展,C/S
3、模式中的第一層:客戶層主要用于發(fā)送用戶請求和接收從服務(wù)器返回的信息;第二層:服務(wù)器層主要用于存儲、處理和傳送信息。C/S 模式機制運作的基本過程是:服務(wù)器監(jiān)聽相應(yīng)端口的輸入,客戶機發(fā)請求,服務(wù)器接收并處理請求,并將結(jié)果返回給客戶機??蛻敉ㄟ^Internet/Intranet 直接與數(shù)據(jù)庫服務(wù)器對話,服務(wù)器將對話結(jié)果返回給客戶機。它的實質(zhì)就是將數(shù)據(jù)存取和應(yīng)用程序分離開來,有數(shù)據(jù)服務(wù)器執(zhí)行數(shù)據(jù)操作,客戶機來執(zhí)行應(yīng)用程序,用戶在客戶端通過網(wǎng)絡(luò)同服務(wù)器打交道,客戶端又包括用戶界面和企業(yè)邏輯,網(wǎng)絡(luò)上傳送的數(shù)據(jù)主要是客戶端向服務(wù)器發(fā)出的請求以及服務(wù)器發(fā)送給客戶端的響應(yīng)結(jié)果和出錯信息 C/S 模式的主要優(yōu)點
4、有:數(shù)據(jù)庫服務(wù)器運行是基于關(guān)系模型的DBMS,DBMS 提供了保護數(shù)據(jù)庫的功能;C/S模式將任務(wù)分開在客戶端和數(shù)據(jù)庫服務(wù)器上進行,從而使DBMS 的速度不受工作站速度的約束;可以顯著地減少局域網(wǎng)傳輸量、降低了對數(shù)據(jù)控制的難度,提供了多用戶開發(fā)特性,保障了用戶投資;此外,數(shù)據(jù)庫的無關(guān)性、工作站平臺的無關(guān)性也是它的優(yōu)點。 C/S 模式也有許多缺點,難以集中控制,企業(yè)邏輯安裝在每一個客戶機上,使得對系統(tǒng)的維護、修改非常困難。此時集中成為企業(yè)管理的強烈要求。安全性差,在兩層結(jié)構(gòu)中,大部分業(yè)務(wù)邏輯是在每臺客戶端,這樣企業(yè)的核心機密就容易被泄露,而且每臺客戶機都可以對服務(wù)器上的數(shù)據(jù)進行直接操作,勢必產(chǎn)生漏
5、洞。系統(tǒng)龐大之后,就很難保證,系統(tǒng)的穩(wěn)定性了。 為了解決C/S 模式中的許多問題,以及分布式技術(shù)不斷發(fā)展,在企業(yè)管理系統(tǒng)中,三層結(jié)構(gòu)逐漸取代了兩層結(jié)構(gòu)。三層結(jié)構(gòu)的基本思想是將用戶界面同企業(yè)邏輯分離,把信息系統(tǒng)按功能劃分為表示、功能和數(shù)據(jù)三大塊,分別放置在相同或不同的硬件平臺上。把傳統(tǒng)的C/S 模式中的服務(wù)器部分分解為一個應(yīng)用服務(wù)器(WEB 服務(wù)器)和一個或多個數(shù)據(jù)庫服務(wù)器。從而構(gòu)成一個三層結(jié)構(gòu)的客戶服務(wù)器體系。其中, 第一層:信息系統(tǒng)的用戶接口部分,即人機界面,是用戶與系統(tǒng)間交互信息的窗口,主要功能是指導(dǎo)操作人員使用界面,輸入數(shù)據(jù)、輸出結(jié)果;第二層:是應(yīng)用的主體,包括了系統(tǒng)中核心的和易變的企業(yè)
6、邏輯(規(guī)劃、運作方法、管理模式等),它的功能是接收輸入,處理后返回結(jié)果;第三層:數(shù)據(jù)層即數(shù)據(jù)庫管理系統(tǒng)(DBMS),負責(zé)管理對數(shù)據(jù)庫的讀寫和維護,能夠迅速執(zhí)行大量數(shù)據(jù)的更新和檢索。B/S 模式機制運作的基本過程是:客戶發(fā)送請求,并把請求發(fā)送給模型的中間層,中間層接收到請求后再發(fā)送給數(shù)據(jù)庫,數(shù)據(jù)庫服務(wù)器對其進行處理,并把處理的結(jié)果送回中間層,然后返回給客戶,讓中間層來支持對數(shù)據(jù)庫的存取與特性控制。B/S 模式的主要優(yōu)點是:用戶界面的改變同企業(yè)邏輯的改變互相隔離,互不影響,便于系統(tǒng)的修改和維護,大大增強了系統(tǒng)的靈活性。三層結(jié)構(gòu)實際上也是目前Web應(yīng)用采用的體系結(jié)構(gòu),它允許把全部的企業(yè)邏輯和業(yè)務(wù)處理
7、放在應(yīng)用服務(wù)器上,支持純粹的瘦客戶機,因此采用三層結(jié)構(gòu)的系統(tǒng)可以較為方便、自然地向Web應(yīng)用等方向拓展。三層架構(gòu)不需要客戶端有很強的處理能力,原有的低性能的PC在新系統(tǒng)中仍然能夠得到很好的利用,避免了重復(fù)投資,降低了應(yīng)用成本。三層結(jié)構(gòu)中的三層,只是邏輯上的概念。具體實現(xiàn)時,物理結(jié)構(gòu)上的差異可能會很大。三層可以在一臺計算機上,也可以在兩臺、三臺,甚至更多的計算機上,只要它們在體系上遵循三層C/S結(jié)構(gòu)即可。系統(tǒng)從一臺擴展為兩臺、三臺甚至更多計算機時,對應(yīng)用沒有任何修改。 B/S 模式的主要缺點是WEB 服務(wù)器應(yīng)用功能弱、構(gòu)造復(fù)雜,應(yīng)用較難,此外,由于所有的對數(shù)據(jù)庫連接及瀏覽器的請求訪問都必須通過W
8、EB 服務(wù)器,從而造成WEB 服務(wù)器工作負荷重的問題。 由三層的B/S 模式擴展到四層的體系結(jié)構(gòu)模型,可以把C/S機制加入到B/S 模型中,如改變數(shù)據(jù)庫服務(wù)器層,引入C/S 機制,增加數(shù)據(jù)庫客戶端。同時,WEB 服務(wù)器也作為數(shù)據(jù)庫服務(wù)器的客戶端。瀏覽器層保持不變。對WEB 數(shù)據(jù)庫的操作有兩部分:一是來自首層的一般客戶請求處理,通過協(xié)議( 如CGI、API、ASP)與WEB 服務(wù)器連接,再通過ODBC 向數(shù)據(jù)庫服務(wù)器發(fā)出SQL 請求,數(shù)據(jù)管理系統(tǒng)執(zhí)行SQL 查詢并將結(jié)果通過ODBC 傳回WEB 服務(wù)器,最后處理結(jié)果返回給首層的客戶;二是來自數(shù)據(jù)庫客戶端的數(shù)據(jù)庫訪問處理,數(shù)據(jù)庫客戶端發(fā)出訪問請求,
9、如對數(shù)據(jù)的插入、刪除、修改、查詢等,并通過JDBC/ODBC 連接到數(shù)據(jù)庫服務(wù)器,訪問WEB 數(shù)據(jù)庫進行處理,處理后的結(jié)果再通過JDBC/ODBC 返回給數(shù)據(jù)庫客戶端。此外,對訪問控制、數(shù)據(jù)的完整性約束的設(shè)置在WEB 服務(wù)器、數(shù)據(jù)庫服務(wù)器端來完成。這樣,即保留了B/S 模式原有的優(yōu)勢,又解決了B/S 模式構(gòu)造復(fù)雜應(yīng)用難的問題,同時對數(shù)據(jù)庫操作的分工處理解決了B/S 模式中的WEB 服務(wù)器負荷重的問題。 客戶端 Web 服務(wù)器 數(shù)據(jù)庫服務(wù)器 應(yīng)用服務(wù)器 Web 瀏覽器瀏覽器 HTTP 服務(wù)服務(wù) 應(yīng)用邏輯應(yīng)用邏輯 數(shù)據(jù)庫數(shù)據(jù)庫 四層的體系結(jié)構(gòu)的主要特點是,1) WEB 服務(wù)器只提供HTTP 服務(wù),
10、如檢索并返回客戶端請求的WEB 頁面;2)客戶端人機界面部分的程序開發(fā)工作得以簡化。它不必關(guān)心業(yè)務(wù)邏輯是如何訪問數(shù)據(jù)庫的,只需把精力集中在人機界面上即可;3) 數(shù)據(jù)服務(wù)層主要提供對數(shù)據(jù)庫進行各種操作的方法。它主要由應(yīng)用邏輯層來調(diào)用。一旦數(shù)據(jù)庫的結(jié)構(gòu)確定下來,對于它的改動就比較小了;4)所有的應(yīng)用邏輯集中在應(yīng)用服務(wù)器層。該應(yīng)用邏輯集主要由WEB 服務(wù)器來調(diào)用。因為應(yīng)用邏輯被分離出來,這一部分可以隨著具體業(yè)務(wù)的變化而變化,但在客戶端和數(shù)據(jù)服務(wù)層所做的改動較小,從而使得該體系結(jié)構(gòu)具有可伸縮的特點,適合于快速開發(fā)。6.2 Web數(shù)據(jù)庫的訪問技術(shù)數(shù)據(jù)庫的訪問技術(shù) 一般實現(xiàn)Web數(shù)據(jù)庫系統(tǒng)的連接和應(yīng)用可采
11、取兩種方法, 一種是在Web服務(wù)器端提供中間件來連接Web服務(wù)器和數(shù)據(jù)庫服務(wù)器, 另一種是把應(yīng)用程序下載到客戶端并在客戶端直接訪問數(shù)據(jù)庫。中間件負責(zé)管理Web 服務(wù)器和數(shù)據(jù)庫服務(wù)器之間的通信并提供應(yīng)用程序服務(wù),由于駐留在Web服務(wù)器上,因而中間件軟件能夠調(diào)用作為Web服務(wù)器和數(shù)據(jù)庫服務(wù)器間傳輸機制的外部程序或編碼,并將執(zhí)行查詢等以HTML頁面或純文本的形式將信息返回給最終用戶。數(shù)據(jù)庫服務(wù)器負責(zé)管理駐留在數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)。最基本的中間件技術(shù)有通過網(wǎng)關(guān)接口CGI 和應(yīng)用程序接口A P I 兩種。6.2.1 CGI CGI(Common Gateway Interface ,即公共網(wǎng)關(guān)接口)是一
12、種Web站點上可以用來訪問Web站點的用戶交互的各種程序的標準,使用CGI腳本允許用戶在瀏覽器中等服務(wù)器上的數(shù)據(jù)庫交互,完成對數(shù)據(jù)庫的各種操作。它是用于連接主頁和應(yīng)用程序的接口。CGI 程序的作用是擴展Web 服務(wù)器的功能,使之能夠執(zhí)行一些Web 服務(wù)器本身不能完成的任務(wù)。訪問數(shù)據(jù)庫也是其重要應(yīng)用。 CGI就是為了擴展主頁的功能而設(shè)立的。CGI 應(yīng)用程序能夠與瀏覽器進行交互, 還可以通過數(shù)據(jù)庫的A P I 與數(shù)據(jù)庫服務(wù)器等外部數(shù)據(jù)源進行通信, 也可以將從瀏覽器獲得的數(shù)據(jù)放到數(shù)據(jù)庫中。 CGI 應(yīng)用程序可由Web瀏覽器來啟動。Web瀏覽器填寫HTML 表單或單擊Web 服務(wù)器上的HTML 頁面中
13、的鏈接。CGI應(yīng)用程序可獲取Web 瀏覽器提供的信息和數(shù)據(jù)庫中的信息。 Web 服務(wù)器執(zhí)行CGI 應(yīng)用程序后, 將執(zhí)行結(jié)果返回到HTML 頁面中, 或?qū)⑿畔鬟f到數(shù)據(jù)庫中。用戶通過Web 瀏覽器以HTML 形式向Web 服務(wù)器提出訪問數(shù)據(jù)庫的請求,Web 服務(wù)器得到請求后, 激活對應(yīng)的CGI 程序, CGI程序?qū)TML 語言轉(zhuǎn)化為SQL 語言文本,同時將請求遞交給數(shù)據(jù)庫管理系統(tǒng), 數(shù)據(jù)庫管理系統(tǒng)得到請求后, 首先驗證其合法性, 然后將操作的數(shù)據(jù)結(jié)果轉(zhuǎn)給CGI 程序, CGI 程序再將這個結(jié)果轉(zhuǎn)化為HTML , 并由Web服務(wù)器轉(zhuǎn)發(fā)給Web 瀏覽器。 0 HTTP請求 數(shù)據(jù)請求 HTTP頁面
14、數(shù)據(jù)返回 W eb瀏瀏 覽覽 器器 W eb服服 務(wù)務(wù) 器器 CGI程程 序序 數(shù)數(shù) 據(jù)據(jù) 庫庫 CGI 具有極強的跨平臺性能, 幾乎可以在任何操作系統(tǒng)和Web 服務(wù)器上實現(xiàn)。但編寫CGI 應(yīng)用程序比較復(fù)雜。另外, CGI缺點是執(zhí)行速度較慢,Web服務(wù)器每啟動一個數(shù)據(jù)查詢服務(wù),就必須啟動一個新的CGI進程,相對服務(wù)器資源代價比較高。因此CGI開發(fā)困難、效率低、應(yīng)用層次不分明。 此外, CGI 程序不能保存變量狀態(tài), 從而給服務(wù)器與客戶機之間通信的保持帶來困難。再者系統(tǒng)的安全性也存在著隱患,易受攻擊而導(dǎo)致癱瘓。6.2.2 ODBC和OLE DBODBC 是一個客戶應(yīng)用程序訪問關(guān)系數(shù)據(jù)庫時提供的一
15、個統(tǒng)一的接口,對于不同的數(shù)據(jù)庫,ODBC提供了一套統(tǒng)一的API,使應(yīng)用程序可以應(yīng)用所提供的API來訪問任何提供了ODBC驅(qū)動程序的數(shù)據(jù)庫。 ODBC 是 Microsoft Windows 開放式服務(wù)體系結(jié)構(gòu) (WOSA) 中的數(shù)據(jù)庫部分。它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標準API(應(yīng)用程序編程接口)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC ODBC 的組件: ODBC API 函數(shù)調(diào)用庫、錯誤代碼集和用于訪問 DBMS 上數(shù)據(jù)的標準結(jié)構(gòu)化查詢語言的 (SQL) 語法。 ODBC 驅(qū)動程序管理器 驅(qū)動程序
16、管理器包含在ODBC32.DLL中,對用戶是透明的。其任務(wù)是管理ODBC驅(qū)動程序,是ODBC中最重要的部件。ODBC 數(shù)據(jù)庫驅(qū)動程序 是一些DLL,提供了ODBC和數(shù)據(jù)庫之間的接口。有關(guān)所提供的驅(qū)動程序的列表,請參見文章 ODBC 驅(qū)動程序列表。 ODBC 游標庫 駐留在 ODBC 驅(qū)動程序管理器和該驅(qū)動程序之間并處理數(shù)據(jù)滾動的動態(tài)鏈接庫 (ODBCCR32.DLL)。 ODBC 管理器 該程序位于Windows 95控制面板(Control Panel)的32位ODBC內(nèi),其主要任務(wù)是管理安裝的ODBC驅(qū)動程序和管理數(shù)據(jù)源。 ODBC是客戶應(yīng)用程序訪問關(guān)系數(shù)據(jù)庫時提供的一個統(tǒng)一的接口,對于不
17、同的數(shù)據(jù)庫,ODBC提供了一套統(tǒng)一的API,使應(yīng)用程序可以應(yīng)用所提供的API來訪問任何提供了ODBC驅(qū)動程序的數(shù)據(jù)庫。ODBC API 把后端匹配為一個 ODBC兼容的數(shù)據(jù)源這些數(shù)據(jù)源可以是從文本文件到 Oracle 或 PostgreSQL RDBMS 的任何東西。并且由于,ODBC已經(jīng)成為一種標準,所以目前所有的關(guān)系數(shù)據(jù)庫都提供了ODBC驅(qū)動程序,這使ODBC的應(yīng)用非常廣泛,基本上可用于所有的關(guān)系數(shù)據(jù)庫。對后端的訪問來自 ODBC 驅(qū)動或者廠商提供的允許訪問數(shù)據(jù)的驅(qū)動 一個基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫操作由對應(yīng)的DBMS的OD
18、BC驅(qū)動程序完成。ODBC提供一套兩個驅(qū)動程序:一個是數(shù)據(jù)庫管理器的語言,另一個為程序設(shè)計語言提供公用接口。驅(qū)動程序是一些DLL,提供了ODBC和數(shù)據(jù)庫之間的接口。允許Visual C+用標準的函數(shù)調(diào)用經(jīng)公用接口訪問數(shù)據(jù)庫的內(nèi)容,是這兩個驅(qū)動程序的匯合點。當然,還有其它和ODBC有關(guān)的實用程序類型的DLL。例如,允許管理ODBC數(shù)據(jù)源的DLL。ODBC的實際管理接口出現(xiàn)在SYSTEM文件夾中的某個CPL(控制面板)文件中,我們在后面要談到這方面的問題。 ODBC提供對數(shù)據(jù)庫內(nèi)容的訪問。首先必須用ODBC管理器注冊一個數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅(qū)動程序等信息,
19、建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。這樣,只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應(yīng)數(shù)據(jù)庫的連接。它沒有提供數(shù)據(jù)庫管理器和C之間盡可能最好的數(shù)據(jù)轉(zhuǎn)換。唯一影響ODBC前程的是,它的速度極低至少較早版本的產(chǎn)品是這樣,然而以Microsoft的市場影響力,ODBC毫無疑問是成功了。 ODBC (開放數(shù)據(jù)庫聯(lián)接 Open Database Connectivity)是一套 API 用這套 API 允許你書寫可以在各種 RDBMS 服務(wù)器上互操作的應(yīng)用。就是說,利用ODBC API,你可通過統(tǒng)一界面和許多各不相同的數(shù)據(jù)庫進行交互。 OLE DB 是什么,它為何不同于其他數(shù)據(jù)庫技術(shù)?
20、OLE DB 是 Visual C+開發(fā)數(shù)據(jù)庫應(yīng)用中提供的新技術(shù),它基于 COM 接口。因此,OLE DB對所有的文件系統(tǒng)包括關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫都提供了統(tǒng)一的接口。這些特性使得OLE DB技術(shù)比傳統(tǒng)的數(shù)據(jù)庫訪問技術(shù)更加優(yōu)越。OLE DB 和其他 Microsoft 數(shù)據(jù)庫技術(shù)的不同之處在于其提供通用數(shù)據(jù)訪問的方式。 通用數(shù)據(jù)訪問 使用多種相關(guān)聯(lián)的應(yīng)用程序來訪問這些數(shù)據(jù)成為工作中一個很大的瓶頸。如果把信息合并到一個數(shù)據(jù)庫管理系統(tǒng) (DBMS) 來解決。這種解決方案不僅昂貴、耗時,而且在許多情況下是不可行的。 另一種方案就是開發(fā)通用數(shù)據(jù)訪問。OLE DB 和 ADO 提供了通用數(shù)據(jù)訪問功能。
21、 并且,OLE DB 比ADO的性能更強一些,并被推薦和 Visual C+ 應(yīng)用程序一起使用。有關(guān)使用何種技術(shù)的更多信息,請參見數(shù)據(jù)訪問技術(shù)建議。 通用數(shù)據(jù)訪問技術(shù)必須兼?zhèn)鋬煞N功能:其一是讓非 DBMS 數(shù)據(jù)源能為數(shù)據(jù)庫應(yīng)用程序所訪問的功能;其二是“分布式查詢”或統(tǒng)一訪問多(分布式)數(shù)據(jù)源功能。 非 DBMS 訪問 讓非 DBMS 數(shù)據(jù)源能為數(shù)據(jù)庫應(yīng)用程序所訪問的能力。DBMS 數(shù)據(jù)源的例子有 IMS、DB2、Oracle、SQL Server、Access 以及 Paradox 等。非 DBMS 數(shù)據(jù)源的例子有存儲于文件系統(tǒng)、電子郵件、電子表格以及項目管理工具等中的信息。 OLE DB 支
22、持開發(fā)能訪問各種DBMS 和非 DBMS 數(shù)據(jù)源的應(yīng)用程序。OLE DB它利用一套 COM 接口來訪問和操縱所有類型的數(shù)據(jù)。COM 不僅在數(shù)據(jù)源之間而且還在其他各種應(yīng)用程序之間減少了不必要的重復(fù)服務(wù),同時還使它們之間的交互操作達到最大。 分布式查詢 所謂分布式查詢就是有能統(tǒng)一訪問分布數(shù)據(jù)源中的數(shù)據(jù)的能力。數(shù)據(jù)源既可以為同一類型,也可以為不同類型, OLE DB定義了一組COM接口,這組接口封裝了各種數(shù)據(jù)系統(tǒng)的訪問操作,這組接口為數(shù)據(jù)使用方和數(shù)據(jù)提供方建立了標準,OLE DB還提供了一組標準的服務(wù)組件,用于提供查詢、緩存、數(shù)據(jù)更新、事務(wù)處理等操作,因此,數(shù)據(jù)提供方只需實現(xiàn)一些簡單的數(shù)據(jù)操作,在使
23、用方就可以獲得全部的數(shù)據(jù)控制能力。 OLE DB 還定義了一批可擴展并且可以維護的接口,這些接口代管并封裝 DBMS 功能中一致、可重復(fù)使用的部分,并且定義了 DBMS 組件的邊界,例如行容器、查詢處理器和事務(wù)處理協(xié)調(diào)器,使用這些組件可對各種信息源進行統(tǒng)一事務(wù)訪問。 OLE DB 應(yīng)用程序通常寫作 DLL,但是其 COM 實現(xiàn)通過使用組件化代碼克服了 DLL 的缺陷(例如命名和版本問題)。在 OLE DB 中,可使用全局唯一標識符 (GUID) 來調(diào)用接口或者訪問其他組件。 最后一點,COM 使用引用計數(shù)來保持對組件使用的跟蹤。調(diào)用接口方法時,引用計數(shù)遞增;方法返回時,引用計數(shù)遞減。當計數(shù)等于
24、零時,該方法所屬的組件被釋放。 OLE DB 是新的低層接口,它介紹了一種“通用的”數(shù)據(jù)訪問范例。OLE DB和ODBC標準都是為了提供統(tǒng)一的訪問數(shù)據(jù)接口,實際上,ODBC標準的對象是基于SQL的數(shù)據(jù)源(SQL-Based Data Source),而OLE DB的對象則是范圍更為廣泛的任何數(shù)據(jù)存儲。從這個意義上說,符合ODBC標準的數(shù)據(jù)源是符合OLE DB標準的數(shù)據(jù)存儲的子集。符合ODBC標準的數(shù)據(jù)源要符合OLE DB標準,還必須提供相應(yīng)的OLE DB服務(wù)程序(Service Provider),就像SQL Server要符合ODBC標準,必須提供SQL Server ODBC驅(qū)動程序一樣。
25、現(xiàn)在,微軟自己已經(jīng)為所有的ODBC數(shù)據(jù)源提供了一個統(tǒng)一的OLE DB服務(wù)程序,叫做ODBC OLE DB Provider。6.2.3 JDBC JDBC是由SUN公司推出的第一個標準的、可執(zhí)行SQL語句的Java API。由JAVA 語言寫的類和界面組成。JDBC 是一種規(guī)范, 能為開發(fā)者提供標準的數(shù)據(jù)庫訪問類和接口, 能夠方便地向任何關(guān)系數(shù)據(jù)庫發(fā)送SQL 語句, 同時JDBC是一個支持基本SQL 功能的低層應(yīng)用程序接口, 但實際上也支持高層的數(shù)據(jù)庫訪問工具及A P I。所有這些工作都建立在X/Open SQL CL I 基礎(chǔ)上。 簡單的說JDBC完成下列三件事:第一,同一個 數(shù)據(jù)庫建立連接
26、;第二,向數(shù)據(jù)庫發(fā)送SQL語句;第三,處理數(shù)據(jù)庫返回的結(jié)果。另外,JDBC是低級的I/0 與高級的I/0 的基礎(chǔ),由于它既可以直接調(diào)用SQL語句,又可以作為構(gòu)造高級接口與工具的基礎(chǔ),所以是一種“低級”的接口。 JDBC 技術(shù) 在JAVA Applet 中訪問數(shù)據(jù)庫的優(yōu)點在于: 直接訪問數(shù)據(jù)庫, 不再需要Web 數(shù)據(jù)庫的介入,從而避開了CGI 方法的一些局限性; 用戶訪問控制可以由數(shù)據(jù)庫服務(wù)器本地的安全機制來解決, 提高了安全性;JDBC 是支持基本SQL 功能的一個通用低層的應(yīng)用程序接口, 在不同的數(shù)據(jù)庫功能的層次上提供了一個統(tǒng)一的用戶界面, 為跨平臺跨數(shù)據(jù)庫系統(tǒng)進行直接的Web 訪問提供了方
27、案。從而克服了A P I 方法一些缺陷; 同時, 可以方便地實現(xiàn)與用戶的交互, 提供豐富的圖形功能和聲音、視頻等多媒體信息功能。 JDBC 的兩種主要接口分別是面向應(yīng)用程序的開發(fā)人員的JDBC API 和面向驅(qū)動程序低層的JDBC Driver API。 基于JDBC 的Web 數(shù)據(jù)庫結(jié)構(gòu)的缺點是: 不能進行OLTP,只能進行簡單的數(shù)據(jù)庫查詢等操作,;完全跨平臺跨數(shù)據(jù)庫系統(tǒng)的功能和標準遠未實現(xiàn);安全性、緩沖機制和連接管理仍不完善。 JDBC主要由兩層組成:JDBC應(yīng)用程序接口(JDBC API)和JDBC驅(qū)動應(yīng)用程序接口。JDBC API提供從應(yīng)用程序到JDBC管理器的通訊。開發(fā)者通過API使
28、用標準Java機制訪問數(shù)據(jù)庫。數(shù)據(jù)庫供應(yīng)商提供JDBC驅(qū)動接口,也可以通過JDBC-ODBC連接橋使用傳統(tǒng)的ODBC連接。 Java Application/Web Application JDBC Driver Manager JDBC-Net Driver JDBC Driver JDBC-ODBC Bridge Driver ODBC and DB Driver JDBC提供了一個通用的JDBC Driver Manager(如圖6-4) ,用來管理各數(shù)據(jù)庫軟件商提供的JDBC 驅(qū)動程序,就可以訪問其數(shù)據(jù)庫。此外,對沒有提供相應(yīng)JDBC驅(qū)動程序的數(shù)據(jù)庫系統(tǒng),開發(fā)了特殊的驅(qū)動程序:JDBC
29、 - ODBC橋,它通過將JDBC操作轉(zhuǎn)換為ODBC操作來實現(xiàn)JDBC操作。對ODBC,它像是通常的應(yīng)用程序,橋為所有對ODBC可用的數(shù)據(jù)庫實現(xiàn)JDBC。由于ODBC被廣泛地使用,該橋的優(yōu)點是讓JDBC能夠訪問幾乎所有的數(shù)據(jù)庫,規(guī)模較小而效率高的特點。JDBC - NET Driver 允許使用通用的網(wǎng)絡(luò)協(xié)議訪問不同的數(shù)據(jù)庫服務(wù)器。 DriverManager Connection Connection Statement Statement Statement ResultSet ResultSet 6.2.4 對象/關(guān)系映射 對象-關(guān)系映射用兩個步驟完成。首先,把 XML 模式(這里是 D
30、TD)映射成一個對象模式,接著把對象模式映射成數(shù)據(jù)庫模式。這兩步映射可以隨意的被結(jié)合在一起為直接的 DTD-到-數(shù)據(jù)庫映射,如同今天多數(shù)軟件所做的那樣。 在考慮這種映射的時候,理解涉及到的對象是特定于每個 DTD 的,而不是來自 DOM 的對象是很重要的。特別是,這些對象建模在 XML 文檔中的數(shù)據(jù),而 DOM 建模 XML 文檔的結(jié)構(gòu)。6.3 XML數(shù)據(jù)庫數(shù)據(jù)庫 XML數(shù)據(jù)庫方式充分考慮了XML數(shù)據(jù)本身的特點,針對這些特點進行存儲和索引。在該方式下,既可以實現(xiàn)細粒度的查找和更新,也不需要將XML文檔拆分成多個部分進行存儲。 XML數(shù)據(jù)庫為XML文檔定義了一個邏輯模型,并根據(jù)這個模型存取文件。
31、這個模型包括元素、屬性、PCDATA和文件順序。XML數(shù)據(jù)庫以XML文件作為其基本的邏輯存儲單位,就好像關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表中的記錄一樣。XML數(shù)據(jù)庫對底層的物理存儲的實現(xiàn)模型沒有固定的要求,它可以建立在關(guān)系型數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫或?qū)哟螖?shù)據(jù)庫之上,甚至采用特定的存儲格式 總之,XML數(shù)據(jù)庫是為存儲XML文檔并保持其完整性而設(shè)計的,存儲時以XML文檔為基本存儲單位的一種數(shù)據(jù)存儲方式。XML數(shù)據(jù)庫不是一種全新的數(shù)據(jù)庫模式,它并不是要取代現(xiàn)存的數(shù)據(jù)庫模式,而是為人們處理XML文檔提供一種更方便的存儲方式。 XML是一種基于SGML簡單靈活的元語言,具有良好的數(shù)據(jù)存儲格式、可擴展性、高度結(jié)構(gòu)化、便于網(wǎng)
32、絡(luò)傳輸?shù)忍匦裕@些特性使得XML本身非常適用于數(shù)據(jù)庫間的信息交互。所以,XML技術(shù)和數(shù)據(jù)庫技術(shù)的結(jié)合就成為必然的趨勢,以XML為中介實現(xiàn)數(shù)據(jù)庫之間的信息交互就成為XML技術(shù)應(yīng)用研究的熱點。 XML 數(shù)據(jù)庫是一種Web 數(shù)據(jù)庫,它是可以對XML 文檔進行存取管理和數(shù)據(jù)查詢的數(shù)據(jù)庫,是一個能夠在應(yīng)用中管理XML 數(shù)據(jù)和文檔的數(shù)據(jù)庫系統(tǒng)。簡單一點說,XML 數(shù)據(jù)庫就是一個XML 文檔的集合,這些文檔是持久的并且是可以操作的。 由于XML 這種語言的特點是可以自己定義數(shù)據(jù)結(jié)構(gòu)。采用這種數(shù)據(jù)傳輸格式可以搭建起一個獨立于數(shù)據(jù)庫的網(wǎng)關(guān)平臺,它屏蔽了數(shù)據(jù)庫的異構(gòu)性,也屏蔽了接收和發(fā)送數(shù)據(jù)的兩端在實現(xiàn)應(yīng)用所采用
33、的編程語言上的異構(gòu)性。所以這種基于XML的數(shù)據(jù)庫網(wǎng)關(guān)平臺不會影響原有系統(tǒng)的使用,可以實現(xiàn)平滑的升級和移植,這對于企業(yè)升級是非常有意義的 6.3.1 XML技術(shù)的基本思想 20世紀60年代,IBM公司的研究人員發(fā)明了第一種現(xiàn)代標記語言通用標記語言(Generalized Markup Language,GML)。GML可以用于標記任何數(shù)據(jù)集合的結(jié)構(gòu),同時它也是一種元語言(meta-language),即能夠描述其他語言及其語法和詞匯表的語言。 1986年, SGML被國際標準化組織(ISO)接受為國際性的數(shù)據(jù)存儲和交換的標準,并收錄在ISO 8879當中。Web技術(shù)的出現(xiàn)和進步將對工業(yè)界的發(fā)展和
34、人類的通信行為產(chǎn)生的巨大影響,因此,GML的問世具有重要的意義。 1996年,W3C組織開始設(shè)計一種可擴展的標記語言,它將SGML的強大的靈活性和完善的功能與HTML技術(shù)結(jié)合起來。這就是后來的XML語言。 XML重新定義了SGML的一些內(nèi)部值和參數(shù),去掉了大量的很少用到的功能,這些繁雜的功能使得SGML在設(shè)計網(wǎng)站時顯得復(fù)雜化。XML保留了SGML的結(jié)構(gòu)化功能,這樣就使得網(wǎng)站設(shè)計者可以定義自己的文檔類型,XML同時也推出一種新型文檔類型,使得開發(fā)者也可以不必定義文檔類型。 XML是一種界定文本數(shù)據(jù)的簡便而標準的方法。XML不關(guān)心任何視覺表示形式,只關(guān)心數(shù)據(jù)本身。XML的標記用來說明你所描述的概念
35、,而屬性則用來控制它們的結(jié)構(gòu)。在這樣的描述機制下,XML的數(shù)據(jù)是開放的。XML能夠在不同的用戶和程序之間交換數(shù)據(jù),而不論其平臺如何。它的自描述的特性使其對于B2B和企業(yè)內(nèi)部網(wǎng)解決方案來說是一種有效的選擇。并且無需協(xié)調(diào)就可以在程序之間共享數(shù)據(jù)。所以,你可以定義自己所設(shè)計出的語法并同其他人共享。 格式正規(guī)的XML XML的語法規(guī)則是XML進行工作的基礎(chǔ)。最基本的,格式正規(guī)的XML會遵守W3C的XML 1.0推薦標準的語法要求。吸取HTML松散格式帶來的經(jīng)驗教訓(xùn),XML一開始就堅持實行良好的格式。 我們先看HTML的一些語句。 1.sample 2.sample 3.sample 4.samplar
36、 在XML文檔中,上述幾種語句的語法都是錯誤的。因為: 1所有的XML標記都必須合理嵌套; 2.所有的標記都必須要有一個相應(yīng)的結(jié)束標記; 3.所有XML標記都區(qū)分大小寫; 4.所有標記的屬性必須用括起來; 所以上列語句在XML中正確的寫法是 1.sample 2.sample 3.sample 4.samplar 另外,XML標記必須遵循下面的命名規(guī)則: 1.名字中可以包含字母、數(shù)字以及其它字母; 2.名字不能以數(shù)字或_ (下劃線) 開頭; 3.名字中不能包含空格; 4.名字不能以字母 xml (或 XML 或 Xml .) 開頭; 文檔類型定義 文檔類型定義( Document Type D
37、efinition,DTD)是一種保證XML文檔格式正確的有效方法,可以比較XML文檔和DTD文件來看文檔是否符合規(guī)范,元素和標簽使用是否正確。一個DTD文檔包含:元素的定義規(guī)則,元素間關(guān)系的定義規(guī)則,元素可使用的屬性,可使用的實體或符號規(guī)則。 DTD文件也是一個ASCII的文本文件,后綴名為.dtd。 調(diào)用DTD文件的方法有兩種:直接包含在XML文檔內(nèi)的DTD和調(diào)用獨立的DTD文件。數(shù)據(jù)建模XML技術(shù)的主要優(yōu)勢之一就是XML詞匯表的高效率。詞匯表是元素及其屬性、以及你所指定的文檔結(jié)構(gòu)的規(guī)范。一個有效的詞匯表,是創(chuàng)建良好的支持XML的應(yīng)用程序的重要基礎(chǔ)。XML數(shù)據(jù)模型比關(guān)系數(shù)據(jù)模型更加豐富,同
38、時也更加復(fù)雜。XML數(shù)據(jù)模型不僅允許對復(fù)雜的數(shù)據(jù)進行建模,而且會保留層次關(guān)系和數(shù)據(jù)中的文檔順序。文檔順序和層次關(guān)系是通過基于XML節(jié)點標識符的排序維護的。將結(jié)構(gòu)化數(shù)據(jù)存儲在關(guān)系型結(jié)構(gòu)中,可以獲得更好的性能。但如果數(shù)據(jù)是半結(jié)構(gòu)化或非結(jié)構(gòu)化的,則可以選擇使用XML數(shù)據(jù)模型來進行建模,加入XML標記。如果把結(jié)構(gòu)化的數(shù)據(jù)用 XML數(shù)據(jù)模型來存放,則會影響數(shù)據(jù)訪問的性能。 文檔對象模型(DOM) 在文檔對象模型DOM中,應(yīng)用程序所操作的XML文檔不是一個普通的文本流,而是一個對象樹。程序可以十分方便地查詢或修改對象及其屬性,這里的屬性可以是與當前對象對應(yīng)的元素或子元素,也可以是它所包含的文本內(nèi)容。 文檔
39、對象模型DOM就是一個操作結(jié)構(gòu)化文檔的應(yīng)用程序編程接口(API),它定義了XML文檔的邏輯結(jié)構(gòu)以及對XML文檔進行各種操作的方法。通過DOM模型,應(yīng)用程序設(shè)計者可以十分方便地創(chuàng)建XML文檔,遍歷XML文檔的結(jié)構(gòu),增加、修改、刪除文檔的元素和內(nèi)容。DOM標準接口的提出大大簡化了應(yīng)用程序中對結(jié)構(gòu)化文檔處理操作XML簡單API(SAX)操作XML文檔的另一個最主要的編程接口是SAX(Simple API for XML)。SAX提供了一種事件驅(qū)動的模式去處理XML文檔,SAX解析器處理XML文檔時,當遇到元素開始、元素結(jié)束、文本、文檔的開始或結(jié)束等時,它會發(fā)出相應(yīng)的事件。應(yīng)用程序設(shè)計者就可以有選擇地
40、決定對哪些事件進行處理和如何處理.SAX解析器在處理XML文檔的過程并不創(chuàng)建對象,而只是將相應(yīng)的事件傳遞給相應(yīng)的應(yīng)用程序,由應(yīng)用程序決定如何處理。SAX解析器在解析開始的時候就開始發(fā)送事件。當解析器遇到文檔開始、結(jié)束,元素開始,結(jié)束和文本的等的時候,相應(yīng)的應(yīng)用程序代碼會收到一個事件。應(yīng)用程序就可以立即開始執(zhí)行,得到相應(yīng)的結(jié)果,而不需要等到整個文檔被解析完畢。 轉(zhuǎn)換XML轉(zhuǎn)換(transformation)是XML技術(shù)中一項功能強大的技術(shù)。通過轉(zhuǎn)換,應(yīng)用程序設(shè)計者可以把一套規(guī)則應(yīng)用在一個文檔上,將這個文檔轉(zhuǎn)換成另一種形式的文檔。在運行的時候,當決定要進行哪一種轉(zhuǎn)換時,就可以將相應(yīng)的規(guī)則應(yīng)用到文檔
41、上并進行轉(zhuǎn)換。對于電子商務(wù)中的B2B模式以及供應(yīng)鏈管理方面的應(yīng)用來說,這項功能就顯得特別重要。一種被稱作可擴展樣式語言XSL( Extensible Style Language)是用來定義XML文檔樣式的語言,它能使得客戶端的WEB瀏覽器控制文檔的表示形式,從而不需要再與服務(wù)器進行交互通信??蓴U展樣式表語言轉(zhuǎn)換 (XSLT)主要用于識別XML文檔并使用XSL樣式。其目的是將某個XML文檔的內(nèi)容轉(zhuǎn)換為另一種格式或不同結(jié)構(gòu)的文檔。雖然XSLT并不是一種通用的轉(zhuǎn)換語言,但它的靈活性還是相當好的,利用XSLT,你可以進行許多XML中的轉(zhuǎn)換、排序和組織操作,而不需要自己編寫程序代碼來實現(xiàn)。只需要根據(jù)元
42、素顯示的先后關(guān)系編寫XML的轉(zhuǎn)換規(guī)則就可以了。鏈接和查詢鏈接是在標記語言當中一個很受歡迎的特征。在關(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)表會形成一個鏈接自身的表單,使用外鍵獲取另一個表的數(shù)據(jù)。任何一種技術(shù)要想很好地應(yīng)用于穩(wěn)定的數(shù)據(jù)庫中,就必須提供某種與數(shù)據(jù)主體鏈接的能力。XML也提供了這樣的能力。XML的使用者經(jīng)常希望將一個XML文檔與另一個XML文檔鏈接起來,或者將一些非XML的內(nèi)容與XML文檔鏈接起來。因此,鏈接是XML研究者們投入很大精力進行研究的重要原因。XML鏈接可分為簡單鏈接和擴展鏈接。目前,XML解析器中并沒有對鏈接提供標準的支持,但有些解析器提供了實現(xiàn)的鏈接的常見形式。XML技術(shù)的研究者們感興趣
43、的另一個領(lǐng)域是查詢。查詢技術(shù)是十分重要的。XML使用者經(jīng)常要通過某種途徑把一些規(guī)則傳遞給XML解析器,從而獲得符合這些規(guī)則的文檔片斷集合。具備了這種能力,一個XML文檔就可以看成某種類型的數(shù)據(jù)庫。除了有類似于數(shù)據(jù)庫查詢的特征以外,XML的查詢也是轉(zhuǎn)換操作的中心。命名空間(Namespace)和模式(Schema)XML技術(shù)的開發(fā)者在近幾年提出了解決XML文檔結(jié)構(gòu)自動檢測的新技術(shù),即XML的模式(Schema)和命名空間(Namespace)。所謂命名空間,是指一組保持唯一的名稱,是在邏輯上相關(guān)的任何一組名稱,而且每個名稱都必須唯一。命名空間是一種層次的結(jié)構(gòu)。使用命名空間更容易保證產(chǎn)生唯一的名稱
44、。要保證名稱的全球唯一性,是一件很困難的事情。但如果將唯一性限制在一個比較窄的語境中,就會變得簡單得多。命名空間的層次性就提供了這樣一種環(huán)境,只需要保證在同一個命名空間里名稱唯一就可以了。在將一個新名稱添加到某個命名空間中之前,命名空間的管理機構(gòu)必須確保該命名空間中沒有這個新名稱。在一般情況下,這是非常簡單的事情,因為它屬于子命名系統(tǒng),子命名系統(tǒng)中保證名稱唯一是比較容易的。然而,在某些情況下,這也可能會變得相當復(fù)雜。當今的許多 Internet 命名機構(gòu)就是現(xiàn)實中一個很好的例子。如果在加入新名稱時不檢查唯一性,將會破壞命名空間,這樣一來,某些沒有多義性的名稱也無法被正確引用。如果出現(xiàn)這種情況,
45、這組名稱將不再算是正式的命名空間了。根據(jù)定義,命名空間必須確保它的成員具有唯一性。命名空間還必須具有自己的名稱,使用者需要通過命名空間的名稱引用命名空間里的成員。 傳統(tǒng)的DTD技術(shù)存在許多不足之處。因此W3C 在提出最初的 XML 規(guī)范的幾年之后開發(fā)了 XML Schema 規(guī)范。模式(Schema)技術(shù)是用來代替DTD的。模式可以定義能在DTD中使用的所有文檔結(jié)構(gòu),它還可以定義數(shù)據(jù)類型和比DTD更復(fù)雜的規(guī)則。因此,它比DTD更加強大完善。6.3.2 XML數(shù)據(jù)庫的分類 XML數(shù)據(jù)庫分為基于文本的XML數(shù)據(jù)庫和基于模型的XML數(shù)據(jù)庫兩個大類。 基于文本的XML數(shù)據(jù)庫 基于文本的XML數(shù)據(jù)庫將X
46、ML以文本的方式進行存儲。它可以是操作系統(tǒng)中文件系統(tǒng)中的文件的形式,或者是關(guān)系數(shù)據(jù)庫中的BLOB數(shù)據(jù),或者特定的文件格式。索引的方式對所有基于文本的XML數(shù)據(jù)庫來說都是基本一樣的,它可以使查詢引擎很方便地跳到XML文檔內(nèi)的任何地方。這就可以大大提高數(shù)據(jù)庫存取文件或文件片斷的速度。 基于文本的XML數(shù)據(jù)庫與層次結(jié)構(gòu)的數(shù)據(jù)庫非常相似,當存取預(yù)先定義好層次的數(shù)據(jù)的時候,它比關(guān)系數(shù)據(jù)庫更加方便高效。和層次結(jié)構(gòu)的數(shù)據(jù)庫一樣,當以其它形式(如轉(zhuǎn)置層次)存取數(shù)據(jù)時,XML數(shù)據(jù)庫也會存在不足。它不能像很多關(guān)系數(shù)據(jù)庫那樣使用邏輯指針,使相同復(fù)雜度的查詢以相同的速度完成?;谀P偷腦ML數(shù)據(jù)庫它根據(jù)XML文檔構(gòu)造
47、一個內(nèi)部的模型并根據(jù)這個模型進行存儲。至于具體的存儲實現(xiàn)方式則由數(shù)據(jù)庫的具體方式來決定。有些實現(xiàn)方法將特定的模型存儲于現(xiàn)有的DBMS,如關(guān)系型數(shù)據(jù)庫或面向?qū)ο髷?shù)據(jù)庫中。例如采用DOM模型來表示XML文檔,在關(guān)系型數(shù)據(jù)庫中存儲DOM時,就會有對元素、屬性、PCDATA、實體、實體引用等進行分別存儲的表格。而其它數(shù)據(jù)庫一般使用為特定模型專門設(shè)計和優(yōu)化的專有存儲格式。使用專有存儲格式的基于模型的XML數(shù)據(jù)庫,如果以文件的存儲順序讀取文件,其性能和基于文本的XML數(shù)據(jù)庫相似。這是因為這種數(shù)據(jù)庫大多在節(jié)點間使用了物理指針,這樣其讀取性能和讀取文本差不多。和基于文本的XML數(shù)據(jù)庫一樣,如果數(shù)據(jù)的讀取順序和
48、存儲順序不同,基于模型的XML數(shù)據(jù)庫也會遇到性能上的問題。6.3.3 XML數(shù)據(jù)庫的主要特點 以文檔集合為中心的管理方式?,F(xiàn)在,大部分的XML數(shù)據(jù)庫都支持集合,其作用相當于關(guān)系數(shù)據(jù)庫中的表(記錄的集合)和文件系統(tǒng)中的文件夾(文件的集合)。在XML數(shù)據(jù)庫中,XML文檔放在集合中進行管理。一個文檔集合把一類文檔聚集在一起,方便用戶操作。集合級別上的查詢、修改操作都會反映到集合內(nèi)的每個文檔。 以XPath為主的查找方式。大多數(shù)的XML數(shù)據(jù)庫都支持一種或者多種查詢語言。最常用的是XPath的查詢方式。而現(xiàn)有的XML數(shù)據(jù)庫一般都不能支持關(guān)系數(shù)據(jù)庫中的最普遍的SQL查詢語言。XPath是基于XML文檔樹形
49、模型,給出從某個結(jié)點起的查詢路徑,搜索文檔。目前,XPath作為數(shù)據(jù)庫查詢語言還有不少缺陷:不能分組、排序、連接等。 XML數(shù)據(jù)庫一般都為用戶提供操作XML的應(yīng)用程序編程接口API。它提供數(shù)據(jù)庫連接、瀏覽元數(shù)據(jù)、執(zhí)行查詢和返回結(jié)果的方法。返回結(jié)果通常是XML字符串、DOM樹。如果查詢返回結(jié)果是多個文檔或文檔片斷(Fragment)的話,通常都會提供枚舉這些結(jié)果的方法。對于以Client/Server模式運行的數(shù)據(jù)庫產(chǎn)品,還可以將結(jié)果通過網(wǎng)絡(luò)協(xié)議(如HTTP)回傳給客戶端。 事務(wù)、鎖定和并發(fā)方面的支持還不足。如今,很多XML數(shù)據(jù)庫都支持事務(wù)處理,包括事務(wù)的提交以及回滾。但是,鎖的粒度通常比較大,
50、對整個文檔的而不是對文檔片斷(Fragment)的,所以多用戶并發(fā)性的支持相對較低。具體的并發(fā)程度取決于應(yīng)用程序以及文檔的構(gòu)成。 基于DOM的數(shù)據(jù)更新方式。對于關(guān)系數(shù)據(jù)庫,采用SQL語言進行數(shù)據(jù)更新是非常方便的。但對于XML數(shù)據(jù)庫而言,XPath, XQuery查詢語言還沒有支持數(shù)據(jù)更新的功能?,F(xiàn)在常見的一種方法是先把數(shù)據(jù)轉(zhuǎn)換成DOM對象,再對DOM對象進行數(shù)據(jù)更新。這種方式的不足是占用較多內(nèi)存(生成DOM對象會占用較大內(nèi)存),時間效率也不好,因為要先通過解析生成DOM對象,再對DOM對象的數(shù)據(jù)進行更新,再進行轉(zhuǎn)換后保存。 保持完整的XML文檔。這是它的一個重要特性。與其他方式相比,XML數(shù)據(jù)
51、庫的一個最重要特性是它可以為XML文檔提供了保持原樣的功能。就是說可以將XML文件存放在XML數(shù)據(jù)庫中,而且再取回同樣的XML文檔。對于以文檔為中心的應(yīng)用程序來說非常重要,因為實體應(yīng)用、注釋和處理指令是這些文檔不可缺少的組成部分。特別是對于法律和醫(yī)學(xué)領(lǐng)域中格式不允許隨意竄改的數(shù)據(jù)文檔。 XML數(shù)據(jù)庫并沒有對數(shù)據(jù)的規(guī)范化作強制的要求,如果使用不當,使用XML數(shù)據(jù)庫很容易設(shè)計出一些不合理的,易于出錯的存儲結(jié)構(gòu)。因此,在將文件存入XML數(shù)據(jù)庫之前,需要注意XML文檔的結(jié)構(gòu)。XML數(shù)據(jù)庫的規(guī)范化和關(guān)系型數(shù)據(jù)庫的規(guī)范化一樣,其主要目標是要求文檔的設(shè)計保證數(shù)據(jù)不會重復(fù)存儲。兩者的不同在于XML支持多值屬性
52、而一般的關(guān)系型數(shù)據(jù)庫并不支持。這樣就有可能以一種在關(guān)系型數(shù)據(jù)庫中難以實現(xiàn)的方式來規(guī)范XML數(shù)據(jù)庫的數(shù)據(jù)。 與數(shù)據(jù)規(guī)范化密切相關(guān)的是引用完整性。引用完整性即相關(guān)數(shù)據(jù)的引用指針的有效性,是保持數(shù)據(jù)庫數(shù)據(jù)一致性的必要條件。如果你的銷售訂單含有一個客戶代碼,而相應(yīng)的客戶信息并不存在,這對你沒什么好處。發(fā)貨部門不知道往哪里發(fā)貨,而財務(wù)部門不知道給哪里寄發(fā)票。在關(guān)系型數(shù)據(jù)庫中,引用完整性意味著確保外部鍵指向合法的主鍵,也就是說,對每個外部鍵都要檢查相應(yīng)的主鍵記錄。在原生XML數(shù)據(jù)庫中,引用完整性意味著XLink或其他專有鏈接機制指向合法的文件或文件片斷。 XML的內(nèi)容和應(yīng)用分開,結(jié)構(gòu)化,自描述性,開放性等
53、特點,使基于XML的數(shù)據(jù)庫有以下新特性: (1)可實現(xiàn)異構(gòu)數(shù)據(jù)庫間數(shù)據(jù)的共享 (2)將比列可觀的處理工作從服務(wù)器端轉(zhuǎn)移到WEB客戶端,提高了系統(tǒng)運行效率 (3)實現(xiàn)了同一數(shù)據(jù)以不同的瀏覽形式展現(xiàn)給不同的用戶 XML 由于具有可擴展性、與平臺無關(guān)性等特點, 使其在Web 數(shù)據(jù)庫應(yīng)用中具有以下新優(yōu)勢: (1) 實現(xiàn)異構(gòu)數(shù)據(jù)源數(shù)據(jù)的集成; (2) 將大量處理任務(wù)轉(zhuǎn)移到客戶端, 減輕了服務(wù)器端的負荷, 提高了系統(tǒng)運行效率; (3) 客戶端可通過編程對數(shù)據(jù)進行二次處理, 提高了數(shù)據(jù)復(fù)用性. XML 元素比關(guān)系具有更多的固有的靈活性。一個XML 元素可以包含任意數(shù)量的特性(作為子元素或?qū)傩? ,并且每個子
54、元素可能包含不止一個數(shù)據(jù)項。這就是XML 的分層結(jié)構(gòu)。這個特性對于工藝卡片信息的描述尤其重要,如下是一個存儲工藝卡片信息的XML 文件(作了適當簡化) : 車工藝基準 三相異步電動機 1 清江機械加工工序卡片 工序卡片 工步號;工步內(nèi)容;工藝裝備;主軸轉(zhuǎn)速;切削深度;進給次數(shù);手動 1 車工藝基準,保證尺寸156 及6 ,要求全批統(tǒng)一. 2 粗車軸孔29 0. 2. 游標卡尺 XML 的另一大優(yōu)勢是它存儲數(shù)據(jù)的形式是可讀的,即人可以直接閱讀和編輯XML 文檔,而數(shù)據(jù)庫中的表不通過數(shù)據(jù)庫管理系統(tǒng)是無法訪問的。另外,對于編程方面,XML 還有一些類似于面向?qū)ο缶幊陶Z言中的對象的特性,如元素類型、命
55、名屬性和表示層次結(jié)構(gòu)的能力,這個特性使XML 能成為數(shù)據(jù)表示的基礎(chǔ)。如果信息的形式比較復(fù)雜,個別字段非常大且復(fù)雜,數(shù)據(jù)庫不大但對可伸縮性要求較高,而數(shù)據(jù)類型不是十分重要,那么XML 數(shù)據(jù)庫的優(yōu)勢將十分明顯。 一般CAPP系統(tǒng)包括確定加工方法,選擇加工設(shè)備,進行工藝路線安排和工序設(shè)計等活動。的實質(zhì)就是:把以特征為基礎(chǔ)進行描述的產(chǎn)品設(shè)計信息與以工作基元為基礎(chǔ)進行描述的制造資源信息進行匹配,最終生成工藝規(guī)程的過程。因此可以認為,通用化系統(tǒng),就是一個由推理機制和支撐知識庫兩部分組成的、且相互完全分離的系統(tǒng)程序。 6.3.4 XML 數(shù)據(jù)庫的模式設(shè)計 XML數(shù)據(jù)庫的模式設(shè)計分為“概念模式”的設(shè)計和“物理
56、模式”的設(shè)計。 數(shù)據(jù)庫概念模式設(shè)計 XML 數(shù)據(jù)庫是由很多XML 元素的集合組成,例如在網(wǎng)絡(luò)化CAPP 系統(tǒng)中存儲某一個零件的所有卡片信息的XML文件為: 通過如下的方法可以轉(zhuǎn)換成一個關(guān)系型的模式: 每個元素變成表(關(guān)系) ; 每個XML 屬性變成列(關(guān)系型屬性) ; 一個元素的每個子元素變換成表中的列,這個表與子元素指定的表之間具有一個外鍵約束 轉(zhuǎn)換后的關(guān)系如下: Cards( Part ID , PartName , Card) Card( ID , Name , Template , Instance) 反過來轉(zhuǎn)換是一樣的道理。從這個轉(zhuǎn)換對比可以看出,XML 中的數(shù)據(jù)(存在方式可以是內(nèi)容
57、、屬性值、元素名等) 就相當于關(guān)系模式中的字段,XML 中數(shù)據(jù)的相互位置關(guān)系就相當于關(guān)系模式中元組與元組的關(guān)系及元組與字段的關(guān)系。設(shè)計好這兩個方面,就構(gòu)建了一個XML 數(shù)據(jù)庫的簡單概念模型。 從圖5 還可以看到,XML 數(shù)據(jù)庫的這個模型與對象數(shù)據(jù)庫十分相象,因為它同樣也是由節(jié)點組成的,并且每個節(jié)點都可以包含異類數(shù)據(jù),而XML 數(shù)據(jù)庫節(jié)點異類的程度大部分取決于用于定義XML 文檔結(jié)構(gòu)的特定DTD 或模式 物理模式設(shè)計 對幾個主要的數(shù)據(jù)模型用類封裝的形式簡單的說明實現(xiàn)的過程: 文檔 文檔必須具有一個名字和一個根元素。首先創(chuàng)建一個文檔:CreateNewDocument (name As strin
58、g) , “name”是一個唯一標識,創(chuàng)建成功則返回一個XMLDocument 對象;其次是訪問文檔, 主要包括創(chuàng)建一個根節(jié)點:CreateDocument Element ( document As XMLDocument , tag Asstring) ; 訪問根節(jié)點: GetDocument Element ( document As XMLDocument) 。 元素 元素是以某種方式標記的,計算機能識別的文檔的組成部分。是一個具有類型名、屬性集和字符數(shù)據(jù)的集合,它可以包含其他元素和屬性。它下面可以再有一個元素的集合。所以創(chuàng)建的操作就包括創(chuàng)建屬性、字符數(shù)據(jù)區(qū)和元素等,如下:CreatA
59、ttribute (element As XML Element , name As string ,value As string) ;Creat Element (element As XML Element , tag As string) ;元素的操作還包括檢索和刪除:GetAttribute (element As XML Element , name As string) ;RemoveAttribute (element As XML Element , name As string) ;GetChild(element As XML Element , index As Int
60、eger) ;RemoveChild(element As XML Element , index As Integer) ; 屬性 屬性是不能包含其他元素的命名的簡單類型定義。一個元素可以包含一個或多個屬性,屬性是一個由“=”隔開的名稱值,它的操作可以歸類為三種: GetName (attribute As XmlAttribute) ; GetValue (attribute As XmlAttribute) ; SetValue (attribute As XmlAttribute , value As string) ; 當您的信息需要簡單類型的數(shù)據(jù)并且存在以下情況時,請使用屬性: (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑合同補充協(xié)議書
- 房地產(chǎn)行業(yè)員工勞動合同
- 2025年包頭駕校考試貨運從業(yè)資格證考試
- 2025年黃石貨運從業(yè)資格證模擬考試下載什么軟件
- 2024-2025學(xué)年高中語文課時作業(yè)2鳥啼含解析蘇教版必修2
- 大學(xué)團支部年終工作總結(jié)
- 珠寶營業(yè)員工作計劃
- 聘用人員勞務(wù)合同范本
- 昆明理工大學(xué)《攝影技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 車輛抵押擔(dān)保借款合同范本
- 自卸車司機實操培訓(xùn)考核表
- 教師個人基本信息登記表
- 2022年江蘇對口單招市場營銷試卷剖析
- 法律職業(yè)倫理(第二版)完整版教學(xué)課件全書電子講義(最新)
- ESD測試作業(yè)指導(dǎo)書-防靜電手環(huán)
- 高一(4)班分科后第一次班會課件ppt課件(PPT 29頁)
- 春季開學(xué)安全第一課PPT、中小學(xué)開學(xué)第一課教育培訓(xùn)主題班會PPT模板
- JJG30-2012通用卡尺檢定規(guī)程
- 部編版人教版二年級上冊語文教材分析
- APR版制作流程
- 《C++程序設(shè)計》完整教案
評論
0/150
提交評論