1

我根据我找到的文档为 HL7 构建了一个解析器,并认为它运行良好——直到我得到了测试数据的示例。我使用以下假设构建它:

  • ~是一个“重复”字符。基本上意味着传递的字段的值是给定值的数组。
  • ^数组表示,但期望数组项用于构建最终值。
  • &类似^,但它是一个嵌套在 a 中的数组^

鉴于我拥有的测试数据,这些假设似乎不太准确。有人可以帮我弄清楚解释这些的正确方法是什么吗?

4

2 回答 2

2

当您正在构建解析器时,我将介绍更多细节。

请参考这个参考:

(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因此,您可以将其视为或structComposition中而不是数组。
  • &是子组件,与上述组件相似,不同之处在于,它进一步将给定组件中的数据拆分为子组件。同样,我认为这应该与特定语言classstruct而不是数组相关联。

此外,上面列出的字符是默认字符,最常用于所述目的。但是,它们可以更改。基本上,这些字符在MSH(2). 请注意,第一个字段始终|是不可协商的字段分隔符 ( )。所以下一个(第二个)字段包含编码字符。在编写解析器时,您应该从这里读取编码字符并相应地进一步使用它们。

字符的顺序也定义为这里提到的:

2.24.1.2 编码字符(ST) 00002 定义:该字段包含四个字符,顺序如下:组件分隔符、重复分隔符、转义字符和子组件分隔符。推荐值为 ^~\&,(分别为 ASCII 94、126、92 和 38)。

请参阅那些讨论HL7 Escape Sequences约定和使用的术语的其他答案。

于 2019-12-03T08:56:18.223 回答
1

分隔符在 MSH-1/2 字段中定义,并且可能因消息而异。如果您正在编写解析器,那么您需要阅读实际的规范。请参阅 HL7版本 2.9 消息标准第 2 章。它包含有关正确解析的详细说明,包括伪代码和流程图。

于 2019-12-03T00:54:23.743 回答