基于HL7的医疗数据交换研究与实现

2016-09-26 07:20吴寿刚王晓华
计算机应用与软件 2016年3期
关键词:中间件文档消息

吴寿刚 王晓华 杨 敏

1(遵义医学院附属医院 贵州 遵义 563003)2(福泉市人力资源和社会保障局 贵州 福泉 556000)3(贵州大学计算机科学与信息学院 贵州 贵阳 550025)



基于HL7的医疗数据交换研究与实现

吴寿刚1,2王晓华1*杨敏3

1(遵义医学院附属医院贵州 遵义 563003)2(福泉市人力资源和社会保障局贵州 福泉 556000)3(贵州大学计算机科学与信息学院贵州 贵阳 550025)

为解决医疗信息系统间的“异构”问题,实现互联互通,引入HL7(HealthLevelSeven)医疗电子数据交换标准,实现医疗系统之间的集成。首先阐述XML在HL7标准的应用,然后将其应用于中间件设计,并采用C#语言编程实现基于XML格式的HL7消息构建、解析和传输,实现医学信息规范化表示和医学电子数据交换。运行结果表明,这是一种有效的系统集成解决方案。

医疗信息系统信息交换与共享HL7

0 引 言

随着医疗卫生行业信息化不断深入,医院内各种信息系统增多,系统间能否实现数据交换和信息共享是医疗信息化的关键。目前,多数医院在住院处、药剂科、临床科室、实验室、放射科、财务处等部门都安装了不同的信息处理系统。这些医疗系统一般由不同的厂商提供或医院内自行研制,每一种产品都有特定的信息格式,导致系统间不能互联互通,形成一个个“信息孤岛”。医疗系统之间信息共享程度低,数据不能及时交换,主要原因是标准不统一造成。

HL7是美国卫生信息传输标准,也是一种医疗电子信息交换协议,它的目的是开发和研制医疗数据信息传输协议及标准、优化临床及其管理程序、降低系统互连的成本、提高卫生信息系统之间数据交换和信息共享的程度[1],是目前解决医疗数据交换和信息系统集成比较热门的一种方案。

国外较早对医疗系统集成进行了研究,目前国际上较流行的集成方案有[2,3,4]:最直接方案是通过数据库互访问方式,每个应用系统所对应的数据表都被定义成相同的数据结构、相同的字段,致使多个应用系统间可以通过简单的SQL语言就可以调用数据,实现数据共享,或者通过中心数据库的集成方式,定义中间接口的数据库交换模式,达到各系统之间能够实现数据交换;第二种是采用统一的信息标准,如用HL7和DICOM标准等,在医疗信息系统中引入HL7标准,实现医院内部异构系统间信息的交换;第三种是通过引入独立的标准消息中间件作为集成平台,各信息系统通过中间件实现集成,中间件属于一种系统软件,处于操作系统和应用软件之间,协同完成系统间通信和信息交换工作。

以上三种集成方案在实现医疗信息系统集成中,各有优劣。共享数据库方案,方便应用各个终端直接通过数据库管理系统实现数据互相调用,容易实现,成本低,但这种直接对数据库进行操作,给系统带来很多安全性问题,系统间耦合度大,缺乏通用性和独立性。采用信息标准(DICOM、HL7等)开发的系统,数据结构、数据表示方式都比较统一,可以实现系统间实时的交换,自动将数据传送到对方系统,但目前HL7标准具有很大的灵活性,在中国应用还不是很广泛,还不能给应用系统提供即插即用的集成。利用中间件构建集成平台实施医疗系统集成,可以降低集成的复杂度,提供数据纠错功能以及屏蔽各个系统间开发时的不同,同时提高了医疗信息系统的使用率,便于维护,但这种集成方案的缺点是集成平台需要借助高度专用化软件资源,适合在应用系统多个的情况下使用。

国内医疗信息系统建设还没有遵循统一的信息交换标准,系统间的集成主要是采用定制接口方式实现,须给每一个应用端开发标准接口[5]。这种方式当系统增加时,需要开发出更多的集成接口,导致开发难度大,集成成本高,不适合推广使用。部分采用共享数据库的方式,系统的安全性低、不易扩展。为了克服目前国内医疗系统之间集成方面的不足,本文采用DTD定义XML格式的HL7消息文档并用DOM解析出该文档的基本内容,基于HL7标准和中间件工作原理,设计出HL7中间件,采用C#编程实现消息构建、解析和传输模块,为应用HL7标准实现医疗信息系统集成、医疗数据交换和共享提供规范、有效的解决方案。

