呂曉琪,賈偉濤,谷 宇,于 寧
(內蒙古科技大學信息工程學院,內蒙古包頭 014010)
隨著信息化技術和計算機技術的飛速發展,醫療數據共享和各醫療信息系統互連的需求日趨迫切,因此采用統一的醫學信息化標準已成為大勢所趨[1-2]。健康第7層(health level seven,HL7)標準就是在這樣的需求下制定的,并且在歐美等發達國家得到廣泛應用。目前國內這方面研究比較少,也不夠深入。但隨著我國醫院數字化進程的展開,醫院內部和醫院間的信息共享問題逐漸浮現出來并亟待解決。本課題在研究最新的 HL7標準第3版(HL7version 3,HL7V3)后,實現了HL7V3消息解析器,用于解析HL7V3各個域內消息,為醫院內部各子系統間和醫院系統間數據共享提供可以應用的工具,也為解決數據共享問題提供底層技術支持。
1.1 目前常用的消息解析方法 基于HL7標準數據交換的基本原理是使每個系統的數據首先轉換為標準的HL7消息格式,按照協議的通訊規則發送至接收系統,接收方通過對收到的HL7消息進行解析,再轉化為應用程序數據,從而實現系統間的數據交換[3]。因此,HL7V3消息是進行數據交換的基礎,而對HL7V3消息進行解析又是實現數據共享的關鍵技術之一。目前HL7V3提供了兩種格式的文件用于HL7V3消息的解析,它們分別是等級消息描述(hierarchical message definition,HMD)文件和模型交換格式(model interchange for-mat,MIF)文件。HMD文件和MIF文件都是基于可擴展標記語言XML(extensible markup language,XML)文檔格式,但它們在解析消息時各有特點。HMD解析文件是把原來的參考信息模型(reference information model,RIM)、精化消息信息模型(refined message information model,RMIM)和 HMD分成完全不同的實體,進行消息解析。利用HMD表示成不同實體后,給編程帶來一定的復雜性,且應用不便捷。MIF文件出現后,MIF文件解析HL7V3消息使其建模從域消息信息模型(domain message information model,DMIM)、RMIM、HMD轉移到域信息模型(domain information models,DIMs)和序列信息模型(serializable information model,SIM)中,使原來固定的3層消息生成結構RMIM-HMD-Message Type轉變為可變深度層次的SIM模型,也使原來固定長度標識模式變為字符限制標識模式,避免本地定義的實體出現分歧。MIF文件使實施者從編程中解脫出來,并為解析HL7V3消息提供了更加靈活的編程實現,為不斷發展的HL7V3標準提供了強有力的技術支持。
1.2 MIF文件格式介紹 MIF定義了一系列XML文檔格式文件[4-5],用于描述HL7V3版本內容。在HL7V3中,MIF主要有兩方面的應用。首先是HL7V3元數據模型的文檔形式,被認為是HL7V3開發方法的一部分,其次是HL7V3實體正式交換標準。MIF主要的使用者是HL7內部各種團體。
MIF文件可以轉換成通用建模語言(unified modeling language,UML)、XML、網絡本體語言(web ontology language,OWL)、達爾文信息分類體系結構(darwin information typing architecture,DITA)和其他有效的文檔格式。當 MIF被轉換成其他格式的文件時,V3消息的具體細節可能會在轉換過程中丟失。為了保證和其他工具的兼容,所有使用非MIF文件格式的工具都要能夠確保其實體轉換成MIF格式文件。基于MIF開發的HL7V3工具具有一定優勢,因為它免去了其他格式和MIF格式相互轉換的步驟,也可以使開發出的工具有較好的兼容性。見圖1。

