學(xué)術(shù)論文:(畢業(yè)設(shè)計(jì)論文)基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫集成研究_第1頁
學(xué)術(shù)論文:(畢業(yè)設(shè)計(jì)論文)基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫集成研究_第2頁
學(xué)術(shù)論文:(畢業(yè)設(shè)計(jì)論文)基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫集成研究_第3頁
學(xué)術(shù)論文:(畢業(yè)設(shè)計(jì)論文)基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫集成研究_第4頁
學(xué)術(shù)論文:(畢業(yè)設(shè)計(jì)論文)基于Web服務(wù)的分布式異構(gòu)數(shù)據(jù)庫集成研究_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

〔畢業(yè)設(shè)計(jì)論文〕基于Web效勞的分布式異構(gòu)數(shù)據(jù)庫集成研究l學(xué)號:常州大學(xué)畢業(yè)設(shè)計(jì)〔論文〕〔2021屆〕題目基于Web效勞的分布式異構(gòu)數(shù)據(jù)庫集成研究學(xué)生學(xué)院專業(yè)班級校內(nèi)指導(dǎo)教師專業(yè)技術(shù)職務(wù)校外指導(dǎo)老師專業(yè)技術(shù)職務(wù)二○一二年六月l基于Web效勞的分布式異構(gòu)數(shù)據(jù)庫集成研究摘要:隨著企業(yè)的快速開展和不斷擴(kuò)充,對企業(yè)內(nèi)部新舊系統(tǒng)之間的數(shù)據(jù)、信息進(jìn)行整合和共享,實(shí)現(xiàn)企業(yè)信息數(shù)據(jù)一體化日趨重要。但是,由于企業(yè)內(nèi)部之間采用的系統(tǒng)以及數(shù)據(jù)庫存在分布性和異構(gòu)性,這必然會促進(jìn)企業(yè)應(yīng)用集成的開展。本文首先介紹了分布式系統(tǒng)的概念、國內(nèi)外開展現(xiàn)狀,以及分布式系統(tǒng)的體系結(jié)構(gòu)和特點(diǎn)。接著介紹了異構(gòu)數(shù)據(jù)庫集成的現(xiàn)狀,以及異構(gòu)數(shù)據(jù)相互集成的方法。然后對各種異構(gòu)數(shù)據(jù)集成技術(shù)方案進(jìn)行了分析,闡述了各自的優(yōu)缺點(diǎn)。最后通過設(shè)計(jì)和開發(fā)一個(gè)基于WCFDataService的數(shù)據(jù)集成案例,在此案例中主要使用了基于XML的數(shù)據(jù)標(biāo)準(zhǔn)OData。實(shí)踐證明,基于EntityFramework以及DataService的分布式異構(gòu)數(shù)據(jù)集成方案,可以很好的降低系統(tǒng)集成對客戶端的限制,對于分布式異構(gòu)數(shù)據(jù)集成具有較高的參考價(jià)值,該方案同樣適用于等開發(fā)平臺。關(guān)鍵字:異構(gòu);分布式;Web效勞;數(shù)據(jù)集成WebservicebasedonDistributedHeterogeneousDatabaseIntegrationResearchAbstract:Withtherapiddevelopmentofenterprisesandexpanding,ofenterpriseinternaldatabetweennewandoldsystem,informationintegrationandsharing,realizeenterpriseinformationdataintegrationarebecomingmoreandmoreimportant.But,Becausetheenterpriseinteriorisadoptedbetweenthesystemandthedatabaseisdistributedandheterogeneous,thiswillpromotethedevelopmentoftheenterpriseapplicationintegration.Thispaperfirstintroducedtheconceptofdistributedsystems,thedomesticandforeigndevelopmentpresentsituation,anddistributedsystemstructureandcharacteristics.Thenitintroducesthepresentsituationoftheintegrationofheterogeneousdatabase,andeachotherofheterogeneousdataintegrationmethod.Andthentoallsortsofheterogeneousdataintegrationtechnologysolutionsareanalyzed,expoundstheadvantagesanddisadvantagesofeach.FinallythroughthedesignanddevelopmentofaWCFDataServicebasedontheDataintegrationcase,inthiscasethemainusebasedonXMLdataODatastandard.Practiceproves,basedonEntityFrameworkandDataServicedistributedheterogeneousdataofintegratedsolutions,canbeverygoodtoreducethesystemintegrationonclientlimit,fordistributedheterogeneousdataintegrationisofhighreferencevalue,theplanalsoapplytocellphonedevelopmentplatform.Keywords:heterogeneous;distributed;WebService;dataintegration目錄TOC\o"1-3"\h\ul"_Toc327443955"摘要 REF_Toc327443955\hIl"_Toc327443956"目錄 REF_Toc327443956\hIIIl"_Toc327443957"1前言 REF_Toc327443957\h1l"_Toc327443958"2相關(guān)技術(shù) REF_Toc327443958\h2l"_Toc327443959"2.1分布式數(shù)據(jù)庫系統(tǒng) REF_Toc327443959\h2l"_Toc327443960"2.1.1根本概念 REF_Toc327443960\h2l"_Toc327443961"2.1.2分布式數(shù)據(jù)庫系統(tǒng)的特點(diǎn) REF_Toc327443961\h2l"_Toc327443962"2.1.3分布式數(shù)據(jù)庫的體系結(jié)構(gòu) REF_Toc327443962\h3l"_Toc327443963"2.1.5分布式數(shù)據(jù)庫系統(tǒng)的現(xiàn)狀 REF_Toc327443963\h3l"_Toc327443964"2.2異構(gòu)數(shù)據(jù)庫系統(tǒng) REF_Toc327443964\h4l"_Toc327443965"2.2.1異構(gòu)數(shù)據(jù)庫系統(tǒng)概述 REF_Toc327443965\h4l"_Toc327443966"2.2.2異構(gòu)數(shù)據(jù)集成現(xiàn)狀 REF_Toc327443966\h4l"_Toc327443967"2.2.2異構(gòu)數(shù)據(jù)庫系統(tǒng)之間數(shù)據(jù)轉(zhuǎn)換以及集成 REF_Toc327443967\h5l"_Toc327443968"2.3各種異構(gòu)、分布數(shù)據(jù)信息集成技術(shù)的比較REF_Toc327443968\h7l"_Toc327443969"2.3.1ODBC技術(shù) REF_Toc327443969\h7l"_Toc327443970"2.3.2CORBA REF_Toc327443970\h8l"_Toc327443971"2.3.3COM/DCOM技術(shù) REF_Toc327443971\h10l"_Toc327443972"2.3.4WebService技術(shù) REF_Toc327443972\h10l"_Toc327443973"2.3.5XML技術(shù) REF_Toc327443973\h12l"_Toc327443974"3本文用到的技術(shù) REF_Toc327443974\h17l"_Toc327443975"3.1REST REF_Toc327443975\h17l"_Toc327443976"3.2WCFDataService REF_Toc327443976\h18l"_Toc327443977"3.2.1WCFDataService系統(tǒng)架構(gòu) REF_Toc327443977\h19l"_Toc327443978"3.2.2使用WCFDataService的OData數(shù)據(jù)發(fā)布前后比較REF_Toc327443978\h22l"_Toc327443979"3.3EntityFramework REF_Toc327443979\h23l"_Toc327443980"3.3.1EntityFramework系統(tǒng)架構(gòu) REF_Toc327443980\h23l"_Toc327443981"3.3.2EntityFramework概念模型查詢 REF_Toc327443981\h24l"_Toc327443982"3.4LINQ REF_Toc327443982\h24l"_Toc327443983"4基于WebService的分布式異構(gòu)數(shù)據(jù)庫數(shù)據(jù)集成設(shè)計(jì) REF_Toc327443983\h26l"_Toc327443984"4.1系統(tǒng)框架 REF_Toc327443984\h26l"_Toc327443985"4.2框架分析 REF_Toc327443985\h26l"_Toc327443986"4.3設(shè)計(jì)要點(diǎn) REF_Toc327443986\h26l"_Toc327443987"4.4查詢接口 REF_Toc327443987\h27l"_Toc327443988"4.5集成DataService模塊設(shè)計(jì) REF_Toc327443988\h27l"_Toc327443989"4.5.1Server端模塊設(shè)計(jì) REF_Toc327443989\h27l"_Toc327443990"4.5.2Client模塊設(shè)計(jì) REF_Toc327443990\h31l"_Toc327443991"4.6實(shí)際運(yùn)行效果 REF_Toc327443991\h32l"_Toc327443992"4.6.1數(shù)據(jù)庫數(shù)據(jù)準(zhǔn)備 REF_Toc327443992\h32l"_Toc327443993"4.6.2構(gòu)建相應(yīng)的Edmx模型以及WCFDataService REF_Toc327443993\h33l"_Toc327443994"4.6.3集成數(shù)據(jù)模型 REF_Toc327443994\h34l"_Toc327443995"4.6.3客戶端顯示 REF_Toc327443995\h35l"_Toc327443996"5總結(jié)與展望 REF_Toc327443996\h37l"_Toc327443997"5.1論文工作總結(jié) REF_Toc327443997\h37l"_Toc327443998"5.2未來工作展望 REF_Toc327443998\h37l"_Toc327443999"參考文獻(xiàn) REF_Toc327443999\h38l"_Toc327444000"致謝 REF_Toc327444000\h39l1前言隨著信息技術(shù)的高速開展,數(shù)據(jù)庫技術(shù)得到了快速的開展與應(yīng)用,在現(xiàn)在的各大企事業(yè)單位中,所運(yùn)行著的數(shù)以百萬記的應(yīng)用程序的后臺無不存在著各種數(shù)據(jù)庫,從大型的Oracle,MicrosoftSQLServer、DB2到免費(fèi)的MySQL或者小型的Access數(shù)據(jù)庫。這些數(shù)據(jù)庫在企業(yè)的各種業(yè)務(wù)活動(dòng)中扮演著極其重要的地位。這些數(shù)據(jù)庫根據(jù)原先的需求進(jìn)行創(chuàng)立,以及管理,各個(gè)數(shù)據(jù)庫之間無論是物理上還是在邏輯上都存在著千差萬別的區(qū)別。每個(gè)數(shù)據(jù)庫都有著自己的模式以及數(shù)據(jù)模型,通常表現(xiàn)為以下幾個(gè)方面:1)數(shù)據(jù)庫運(yùn)行體系的差異,其主要包括大型機(jī),小型機(jī),PC以及嵌入式系統(tǒng)。2〕數(shù)據(jù)庫所運(yùn)行的操作系統(tǒng)的差異。主要包含Microsoftwindows,Unix,Linux等。3)數(shù)據(jù)庫DBMS系統(tǒng)的差異,由于數(shù)據(jù)庫軟件的更新?lián)Q代,企事業(yè)單位中存在大量的不同數(shù)據(jù)模型的數(shù)據(jù)庫,包含關(guān)系型數(shù)據(jù)庫,網(wǎng)絡(luò)型的數(shù)據(jù)庫以及面向?qū)ο蠛突谖募臄?shù)據(jù)庫。4)數(shù)據(jù)結(jié)構(gòu)的異構(gòu),這個(gè)主要表現(xiàn)在各大數(shù)據(jù)庫提供商雖然提供了標(biāo)準(zhǔn)SQL接口,但是其SQL語法會有略微的差異,造成數(shù)據(jù)結(jié)構(gòu)上的異構(gòu)出現(xiàn)。隨著網(wǎng)絡(luò)的高速開展,企事業(yè)中各種應(yīng)用的呈現(xiàn)明顯增長的態(tài)勢,其后臺數(shù)據(jù)量也呈現(xiàn)指數(shù)級的增長,數(shù)據(jù)庫也從本來的單機(jī)數(shù)據(jù)庫向數(shù)據(jù)庫集群方向開展,數(shù)據(jù)庫也變得越來越復(fù)雜。另外企業(yè)中的各種應(yīng)用由于其相對獨(dú)立性,并沒有為后期數(shù)據(jù)集成留好接口,這些相對獨(dú)立的系統(tǒng)在企業(yè)開展過程中制約了企業(yè)的信息集成,之間沒有相互連接的通道,且通常被封存在不同的主機(jī),數(shù)據(jù)庫效勞器上,為了構(gòu)建企業(yè)的信息集成以及信息共享的系統(tǒng),有必要對這些異構(gòu)的數(shù)據(jù)庫進(jìn)行相互串聯(lián),因此如何實(shí)現(xiàn)這些異構(gòu)數(shù)據(jù)庫的信息共享成為當(dāng)前企事業(yè)單位的當(dāng)務(wù)之急,分布式異構(gòu)數(shù)據(jù)集成成為一個(gè)關(guān)鍵點(diǎn)。2相關(guān)技術(shù)2.1.1根本概念分布式數(shù)據(jù)庫(DDBS)指的是物理上處于不同地點(diǎn)但是邏輯上相對集中的數(shù)據(jù)庫系統(tǒng),分布式數(shù)據(jù)庫使用網(wǎng)絡(luò)將不同物理地點(diǎn)的數(shù)據(jù)庫實(shí)例進(jìn)行集中管理以及控制,并將它們連接起來形成一個(gè)統(tǒng)一邏輯上集成的數(shù)據(jù)庫系統(tǒng)。因此簡單的說,分布式數(shù)據(jù)庫就是數(shù)據(jù)庫系統(tǒng)和網(wǎng)絡(luò)的結(jié)合。分布式數(shù)據(jù)庫系統(tǒng)由兩局部構(gòu)成,其一就是上述的分布式數(shù)據(jù)庫,其二是分布式數(shù)據(jù)庫管理系統(tǒng)(DDBMS),后者負(fù)責(zé)對前面的位于各處的數(shù)據(jù)庫進(jìn)行集成以及管理,負(fù)責(zé)其在分布式環(huán)境下的數(shù)據(jù)存取,使得數(shù)據(jù)保持一致性、平安性以及完整性。分布式數(shù)據(jù)庫系統(tǒng)按照其范圍不同,可以分為全局?jǐn)?shù)據(jù)庫和局部數(shù)據(jù)庫兩種,其中全局?jǐn)?shù)據(jù)庫由全局?jǐn)?shù)據(jù)庫管理系統(tǒng)來進(jìn)行管理,而局部數(shù)據(jù)庫那么由相對應(yīng)的數(shù)據(jù)庫管理系統(tǒng)來進(jìn)行管理。同樣的,如果應(yīng)用程序只是訪問一個(gè)數(shù)據(jù)庫實(shí)例的話,那么該應(yīng)用稱為本地應(yīng)用,如果應(yīng)用涉及兩個(gè)或者兩個(gè)以上數(shù)據(jù)庫的數(shù)據(jù),那么該應(yīng)用可以稱之為全局應(yīng)用。因此,從分布式數(shù)據(jù)庫的定義中可以看出,對于狹義的分布式數(shù)據(jù)庫定義,可以認(rèn)為是包含兩個(gè)或者兩個(gè)以上節(jié)點(diǎn)的數(shù)據(jù)庫才可稱為分布式數(shù)據(jù)庫系統(tǒng)。2.1.2分布式數(shù)據(jù)庫系統(tǒng)的特點(diǎn)分布式數(shù)據(jù)庫由于其特殊性,有以下的特點(diǎn)。(1)物理上大多不在同一區(qū)域:顧名思義,分布式數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)分別存儲于網(wǎng)絡(luò)的各個(gè)角落,其存儲點(diǎn)的物理位置以網(wǎng)絡(luò)連接,并且可能相差幾千公里。(2)邏輯上可以視為一個(gè)數(shù)據(jù)庫:雖然分布式數(shù)據(jù)庫的數(shù)據(jù)分布于各處,但是這些分散的數(shù)據(jù)在邏輯上是一個(gè)整體,可以被分布式數(shù)據(jù)庫用戶以一個(gè)統(tǒng)一的方式訪問。(3)本地?cái)?shù)據(jù)庫的獨(dú)立性:分布式數(shù)據(jù)庫由多個(gè)本地?cái)?shù)據(jù)庫構(gòu)成,且每個(gè)數(shù)據(jù)庫的DBMS也千差萬別,管理數(shù)據(jù)的方式也隨著數(shù)據(jù)庫廠家的不同而不同。且本地?cái)?shù)據(jù)庫一般情況下也是局部應(yīng)用的后臺數(shù)據(jù)提供者。因此,脫離分布式數(shù)據(jù)庫的范疇,本地?cái)?shù)據(jù)庫也可以自成一體,進(jìn)行常規(guī)的數(shù)據(jù)管理以及計(jì)算。(4)數(shù)據(jù)的獨(dú)立性:由于分布式數(shù)據(jù)庫的設(shè)計(jì)中非常關(guān)鍵的一點(diǎn)就是數(shù)據(jù)的透明性,因此,在用戶使用分布式數(shù)據(jù)庫的時(shí)候,通常不必關(guān)注數(shù)據(jù)的拷貝存在于哪個(gè)效勞器,以及本地?cái)?shù)據(jù)庫軟件支持哪種數(shù)據(jù)模型等問題。(5)數(shù)據(jù)的冗余:根據(jù)數(shù)據(jù)庫設(shè)計(jì)的三大范式,一般不建議在數(shù)據(jù)庫設(shè)計(jì)中存在大量的冗余數(shù)據(jù),其一,冗余數(shù)據(jù)增加了數(shù)據(jù)的存儲空間,還有一個(gè)最大的問題就是數(shù)據(jù)各個(gè)副本之間的數(shù)據(jù)的一致性無法得到保證。但是數(shù)據(jù)冗余對于分布式數(shù)據(jù)庫來說卻是一個(gè)優(yōu)化的工具,因?yàn)樵诜植际綌?shù)據(jù)庫中,由于各個(gè)子數(shù)據(jù)庫存在于各個(gè)不同的物理位置,由于網(wǎng)絡(luò)或者數(shù)據(jù)庫系統(tǒng)問題,通常會造成災(zāi)難性的后果,造成整個(gè)基于分布式數(shù)據(jù)庫系統(tǒng)的應(yīng)用整體癱瘓,因此在數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)中需要考慮的一個(gè)點(diǎn)就是數(shù)據(jù)庫數(shù)據(jù)的適量冗余,以此來提高數(shù)據(jù)的可靠性以及可用性。同時(shí)由于系統(tǒng)各個(gè)節(jié)點(diǎn)的冗余數(shù)據(jù)的存在,可以大大減少網(wǎng)絡(luò)的負(fù)載,使得整個(gè)基于分布式數(shù)據(jù)庫的應(yīng)用的性能得以大大提升。(6)事務(wù)的分布性:在本地化的數(shù)據(jù)庫中一個(gè)很關(guān)鍵的技術(shù)就是事務(wù),在企業(yè)級應(yīng)用中為了防止系統(tǒng)出錯(cuò),可以大量使用了該技術(shù),對于所有可能拋出異常的數(shù)據(jù)庫操作進(jìn)行commit以及rollback操作。而同樣的需求也存在于分布式數(shù)據(jù)庫中,由于數(shù)據(jù)分布于不同的地點(diǎn),事務(wù)的分布性也成為分布式數(shù)據(jù)庫的一個(gè)特點(diǎn)。2.1.3分布式數(shù)據(jù)庫的體系結(jié)構(gòu)圖2.1分布式數(shù)據(jù)庫體系結(jié)構(gòu)上圖給出了分布式系統(tǒng)的體系結(jié)構(gòu),在整個(gè)分布式數(shù)據(jù)庫中,數(shù)據(jù)的描述以及其相關(guān)的meta-data,也有全局和局部之分,其通常包含數(shù)據(jù)表,數(shù)據(jù)視圖以及存儲過程等的分布式訪問。2.1.5分布式數(shù)據(jù)庫系統(tǒng)的現(xiàn)狀分布式數(shù)據(jù)庫系統(tǒng)從出現(xiàn)到現(xiàn)在已經(jīng)有了20多年的歷史,從概念模型到現(xiàn)在相對成熟的系統(tǒng)的分布式平臺,其間經(jīng)歷了一個(gè)從產(chǎn)生到開展的過程[1]。分布式數(shù)據(jù)庫實(shí)現(xiàn)所需要的很多問題得到解決。開展到現(xiàn)在,分布式數(shù)據(jù)庫技術(shù)已經(jīng)相對成熟,各大數(shù)據(jù)庫廠商都在不斷推出基于自身產(chǎn)品的分布式數(shù)據(jù)庫產(chǎn)品以占據(jù)這個(gè)市場,其中不乏大型數(shù)據(jù)庫廠商,比方Microsoft以及IBM,Oracle等,但是分布式數(shù)據(jù)庫技術(shù)不是簡單的將數(shù)據(jù)庫技術(shù)和網(wǎng)絡(luò)技術(shù)簡單結(jié)合就可以的,分布式數(shù)據(jù)庫系統(tǒng)有自己的特色,且由于數(shù)據(jù)的分布性,使得其技術(shù)開展一直存在一個(gè)很大的瓶頸,相關(guān)的基于分布式數(shù)據(jù)庫的應(yīng)用的推廣也都被推遲甚至取消,數(shù)據(jù)操作完全透明,性能堪比本地?cái)?shù)據(jù)庫的商用系統(tǒng)還是很難見到。國內(nèi)對于分布式數(shù)據(jù)庫的研究大概從上世紀(jì)80年代開始,比較有名的是由中科院和上??茖W(xué)技術(shù)大學(xué)以及華師大合作開發(fā)的C-Porel系統(tǒng)以及東北大學(xué)的DMD/FO系統(tǒng),以及華中科技大學(xué)研制的DM2多媒體分布式數(shù)據(jù)庫,其在很大程度上解決了分布式數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的透明共享的技術(shù)難題,對分布式數(shù)據(jù)庫技術(shù)的開展起到了積極地推動(dòng)作用。2.2異構(gòu)數(shù)據(jù)庫系統(tǒng)2.2.1異構(gòu)數(shù)據(jù)庫系統(tǒng)概述異構(gòu)數(shù)據(jù)庫是指異構(gòu)的多數(shù)據(jù)庫系統(tǒng)之間相互作用,在保證每個(gè)獨(dú)立的數(shù)據(jù)庫系統(tǒng)自身的應(yīng)用特性、完整性控制和平安性控制的前提下,邏輯上形成一個(gè)統(tǒng)一的整體,使用戶訪問這些異構(gòu)數(shù)據(jù)庫,如同訪問一個(gè)集中式數(shù)據(jù)庫一樣,不必關(guān)心各個(gè)局部數(shù)據(jù)庫之間的硬件不同、操作系統(tǒng)的不同、通訊方式的不同、DBMS不同和語義的不同。建立異構(gòu)數(shù)據(jù)庫系統(tǒng)的目的就是要屏蔽掉各局部數(shù)據(jù)庫的不同,建立統(tǒng)一的全局?jǐn)?shù)據(jù)模式或全局外視圖,使用戶對數(shù)據(jù)庫進(jìn)行透明訪問。2.2.2異構(gòu)數(shù)據(jù)集成現(xiàn)狀對異構(gòu)數(shù)據(jù)的訪問、信息集成并不是一個(gè)新的課題,已經(jīng)歷時(shí)二十多年的歷史了,經(jīng)歷了專用網(wǎng)關(guān)、C/S(ODBC)結(jié)構(gòu)、B/S(CORBA、DCOM/COM)結(jié)構(gòu)。到目前WebService的開展階段。異構(gòu)數(shù)據(jù)庫集成系統(tǒng)的研究一直是國內(nèi)外數(shù)據(jù)庫領(lǐng)域中的一個(gè)研究熱點(diǎn),幾家大型的數(shù)據(jù)庫廠商在其主流數(shù)據(jù)庫產(chǎn)品同構(gòu)復(fù)制的根底上,進(jìn)一步提出了各自的方案,其中Oracle使用透明網(wǎng)關(guān)技術(shù),IBM使用CCD(一致變化數(shù)據(jù)表),微軟公司那么提出出版者/訂閱者方案。國外眾多的研究機(jī)構(gòu)已經(jīng)開展了這些方面的研究。比較著名的有美國的密歇根-迪兒波恩大學(xué)、斯坦福大學(xué)TSIMMIS等工程,國內(nèi)研究機(jī)構(gòu)比方華南農(nóng)業(yè)大學(xué)也進(jìn)行了類似系統(tǒng)的研究,現(xiàn)有的主要系統(tǒng)列舉如下。(1)TSIMMIS系統(tǒng):是一個(gè)研究多數(shù)據(jù)庫系統(tǒng)的產(chǎn)品。它采用對象交換模型〔ObjectExchangeModel,OEM〕。在該系統(tǒng)中,沒有模式和對象的概念,即沒有必要定義對象的結(jié)構(gòu),每個(gè)對象實(shí)例本身就已包含了它自己的模式。OEM采用一種稱為MSL〔MediatorSpecificationLanguage〕的查詢語言。中間件和封裝器用MSL描述,而且這些組件可以通過MSL規(guī)格說明自動(dòng)生成。TSIMMIS需要較多的人工干預(yù),自動(dòng)化集成程度低。(2)MIND系統(tǒng):MIND是由IBM公司資助的一個(gè)基于CORBA的多數(shù)據(jù)庫工程,主要利用面向?qū)ο蟮募夹g(shù),開發(fā)了兩個(gè)根本的組件:全局?jǐn)?shù)據(jù)管理器,本地?cái)?shù)據(jù)管理器,各自負(fù)責(zé)對數(shù)據(jù)的管理。(3)ADDS〔AmocoDistributedDatabaseSystem〕:ADDS是Amoco公司推出的異構(gòu)數(shù)據(jù)庫解決方案,它使用了一個(gè)擴(kuò)展的關(guān)系代數(shù)查詢語言,支持ANSISQL的一個(gè)子集。ADDS的全局?jǐn)?shù)據(jù)庫模式是通過定義CDB〔CompositeDatabase〕來建立的,即將局部數(shù)據(jù)庫〔LDB〕模式映射到聯(lián)邦模式上,并將該映射存儲到ADDS的數(shù)據(jù)字典中。用戶可以共享CDB,但是只有經(jīng)過授權(quán)的用戶才能訪問指定的CDB。CDB支持的DBMS包括IMS,SQL/DS,DB2,RIM,INGRES以及Focus。ADDS的工作環(huán)境主要是在VMS和MVS操作系統(tǒng)下的大型機(jī)以及Unix操作系統(tǒng)的Sun或Apollo工作站。ADDS保持了局部數(shù)據(jù)系統(tǒng)的獨(dú)立性,且不要求對局部數(shù)據(jù)庫上的應(yīng)用程序做任何修改。目前ADDS還僅是一個(gè)原型系統(tǒng)。(4)XHDQ〔XML-basedHeterogeneousDatabaseQuery〕:XHDQ是華南農(nóng)業(yè)大學(xué)的一個(gè)受國家部委基金資助的項(xiàng)日,它是一種以基于XML的異構(gòu)數(shù)據(jù)庫查詢?yōu)楹诵牡南到y(tǒng),并在IBMWAS平臺下實(shí)現(xiàn)了其查詢核心系統(tǒng)的方法。其核心系統(tǒng)主要有以下六個(gè)局部組成:模式轉(zhuǎn)換器、XHDQ中間件、XHDQ應(yīng)用程序、XHDQ客戶端、XHDQ效勞器和異構(gòu)數(shù)據(jù)庫。它通過使用XML文件作為中間形式來實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫之間的集成。(5)UUHBD系統(tǒng):北京理工大學(xué)的UUHDB系統(tǒng)是基于Client/Server結(jié)構(gòu)的異構(gòu)數(shù)據(jù)庫聯(lián)合使用系統(tǒng),采用的全局查詢語言GSQL是ANSISQL86的子集,能進(jìn)行透明地聯(lián)合查詢,支持的數(shù)據(jù)庫有Oracle、Informix和dBase,由于沒有進(jìn)行查詢優(yōu)化,查詢效率較低。2.2.2異構(gòu)數(shù)據(jù)庫系統(tǒng)之間數(shù)據(jù)轉(zhuǎn)換以及集成每個(gè)DBMS都定義了自己系統(tǒng)的數(shù)據(jù)類型,但這些數(shù)據(jù)庫系統(tǒng)的根本數(shù)據(jù)類型根本上是一致的,如數(shù)值型(包括整型、實(shí)型、浮點(diǎn)型、雙精度型等)、字符型、日期型等,這些根本類型為不同數(shù)據(jù)庫之間數(shù)據(jù)轉(zhuǎn)換提供了可能。隨著數(shù)據(jù)庫系統(tǒng)的開展和版本的不斷升級,不同數(shù)據(jù)庫數(shù)據(jù)類型的種類也在不斷的擴(kuò)充、如超文本型、BLOB型和處理聲音等各種數(shù)據(jù)類型。這些又為數(shù)據(jù)庫系統(tǒng)之間數(shù)據(jù)轉(zhuǎn)換設(shè)置了不少的障礙。因此,分析數(shù)據(jù)類型的差異繼而將數(shù)據(jù)轉(zhuǎn)換成一個(gè)統(tǒng)一格式是實(shí)現(xiàn)不同數(shù)據(jù)關(guān)系轉(zhuǎn)換的重中之重。下表列出了MySQL和Oracle相對應(yīng)的數(shù)據(jù)類型,從下表可以看出,雖然兩者大體相同,但是還是有一局部數(shù)據(jù)類型有著較大差異,因此在做異構(gòu)集成的時(shí)候,這也是必須要考慮的。表2.1MySQL和Oracle數(shù)據(jù)類型比照MySQL數(shù)據(jù)類型Oracle數(shù)據(jù)類型BIGINTNUMBER(19,0)BITRAWBLOBBLOB,RAWCHARCHARDATEDATEDATETIMEDATEDECIMALFLOAT(24)DOUBLEFLOAT(24)DOUBLEPRECISIONFLOAT(24)ENUMARCHAR2FLOATFLOATINTNUMBER(10,0)INTEGERNUMBER(10,0)表2.1MySQL和Oracle數(shù)據(jù)類型比照〔續(xù)〕MySQL數(shù)據(jù)類型Oracle數(shù)據(jù)類型LONGBLOBBLOB,RAWLONGTEXTCLOB,RAWMEDIUMBLOBBLOB,RAWMEDIUMINT NUMBER(7,0)MEDIUMTEXTCLOB,RAWNUMERICNUMBERREALFLOAT(24)SETVARCHAR2SMALLINTNUMBER(5,0)TEXTVARCHAR2,CLOBTIMEDATETIMESTAMPDATETINYBLOBRAWTINYINTNUMBER(3,0)TINYTEXTVARCHAR2VARCHARVARCHAR2,CLOBYEARNUMBER現(xiàn)今常用的轉(zhuǎn)換方式主要有以下幾種。(1)利用中間數(shù)據(jù)庫轉(zhuǎn)換在開發(fā)系統(tǒng)時(shí)可使用“中間數(shù)據(jù)庫〞的方法,即在實(shí)現(xiàn)兩個(gè)具體數(shù)據(jù)庫之間的轉(zhuǎn)換時(shí),依據(jù)關(guān)系定義、字段定義,從源數(shù)據(jù)庫中讀出數(shù)據(jù)通過中間數(shù)據(jù)庫轉(zhuǎn)入到目的數(shù)據(jù)庫中。如圖2.2所示。圖2.2數(shù)據(jù)轉(zhuǎn)換圖這種利用中間數(shù)據(jù)庫的轉(zhuǎn)換方法,所需轉(zhuǎn)換模塊少,且擴(kuò)展性強(qiáng),但缺點(diǎn)是轉(zhuǎn)換不能實(shí)時(shí)完成,且轉(zhuǎn)換時(shí)間長,對于需要實(shí)時(shí)訪問數(shù)據(jù)的應(yīng)用來說效用不大。(2)利用ORM轉(zhuǎn)換現(xiàn)有的應(yīng)用開發(fā)通常會用到ORM(Object-relationalmapping)工具,在.NET環(huán)境下通常會使用到的是NHibernate和EntityFramework,其優(yōu)點(diǎn)是可以實(shí)時(shí)的檢索各個(gè)數(shù)據(jù)庫的數(shù)據(jù),相比較第(1)種方式而言,其更具有可行性。其應(yīng)用開發(fā)架構(gòu)如圖2.3所示。圖2.3開發(fā)架構(gòu)圖2.3各種異構(gòu)、分布數(shù)據(jù)信息集成技術(shù)的比較2.3.1ODBC技術(shù)微軟于1991年11月提出了一個(gè)ODBC(OpenDatabaseConnectivity)開放型數(shù)據(jù)庫互聯(lián)體系結(jié)構(gòu)的數(shù)據(jù)訪問標(biāo)準(zhǔn),作為訪問數(shù)據(jù)庫的統(tǒng)一界面標(biāo)準(zhǔn),使用戶具有對其它各種異種數(shù)據(jù)庫系統(tǒng)的訪問能力。ODBC是基于結(jié)構(gòu)化查詢語言(SQL),使用SQL可大大簡化其應(yīng)用程序設(shè)計(jì)接口(API),由于ODBC標(biāo)準(zhǔn)思想上的先進(jìn)性,只要數(shù)據(jù)庫廠商提供的開發(fā)包支持這個(gè)標(biāo)準(zhǔn),那么開發(fā)人員通過ODBC開發(fā)的程序可以在不同的數(shù)據(jù)庫之間自由轉(zhuǎn)換。因而越來越受到眾多廠家和用戶的青睞。目前,ODBC已經(jīng)成為客戶機(jī)/效勞器〔C/S〕系統(tǒng)中的一個(gè)重要支持技術(shù)。圖2.4ODBC的結(jié)構(gòu)圖ODBC的結(jié)構(gòu)如圖2.4所示。ODBC是一種用來在相關(guān)或不相關(guān)的數(shù)據(jù)庫管理系統(tǒng)中存取數(shù)據(jù)的標(biāo)準(zhǔn)API。ODBC為應(yīng)用程序提供了一套高層調(diào)用接口標(biāo)準(zhǔn)和基于動(dòng)態(tài)鏈接庫的運(yùn)行支持環(huán)境。應(yīng)用程序本身不直接與數(shù)據(jù)庫打交道,主要負(fù)責(zé)處理并調(diào)用ODBC函數(shù),發(fā)送對數(shù)據(jù)庫的SQL請求及取得結(jié)果。目前,常用的數(shù)據(jù)庫應(yīng)用開發(fā)的前端工具如VisualStudio,Delphi等都支持通過ODBC接口來連接各種數(shù)據(jù)庫系統(tǒng)。而多數(shù)數(shù)據(jù)庫管理系統(tǒng)〔如:Oracle、Sybase、MySQL,SQLServer等〕都提供了相應(yīng)的ODBC驅(qū)動(dòng)程序,使數(shù)據(jù)庫系統(tǒng)具有很好的開放性。采用ODBC技術(shù)較好的解決了對異種數(shù)據(jù)庫的訪問、信息共享問題,但是,ODBC不能實(shí)現(xiàn)在Internet上的異種數(shù)據(jù)庫的互聯(lián)。由于C/S的體系結(jié)構(gòu)使得客戶機(jī)和效勞器之間形成緊耦合關(guān)系,使得在分散的客戶機(jī)上存放大量的應(yīng)用邏輯,也不便于整個(gè)系統(tǒng)的維護(hù),因此,不能有效地解決分布范圍大的異種數(shù)據(jù)庫的互聯(lián)問題。2.3.2CORBACORBA(CommonObjectRequestBrokerArchitecture)是由OMG提出的應(yīng)用軟件體系結(jié)構(gòu)和對象技術(shù)標(biāo)準(zhǔn),其核心是一套標(biāo)準(zhǔn)的語言、接口和協(xié)議,以支持異構(gòu)分布應(yīng)用程序間的互操作性及獨(dú)立于平臺和編程語言的對象重用。一些主要的ORB供應(yīng)商的產(chǎn)品如:IBM的ComponentBroker、Iona的Orbix和Inprise的VisiBroker[2]。如圖2.5所示。圖2.5CORBAORB架構(gòu)在CORBA運(yùn)行體系結(jié)構(gòu)中,包含了下面幾個(gè)主要的元素:(1)接口〔Interface〕與IDL語言接口〔Interface〕是一組相關(guān)函數(shù)的集合。它代表了對象的效勞能力,是為客戶提供操作對象的唯一方法。接口中每一個(gè)函數(shù)都必須給出了詳細(xì)的說明,包括函數(shù)名、參數(shù)個(gè)數(shù)、參數(shù)類型、返回類型以及可能拋出的異常。在接口中,只定義了函數(shù)的原型,具體的函數(shù)由開發(fā)者實(shí)現(xiàn)。接口通過接口描述語言〔IDL,InterfaceDescriptionLanguage〕來定義。雖然IDL語言只提供了被ORB操作的對象的概念框架,但是ORB在運(yùn)行時(shí)并不需要IDL的源代碼。只要樁例程或運(yùn)行狀態(tài)下接口庫中的等價(jià)信息是可用的,ORB就能通過特定的方式完成其功能。(2)樁〔Stub〕和構(gòu)架〔Skeleton〕樁〔Stub〕可以被看成是效勞端的實(shí)際對象在客戶端的映像,其中的接口是預(yù)先定義好的。它為客戶進(jìn)程提供了一種靜態(tài)的遠(yuǎn)程調(diào)用效勞端對象的方式。與客戶端的樁相對應(yīng)的是效勞端的構(gòu)架〔Skeleton〕,它為效勞器提供了一種靜態(tài)的實(shí)現(xiàn)方式。IDL編譯器翻譯描述對象接口的IDL文件,生成對應(yīng)具體編程語言的IDL樁和IDL構(gòu)架。樁負(fù)責(zé)將客戶請求進(jìn)行編碼,發(fā)送到對象實(shí)現(xiàn)端,并對收到的結(jié)果進(jìn)行解釋,然后把結(jié)果或異常返回給客戶。與此相反,構(gòu)架對客戶的請求進(jìn)行解碼,定位目標(biāo)對象和請求執(zhí)行的對象方法,激活該方法,然后把結(jié)果或異常信息編碼返回給客戶端。(3)動(dòng)態(tài)調(diào)用接口和動(dòng)態(tài)構(gòu)架接口與樁和構(gòu)架不同,動(dòng)態(tài)調(diào)用接口〔DII,DynamicInvocationInterface〕和動(dòng)態(tài)構(gòu)架接口〔DSI,DynamicSkeletonInterface〕提供了動(dòng)態(tài)調(diào)用的方式和動(dòng)態(tài)實(shí)現(xiàn)的方式,它們使得用戶可以在事先不知道對象接口信息的情況下通過查詢接口庫或采取其它手段動(dòng)態(tài)地獲得對象接口信息,然后使用ORB核心接口中的DII動(dòng)態(tài)調(diào)用方法構(gòu)造客戶請求并發(fā)送到對象實(shí)現(xiàn)。在對象實(shí)現(xiàn)方可以使用DSI的動(dòng)態(tài)分發(fā)機(jī)制處理客戶方的請求。與靜態(tài)方式相比,動(dòng)態(tài)方式提供了很大的靈活性,但是它的工作效率沒有靜態(tài)方式高。另外,實(shí)現(xiàn)系統(tǒng)的接口大多可以預(yù)先確定,所以大局部情況下都是采用靜態(tài)方式。(4)ORB核心和對象適配器ORB核心是整個(gè)CORBA體系架構(gòu)根底。ORB核心通過屏蔽諸如效勞器位置、實(shí)現(xiàn)方式、通信協(xié)議等具體細(xì)節(jié)為客戶端與效勞器端之間的通信提供了透明的傳輸機(jī)制,從而實(shí)現(xiàn)遠(yuǎn)程調(diào)用。對象適配器〔OMA〕主要完成對各種不同對象的定位的功能。2.3.3COM/DCOM技術(shù)DCOM〔分布式組件對象模型〕基于COM〔組件對象模型〕,是Microsoft,DEC等公司的分布式計(jì)算策略。1996年Microsoft提出的DCOM是基于以下一個(gè)簡單的思想:在DCOM協(xié)議的支持下,不同應(yīng)用程序可以透過網(wǎng)絡(luò)進(jìn)行互操作。它擴(kuò)展了組件對象模型技術(shù)〔COM〕,使其能夠支持在網(wǎng)絡(luò)上不同計(jì)算機(jī)的對象之間的通訊??梢栽谝粋€(gè)應(yīng)用程序中〔或DLL連接庫〕創(chuàng)立對象,而從駐留在另外一臺機(jī)器上的程序中通過接口調(diào)用此對象的方法。這樣應(yīng)用程序就可以在位置上實(shí)現(xiàn)分布性,從而滿足客戶和應(yīng)用的需求[3]。DCOM的體系結(jié)構(gòu)如圖2.6所示:圖2.6DCOM的體系結(jié)構(gòu)DCOM由五個(gè)局部的組成:(1)對象初始化組件??蛻粽{(diào)用諸如CoCreateInstance等創(chuàng)立實(shí)例函數(shù)在組件端創(chuàng)立一個(gè)新的實(shí)例。(2)在客戶端和效勞端之間傳遞數(shù)據(jù)的組件,即圖中的ProxyObject/Stub。(3)平安組件。(4)DCERPC組件。(5)低級協(xié)議棧和DCOM網(wǎng)絡(luò)協(xié)議組件。2.3.4WebService技術(shù)WebService是一種開放的分布式應(yīng)用程序的模型,它能在所有支持Internet通訊的操作系統(tǒng)上實(shí)現(xiàn)。使用WebService技術(shù)可以以獨(dú)立于平臺的方式,通過標(biāo)準(zhǔn)的Web協(xié)議,建立可以由應(yīng)用程序通過網(wǎng)絡(luò)訪問的應(yīng)用程序邏輯單元。WebService技術(shù)的體系架構(gòu)如圖2.7所示:圖2.7WebService體系架構(gòu)上圖從分層的角度描述了WebService的整體架構(gòu),其中包括了WebService協(xié)議棧。與網(wǎng)絡(luò)的分層結(jié)構(gòu)相同,上一層需要下一層的支持。而平安性、可管理性、效勞質(zhì)量那么需要在各個(gè)層次都有所表達(dá)。WebService協(xié)議棧的根底是網(wǎng)絡(luò)層。WebService要被效勞請求者調(diào)用,就必須是可以通過網(wǎng)絡(luò)訪問的。Internet上可以公用的WebService使用普遍部署的網(wǎng)絡(luò)協(xié)議。憑借其普遍性,成為了Internet上可用WebService真正的標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議。WebService還可以支持其它因特網(wǎng)協(xié)議。XML是WebService的數(shù)據(jù)編碼的標(biāo)準(zhǔn)。XML是一種通用的數(shù)據(jù)表示法,用插入標(biāo)記的方法把文本流轉(zhuǎn)化為一個(gè)內(nèi)部結(jié)構(gòu)可能高度復(fù)雜的數(shù)據(jù)對象。它不僅有助于為Web描述新文檔的格式,而且也適用于描述結(jié)構(gòu)化的數(shù)據(jù)[4]。SOAP以XML標(biāo)準(zhǔn)封裝調(diào)用遠(yuǎn)程效勞的格式,有別于其它分布式對象模型調(diào)用特定的調(diào)用格式,例如CORBA的GIOP以及DCOM的ORPC[5]。由于SOAP以XML封裝調(diào)用格式,因此它可以使用任何的實(shí)體傳輸層來傳送,例如,TCP或是SMTP等。SDL定義了效勞交互的接口和結(jié)構(gòu),是基于XML的效勞描述的標(biāo)準(zhǔn)。WSDL使用XMLschema來描述WebService的結(jié)構(gòu)。UDDI注冊和發(fā)布WebService。UDDI使用XML方案定義注冊表的結(jié)構(gòu),使用SOAP指定與注冊表的通信。2.3.5XML技術(shù)1〕XML技術(shù)的特點(diǎn)XML〔ExtensibleMarkupLanguage,可擴(kuò)展性標(biāo)記語言〕是由互聯(lián)網(wǎng)聯(lián)合組織〔W3C〕于1998年2月設(shè)計(jì)并推薦的新一代標(biāo)記語言,是一種類似于HTML的被設(shè)計(jì)用來描述數(shù)據(jù)的標(biāo)記語言,即用于定義標(biāo)記語言的元約束和元語言的集合。XML是SGML〔StandardGeneralizedMarkupLanguage〕的一個(gè)優(yōu)化子集。它將SGML的豐富功能與HTML的易用性結(jié)合到Web應(yīng)用中,以一種開放的自我描述方式定義數(shù)據(jù)結(jié)構(gòu),在描述數(shù)據(jù)內(nèi)容的同時(shí)能突出對結(jié)構(gòu)的描述,從而表達(dá)數(shù)據(jù)之間的關(guān)系。XML作為Internet上數(shù)據(jù)描述和交換的新標(biāo)準(zhǔn)[6],主要有以下幾個(gè)特點(diǎn):(1)可擴(kuò)展性強(qiáng):XML是元標(biāo)記語言,可以根據(jù)應(yīng)用的需要,創(chuàng)立應(yīng)用于各種各樣情況下的標(biāo)記語言;(2)結(jié)構(gòu)性強(qiáng):XML的文件結(jié)構(gòu)可以嵌套到任意程度,能用來表示面向?qū)ο蟮牡燃墝哟危?3)交互性好:通過使用XML,用戶可以非常方便地在本地進(jìn)行數(shù)據(jù)操作,不需與效勞器交互,減輕了效勞器的負(fù)擔(dān);(4)語義性強(qiáng):XML可以自定義標(biāo)記,以利于異構(gòu)系統(tǒng)之間的數(shù)據(jù)交換和信息檢索,實(shí)現(xiàn)機(jī)器與機(jī)器之間的信息交換;(5)純文本:幾乎任何工具都可創(chuàng)立和編輯XML;(6)基于內(nèi)容的數(shù)據(jù)標(biāo)識:可以被不同程序用于不同目的;(7)可格式化:可擴(kuò)展樣式語言XSL可以指定如何顯示數(shù)據(jù)。數(shù)據(jù)和顯示是別離的,可以為同一數(shù)據(jù)指定不同的樣式表用于不同輸出;(8)極強(qiáng)的鏈接能力:可以定義雙向鏈接、多目標(biāo)鏈接、擴(kuò)展鏈接和兩個(gè)文檔間的鏈接;(9)易于處理:XML對格式的定義嚴(yán)格,具有層次結(jié)構(gòu),而且與廠商無關(guān);(10)與平臺無關(guān):XML的出現(xiàn)為不同系統(tǒng)之間提供了一個(gè)溝通的平臺,充當(dāng)信息傳遞的媒介。XML文檔無需做任何更改,即可移植到其它平臺上。2〕XML標(biāo)準(zhǔn)自從XML1.0標(biāo)準(zhǔn)發(fā)布之后,XML的有關(guān)技術(shù)標(biāo)準(zhǔn)不斷涌現(xiàn),有的還處在草案階段[5]。與XML有關(guān)的重要技術(shù)標(biāo)準(zhǔn)還包括DTD,Schema,SAX,DOM,CSS,XSL,Xpath,Xlink,Xpoint,XQuery等眾多標(biāo)準(zhǔn)。它們與XML的關(guān)系如圖2.8所示。圖2.8XML和相關(guān)技術(shù)關(guān)系圖下面分別介紹與本文相關(guān)的技術(shù)標(biāo)準(zhǔn):DTD、XMLSchema、XSL、CSS、SAX、DOM和Xpath。(1)DTD〔DocumentTypeDefinition〕:用來規(guī)定文檔的邏輯結(jié)構(gòu)[7]。它可以定義文檔的語法,而文檔的語法反過來能夠讓XML語法分析程序確認(rèn)某張頁面標(biāo)記使用的合法性。DTD定義頁面的元素、元素的屬性以及元素和屬性之間的關(guān)系。對于簡單應(yīng)用程序來說,開發(fā)商不需要建立自己的DTD。DTD不是強(qiáng)制性的。可以使用預(yù)先定義的公共DTD,或者根本就不使用。即使某個(gè)文檔己經(jīng)有了DTD,只要文檔是組織良好的,語法分析程序也可以不對照DTD來檢驗(yàn)文檔的合法性。效勞器可能己經(jīng)執(zhí)行了檢查,所以檢驗(yàn)的時(shí)間和帶寬將得以節(jié)省。DTD的功能很多:如定義內(nèi)容模式、限制范圍、屬性的數(shù)據(jù)類型等。但它也有缺陷:它不支持namespace,只提供了非常有限的幾種數(shù)據(jù)類型。更重要的是它不能表達(dá)元素中字符數(shù)據(jù)的數(shù)據(jù)類型。DTD有擴(kuò)展的機(jī)制,但這個(gè)機(jī)制太復(fù)雜而且很脆弱。DTD擴(kuò)展的機(jī)制的最大毛病在于不能清楚的表達(dá)相互之間的關(guān)系,兩個(gè)有著完全相同內(nèi)容的元素怎么做也不能互相聯(lián)系。同樣地,一組被定義為參數(shù)體〔parameterentity〕的屬性之間不能建立任何聯(lián)系。(2)XMLSchema:是伴隨著XML1.0標(biāo)準(zhǔn)的制訂而推出的[8]。XMLSchema是DTD之后第二代用來描述XML文件的標(biāo)準(zhǔn),是用來對XML進(jìn)行文檔類型定義的語言,用來規(guī)定XML文檔的數(shù)據(jù)類型及組織方式,同時(shí)還是豐富的元數(shù)據(jù)資源。所謂XMLSchema,其實(shí)就是一種描述信息結(jié)構(gòu)的模型。它借用數(shù)據(jù)庫中一種描述相關(guān)表格內(nèi)容的機(jī)制,為XML文件樹立了一個(gè)模式。這個(gè)模式標(biāo)準(zhǔn)了文件和文本可能的組合形式。XMLSchema擁有許多類似DTD的準(zhǔn)那么,但又要比DTD更強(qiáng)一些。XMLSchema打破了許多限制,它能更加清晰的表現(xiàn)信息之間的內(nèi)容。(3)XMLSchema主要有以下幾個(gè)特點(diǎn):一致性:與DTD不同,Schema使得對XML的定義不必再利用一種特定的形式化的語言,而是直接借助XML自身的特性,利用XML的根本語法規(guī)那么來定義XML文檔的結(jié)構(gòu),使得XML到達(dá)了從內(nèi)到外的完美統(tǒng)一,也為XML的進(jìn)一步開展奠定了堅(jiān)實(shí)的根底。擴(kuò)展性:Schema對DTD進(jìn)行了擴(kuò)充,引入了數(shù)據(jù)類型〔包括布爾型、數(shù)字、日期時(shí)間、整數(shù)、十進(jìn)制數(shù)、實(shí)數(shù)、時(shí)間間隔、以及由這些簡單的類型生成復(fù)雜的類型等〕,從而使其具有較強(qiáng)的可擴(kuò)展性?;Q性:利用Schema能夠書寫XML文檔以及驗(yàn)證文檔的合法性。另外,通過特定的映射機(jī)制,還可以將不同的Schema進(jìn)行轉(zhuǎn)換,以實(shí)現(xiàn)更高層次的數(shù)據(jù)交換。標(biāo)準(zhǔn)性:同DTD一樣,Schema也提供了一套完整的機(jī)制以約束XML文檔中置標(biāo)的使用。相比之下,后者基于XML更具有標(biāo)準(zhǔn)性。Schema利用元素的內(nèi)容和屬性來定義XML文檔的整體結(jié)構(gòu),如哪些元素可以出現(xiàn)在文檔中,元素間的關(guān)系是什么,每個(gè)元素有哪些內(nèi)容和屬性,以及元素出現(xiàn)的順序和次數(shù)等,可一目了然。XML解析器:簡單來講,一個(gè)XML解析器就是一段可以讀入XML文檔并分析其結(jié)構(gòu)的代碼[9]。目前,廣泛使用的解析器主要有:IBM公司的XML4J,Microsoft公司的MSXML,Oracle公司的XMLParserforJava和SUT公司的ProjectX。針對XML標(biāo)準(zhǔn)的支持程序而言,其中當(dāng)屬SUN公司的解析器表現(xiàn)最為出色。有多種不同的方法劃分解析器種類,例如按是否支持完整性檢查分類和按處理文檔的方式分類。根據(jù)對文檔的不同處理方式,可分為基于SAX的解析器和基于DOM的解析器。前者由事件驅(qū)動(dòng),通過串行的方式來處理文檔,即當(dāng)遇到一個(gè)開始或者結(jié)束標(biāo)記的時(shí)候,它向應(yīng)用程序發(fā)送消息,由應(yīng)用程序決定如何進(jìn)行處理。后者那么根據(jù)文檔內(nèi)容建立一個(gè)層次的數(shù)據(jù)結(jié)構(gòu),提供用戶一個(gè)操作文檔的接口。Java為解析及轉(zhuǎn)換XML文檔提供了一套標(biāo)準(zhǔn)的API。該API的設(shè)計(jì)獨(dú)立于任何特定的XML處理器實(shí)現(xiàn)。2002年夏天SUN發(fā)布了JavaXML包,其中包括了Xerces2的參考版,將其作為它的默認(rèn)XML解析器,并且將Xalan作為它的默認(rèn)XSLT引擎。(4)SAX〔SimpleAPIXML〕是一個(gè)基于事件的XML文檔解析標(biāo)準(zhǔn)。與AWT中的事件驅(qū)動(dòng)機(jī)制相類似,SAX通過事件驅(qū)動(dòng)來識別XML文檔的內(nèi)容,即當(dāng)它在XML文檔中發(fā)現(xiàn)特殊符號時(shí),它就會觸發(fā)相關(guān)的事件。由于SAX的這一特性,使應(yīng)用程序開發(fā)人員可以在相應(yīng)的事件中寫入特定的處理代碼。SAX以序列的形式處理文檔,不需要在內(nèi)存中建立整個(gè)文檔的樹型結(jié)構(gòu),因此與DOM相比,SAX對內(nèi)存的需求要少得多,可認(rèn)為是一個(gè)輕量級的接口集合。圖2.9SAX解析XML文檔的流程(5)DOM〔DocumentObjectModel〕是W3C開展的瀏覽XML文檔的一種標(biāo)準(zhǔn)API,它不僅提供了對存儲在內(nèi)存中的XML文檔的一個(gè)完整表示,也提供了隨機(jī)訪問整個(gè)文檔的方法。因此,可將DOM看作一個(gè)標(biāo)準(zhǔn)的連接文檔和應(yīng)用程序或腳本語言的結(jié)構(gòu)體系,DOM提供應(yīng)用戶一個(gè)接口以裝載、定位、操作和序列化XML文檔。如以下圖,CSS是級聯(lián)樣式單,儲存并控制元素的顯示樣式,例如字體、顏色等;Script腳本控制元素如何動(dòng)作,例如利用條件控制語句對元素進(jìn)行不同的操作等;而DOM那么作為腳本和對象的通信平臺,并將結(jié)果提交給瀏覽器。圖2.10DCOM解析XML文檔的流程通過DOM,用戶能夠把文檔看成是一個(gè)有結(jié)構(gòu)的信息樹,而不僅僅是簡單的文本流。這樣應(yīng)用程序或腳本即使不知道XML的語義細(xì)節(jié)也能夠方便的操作結(jié)構(gòu)。DOM包含兩個(gè)關(guān)鍵的抽象:一是樹狀層次,二是表示文檔內(nèi)容和結(jié)構(gòu)的節(jié)點(diǎn)集合。樹狀層次包括了所有這些節(jié)點(diǎn),節(jié)點(diǎn)本身也可以包含其它的節(jié)點(diǎn),這就使得開發(fā)人員能夠通過這個(gè)層次結(jié)構(gòu)找到并修改特定節(jié)點(diǎn)的信息。DOM把節(jié)點(diǎn)看成是一個(gè)通常的對象,這樣就有可能創(chuàng)立一個(gè)腳本來裝載一個(gè)文檔,然后遍歷所有的節(jié)點(diǎn),顯示感興趣的節(jié)點(diǎn)的信息。DOM操作XML文檔時(shí),首先讀取該文檔,然后將其分割成單個(gè)的對象(例如元素、屬性、注釋等),再在內(nèi)存中創(chuàng)立一個(gè)關(guān)于該文檔的樹結(jié)構(gòu)[10]。DOM解析方式使得開發(fā)人員能夠反復(fù)使用該文檔信息,但當(dāng)文檔很大時(shí),所需消耗的內(nèi)存空間就非??捎^。無論是DOM還是SAX,都各自有其優(yōu)缺點(diǎn),它們將長期并存下去,在不同的應(yīng)用中發(fā)揮不同的作用。(6)Xpath:被Xpointer,XSL和XQuery當(dāng)作根底來使用。XPath提供通用標(biāo)點(diǎn)表示,它們可以定位一個(gè)XML文檔結(jié)構(gòu)內(nèi)的任何節(jié)點(diǎn)或節(jié)點(diǎn)集。XSL和CSS:XML的一個(gè)最重要的特性是把內(nèi)容和顯示格式分開。這樣帶來了很大的好處,可以讓不同的用戶按照各自希望的格式顯示同一XML文檔的數(shù)據(jù)內(nèi)容。這也就意味著XML文檔本身并沒有關(guān)于格式方而的信息。為XML文檔提供格式信息的是樣式表,適用于XML文檔的樣式表語言有XSL和CSS語言。CSS語言既可以用于HTML文檔、也可以用于XML文檔;而XSL是專為XML設(shè)計(jì)的樣式表語言,并采用XML語法。XSL的優(yōu)勢在于它可以用于轉(zhuǎn)換,當(dāng)然XSL也可以把XML文檔轉(zhuǎn)換為HTML格式。而且同一個(gè)樣式表可以用于多個(gè)具有相似源樹結(jié)構(gòu)的文檔。顯示的媒介不僅限于Web瀏覽器,還可以是印在紙上的書和報(bào)告等。3〕XML與異構(gòu)數(shù)據(jù)庫集成由于XML所具有的特性和優(yōu)越性,使得它非常適合應(yīng)用于異構(gòu)數(shù)據(jù)庫集成這一領(lǐng)域??刹捎肵ML作為數(shù)據(jù)集成的互操作語言,利用DTD或Schema描述標(biāo)準(zhǔn)格式。DOM和SAX提供了開放的編程接口[11]。這些特征說明了XML技術(shù)可以作為異構(gòu)數(shù)據(jù)庫集成的可行方案,具體表現(xiàn)在以下幾個(gè)方面:(1)由于XML的自定義性及可擴(kuò)展性,它足以表達(dá)各種類型的數(shù)據(jù),作為獨(dú)立于平臺和設(shè)備的結(jié)構(gòu)化數(shù)據(jù)表達(dá)方式,能夠有效地實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫的集成。(2)XML不僅與平臺無關(guān),而且與廠商無關(guān)。所以將XML作為數(shù)據(jù)通道可以解決異構(gòu)數(shù)據(jù)庫之間的互操作問題。(3)XML為各異構(gòu)數(shù)據(jù)庫提供了一層理想的緩沖,將XML作為數(shù)據(jù)傳輸?shù)闹薪楦袷?,異?gòu)數(shù)據(jù)庫之間可以保持透明性,不需要知道對方的內(nèi)部存儲格式。某個(gè)局部數(shù)據(jù)庫內(nèi)部數(shù)據(jù)的變更,也不會影響其它數(shù)據(jù)庫。(4)XML實(shí)現(xiàn)了異構(gòu)數(shù)據(jù)庫的“即插即用〞。因?yàn)樾聰?shù)據(jù)庫的參加,只需要修改相應(yīng)的數(shù)據(jù)模式文件。3本文用到的技術(shù)3.1RESTREST(RepresentationalStateTransfer),即表述性狀態(tài)轉(zhuǎn)移,其根本是像萬維網(wǎng)(www)一樣是為分布式超媒體系統(tǒng)設(shè)計(jì)的一種架構(gòu)風(fēng)格,它是由RoyThomasFielding博士2000年提出的一個(gè)術(shù)語,F(xiàn)ielding同時(shí)也是制定協(xié)議規(guī)那么的作者之一。REST架構(gòu)風(fēng)格是基于1.0協(xié)議和1.2協(xié)議開展起來的,它是Fielding博士對當(dāng)前Web體系結(jié)構(gòu)潛在設(shè)計(jì)原那么的一種描述和對Web最成功要素的總結(jié)。REST架構(gòu)風(fēng)格是全新的針對Web應(yīng)用的開發(fā)風(fēng)格,是當(dāng)今世界最成功的互聯(lián)網(wǎng)超媒體分布式系統(tǒng)架構(gòu)之一,它使得人們真正深入理解和利用了協(xié)議。REST架構(gòu)風(fēng)格由客戶端和效勞器端組成,客戶端發(fā)出初始請求給效勞器端,效勞器端處理請求,并返回適宜的響應(yīng)。請求與響應(yīng)圍繞著資源表示的轉(zhuǎn)移。REST規(guī)定了一系列的約束,強(qiáng)調(diào)了系統(tǒng)各組件間的可伸縮性、接口的統(tǒng)一性,從而減少交互數(shù)據(jù),使效勞器端和客戶端松藕合[12]。以下圖描述了REST架構(gòu)中的約束:在請求方面,規(guī)定了客戶端發(fā)起請求的協(xié)議、使用的方法以及在請求中包含自描述的信息,即包含效勞器處理該請求所需要的全部信息;在處理方面,規(guī)定了效勞器針對不同的請求可以有多重表述以及包含應(yīng)用狀態(tài)的超鏈接,從而使客戶端不依賴任何領(lǐng)域?qū)I(yè)知識,實(shí)現(xiàn)狀態(tài)的跳轉(zhuǎn)等等。圖3.1REST架構(gòu)圖所謂架構(gòu)風(fēng)格就是一組互相協(xié)作的約束,這些約束限制了架構(gòu)中元素的角色和功能,以及任何允許存在的元素之間的關(guān)系。REST架構(gòu)風(fēng)格為了反映現(xiàn)在web開展的方向,定義了如下約束[13]。(1)客戶--效勞器客戶--效勞器約束背后的原那么是別離關(guān)注點(diǎn),例如,客戶端不關(guān)心數(shù)據(jù)存儲,交由效勞器內(nèi)部處理,就可以改善用戶接口跨多個(gè)平臺的可移植性;同時(shí)效勞器不關(guān)心用戶接口和用戶狀態(tài),就可以簡化效勞器組件,改善了系統(tǒng)的可伸縮性。只要接口不發(fā)生改變,效勞器和客戶端還可以自行升級和替換。(2)無狀態(tài)通信必須在本質(zhì)上是無狀態(tài)的,因此從客戶到效勞器的每個(gè)請求都必須包含理解該請求所必需的全部信息,不能利用任何存儲在效勞器的上下文、會話狀態(tài),因此要全部保存在客戶端。效勞器是可以有狀態(tài)的,只是效勞器端狀態(tài)必須像資源一樣通過URL來定位。這個(gè)約束不僅極大的簡化了分布式、集群的開發(fā)過程,還改善了監(jiān)視系統(tǒng)的可見性,提高了從局部故障中恢復(fù)、迅速釋放資源的可靠性和可伸縮性。(3)可緩存為了改善網(wǎng)絡(luò)效率,客戶端能夠緩存應(yīng)答數(shù)據(jù)可緩存約束要求一個(gè)請求的響應(yīng)必須隱式或者顯式被標(biāo)記成可緩存的或者不可緩存的,以防止在后續(xù)的請求中濫用陳舊或者不適宜的數(shù)據(jù)。設(shè)計(jì)良好的緩存能局部或者完全消除客戶--效勞器的交互,明顯提高系統(tǒng)的可擴(kuò)展性和效率。(4)統(tǒng)一接口使REST架構(gòu)風(fēng)格區(qū)別于其他Web的架構(gòu)風(fēng)格的核心特征是,它強(qiáng)調(diào)組件之間要有一個(gè)統(tǒng)一的接口。例如:使用協(xié)議把對一個(gè)URL的操作限制在了4個(gè)方法之內(nèi):GET、POST、PUT和DELETE。統(tǒng)一的接口極大的簡化并解釋了客戶--效勞器架構(gòu),使它們能單獨(dú)處理事務(wù),從而改善了系統(tǒng)的交互性與可重用性。3.2WCFDataServiceWebService:嚴(yán)格來說是行業(yè)標(biāo)準(zhǔn),不是技術(shù),使用XML擴(kuò)展標(biāo)記語言來表示數(shù)據(jù)〔這個(gè)是夸語言和平臺的關(guān)鍵〕。微軟的Web效勞實(shí)現(xiàn)稱為ASP.NETWebService.它使用Soap簡單對象訪問協(xié)議來實(shí)現(xiàn)分布式環(huán)境里應(yīng)用程序之間的數(shù)據(jù)交互。WSDL來實(shí)現(xiàn)效勞接口相關(guān)的描述。此外Webservices可以注冊到UDDI中心.供其客戶查找使用。后來微軟做了ASP.NETWebService的平安,性能,數(shù)據(jù)加密、解密,托管宿主等多方面的擴(kuò)展,稱為WSE系列,這個(gè)是過度產(chǎn)品,最高到WSE3.0.后來就是WCF時(shí)代。WCF:其實(shí)一定程度上就是ASP.NETWebService,因?yàn)樗С諻ebService的行業(yè)標(biāo)準(zhǔn)和核心協(xié)議[14],因此ASP.NETWebService和WSE能做的事情,它幾乎都能勝任,跨平臺和語言更不是問題〔數(shù)據(jù)也支持XML格式化,而且提供了自己的格式化器〕。但是WCF作為微軟主推一個(gè)通訊組件或者平臺,它的目標(biāo)不僅僅是在支持和集成WebService,因?yàn)樗€兼容和具備了微軟早期很多技術(shù)的特性。根據(jù)微軟官方的解釋,WCF〔之前的版本名為“Indigo〞〕是使用托管代碼建立和運(yùn)行面向效勞〔ServiceOriented〕應(yīng)用程序的統(tǒng)一框架。它使得開發(fā)者能夠建立一個(gè)跨平臺的平安、可信賴、事務(wù)性的解決方案,且能與已有系統(tǒng)兼容協(xié)作。WCF是微軟分布式應(yīng)用程序開發(fā)的集大成者,它整合了.Net平臺下所有的和分布式系統(tǒng)有關(guān)的技術(shù),如EnterpriseSevices(COM+).NetRemoting、WebService(ASMX)、WSE3.0和MSMQ消息隊(duì)列。以通信(Communiation)范圍而論,它可以跨進(jìn)程、跨機(jī)器、跨子網(wǎng)、企業(yè)網(wǎng)乃至于Internet;以宿主程序而論,可以以ASP.NET,EXE,WPF,WindowsForms,NTService,COM+作為宿主(Host)。WCF可以支持的協(xié)議包括TCP,,跨進(jìn)程以及自定義,平安模式那么包括SAML,Kerberos,X509,用戶/密碼,自定義等多種標(biāo)準(zhǔn)與模式。也就是說,在WCF框架下,開發(fā)基于SOA的分布式系統(tǒng)變得容易了,微軟將所有與此相關(guān)的技術(shù)要素都包含在內(nèi),掌握了WCF,就相當(dāng)于掌握了叩開SOA大門的鑰匙。WCF數(shù)據(jù)效勞是.NETFramework的一個(gè)組件??梢允褂么私M件創(chuàng)立一些效勞,利用開放式數(shù)據(jù)協(xié)議(OData)來借助具象狀態(tài)傳輸(REST)語義通過Web或Intranet公開和使用數(shù)據(jù)。OData將數(shù)據(jù)公開為可通過URI尋址的資源??墒褂肎ET、PUT、POST和DELETE這些標(biāo)準(zhǔn)謂詞來訪問和更改數(shù)據(jù)。OData使用EntityDataModel的實(shí)體關(guān)系約定,將資源公開為通過關(guān)聯(lián)相關(guān)的實(shí)體集。WCF數(shù)據(jù)效勞使用OData協(xié)議對資源進(jìn)行尋址和更新。通過這種方式,可從支持OData的任意客戶端訪問這些效勞。通過OData,可以使用以下眾所周知的傳輸格式請求數(shù)據(jù)并將數(shù)據(jù)寫入到資源中:JavaScript對象表示法(JSON)和Atom。前者是在AJAX應(yīng)用程序中廣泛使用的基于文本的數(shù)據(jù)交換格式,而后者是用于以XML格式交換和更新數(shù)據(jù)的標(biāo)準(zhǔn)集[15]。WCF數(shù)據(jù)效勞可以將源自各種源的數(shù)據(jù)作為OData源公開。借助于VisualStudio工具,可以更輕松地使用ADO.NET實(shí)體框架數(shù)據(jù)模型來創(chuàng)立基于OData的效勞。也可以基于公共語言運(yùn)行時(shí)(CLR)類,甚至基于后期綁定的或未類型化的數(shù)據(jù)來創(chuàng)立OData源。3.2.1WCFDataService系統(tǒng)架構(gòu)WCFDataService的架構(gòu)如圖3.2所示。圖3.2WCFDataService的架構(gòu)其主要特點(diǎn)整理如下:(1)以資源形式對數(shù)據(jù)進(jìn)行尋址OData將數(shù)據(jù)公開為可通過URI尋址的資源。資源路徑是基于實(shí)體數(shù)據(jù)模型的實(shí)體關(guān)系約定構(gòu)建的。在此模型中,實(shí)體表示應(yīng)用程序域中數(shù)據(jù)的操作單元,例如客戶、訂單、工程和產(chǎn)品。在OData中,實(shí)體資源地址的形式為包含實(shí)體類型實(shí)例的實(shí)體集。例如,URI:///Northwind/Northwind.svc/Customers('ALFKI')/Orders返回Northwind數(shù)據(jù)效勞中與CustomerID值為ALFKI的客戶相關(guān)的所有訂單。利用查詢表達(dá)式,可以對資源執(zhí)行傳統(tǒng)的查詢操作,如篩選、排序和分頁。例如,URI:///Northwind/Northwind.svc/Customers('ALFKI')/Orders?$filter=Freightgt50對資源進(jìn)行篩選,以僅返回運(yùn)費(fèi)高于50美元的訂單。(2)可互操作的數(shù)據(jù)訪問OData是基于標(biāo)準(zhǔn)Internet協(xié)議構(gòu)建的,從而使數(shù)據(jù)效勞能夠與不使用.NETFramework的應(yīng)用程序進(jìn)行互操作。由于您可以使用標(biāo)準(zhǔn)URI對數(shù)據(jù)進(jìn)行尋址,因此應(yīng)用程序可以通過使用具象狀態(tài)傳輸(REST)的語義〔尤其是標(biāo)準(zhǔn)謂詞GET、PUT、POST和DELETE〕來訪問和更改數(shù)據(jù)。這樣就可以從任何可分析和訪問通過標(biāo)準(zhǔn)協(xié)議傳輸?shù)臄?shù)據(jù)的客戶端訪問這些效勞。OData定義了Atom發(fā)布協(xié)議(AtomPub)的一組擴(kuò)展。它支持多種數(shù)據(jù)格式的請求和響應(yīng),以適應(yīng)各種客戶端應(yīng)用程序和平臺。OData源可以采用Atom、JavaScript對象表示法(JSON)以及純XML格式表示數(shù)據(jù)。盡管Atom是默認(rèn)格式,但源的格式會在請求的標(biāo)頭中指定。當(dāng)作為OData源發(fā)布數(shù)據(jù)時(shí),WCF數(shù)據(jù)效勞依靠其他現(xiàn)有的Internet工具執(zhí)行諸如緩存和身份驗(yàn)證等操作。為實(shí)現(xiàn)此目的,WCF數(shù)據(jù)效勞與現(xiàn)有的主機(jī)應(yīng)用程序和效勞〔如ASP.NET、WindowsCommunicationFoundation(WCF)和InternetInformationServices(IIS)〕相集成。(3)存儲獨(dú)立性雖然資源基于一個(gè)實(shí)體關(guān)系模型進(jìn)行尋址,WCF數(shù)據(jù)效勞仍會公開OData源而不管根底數(shù)據(jù)源如何。在WCF數(shù)據(jù)效勞接受一個(gè)對由URI標(biāo)識的資源的請求后,請求將進(jìn)行反序列化,并且該請求的一個(gè)表示形式將傳遞給一個(gè)WCF數(shù)據(jù)效勞提供程序。該提供程序?qū)⒄埱筠D(zhuǎn)換為數(shù)據(jù)源特定格式并對根底數(shù)據(jù)源執(zhí)行該請求。WCF數(shù)據(jù)效勞通過將對OData規(guī)定的資源進(jìn)行尋址的概念模型與根底數(shù)據(jù)源的具體架構(gòu)別離,實(shí)現(xiàn)存儲獨(dú)立性。WCF數(shù)據(jù)效勞與ADO.NET實(shí)體框架集成,可以創(chuàng)立公開關(guān)系數(shù)據(jù)的數(shù)據(jù)效勞??梢允褂脤?shí)體數(shù)據(jù)模型工具創(chuàng)立包含以實(shí)體形式存在的可尋址資源的數(shù)據(jù)模型,同時(shí)定義此模型與根底數(shù)據(jù)庫中表之間的映射。通過WCF數(shù)據(jù)效勞,還可以創(chuàng)立數(shù)據(jù)效勞,這些效勞公開所有返回IQueryable接口實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)。這樣您就可以創(chuàng)立公開.NETFramework類型中數(shù)據(jù)的數(shù)據(jù)效勞。通過實(shí)現(xiàn)IUpdatable接口,支持創(chuàng)立、更新和刪除操作[16]。(4)自定義業(yè)務(wù)邏輯使用WCF數(shù)據(jù)效勞,可以輕松通過效勞操作和偵聽器將自定義業(yè)務(wù)邏輯添加到數(shù)據(jù)效勞。效勞操作是在可通過URI〔采用與數(shù)據(jù)資源相同的形式〕進(jìn)行尋址的效勞器上定義的方法。效勞操作還可以使用查詢表達(dá)式語法對操作返回的數(shù)據(jù)進(jìn)行篩選、排序和分頁。例如,URI://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$orderby=OrderDate&$top=10&$skip=10表示對數(shù)據(jù)效勞上的名為GetOrdersByCity的效勞操作的調(diào)用,此調(diào)用將返回來自倫敦的客戶的訂單,并且會對結(jié)果進(jìn)行分頁并按OrderDate排序。利用偵聽器,可以將自定義應(yīng)用程序邏輯集成到數(shù)據(jù)效勞對請求或響應(yīng)消息的處理中。在指定的實(shí)體集上執(zhí)行查詢、插入、更新或刪除操作時(shí),將調(diào)用相應(yīng)的偵聽器。然后,偵聽器可能會更改數(shù)據(jù)、執(zhí)行授權(quán)策略或者甚至終止操作。必須為由數(shù)據(jù)效勞公開的給定實(shí)體集顯式注冊偵聽器方法。3.2.2使用WCFDataService的OData數(shù)據(jù)發(fā)布前后比較在WCFDataService出現(xiàn)之前,實(shí)現(xiàn)數(shù)據(jù)發(fā)布的一般做法如圖3.3和3.4所示。所有的數(shù)據(jù)操作行為全部通過操作DataAPI實(shí)現(xiàn),由于其DataAPI的差異性,使得數(shù)據(jù)的跨平臺獲取變得十分麻煩。圖3.3原數(shù)據(jù)發(fā)布圖但是使用WCFDataService的OData進(jìn)行數(shù)據(jù)發(fā)布之后,可以看到所有的數(shù)據(jù)查詢以及更新都通過ODataPublisher來實(shí)現(xiàn),而OData所使用的語言是XML,這也極大的方便了不同語言之間數(shù)據(jù)的獲取以及管理。并且由于OData的特殊性,其數(shù)據(jù)源可以是任意自定義的數(shù)據(jù),甚至包括自定義的CLR類型[17]。3.3EntityFrameworkEntityFramework是ADO.NET中的一套支持開發(fā)面向數(shù)據(jù)的軟件應(yīng)用程序的技術(shù)。是微軟.NET平臺下的ORM框架。構(gòu)建應(yīng)用程序或效勞時(shí)常用的一種長期存在的設(shè)計(jì)方法是將應(yīng)用程序或效勞分為三局部:域模型、邏輯模型和物理模型。域模型定義要建模的系統(tǒng)中的實(shí)體和關(guān)系、關(guān)系數(shù)據(jù)庫的邏輯模型通過外鍵約束將實(shí)體和關(guān)系標(biāo)準(zhǔn)化到表中。物理模型通過指定分區(qū)和索引等存儲詳細(xì)信息實(shí)現(xiàn)特定數(shù)據(jù)引擎的功能。物理模型由數(shù)據(jù)庫管理員進(jìn)行優(yōu)化以改善性能,而編寫應(yīng)用程序代碼的開發(fā)者的工作主要限制為通過編寫SQL查詢和調(diào)用存儲過程來處理邏輯模型。域模型通常用作捕獲和溝通應(yīng)用程序要求的工具,常常以靜態(tài)關(guān)系圖形式提供,用于在工程早期階段查看和討論之用,隨后會被棄用。許多開發(fā)團(tuán)隊(duì)會跳過概念模型的創(chuàng)立,直接從指定關(guān)系數(shù)據(jù)庫中的表、列和鍵開始工作[18]。實(shí)體框架可使開發(fā)人員查詢域模型(在實(shí)體框架中稱為概念模型)中的實(shí)體和關(guān)系,同時(shí)依靠實(shí)體框架將這些操作轉(zhuǎn)換為特定于數(shù)據(jù)源的命令,從而賦予模型生命。這使應(yīng)用程序不再對特定數(shù)據(jù)源具有硬編碼的依賴性。概念模型、存儲模型以及這兩者之間的映射以基于XML的架構(gòu)表示,并在具有對應(yīng)擴(kuò)展名的文件中定義:(1)概念架構(gòu)定義語言(CSDL)定義CSDL是實(shí)體框架對于實(shí)體數(shù)據(jù)模型的實(shí)現(xiàn),文件擴(kuò)展名為.esdl。(2)存儲架構(gòu)定義語言(SSDL)SSDL定義存儲模型,也稱為邏輯模型,文件擴(kuò)展名為.ssdl。(3)映射標(biāo)準(zhǔn)語言(MSL)MSL定義存儲模型與概念模型之間的映射,文件擴(kuò)展名為.msl??梢愿鶕?jù)需要對存儲模型和映射進(jìn)行更改,而無需對概念模型、數(shù)據(jù)類或應(yīng)用程序代碼進(jìn)行更改。存儲模型是特定于提供程序的,因此可以在各種數(shù)據(jù)源之間使用一致的概念模型。實(shí)體框架使用這些模型和映射文件將對概念模型中的實(shí)體和關(guān)系的創(chuàng)立、讀取、更新和刪除操作轉(zhuǎn)換為數(shù)據(jù)源中的等效操作。3.3.1EntityFramework系統(tǒng)架構(gòu)ADO.NETEntityFramework以EntityDataModel(EDM)為主,將數(shù)據(jù)邏輯層切分為三塊,分別為概念層(conceptualschema),映射層(MappingSchema)與存儲層(StorageSchema)三層,之上還有Entityclient,ObjectContext以及LINQtoEntities用來提供對數(shù)據(jù)的查詢與維護(hù)。EntityFramework的體系結(jié)構(gòu)如圖3.5所示。圖3.5EntityFramework的體系結(jié)構(gòu)3.3.2EntityFramework概念模型查詢實(shí)體框架使用模型和映射文件中的信息將對概念模型中表示的實(shí)體類型的對象查詢轉(zhuǎn)換為特定于數(shù)據(jù)源的查詢。查詢結(jié)果具體化為實(shí)體框架管理的對象[19]。實(shí)體框架基于ADO.NET數(shù)據(jù)提供程序。為查詢概念模型并返回對象提供了以下幾種方式:(1)LINQtoEntities:提供語言集成查詢(LINQ)支持,用于查詢在概念模型中定義的實(shí)體類型。(2)EntitySQL:與存儲無關(guān)的SQL,使用概念模型中的實(shí)體并支持實(shí)體數(shù)據(jù)模型,可用于對象查詢和通過使用EntityClient提供程序執(zhí)行的查詢。(3)查詢生成器方法:使用LINQ風(fēng)格的查詢方法構(gòu)造EntitySQL查詢。3.4LINQ語言集成查詢(LINQ)是Microsoft.NETFramework3.5版中引入的一項(xiàng)功能,其在對象領(lǐng)域和數(shù)據(jù)領(lǐng)域之間架起了一座橋梁。傳統(tǒng)上,針對數(shù)據(jù)的查詢都是以簡單的字符串表示,而沒有編譯時(shí)類型檢查支持。同時(shí)還必須針對以下各種數(shù)據(jù)源學(xué)習(xí)一種不同的查詢語言:SQL數(shù)據(jù)庫、XML文檔、各種Web效勞等等。LINQ使查詢成為.NET中的一流語言構(gòu)造??梢允褂谜Z言關(guān)鍵字和熟悉的運(yùn)算符針對強(qiáng)類型化對象集合編寫查詢。以下圖顯示了一個(gè)用C#語言編寫的不完整的LINQ查詢,該查詢針對SQLServer數(shù)據(jù)庫[20]。圖3.6Linq查詢語言集成查詢(LINQ)是一組技術(shù)的名稱,其建立在將查詢功能直接集成到.NET語言的根底上。借助于LINQ,可以查詢已經(jīng)是高級語言構(gòu)造的對象,就如類、方法、事件等等。LINQ最明顯的“語言集成〞局部是查詢表達(dá)式。通過使用查詢語法,甚至可以使用最少的代碼對數(shù)據(jù)源執(zhí)行復(fù)雜的篩選、排序和分組操作。使用相同的根本查詢表達(dá)式模式來查詢和轉(zhuǎn)換SQL數(shù)據(jù)庫、ADO.NET數(shù)據(jù)集、XML文檔和流以及.NET集合中的數(shù)據(jù)。LINQtoEntities提供語言集成查詢(LINQ)支持,它允許C#等語言根據(jù)實(shí)體框架概念模型編寫查詢。針對實(shí)體框架的查詢由針對對象上下文執(zhí)行的命令目錄樹查詢表示。LINQtoEntities將語言集成查詢(LINQ)查詢轉(zhuǎn)換為命令目錄樹查詢,針對實(shí)體框架執(zhí)行這些查詢,并返回可同時(shí)由實(shí)體框架和LINQ使用的對象。4基于WebService的分布式異構(gòu)數(shù)據(jù)庫數(shù)據(jù)集成設(shè)計(jì)4.1系統(tǒng)框架分布式異構(gòu)數(shù)據(jù)集成就是將物理上處于不同地點(diǎn)的各個(gè)機(jī)構(gòu)數(shù)據(jù)間進(jìn)行數(shù)據(jù)共享,實(shí)現(xiàn)數(shù)據(jù)的透明無差異訪問,本文在對WebService以及WCFDataService以及微軟EntityFramework的研究根底上,設(shè)計(jì)了如下的模型,如圖4.1.圖4.1異構(gòu)數(shù)據(jù)集成框架4.2框架分析本模型完全基于MicrosoftWCFDataService以及MicrosoftEntityFramework設(shè)計(jì)以及實(shí)現(xiàn),本集成框架實(shí)現(xiàn)了對于底層數(shù)據(jù)庫的封裝,使得用戶能夠?qū)?shù)據(jù)進(jìn)行透明的訪問。對于客戶端來說,其所見到的都是基于OData的XML數(shù)據(jù),使用LINQ可以對其進(jìn)行檢索以及更新。對于效勞端來說,每增加一個(gè)分布式異構(gòu)數(shù)據(jù)庫,需要為其生成相應(yīng)的WCFDataService,然后在集成的DataService中進(jìn)行注冊以及處理,使之融合進(jìn)集成的DataService,對于客戶端而言,所有的數(shù)據(jù)邏輯上統(tǒng)一以及透明。類似于WCFDataService的數(shù)據(jù)庫單實(shí)例操作。同樣的,本框架也支持添加其他數(shù)據(jù),比方XML數(shù)據(jù)等。原有的WCFDataServices雖然能夠?qū)?shù)據(jù)進(jìn)行XML話使得客戶端能夠?qū)?shù)據(jù)進(jìn)行檢索以及更新操作,對于一般的應(yīng)用來說,卻有著以下幾個(gè)重要的缺乏:(1)現(xiàn)有的WCFDataServices很難將眾多數(shù)據(jù)源集成進(jìn)一個(gè)單一的數(shù)據(jù)源中,使得最終數(shù)據(jù)對用戶透明。(2)由于多數(shù)據(jù)源的存在,很難對不同數(shù)據(jù)源下數(shù)據(jù)表進(jìn)行聯(lián)合查詢,比方簡單的多表的join操作。(3)客戶端沒有相應(yīng)的Proxy代碼,需要手工生成,這也極大的限制了程序的開發(fā)效率。因此基于上述幾點(diǎn),以下設(shè)計(jì)著眼于將多個(gè)數(shù)據(jù)源集成進(jìn)一個(gè)單一的WcfDataService中,使得其OData數(shù)據(jù)完全包含所有數(shù)據(jù)庫的對應(yīng)表格從而方便用戶使用,而不必關(guān)注數(shù)據(jù)的來源。同樣的,為了提高效率,也需要提供一個(gè)客戶端的proxy代碼生成器,來提高工作效率。4.4查詢接口查詢接口是系統(tǒng)提供應(yīng)用戶使用的供查詢使用的接口,實(shí)現(xiàn)查詢接口也是本文最終需要實(shí)現(xiàn)的目的,本文采用LINQ技術(shù)對所集成的ODATA數(shù)據(jù)進(jìn)行查詢,使得用戶完全透明的對所有分布式數(shù)據(jù)能夠高效的查詢操作。4.5集成DataService模塊設(shè)計(jì)4.5.1Server端模塊設(shè)計(jì)為了實(shí)現(xiàn)集成的DataService功能,需要實(shí)現(xiàn)一個(gè)CustomDataService來暴露所有集成的數(shù)據(jù),并且實(shí)現(xiàn)其定義的IDataServiceMetadataProvider,IDataServiceQueryProvider以及IDataServiceUpdateProvider。三者的功能如下表所示。表4.1CustomDataService需要實(shí)現(xiàn)的接口說明接口名說明IDataServiceMetadataProvider包含數(shù)據(jù)效勞所暴露的對象以及類型IDataServiceQueryProvider通過訪問DataService的方式訪問數(shù)據(jù)IDataServiceUpdateProvider更新數(shù)據(jù)的接口基于此,定義繼承自這些接口的類如下所示。(1)CompositeDataServiceMetadataProvider圖4.2IDataServiceMetadataProvider類圖主要函數(shù)說明GetResourceAssociationSet返回?cái)?shù)據(jù)表關(guān)聯(lián)的實(shí)例AddCompositeResourceType添加WCFData數(shù)據(jù)類型到集成的Meta數(shù)據(jù)接口AddCompositeResourceSet添加WCFData數(shù)據(jù)信息AddCompositeResourceAssociationSet添加WCFData數(shù)據(jù)關(guān)聯(lián)信息Freeze設(shè)置所有數(shù)據(jù)ReadonlyMapEdmTypeToResourceType將Edm模型轉(zhuǎn)換成ResourceType(2)CompositeDataServiceQueryProvider圖4.3IDataServiceQueryProvider類圖主要函數(shù)說明GetQueryRootFo

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論