吕晓琪,贾伟涛,谷 宇,于 宁
(内蒙古科技大学信息工程学院,内蒙古包头 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.