圖1 MIF格式轉換
1.3 HL7Java SIG工具包 HL7Java特殊興趣小組(special interest group,SIG)工具包是一套針對HL7V3標準開發的開源工具包。它由Oracle公司聯合其他公司共同開發,提供了實現HL7V3標準的一個接口應用平臺。本研究重點采用此工具包輔助開發,構建基于MIF文件的HL7V3消息解析器,為實現數據共享提供底層技術支持。
2.1 準備工作 采用HL7Java SIG工具包輔助開發,首先需要在Eclipse工程環境下對項目進行配置,將HL7Java SIG工具包的源文件通過ANT工具編譯后,把生成的庫文件所在路徑包含到Eclipse中創建的工程目錄下,使用HL7Java SIG工具包提供的功能,實現對HL7V3消息解析器的設計。
2.2 HL7V3消息結構 在設計HL7V3消息解析器前應先對對象進行分析,并深入研究HL7V3消息結構。將HL7V3標準中詞匯和數據類型應用于各種HL7RIM類,構建出各種HL7V3消息[6-9]。HL7V3消息包括3部分,分別為傳輸包、控制行為包和消息體。傳輸包包含了用于打包、路由消息到接收應用程序的信息。其中路由信息又包括消息的標識和創建時間、消息的版本、用于進一步限制消息的具體模板或框架、發送者和接收者的信息和響應確認模式等。控制行為包包含關于觸發事件的信息,觸發事件產生交互。消息體是實際使用的數據,控制行為包和消息體組成了HL7V3消息的完整語義結構,通過RIM中類的定義和關聯模型化實現消息的封裝[10-12]。見圖2。
2.3 HL7V3消息解析器的構建 目前,通常采用HL7轉換各種醫院信息系統數據至符合HL7標準的XML信息格式,實現各種醫療衛生信息系統之間的信息共享與交換[13]。HL7接口引擎通常由HL7通信模塊、API接口模塊、控制模塊、驗證模塊和映射模塊等模塊組成[14]。本研究設計的消息解析器實現了HL7接口引擎中消息控制模塊和消息驗證模塊的功能,并且是HL7接口引擎核心部分。消息控制模塊的功能包括消息構建與解析,驗證模塊則是對數據格式進行檢查驗證,根據HL7標準驗證收到的消息是否可讀。見圖3。

圖2 HL7V3消息結構

圖3 HL7引擎模塊示意圖
以消息解析為例,首先讀入配置文件,利用元數據類型下載器下載MIF文件,通過基于Java的文檔對象模型(Java document object model,JDOM)解析器解析 MIF元文件中節點,關鍵的元數據元素被提取出來,隨后這些數據被映射成類對象,與其他對象的相應關系也構建完成。構建的類對象決定了RIM對象圖如何表示,隨后的HL7V3消息根據RIM對象圖表示。最終RIM對象圖描述的HL7V3消息將以文檔對象模型(document object model,DOM)樹存在內存中,至此解析過程完成。具體流程見圖4。

