我正在尝试使用 java 或 python 将 HL7 v2.x 消息转换为 FHIR JSON。但我无法找到任何解决方案。有什么办法可以做到这一点?
我发现 FHIR 能够转换为 JSON,但我不知道该怎么做。
关于 HL7 2.x
HL7 2.x 版本既不支持 XML 也不支持 JSON作为标准的一部分。
HL7 版本 2.5 及更早版本的版本 2 v2.xml XML 模式由 Sun Microsystems 提供。提供这些表示是为了方便,因为 XML 模式是描述 XML 表示的紧凑且特定的方式。然而,模式本身并不是本规范的规范部分。
hl7.org
正如您在上面看到的,“v2.xml XML 模式”不是规范的一部分。它们是额外的贡献。
本规范的目的是为 HL7 版本 2.3.1、2.4、2.5 和未来的 2.x 消息提供基于可扩展标记语言 XML 的编码规则,可在发送者和接收者都理解 XML 的环境中使用。v2.xml规范旨在充当v2.3.1、v.2.4 和 v2.5(以及 HL7 v2.x 标准的未来版本)的第二种规范编码。
hl7.org
以下是来自维基百科的引用:
HL7 v2.x 消息使用基于段(行)和单字符分隔符
wikipedia的非 XML 编码语法
关于 HL7 v3.x
HL7 v3.x 版本支持 XML 作为标准的一部分。
几种 XML 编码方法可以用作 HL7 V3 消息的消息传递语法。本文档代表 HL7 推荐的方法,描述了基本规则和原则。本规范所需的相应数据类型描述在数据类型 XML ITS 中进行了描述。
hl7.org
以下是“HL7 V3指南”的引用:
HL7 在抽象级别定义其消息。HL7 中的“7”代表 ISO 通信模型的应用级别——ISO 级别 7。这个级别强调消息的语义内容,而不是它们是如何表示的,也不是这些表示是如何被编码以进行传输的。
HL7 在抽象级别定义其消息。HL7 中的“7”代表 ISO 通信模型的应用级别——ISO 级别 7。这个级别强调消息的语义内容,而不是它们是如何表示的,也不是这些表示是如何被编码以进行传输的。
HL7 版本 2 抽象消息模型具有段和字段的概念。它定义了一种特定的编码方案来表示抽象消息的实例——所谓的“垂直条编码”。来自 Health 域(语义级别 7)的信息在版本 2 中表示为段和字段,并表示为带有大量竖线的 ASCII 字符。与这种方法一致,V2 的新 XML 编码大多是对竖线编码的直接替代
第 3 版抽象消息模型基于 RIM。HL7 版本 3 消息可以被认为是 RIM 对象图从发送者到接收者的通信。ITS 可以通过对对象、属性和数据类型进行适当的表示来最好地处理表示这些消息。
hl7.ihelse.net
以下是来自维基百科的引用:
HL7 v3 消息基于 XML 编码语法
wikipedia
您可以在此处阅读有关兼容性的更多信息。
它们都不支持将 JSON 作为标准的一部分。
因此,从 HL7 到 XML 或 HL7 到 JSON 的转换是不符合标准的;需要自己处理。
关于 FHIR(快速医疗保健互操作性资源)
FHIR 是由 HL7 发布的医疗保健数据交换标准。在此处
查看 HL7 和 FHIR 之间的关系。
作为标准的一部分, FHIR支持XML和JSON格式。请参阅这些链接以获取更多详细信息。
将 v2 转换为 FHIR:
大致有两种方法可以进行这种转换:
- 创建反映 v2 消息内容的 FHIR 消息包,旨在作为等效表示,其行为方式与 v2 消息相同
- 使用 v2 消息的内容来更新 FHIR 服务器——可能提取 Encounter 资源或创建一个 Bundle,该 Bundle 旨在充当针对 FHIR 服务器的“事务”包。我认为这将是一个更常见的用例。
有关转换的详细信息,请阅读该博客。社区正在努力转换;希望开箱即用的解决方案很快就会可用。
v2 和 FHIR 之间的转换是社区正在努力的事情——这里有一个聊天流:https ://chat.fhir.org/#narrow/stream/179188-v2-to.20FHIR ,您可以在其中参与。两个标准之间的映射将需要一些工作来定义,并且在实现中会有差异,但该项目的目标是定义一个“基础”映射作为起点。v2 和 FHIR 之间的关系相当密切,但还有很多问题需要解决……</p>
没有单一的方法可以实际执行转换——这取决于您必须掌握的技术。例如,在这篇文章中,我在 NodeRED 中使用了简单的 javascript——尽管只是作为概念证明。我想大多数集成引擎供应商都会在这个领域提供产品。
评论
映射详细信息在HL7 站点上进行了说明。
以下是一些工具:
https://github.com/rimiti/hl7-object-parser#hl7-object-parser(HL7 v2.x 转 JSON)
https://github.com/nezt/hl72xml#hl72xml(HL7 V2.x 转 XML)
https://github.com/KevinMayfield/ITKHL7v2-FHIR
Mirth 提供了将 HL7 转换为 XML/JSON 的功能。
请参阅@Bryan 的其他答案。
很少有样品可以在这里和这里找到。
这是一个建议:
// Modify the message variable below to pre process data
message = SerializerFactory.getSerializer('HL7V2').toXML(message);
return message;
在 Mirth 中,您可以在源转换器中使用以下代码
var jsonString = XmlUtil.toJson(msg)
var data = JSON.parse(data)
您可以使用Apache Camel在 Java 中将 HL7 转换为 FHIR JSON 。Camel 支持两种格式:
确切的实现取决于您如何接收和发送 HL7 和 FHIR;但从广义上讲,您将编写一个Camel 路由,该路由使用 HL7 数据格式组件从 HL7解组,然后通过使用自定义类将源字段映射到目标字段将数据转换为目标 FHIR Java 对象(您需要编写这个,但是请参阅下面的起点),然后使用 FHIR 数据格式将数据编组为 JSON。例如:
from("file:/input/directory")
.unmarshal().hl7() // convert from HL7 text format to Java object
.process(new PatientProcessor()) // map source to target fields
.marshal().fhirJson() // serialise out to FHIR JSON format
.to("file:/output/directory");
中间的处理器是您的转换/映射类所在的位置。
Camel 的单元测试中有一个完整的示例,展示了如何从 HL7 转换为 FHIR。看: