一种基于状态机的HL7消息解析方法
文献发布时间:2023-06-19 12:16:29
技术领域
本发明涉及一种信息处理方法,特别是涉及一种基于状态机的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消息处理方法及系统