1 XML在HL7标准的应用及其相关技术

HL7分为两种应用体系[6]。第一种是基于HL7v2.x,另一种是HL7v3.0。HL7组织从HL7v2.3.1后便开始引入XML语言作为HL7消息的辅助编码标准[7],编写HL7_DTD文档,用DTD文档定义HL7消息的段、字段、组分和数据结构。该文档是一个ASCII编写的文本文件,后缀名为.dtd,用以验证XML格式的HL7消息是否有效性,是否符合规范,文档标签和元素使用是否正确[8]。因此,当应用系统基本信息构建成HL7消息的XML文档时,只要在生成的文档前面声明使用HL7_DTD文档,就可以按照该文档的定义的消息元素节点及其属性,把相关信息的数据类型逐个加入到对应的节点上,最终构建成完整的XML格式HL7消息,以XML文档形式保存。

DOM解析思想与XML文档结构都是树型的表示方式, 它提供了对XML文档完整的读写访问操作类,可以方便地访问和遍历整个文档节点,是一种专门解析XML文档的技术[9]。因此,本文采用DOM文档模型解析XML格式的HL7的基本信息。

2 HL7中间件的设计

基于HL7在医疗系统集成主要用两种方法[10]:一种是HL7Ready方式,另一种是HL7Engine方式。前者从一开始建设医疗信息系统时就完全按照HL7的标准来设计系统的体系架构、数据对象、数据结构。后者是对现有的系统进行改造,通过提供符合HL7协议的API接口,如HL7引擎等,可以屏蔽系统间的差异,实现数据交换。中间件能够将异构系统集成起来并开发新的应用系统,位于客户机/服务器的操作系统之上,管理计算机资源和网络通信[11]。它的工作是向各种应用软件提供服务,使不同的应用进程能在异构平台之间,通过网络互相通信,为应用程序提供连接和协调工作,与采用HL7Engine方式开发出API接口工作原理基本相同。

目前,国内多数医院已经建好了功能完善的医疗信息系统,如果完全淘汰现有的信息系统并按照HL7Ready方式来开发新的系统,将会造成信息系统的浪费,短期内也难以投入使用,选择HL7Engine作为集成无疑是最好的。因此,基于HL7标准和中间件工作原理设计HL7中间件,是对HL7Engine方式下的改进,在此基础上开发出成品软件,投入到医疗信息系统集成中,意义重大。

2.1HL7的中间件数据交换原理

HL7中间件是基于HL7标准的消息传输协议结合中间件工作原理设计出的中间软件。该软件的数据交换原理是将应用系统发送的信息构造成HL7格式的消息,并将构造后的数据发送到另一个应用系统。在接收系统安装HL7中间件便可以接收发送来的HL7消息,并验证信息否符合HL7消息格式,将验证结果回复给发送系统,同时将验证通过的HL7消息解析成该系统能够识别的数据。因此,基于HL7的中间件数据交换原理如图1所示。系统A和系统B可以处在不同软硬件环境、不同的操作系统,系统间可在不同的体系结构、数据结构及数据库管理软件下开发的。HL7中间软件的主要目的是实现异构系统之间数据的交换,关键是解决HL7消息的构建、解析及其传输。

图1 基于HL7中间件数据传输图

2.2HL7中间件的主要模块

基于HL7中间件的数据交换原理,将HL7中间件分为三个功能模块:第一个是HL7消息构建模块。该模块的功能是每一个发送的应用系统从自己数据库中提取数据,发到HL7中间件,通过该模块将系统信息构建成HL7格式的消息;第二个是HL7消息传输模块。能够实现HL7消息从一个应用系统发送到另一个应用系统。第三个是HL7消息解析模块。具备验证应用系统发送的HL7消息合法性、将其解析成接收系统的应用数据,并保存到该系统的数据库里。其总体的实现结构框图如图2所示。

图2 HL7中间件结构图

3 HL7消息构建、解析和传输的实现

