我根据发现的文档构建了HL7解析器,并认为它运行良好-直到获得测试数据的示例。我用以下假设构建它:
~
是“重复”字符。基本上意味着传递的字段的值是给定值的数组。^
表示该字段由数组表示,但是期望数组项用于构建最终值。&
与^
相似,但是是^
内的嵌套数组。鉴于我拥有的测试数据,这些假设看起来并不十分准确。有人可以帮我弄清楚什么是正确的解释方法吗?
您在构建解析器时,我将介绍更多细节。
请参考this参考:
(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批处理消息除外)的第一段。字段分隔符在消息中显示为第四个字符,它也表示MSH段的第一个字段。由于MSH的第一个字段通常只是一个管道,“ |”,因此计算MSH字段变得很棘手。 MSH(MSH-2)的字段2按此顺序包含其他分隔符:组件,字段重复,转义和子组件。
因此,以下是HL7消息开头的示例:MSH | ^〜\&|…
如上所述:
~
表示为此特定字段提供了多个值。因此,就编程语言而言,它是一个数组或列表或类似的数据结构。您的假设是正确的。^
代表给定字段的组成部分。这意味着一个字段可能具有多个组成部分。所有这些成分class
或struct
,而不是Composition中的数组。&
是子组件,与上述组件相似,不同之处在于,它进一步将数据拆分为子组件中的给定组件。同样,我认为这应该与特定于语言的class
或struct
而不是数组相关联。MSH(2)
中的每个消息中定义。请注意,第一个字段始终是不可协商的字段分隔符(MSH(2)
)。因此,下一个(第二个)字段包含编码字符。在编写解析器时,应从此处读取编码字符,并相应地进一步使用它们。字符的顺序也被定义为|
:2.24.1.2编码字符(ST)00002定义:该字段按以下顺序包含四个字符:组件分隔符,重复分隔符,转义符和子组件分隔符。推荐值为^〜\&(分别为ASCII 94、126、92和38)。
请参考这些其他讨论的关于here,HL7 Escape Sequences和conventions的讨论。