圖4 解析HL7V3消息流程
HL7V3消息解析算法中的關鍵代碼實現如下:(1)創建元數據類型下載器:Message TypeLoader<Message Type>mtl=org.hl7.meta.mif.Message Type Loader Adapter.getInstance();(2)構建元數據對象和關系映射:Message Type message Type=mtl.load Message Type(messagetypestr);(3)通過消息句柄把RIM對象圖描述出來:rim=Message Content Handler.parse Message(ac,in,messageType);(4)利用 Rim Graph XML Speaker類對象構建文檔對象模型樹:Source source=new SAX Source(speaker,new Rim Graph XML Speaker.Input Source((Rim Object)graph,message Type.get Root Class()))。
實施過程中,由于有各種不同的類對象(RIM類、數據類型、通用數據元素類型),給編程帶來一定難度,解決方法是通過設計專門的處理程序進行處理。在消息解析時,可以動態轉到專門的處理程序執行。這個功能由DynamicContentHandler類實現。專門的消息處理程序包含在每個RIM和數據類型類里面。需要調用時中間處理程序掛起轉入專門的處理程序執行。中間處理程序包括TreeContentHandler、DataTypeContentHandler和SimpleTypeContentHandler等。當SAX事件觸發時,由MessageElementContentHandler進行處理,它動態地將現行程序臨時掛起,然后調用專門的消息處理程序,實例化的對象放入結果棧中,最終返回原程序并放入到動態增長的RIM對象圖中。一旦整個消息完全解析后,構造出的結果對象圖以RIM對象圖的形式完全呈現在內存中。HL7V3消息的構建是解析的逆過程,不再贅述。
2.4 對HL7V3消息的有效性進行驗證 根據MIF文件定義的實體之間的關聯和限制對消息進行解析,當要解析的HL7V3消息不符合定義時就會報出相應的錯誤。而實現技術規范(implementation technology specification,ITS)定義了用于消息交換的RIM對象,內容覆蓋ISO第5、6層。ITS主要的功能包括怎么定義消息,并把數據轉換成能在線路上傳輸的XML實例和在接收系統線路中獲取數據。根據ITS規范HL7V3消息,使消息按照正確的格式進行轉換和接收。以上兩方面確保了對消息的有效性驗證。
通過對HL7V3標準進行研究,闡述了基于MIF文件的HL7V3消息解析器,并通過大量的HL7V3消息進行測試,基本達到應用目的,可以應用在支持HL7V3的醫療信息系統及相關產品中。由于HL7V3標準在不斷完善中,MIF文件也隨之更新,在測試中存在后向兼容問題,在今后的研究中給出相應的技術解決方案。
自2001年7月,中國以HL7CHINA的名義正式成為HL7的國際會員后,力求制定HL7FOR CHINA的標準。目前我國已全面開展健康信息及其相關信息與健康信息和通信技術的標準化工作,以使相關的健康信息系統、設施和技術手段相互兼容和互操作,減少重復性工作,避免不協調、不配套等現象的發展[15]。由于我國目前在這方面的研究起步較晚,而HL7的版本已經由HL7V2.X版演變出新的HL7V3版本,在HL7V3標準具有HL7V2.X版本不具備的優勢下,可以以最小的成本直接引入V3版本,因此,研究HL7V3標準和使其本地化就顯得尤為重要。深入研究HL7V3標準,各級醫院不僅可以了解和學習HL7的核心開發技術,同時也能借鑒國外先進的現代醫療信息管理理論,從而為縮短我國醫院在該項技術上與發達國家的差距,加快我國醫療信息系統標準化步伐,實現與國際醫療信息接軌和保護我國醫療相關行業的經濟利益。
[1]谷宇.HL7消息解析及傳輸技術的研究與實現[D].包頭:內蒙古科技大學,2010.
[2]賈偉濤.基于HL7V3消息交換原理的研究與應用[D].包頭:內蒙古科技大學,2012.
[3]王建文,袁偉.基于 HL7標準的 HIS網關的研究[J].計算機工程與設計,2008,29(21):5583-5585.
[4]Smith CU,LladóCM,Puigjaner R.Model interchange format specifications for experiments,output and results[J].Computer J,2011,54(5):674-690.
[5]楊宏橋,劉希華,卜海兵,等.IHE標準下的數字化醫院集成及實現機制研究[J].計算機工程與應用,2009,45(21):222-225.
[6]張玉海,徐勇勇,劉丹紅.國家衛生信息概念數據模型與HL7RIM的映射研究[J].第四軍醫大學學報,2006,27(11):999-1001.
[7]汪鵬,李剛榮,周來新,等.建廣義數字化醫院走區域醫療信息化之路[J].重慶醫學,2009,38(13):1599-1607.
[8]馮格,宋錦璘,明志強,等.基于HL7標準的XML語言在口腔正畸電子病歷中的運用[J].重慶醫學,2008,37(5):453-455.
[9]丁敏,宋余慶,王春紅.基于HL7V3消息的醫學圖像信息交換的研究[J].計算機工程與設計,2009,30(17):3986-3988.
[10]徐宏發,王衛平,鄭建煌,等.基于 HL7和 Web Services的區域醫療機構間信息交換平臺研究[J].計算機應用與軟件,2007,24(3):88-90.
[11]黎亮,張君雁.醫療數據整合模式的研究[J].中國生物醫學工程學報,2010,29(2):207-211.
[12]馬雪英.采用HL7設計管理信息系統中的通信模塊[J].計算機應用,2003,23(1):76-78.
[13]王海舜,王宏宇.基于HL7的HIS信息交換解決方案探討[J].中國醫療器械雜志,2008,32(2):111-113.
[14]張蘭華,薛紹偉,李健,等.一種區域醫療信息一體化模型研究[J].計算機應用研究,2011,28(5):1777-1779.
[15]蘭圣偉,李立宏.HL7V3開發體系和我國醫療信息標準化建設[J].中國醫院管理,2006,26(4):40-42.