HL7消息包括传统的HL7消息和基于XML格式HL7消息[12]。对于传统HL7消息的构建和解析,我们可以根据HL7消息包含的段、字段、成分、子成分分别编写特定功能的函数。当应用系统将基本的信息从数据库中提取出来,并将信息传递到构建模块时,将会调用事先编写好的特定功能函数,然后根据传递信息的不同类型,生成HL7消息构成中的各个部分,最后将各个部分组合成完整的HL7消息输出,而HL7消息的解析便是消息构建的逆过程。传统的HL7消息构建、解析和传输的实现不是本文研究的重点,本文重点探讨基于XML格式的HL7消息构建和解析。

3.1XML格式的HL7消息构建

目前,HL7组织已提供了HL7消息的文档定义DTD(hl7_v231.dtd)。作者在构建XML格式的HL7消息时,参考hl7_v231.dtd文档,编写HL72.4版本的HL7_DTD,将其命名为HL7v2.4.dtd。根据v2.4消息结构分别给所有的消息编写message.dtd文档、所有消息段编写segment.dtd、所有字段的编写field.dtd和所有数据类型定义编写datatype.dtd文档,使它们都符合HL7v2.4的消息编码方式,将构造的XML文档的前部声明采用修改后的HL7v2.4.dtd。当应用系统将基本的信息从数据库中提取出来,并将信息传递到构建模块时,就会按照事先声明的DTD,根据传递信息的不同类型来生成HL7的消息、消息段、字段、成分,建立成HL7消息的XML文档,最后用输出函数将其输出。HL7消息构建过程如图3所示。具体步骤如下:

Step1当医护人员在医院信息系统中录入病人就诊信息或者医生给病人开处方时,系统将录入的基本信息自动保存到医院信息系统数据库中。

Step2通过ODBC访问医院信息系统数据库,查询病人基本信息表或处方信息表,将表中的基本信息保存到一个查询结果集Resultset对象中。

Step3用DOM作为解析接口,采用C#语言结合DOM提供的操作类,将基本信息读取出来,以树节点形式保存。

Step4根据HL7v2.4.dtd文档类型定义,将DOM对象模型节点的信息保存到对应消息段、字段、成分中,以XML文档形式保存,最终实现XML格式的HL7消息文档构建。

图3 HL7消息构建过程图

XML格式的HL7消息构建过程实质上就是将病人信息或者医嘱信息从医院信息管理系统数据库中取出并生成XML文件的过程。

3.2XML格式的HL7消息解析

目前对XML文档的解析主要有两种处理方式,一种是DOM,基于树的思想,一种是SAX,基于事件的思想。DOM解析器在解析中所生成的模型都是节点树的形式存在,XML文档中的每个节点对应着该模型中一个对象,在整个解析过程中都要遍历和处理XML文档中所需的节点信息。这种解析方法采用树型结构的思想,与XML文档的层次结构相符。因此,我们采用DOM作为XML格式的HL7 消息文档解析的编程接口,结合C#编程语言,实现XML格式HL7消息解析。使用DOM接口解析XML格式的HL7 消息的解析基本过程如图4所示。

图4 HL7 消息的解析过程图

首先用XML解析器检查文档是否符合XML格式,其次通过DOM加载XML文档并创建树形结构视图,最后应用程序通过DOM标准接口遍历和处理XML文档中的所需的节点信息,将信息保存到结果集中。采用DOM技术遍历和处理整个XML格式的HL7消息流程,可以用图5所示。

图5 DOM遍历消息流程图

3.3HL7消息传输

目前,比较热门的数据传输协议有:面向连接和无连接服务,即TCP和UDP。TCP协议可以提供的是基于可靠连接的数据流传输服务,在进行网络资源传输中,发送的数据没有差错、并且没有重复的发送,接收端是按照发送端数据发送的先后顺序进行接收,发送的数据没有长度的限制[13]。UDP是面向无连接的数据传输服务。计算机采用这种协议给网络发送资源中,传输数据包容易丢失、可能重复发送数据包,接收端收到发送端发来的数据顺序是混乱的,是一种不可靠的数据传输协议。HL7标准是一种文本信息传输协议,规定消息是信息系统间数据交换的基本单位,以字符串形式进行传输。它被定义在OSI模型的应用层上,但是没有遵循第七层的基本原则定义数据元素,在传输层上采用哪种协议也没有明确规定。Socket是网络编程中经常用到的技术,是通信的基石。应用程序之间可以通过它来直接或间接进行的网络数据的发送和接收。Socket中提供流式套接字进行数据传输,是一种面向可靠的数据传输服务[14],即是一种基于TCP协议的数据流传输。

