每個段最開始的 3 個大寫字母表示段的唯壹標識,如 MSH (message header)表示消息頭,PID (patient identity)表示病人唯壹標識,
PV1 (patient visit) 表示病人的壹些基本信息如床號等。這些段的含義都是 HL7 標準裏定義的。
每個段有包含多個域(Field), field 之間用 | 分隔。如果壹個 field 沒有被使用就什麽都不用寫,這就是很多兩個域分隔符之間什麽都沒有的原因。每個 field 在段中都有壹個序號(SEQ),每個段有多少個 field, 各個 field 的序號和含義都是 HL7 標準中定義的,我們可以只使用其中壹部分 field。(有些 field 是必須出現的,不能省略,必須傳值)
每個 field 又可以包含多個 Component (組件) , component 之間用 ^ 分隔
如 52^Height
壹個 component 又可以包含多個 Sub component (子組件), 子組件之間用 & 分隔,如 ICU&Bed5&3232241659&0&0 (包含5個子組件)
是不是很簡單,像
那麽HL7 消息解析是不是很簡單呢?首先用回車符分隔各個段,壹個段再用 | 分隔出各個 Field ,再參考協議文檔就解析出了各個數據了。
由於 HL7 Message 是壹個應用層高層協議,沒有定義消息的開始和停止。所以應用時壹般會在 TCP 上加壹層 HL7 low-level 協議來定義消息的開始和結束。
有了 HL7 Low-Level protocol 我們就可以很容易的從 TCP 字節流中分離出壹個壹個的 HL7 消息了。(Netty 中用壹個分隔符拆包就行了。)