我根据我找到的文档为 HL7 构建了一个解析器,并认为它运行良好——直到我得到了测试数据的示例。我使用以下假设构建它:
- 这
~
是一个“重复”字符。基本上意味着传递的字段的值是给定值的数组。 - 这
^
数组表示,但期望数组项用于构建最终值。 - 与
&
类似^
,但它是一个嵌套在 a 中的数组^
。
鉴于我拥有的测试数据,这些假设似乎不太准确。有人可以帮我弄清楚解释这些的正确方法是什么吗?
当您正在构建解析器时,我将介绍更多细节。
请参考这个参考:
(x0D) Segment separator | Field separator, aka pipe ^ Component separator, aka hat & Sub-component separator ~ Field repeat separator \ Escape character
段分隔符不可协商。它始终是回车符(ASCII 13 或 HEX 0D)。其他的只是建议值,但通常如上所述使用。HL7 标准允许您选择自己的,只要您在 MSH 段中显示它们。
MSH 是所有 HL7 消息(HL7 批处理消息除外)的第一段。字段分隔符显示为消息中的第 4 个字符,它也代表 MSH 段的第一个字段。由于 MSH 的第一个字段通常只是一个管道“|”,因此计算 MSH 字段变得很棘手。MSH (MSH-2) 的字段 2 按此顺序包含其他分隔符:组件、字段重复、转义和子组件。
因此,以下是 HL7 消息开头的示例:MSH|^~\&|…</p>
如上所述:
~
表示为该特定字段提供了多个值。因此,就编程语言而言,它是一个数组或列表或类似的数据结构。你的假设是正确的。^
组成部分。这意味着,一个字段可能有多个组件。所有这些组件结合起来代表最终价值。我认为这不应该与编程语言术语中的数组有关。这里的例子是人名。整个人名是单个数据,分为姓氏、名字等。如您所见,这不是一个数组。这不是多个值;这是在多个子值中拆分的单个值。class
因此,您可以将其视为或struct
在Composition中而不是数组。&
是子组件,与上述组件相似,不同之处在于,它进一步将给定组件中的数据拆分为子组件。同样,我认为这应该与特定语言class
或struct
而不是数组相关联。此外,上面列出的字符是默认字符,最常用于所述目的。但是,它们可以更改。基本上,这些字符在MSH(2)
. 请注意,第一个字段始终|
是不可协商的字段分隔符 ( )。所以下一个(第二个)字段包含编码字符。在编写解析器时,您应该从这里读取编码字符并相应地进一步使用它们。
字符的顺序也定义为这里提到的:
2.24.1.2 编码字符(ST) 00002 定义:该字段包含四个字符,顺序如下:组件分隔符、重复分隔符、转义字符和子组件分隔符。推荐值为 ^~\&,(分别为 ASCII 94、126、92 和 38)。
请参阅那些讨论HL7 Escape Sequences、约定和使用的术语的其他答案。
分隔符在 MSH-1/2 字段中定义,并且可能因消息而异。如果您正在编写解析器,那么您需要阅读实际的规范。请参阅 HL7版本 2.9 消息标准第 2 章。它包含有关正确解析的详细说明,包括伪代码和流程图。