医疗信息系统之间进行数据交换时,需要保证信息完整性、完全性。因此,我们可以选择TCP协议作为网络传输层的协议,以Socket技术实现HL7消息的发送和接收。在实践中选择.NET作为开发的架构平台,采用C#语言编程开发出HL7客户端(HL7Client)和HL7服务器端(HL7Server),用来验证HL7消息的发送和接收。而应用端的Socket接口设计是实现消息传输的重点。

HL7客户端的Socket接口工作过程及设计的步骤如下:

Step1HL7客户端的Socket的首要工作是连接到HL7服务器上。我们可以在Socket类的Bind()方法中设置HL7服务器的指定的IP地址或主机名和指定的端口号的绑定工作。

Step2HL7客户端会向HL7服务器发送连接请求,并等待服务器的回馈请求信息。可以调用Socket类中Connect()方法来与HL7服务器建立一个TCP连接,调用该类中Listen()客户端的socket处于被服务器监听模式,并为该socket建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。调用accept()方法让服务器接收客户的连接请求。最后连接信息发到客户端。

Step3当HL7客户端和HL7服务器端连接成功后,并可以进行HL7消息的发送和接收。在客户端调用Socket类中的Send()方法,如果返回整数值说明给已经成功将HL7消息发到了服务器端。在服务器端调用该类的Rec()方法,接收客户端发来的消息。

Step4数据处理完毕后,关闭自身的Socket连接。用Socket对象的Close()方法来关闭Socket。

HL7服务器端的Socket接口的工作流程如下:

Step1启动HL7服务器端的Socket,开始侦听整个HL7客户端的连接请求。

Step2当检测到HL7客户端的发来的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。

Step3接收HL7服务器端发来的HL7消息。

Step4通信完成后,关闭HL7服务器与HL7客户端的Socket连接。

以上的每个步骤调用的Socket类中的方法与HL7客户端的类似,在此不再赘述。

4 HIS与LIS之间集成实例

HIS与LIS之间集成主要是完成在医院信息系统录入患者到检验科检查信息后,将病人自然信息、检查安排日期和检查项目等信息传送到LIS,或者待病人检查完成后,检验信息系统将检验日期、诊断报告结果和病人基本信息传送回HIS,为医生提供多线索的查询、调阅和显示功能。

通过给HIS和LIS分别开发HL7中间件模块,主要有客户端(HL7Client)和服务器端(HL7Server)组成,负责在HIS和LIS端完成HL7消息的构建、传送和解析。具体的集成流程如下:

Step1医生在HIS系统录入完病人检查信息后,把病人信息、检查日期、检查项目等信息发送到HL7中间件。

Step2HL7中间件对数据处理后,将信息转化为HL7消息,并传送到LIS,最后将HL7消息转化为LIS能够识别的信息。

Step3LIS工作站通过更新检查状态,如预约,取消预约,到检,取消到检等信息通过HL7中间件把确认信息回传给HIS。

Step4病人在检查科检查完项目后,医生在LIS报告工作站录入诊断报告等信息,通过HL7中间件把报告消息传回给HIS。

例如,LIS向HIS发送一个病人在检验科的检查结果。检查信息发送可以描述为:检验结果ORU事件,病人于2014年01月01日10时47分由LIS系统将检验结果发送到HIS系统;HIS在两分钟中就接收到了LIS发来的消息;病人基本情况:李四,男性,出生年月:1989年02月20日,地址:贵州省贵阳市南明区遵义路25号。在LIS中点击发送该信息时,就会触发LIS中的HL7Client构建模块,将发送的信息构造成HL7消息代码,并解析出各个节点信息,用数组来保存,点击Send按钮,就可以将所有的信息发送到HIS的HL7Server模块。如图6所示。

图6 HL7消息构建效果图

在HIS中的HL7Server模块中点击接收按钮,就可以收到来自LIS发来的各个节点信息,点击生成HL7按钮,便可生成完整的HL7消息,将其保存到HIS的数据库中,如图7所示。

图7 HL7消息接收效果图

通过HIS与LIS的集成实例,构造了在统一标准下的不同子系统之间进行集成中间件,为进一步扩大集成范围、实现异构系统互操作提供了通用方法。

5 结 语

