引言
醫(yī)院數(shù)字化是目前國家衛(wèi)生信息化發(fā)展的重點(diǎn)之一,也是國內(nèi)醫(yī)院現(xiàn)代化建設(shè)新興的熱點(diǎn)。在數(shù)字化醫(yī)院中,PACS是比較重要的系統(tǒng)之一。但是,PACS的數(shù)據(jù)來源于醫(yī)療中的各個(gè)環(huán)節(jié)和醫(yī)院信息系統(tǒng)的各個(gè)子系統(tǒng),而許多子系統(tǒng)是由不同時(shí)期不同廠家開發(fā)的,這樣存在異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)共享問題,為了節(jié)約成本,充分利用現(xiàn)有資源,不可能全部將現(xiàn)有系統(tǒng)更換。為此,需要采用中間件技術(shù)來解決PACS異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)共享問題。
本文在現(xiàn)有異構(gòu)數(shù)據(jù)庫領(lǐng)域研究成果的基礎(chǔ)上,針對(duì)PACS中異構(gòu)數(shù)據(jù)庫數(shù)據(jù)共享問題,采用XML的異構(gòu)數(shù)據(jù)庫中間件技術(shù)實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫之間信息交換。把來自醫(yī)院不同部門的影像數(shù)據(jù)轉(zhuǎn)化到中間件這個(gè)統(tǒng)一的框架中,進(jìn)行交互、轉(zhuǎn)化和加工,從而解決異構(gòu)數(shù)據(jù)源的集成問題,進(jìn)而更有效地利用醫(yī)院各種信息資源,為PACS系統(tǒng)中異構(gòu)數(shù)據(jù)庫在更大范圍內(nèi)實(shí)現(xiàn)了數(shù)據(jù)的共享。這一方法具有可擴(kuò)展性好、跨平臺(tái)特性、執(zhí)行效率較高的優(yōu)點(diǎn),具有很高的實(shí)用價(jià)值。
1 PACS數(shù)據(jù)庫集成模型設(shè)計(jì)
本方案采用XML作為異構(gòu)數(shù)據(jù)源的全局模式,通過XML的標(biāo)記來定義PACS的數(shù)據(jù)對(duì)象,具有平臺(tái)無關(guān)性,適合在不同平臺(tái)下進(jìn)行影像數(shù)據(jù)交換,而且XML具有數(shù)據(jù)和表現(xiàn)樣式相分離的特點(diǎn),同一份XML文檔可和不同的樣式文件相結(jié)合,得到不同的數(shù)據(jù)視圖,可以滿足不同的臨床醫(yī)療需求。Web Senrices完全是基于XML、SOAP、HTTP、WSDL、UDDI等獨(dú)立于平臺(tái)、獨(dú)立于軟件開發(fā)商的標(biāo)準(zhǔn)。是創(chuàng)建可互操作的、分布式應(yīng)用程序的新平臺(tái)。它能跨越防火墻的通信,而不用像傳統(tǒng)的分布式組件技術(shù)那樣,要開放特定的端口,才允許訪問內(nèi)部資源,給相關(guān)單位帶來安全上的漏洞。web Services是建立在發(fā)布服務(wù)的應(yīng)用程序和使用服務(wù)的應(yīng)用程序之間的松散耦合之上的,因而具有很好的靈活性、可擴(kuò)展性、且其實(shí)施既便宜又快速。方案的總體框架分為3個(gè)部分,如圖1所示。
圖1 PACS數(shù)據(jù)庫集成模型
1.1數(shù)據(jù)層
數(shù)據(jù)層中,每個(gè)數(shù)據(jù)源由一個(gè)web服務(wù)包裝器來進(jìn)行封裝,實(shí)現(xiàn)對(duì)各局部數(shù)據(jù)源的代理。將生成的web服務(wù)注冊(cè)到服務(wù)注冊(cè)中心,服務(wù)請(qǐng)求者(中間層的服務(wù)引用)調(diào)用服務(wù)后,wreb服務(wù)根據(jù)請(qǐng)求執(zhí)行相應(yīng)的服務(wù),服務(wù)完成后把結(jié)果打包為SOAP傳送給中間件層。
1.2中間件層
該層是PACS數(shù)據(jù)集成的業(yè)務(wù)邏輯核心,主要包括結(jié)果生成、服務(wù)結(jié)果、服務(wù)分解、服務(wù)引用,服務(wù)管理和注冊(cè)服務(wù)。服務(wù)引用的功能是:根據(jù)服務(wù)注冊(cè)中心提供的WSDL文件生成本地代理,并與相應(yīng)的Web Service綁定,通過調(diào)用服務(wù)引用公共的函數(shù)就可以獲得W曲服務(wù)提供的有關(guān)功能,它屏蔽了操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)格式、開發(fā)工具、數(shù)據(jù)位置等差異,同時(shí)由于請(qǐng)求者和調(diào)用者之間數(shù)據(jù)傳輸采用的是SOAP,因此能夠穿透防火墻,這體現(xiàn)了Web服務(wù)的一個(gè)重要優(yōu)勢(shì)。中間件首先要初始化,根據(jù)服務(wù)管理的界面生成虛擬數(shù)據(jù)庫,即元數(shù)據(jù)。當(dāng)用戶提交請(qǐng)求后,由服務(wù)分解模塊根據(jù)元數(shù)據(jù)中的映射關(guān)系將用戶的請(qǐng)求分解為相應(yīng)的請(qǐng)求,并轉(zhuǎn)給對(duì)應(yīng)的服務(wù)引用去申請(qǐng)Web服務(wù)。由Webservice包裝器將執(zhí)行完后的結(jié)果打包交回給中間件層,由服務(wù)結(jié)果模塊進(jìn)行相應(yīng)的處理,再由結(jié)果生成模塊根據(jù)用戶請(qǐng)求傳給應(yīng)用界面顯示給用戶。
1.3應(yīng)用層
這部分負(fù)責(zé)與用戶實(shí)現(xiàn)交互。使用者調(diào)用中間件層返回的生成結(jié)果,應(yīng)用層根據(jù)需求的不同,以不同的格式包裝后顯示給應(yīng)用層。使用者不需要了解數(shù)據(jù)所在地、數(shù)據(jù)存儲(chǔ)格式以及在數(shù)據(jù)所在系統(tǒng)等細(xì)節(jié),用戶根據(jù)工作提出集成請(qǐng)求,經(jīng)過中間件層和數(shù)據(jù)層的處理后就可以得到想要的結(jié)果。
2中間件中關(guān)鍵模塊的設(shè)計(jì)與實(shí)現(xiàn)
2.1數(shù)據(jù)初始化
通常異構(gòu)數(shù)據(jù)庫的基礎(chǔ)數(shù)據(jù)會(huì)存在著相同意義不同字段名稱的情況,這樣為訪問數(shù)據(jù)庫造成了很大的麻煩,所以需要在系統(tǒng)開始運(yùn)行階段為系統(tǒng)中的虛擬數(shù)據(jù)庫創(chuàng)建一個(gè)能體現(xiàn)他們之間相同之處的表格。這個(gè)表格提取異構(gòu)數(shù)據(jù)庫表中所有具有相同意義的基礎(chǔ)字段,然后由中間件管理員創(chuàng)建一個(gè)元數(shù)據(jù)字段,每個(gè)局部數(shù)據(jù)庫管理員登錄后,從元數(shù)據(jù)中選取自已數(shù)據(jù)庫中具有相同意義的表,并且將自己表中與元數(shù)據(jù)字段具有相同意義的字段做映射,從而實(shí)現(xiàn)了系統(tǒng)的初始化部分,為中間件層的服務(wù)分解階段提供了基礎(chǔ)。
2.2服務(wù)分解模塊
本模塊主要負(fù)責(zé)接收從用戶客戶端發(fā)送過來的標(biāo)準(zhǔn)SQL,根據(jù)元數(shù)據(jù)中全局?jǐn)?shù)據(jù)與局部數(shù)據(jù)的映射關(guān)系,將全局查詢語句的字段名映射為局部數(shù)據(jù)的字段名,同時(shí)獲得局部數(shù)據(jù)庫在UDDI中的注冊(cè)信息,這樣就將全局查詢分解成針對(duì)不同數(shù)據(jù)庫的子查詢。查詢分解模塊首先得到SQL語句中的元數(shù)據(jù)表表名,接著查詢系統(tǒng)初始化階段生成的以元數(shù)據(jù)表表名命名的飆文件,從中查詢到與業(yè)務(wù)處理系統(tǒng)處理的業(yè)務(wù)類型相同的局部數(shù)據(jù)庫表,然后將SQL語句中的元數(shù)據(jù)表字段對(duì)應(yīng)為相應(yīng)的局部數(shù)據(jù)表字段,將元數(shù)據(jù)表的XML文件中每個(gè)局部表合并成一個(gè)SQL語句,最后把它們放入到服務(wù)引用模塊,由服務(wù)引用模塊根據(jù)其所提供的服務(wù)調(diào)用相應(yīng)的遠(yuǎn)端數(shù)據(jù)層的WebService包裝器。
利用Visual Studio.NET 2005開發(fā)平臺(tái)與C#程序語言來開發(fā)此異構(gòu)中間件,同時(shí)用DOM來對(duì)XML進(jìn)行解析。以下是系統(tǒng)實(shí)現(xiàn)中解析XML的部分代碼。
2.3服務(wù)引用模塊
該模塊接收從服務(wù)分解模塊傳送過來的局部數(shù)據(jù)源,依據(jù)Wreb Service包裝器在UDDI中的注冊(cè)服務(wù)信息,從UDDI服務(wù)中心查找到所對(duì)應(yīng)服務(wù)的WSDL文件,生成本地代理,這樣就可以調(diào)用局部數(shù)據(jù)源所提供的W曲服務(wù)。在本方案中,采用在運(yùn)行時(shí)生成代理的方法來添加wreb引用。首先將UDDLSDK類添加到項(xiàng)目中,利用Inquire屬性獲得UDDI的服務(wù)地址,用FindTModel方法查詢?nèi)亢虾鯒l件的tModel對(duì)象,用getTModelDetail方法取得tModel對(duì)象的詳細(xì)信息,即TModel類。TModel類包括了tModel的主要屬性,如Category、Identifier、Operator、OverviewDoc等等。
下面是系統(tǒng)服務(wù)引用模塊中根據(jù)tModel參數(shù),尋找Web服務(wù)包裝器在UDDI中注冊(cè)的WSDL文件地址的部分代碼:
調(diào)用Find_Model函數(shù)之后,能得到局部數(shù)據(jù)源包裝器的WSDL文件的地址,通過該地址調(diào)用InvokeWebService函數(shù)動(dòng)態(tài)生成本地客戶端代理,然后就可以象調(diào)用本地方法一樣調(diào)用遠(yuǎn)程Web服務(wù)包裝器的方法。
FromDom(cplist,ccV),
2.4服務(wù)結(jié)果模塊
該模塊的主要功能是取得各異構(gòu)數(shù)據(jù)源包裝器執(zhí)行完后的服務(wù)結(jié)果。本模塊中用Dataset對(duì)象接收數(shù)據(jù)。DataSet類是在ADONET中實(shí)現(xiàn)的,.NET中的擴(kuò)展支持可以自動(dòng)創(chuàng)建和填充DataSet對(duì)象和類型化DataSet對(duì)象。DataSet能夠?qū)⒆陨硇蛄修D(zhuǎn)化為XML,并能在序列化過程中表現(xiàn)內(nèi)容的架構(gòu)。因此使用DataSet對(duì)象可簡化應(yīng)用程序的開發(fā)。DataSet對(duì)象實(shí)際上是所查詢數(shù)據(jù)集的XML的內(nèi)存表示。使用Dataset的WriteXml方法可將其數(shù)據(jù)集保存為XML文檔。
實(shí)現(xiàn)本系統(tǒng)的中間件時(shí),采取讀取客戶端IP地址和計(jì)算所查詢的異構(gòu)數(shù)據(jù)庫個(gè)數(shù)來命名從異構(gòu)數(shù)據(jù)源返回的XML文檔。該部分實(shí)現(xiàn)的關(guān)鍵代碼如下:
2.5服務(wù)生成模塊
該模塊的主要功能是:將查詢各異構(gòu)數(shù)據(jù)庫所返回的結(jié)果合為同一筆記錄,按照數(shù)據(jù)庫中間件系統(tǒng)與業(yè)務(wù)處理系統(tǒng)的接口進(jìn)行封裝,最后返回給應(yīng)用層。本系統(tǒng)仍然通過DOM技術(shù)對(duì)XML文件進(jìn)行解析和合并。首先加載從服務(wù)結(jié)果中生成的XML文件,用DocumentElement方法得到需要合并的多個(gè)XML文件的根元素,然后根據(jù)服務(wù)結(jié)果中的XML文檔命名法,取計(jì)算為l的文檔為準(zhǔn),用ImportNode方法將其它XML文件中的數(shù)據(jù)合并到該文檔,最后根據(jù)元數(shù)據(jù)表與局部數(shù)據(jù)的映射文件,利用ModifyNodeName函數(shù)修改該文檔的節(jié)點(diǎn),使其符合服務(wù)請(qǐng)求時(shí)查詢結(jié)果要求。實(shí)現(xiàn)該模塊的部分代碼如下:
2.6 UDDI注冊(cè)服務(wù)中心
該模塊的主要功能是記錄能提供服務(wù)的各種相關(guān)信息,用來供服務(wù)引用模塊根據(jù)服務(wù)注冊(cè)中心的WsnL文件生成服務(wù)引用信息。在構(gòu)建Web服務(wù)應(yīng)用程序時(shí),可以采用設(shè)計(jì)時(shí)和運(yùn)行時(shí)兩種編程模式。
設(shè)計(jì)時(shí)訪問是在編制面向服務(wù)的應(yīng)用程序時(shí),通過注冊(cè)中心的瀏覽頁面找到所需要的web服務(wù),并在應(yīng)用程序中調(diào)用它。運(yùn)行時(shí)訪問是通過在應(yīng)用程序中編寫代碼查找在注冊(cè)中心里注冊(cè)的Web服務(wù),并且對(duì)它進(jìn)行調(diào)用。無論使用哪一種方法,都需要先將Web服務(wù)的WSDL文件注冊(cè)為tModel,利用tModel來尋找所需要的服務(wù)信息。本系統(tǒng)中利用Windows Server 2003所提供的UDDI服務(wù)功能來建立私有的UDDI注冊(cè)中心。
3實(shí)驗(yàn)結(jié)果
首先利用Microsoft的web用戶界面進(jìn)行UDDI注冊(cè),然后以數(shù)據(jù)庫中間件管理員的身份登錄中間件注冊(cè)全局信息,接著以局部數(shù)據(jù)庫管理員登錄中間件,注冊(cè)本地?cái)?shù)據(jù)庫信息與元數(shù)據(jù)表的映射信息。系統(tǒng)運(yùn)行過程主要是用戶啟動(dòng)瀏覽器,通過數(shù)據(jù)庫中間件對(duì)異構(gòu)數(shù)據(jù)庫進(jìn)行訪問,并在瀏覽器端看到查詢的結(jié)果。如圖2所示是箱人住院號(hào)和姓名后所得到的查詢結(jié)果。
圖2病人病歷查詢結(jié)果顯示圖
4結(jié)束語
由于PACS中異構(gòu)數(shù)據(jù)源之間的差異,使得異構(gòu)數(shù)據(jù)源集成了一個(gè)很難解決的問題,文章設(shè)計(jì)并實(shí)現(xiàn)了一種基于XML和WEB Services異構(gòu)數(shù)據(jù)庫中間件技術(shù)的集成方案。把來自不同部門的影像數(shù)據(jù)轉(zhuǎn)化到中間件這個(gè)統(tǒng)一的框架中,進(jìn)行交互、轉(zhuǎn)化和加工,從而解決異構(gòu)數(shù)據(jù)源的集成問題,進(jìn)而更有效地利用醫(yī)院各種信息資源,為PACS系統(tǒng)中異構(gòu)數(shù)據(jù)庫在更大范圍內(nèi)實(shí)現(xiàn)了數(shù)據(jù)的共享。最后本文以一個(gè)實(shí)驗(yàn)系統(tǒng)實(shí)現(xiàn)了該數(shù)據(jù)庫中間件的主要功能。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:PACS中異構(gòu)數(shù)據(jù)庫中間件的研究與實(shí)現(xiàn)
本文網(wǎng)址:http://www.ezxoed.cn/html/support/1112155688.html