掌桥专利:专业的专利平台
掌桥专利
首页

一种基于状态机的HL7消息解析方法

文献发布时间:2023-06-19 12:16:29


一种基于状态机的HL7消息解析方法

技术领域

本发明涉及一种信息处理方法,特别是涉及一种基于状态机的HL7消息解析方法。

背景技术

HL7(Health Level 7)为标准化的卫生信息传输协议,是医疗领域不同应用之间电子传输的协议。现有常用的HL7消息解析方法有3种:字符串解析法、二叉树解析法和正则表达式解析法。开源工具Mirth Connect使用的是字符串解析法,通过字符串分割,先分割段分隔符提取段数据,然后分割域分隔符提取域数据,再通过分割组件分隔符提取组件,最后通过分割子组件分隔符提取子组件数据。需要对数据进行多次扫描和拷贝。二叉树解析法是将消息构建为一棵二叉树,右孩子为同层级,左孩子为下一层级。该方法需要对数据进行多分存储,消耗空间多,并结构复杂。正则表达式解析法分为按需解析和全解析法。按需解析是根据特定的正则表达式提取特定的数据内容,有局限性;全解析需要按照段分割正则表达式、域分割正则表达式、重复域分割正则表达式、组件分割正则表达式和子组件分割正则表达式等一次进行处理,其中需要对数据进行多次扫描。

综上,现有技术对HL7消息的解析存在诸多问题急需解决。

发明内容

本发明针对现有技术中对HL7消息的解析需要多次扫描拷贝、消耗空间多、结构复杂、存在局限性等技术问题,提供一种能够明显提高HL7消息解析速度的基于状态机的HL7消息解析方法。

为此,本发明的技术方案是,一种基于状态机的HL7消息解析方法,具体步骤为:

A.实现基于HL7消息格式的词法分析器;

B.构建HL7消息解析的状态转移图;

C.以词法分析器获得的词法单元作为输入,进行状态转移。

优选地,步骤A实现基于HL7消息格式的词法分析器,步骤如下:

Aa.读取输入流,词法分析器开始读取HL7开始标志的词法单元;

Ab.初始化默认域分隔符、重复分隔符、组件分隔符和子组件分隔符;

Ac.读取HL7开始标志之后,MSH消息段名称之后会跟随本消息所使用的域分隔符、重组分隔符、组件分隔符和子组件分隔符,重新设定本消息自定义的域分隔符、重复分隔符、组件分隔符和子组件分隔符;

Ad.读取每个字符,直到读取到消息终结词法单元,并将暂存的字符作为词法单元;

Ae.返回步骤Aa,循环以上步骤,直到完整地读取完全部数据。

优选地,步骤Ad中将暂存的字符作为词法单元,具体为:

(Ad1)读取到段分隔符、域分隔符、重复分隔符、组件分隔符和子组件分隔符时,直接返回该分隔符;

(Ad2)读取到消息开始标志,返回开始词法单元;

(Ad3)读取到数据字段,返回数据字段的词法单元;

(Ad4)读取到消息结束标志,返回结束词法单元。

优选地,步骤B中构建HL7消息解析的状态转移图,步骤如下:

Ba.根据HL7中的字段、组件、子组件等建立不同的解析处理方法;

Bb.根据段分隔符、域分隔符、重复分隔符、组件分隔符和子组件分隔符之间的前后顺序确定数据单元为字段、组件、子组件;

Bc.读取到MSH、FHS或者BHS之后,根据读取的词法单元进行域分隔符、重复分隔符、组件分隔符和子组件分隔符的设定。

优选地,步骤Bb中,确定数据单元为字段、组件、子组件的具体方法为:

(Bb1)前一分隔符为域分隔符,下一分隔符为段分隔符,则数据单元为字段;前一分隔符为域分隔符,下一分隔符为域分隔符,则数据单元为字段;

(Bb2)前一分隔符为域分隔符,下一分隔符为组件分隔符,则数据单元为组件;前一分隔符为域分隔符,下一分隔符为子组件分隔符,则数据单元为子组件;前一分隔符为组件分隔符,下一分隔符为段分隔符,则数据单元为组件;前一分隔符为组件分隔符,下一分隔符为域分隔符,则数据单元为组件;前一分隔符为组件分隔符,下一分隔符为组件分隔符,则数据单元为组件;

(Bb3)前一分隔符为组件分隔符,下一分隔符为子组件分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为段分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为域分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为组件分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为子组件分隔符,则数据单元为子组件。

优选地,步骤C中,以词法分析器获得的词法单元作为输入,进行状态转移,具体方法为:

Ca.从词法分析器获取词法单元,根据词法单元进行状态转移;

Cb.读取MSH词法单元之后,设定词法解析的域分隔符、组件分隔符、子组件分隔符;

Cc.读取到段分隔符,将当前读取到的段数据进行处理;

Cd.读取消息段名,并对消息段名进行验证;

Ce.读取到终结词法单元,进入到终结状态,完成数据解析。

优选地,步骤Cd中对消息段名进行验证,具体为:

(Cd1)当读取到MSH、FHS或者BHS消息段名时,要对后续的域分隔符、重复分隔符、组件分隔符和子组件分隔符进行读取并设定;

(Cd2)验证消息段名是否合法。

本发明有益效果是,