目标是提供一种能够实现医疗信息系统间互联互通的有效方案,进一步实现医院与医院、医院与保险机构、药品器械供应商、信息产品供应商、银行、行政管理部门之间信息沟通。针对医疗信息系统间存在的异构问题,将HL7标准应用于医疗系统集成是解决数据交换和信息共享的方案之一。重点研究了HL7中间件设计,探究了基于XML格式的HL7消息构建、解析、传输模块。在此基础上,选择.NET作为开发的架构平台,采用C#语言,结合数据库技术、DTD技术、DOM技术,编程实现了消息构建、解析和传输模块主要模块,并在医院信息系统和检验信息系统之间进行集成。

HL7 标准采用XML编码方式和面向对象开发技术,是今后信息系统集成的主要标准。开发基于HL7的中间件,有利于实现医疗数据交换和信息共享。

[1] 汪永琳,丁一. 基于HL7的医疗数据集成及系统设计[J]. 通信技术,2009,42(12):176-178.

[2] 赵晨晖. 医疗信息系统集成问题研究及实践[D].浙江大学,2010.

[3] 胡晓文. 各种数据库访问方法存在的缺点与新型的通用Web数据库访问模型[J]. 硅谷,2012(2):190.

[4] 王佳琳.JMS消息中间件安全协议设计与实现[D].浙江大学,2006.

[5]MirandaM,SalazarM,PortelaF,etal.Multi-agentsystemsforhl7interoperabilityservices[J].ProcediaTechnology,2012,11(5): 725-733.

[6] 程彦博.HL7标准践行渐近[N]. 中国计算机报,2012-11-19.

[7] 谷宇.HL7消息解析及传输技术的研究与实现[D].内蒙古科技大学,2010.

[8] 王艳蓉,潘金贵.XMLDTD到XMLSchema的转换工具及实现[J]. 计算机应用与软件,2002,19(9):9-11.

[9] 陈小毛,汤文兵.Java解析XML的方法比较研究[J].中国新技术新产品,2009(15):25.

[10]EanWenhuang,ShengHsiunghsiao,DerMingliou.Designandimplementationofaweb-basedHL7messagegenerationandvalidationsystem[J].Int.J.Med.Inform.,2003,70(1):49-58.

[11] 彭福红,岳喜尚. 中间件在软件开发中的应[J]. 机械管理开发,2007(5):80-81.

[12] 俞汝龙.HL7组织与HL7标准简介[J].中国数字医学,2007(7):41-43.

[13] 符彦惟. 计算机网络基础[M]. 清华大学出版社,2006.

[14] 李巧玲. 基于C#-Socket的网络通信程序设计[J]. 福建电脑,2009(4):135-136.

RESEARCHANDIMPLEMENTATIONOFMEDICALDATAEXCHANGEBASEDONHL7

WuShougang1,2WangXiaohua1*YangMin3

1(Zunyi Medical College,Zunyi 563003,Guizhou,China)2(Fuquan Human Resources and Social Security Bureau,Fuquan 556000,Guizhou,China)3(School of Computer Science and Technology,Guizhou University,Guiyang 550025,Guizhou,China)

Inordertosolvetheheterogeneityproblembetweenmedicalinformationsystemsandtorealiseinterconnectivityandinteroperability,weintroducedtheHL7medicalelectronicdataexchangestandard,andimplementedtheintegrationbetweenmedicalsystems.First,weexpoundedtheapplicationofXMLinHL7standard,andthenappliedittothedesignofmiddleware,andadoptedC#languageprogrammingtorealisetheXMLformat-basedHL7messageconstruction,parsingandtransmission,thusachievedthenormalisedrepresentationofmedicalinformationandtheexchangeofmedicalelectronicdata.Runningresultshowedthatitwasaneffectivesolutionforsystemintegration.

MedicalinformationsystemInformationexchangeandsharingHL7

2014-09-29。贵州省科学技术基金项目(黔科合J字[2012]2356号)。吴寿刚,硕士生,主研领域:医疗信息系统集成。王晓华,教授。杨敏,硕士生。

TP399

ADOI:10.3969/j.issn.1000-386x.2016.03.022

猜你喜欢
中间件文档消息
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
一张图看5G消息
RFID中间件技术及其应用研究
基于Android 平台的OSGi 架构中间件的研究与应用
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
消息
消息
消息