(1)首先通过词法分析将数据输入流转化为词法单元,然后经过词法分析器根据读取的词法单元进行状态转移,一直到最终的输出状态,可以显著提高HL7消息的解析速度;

(2)经过实验测试,本方法的解析速度在hl7apy库的4倍以上。

附图说明

图1是本发明实施例的整体功能框架图;

图2是本发明实施例的状态转移图。

具体实施方式

下面结合实施例对本发明做进一步描述。

如图1所示,一种基于状态机的HL7消息解析方法,具体步骤为:

A.实现基于HL7消息格式的词法分析器;

B.构建HL7消息解析的状态转移图;

C.以词法分析器获得的词法单元作为输入,进行状态转移。

步骤A实现基于HL7消息格式的词法分析器,步骤如下:

Aa.读取输入流,词法分析器开始读取HL7开始标志的词法单元;

Ab.初始化默认域分隔符、重复分隔符、组件分隔符和子组件分隔符;

Ac.读取HL7开始标志之后,MSH消息段名称之后会跟随本消息所使用的域分隔符、重组分隔符、组件分隔符和子组件分隔符等,即不使用默认分隔符时,重新设定本消息自定义的域分隔符、重复分隔符、组件分隔符和子组件分隔符;

Ad.读取每个字符,直到读取到消息终结词法单元,并将暂存的字符作为词法单元;

Ae.返回步骤Aa,循环以上步骤,直到完整地读取完全部数据。

步骤Ad中将暂存的字符作为词法单元,具体为:

(Ad1)读取到段分隔符、域分隔符、重复分隔符、组件分隔符和子组件分隔符时,直接返回该分隔符;

(Ad2)读取到消息开始标志,返回开始词法单元;

(Ad3)读取到数据字段,返回数据字段的词法单元;

(Ad4)读取到消息结束标志,返回结束词法单元。

步骤B中构建HL7消息解析的状态转移图,步骤如下:

Ba.根据HL7中的字段、组件、子组件等建立不同的解析处理方法;

Bb.根据段分隔符、域分隔符、重复分隔符、组件分隔符和子组件分隔符之间的前后顺序确定数据单元为字段、组件、子组件;

Bc.读取到MSH、FHS或者BHS之后,根据读取的词法单元进行域分隔符、重复分隔符、组件分隔符和子组件分隔符的设定。

其中,步骤Bb中,确定数据单元为字段、组件、子组件的具体方法为:

(Bb1)前一分隔符为域分隔符,下一分隔符为段分隔符,则数据单元为字段;前一分隔符为域分隔符,下一分隔符为域分隔符,则数据单元为字段;

(Bb2)前一分隔符为域分隔符,下一分隔符为组件分隔符,则数据单元为组件;前一分隔符为域分隔符,下一分隔符为子组件分隔符,则数据单元为子组件;前一分隔符为组件分隔符,下一分隔符为段分隔符,则数据单元为组件;前一分隔符为组件分隔符,下一分隔符为域分隔符,则数据单元为组件;前一分隔符为组件分隔符,下一分隔符为组件分隔符,则数据单元为组件;

(Bb3)前一分隔符为组件分隔符,下一分隔符为子组件分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为段分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为域分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为组件分隔符,则数据单元为子组件;前一分隔符为子组件分隔符,下一分隔符为子组件分隔符,则数据单元为子组件。

步骤C中,以词法分析器获得的词法单元作为输入,进行状态转移,具体方法为:

Ca.从词法分析器获取词法单元,根据词法单元进行状态转移;

Cb.读取MSH词法单元之后,设定词法解析的域分隔符、组件分隔符、子组件分隔符;

Cc.读取到段分隔符,将当前读取到的段数据进行处理;

Cd.读取消息段名,并对消息段名进行验证;

Ce.读取到终结词法单元,进入到终结状态,完成数据解析。

其中,步骤Cd中对消息段名进行验证,具体为:

(Cd1)当读取到MSH、FHS或者BHS消息段名时,要对后续的域分隔符、重复分隔符、组件分隔符和子组件分隔符进行读取并设定;

(Cd2)验证消息段名是否合法。

本实施例以以读取一个HL7文件为例进行说明,具体为:

步骤一:读取文件输入流,并通过词法解析器将文件输入流进行处理,初始化段分隔符、域分隔符、重复分隔符、组件分隔符和子组件分隔符等;

步骤二:读取HL7消息地开始词法单元,并根据解析情况设定域分隔符、重复分隔符、组件分隔符和子组件分隔符等;

步骤三:开始读取词法单元并进行状态转移,状态转移图如图2所示;

步骤四:读取到段分隔符后,需要对下一个词法单元进行消息段名地验证,验证消息段名词法单元是否符合消息段名命名的规则,同时针对上一个消息段进行处理;

步骤五:读取到结束词法单元,结束解析。

本发明首先通过词法分析将数据输入流转化为词法单元,然后经过词法分析器根据读取的词法单元进行状态转移,一直到最终的输出状态,可以显著提高HL7消息的解析速度。

惟以上所述者,仅为本发明的具体实施例而已,当不能以此限定本发明实施的范围,故其等同组件的置换,或依本发明专利保护范围所作的等同变化与修改,皆应仍属本发明权利要求书涵盖之范畴。

相关技术
  • 一种基于状态机的HL7消息解析方法
  • 一种基于数据库查询的HL7消息处理方法及系统
技术分类

06120113229059