2014年12月21日 星期日

HL7 v2.6學習心得–第二章 Message Framework ─ 2

>原文參考2.5.3 Fields。
==============================
今天要來談的欄位(Fields) 有很多重要觀念需要詳細講解。這部份還需要配合資料型態背景,所以,要先做概念性解說。
Fields
原文說明:A field is a string of characters. Fields for use within HL7 segments are defined by HL7.
說穿了欄位就是由字元所形成之字串用在HL7訊息的區段中。


注意,HL7並沒有定義資料是如何儲存在真實系統的應用程式中。當這些資料要被轉換時,都是先轉乘字串型態。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px 'Times New Roman'}
每個欄位可能會有三種群體狀態。
1. 有值:欄位填入非空白,有意義的內容。
2. 無值:欄位是空白,沒有任何有意義內容。
3. 空值:欄位填入了"",也就是NULL值的意思(兩個雙引號,但中間沒有任何空白或有意義的內容)。
接收端遇到這三種情境要如何處理,可以參考2.6 Message Construction Rules。
為了描述每一個欄位的定義,標準書中使用了統一的表個規範。
上次一的ADT^A01訊息中,第一個區段就是MSH,我們就來看看這個MSH有哪些欄位。而他的metadata又有哪些。

上圖(一樣,只能給部分,全圖請看原本標準書)就是描述個區段內有什麼欄位的屬性表。注意,所有的區段都是用相同的屬性表來描述(所以,這叫Metadata)
我們要先學會看懂這個屬性表中的欄位定義,才有能力進一步知道,這個區段內各欄位的應用情境。
1. Position 位置
在表中的第一欄,欄位名稱是SEQ。
注意這個順序是不可以被挪動。也就是說,就算這個欄位沒有被使用到,那個位置還是要留下來的。也就是要留下欄位分隔符號。在兩個欄位分隔符號的中間,就是「無值」(注意,不是空值唷)。假設欄位分隔符號目前定義是|,若某欄位沒有用到就是要用||來表示之。
2. Maximum length 最大長度
在表中的第二欄,欄位名稱是LEN。
原則上這個欄位不是很重要。這邊的長度限制,也並不會與原始資料在資訊系統的長度一致。而且,再系統實作的時候,都是為字串,原則上就是可以變動。只是比較嚴謹的作法時,會檢查長度。
如果欄位資料很長時 (長字串,如text或memo),這個數字會是65536。如果是標記成99999,那表示這個欄位可以任意長度。
3. Data type 資料型態
在表中的第三欄,欄位名稱是DT。
這個欄位描述非常、非常、非常重要。也是實作階段要特別注意的地方,但是,這個資料型態與資料庫或程式語言所描述的資料型態是不同的。這個比較像是物件導向程式語言所reference type。
這部份的知識,必須另闢討論序列。可參考2.15 Data types這個章節。
4. Optionality 可選性
在表中的第四欄,欄位名稱是OPT。
    定義這個欄位在這個區段中的存在狀況。
    這個存在狀況可以分成:
    R - required 必要。無論如何這個欄位一定要有值,就算發送端沒有這個欄位,那也要放空值。
    O - optional 可選。可有可無。若無,那就留下欄位分隔符號即可。
    C - conditional on the trigger event or on some other fields。條件存在。會因為不同的驅動事件或因為某個欄位存不存在或是等於什麼條件時,這個欄位就需要存在。
X - not used with this trigger event 不採用。這個欄位在這個驅動事件時不使用。但仍須留下欄位區隔符號。
B - backward 相容。沒別的目的,就是為了與前面的版本相容而留下來的。如果不用也無所謂,但仍須留下欄位區隔符號。
5. Repetition 重複性
    在表中的第五欄,欄位名稱是RP/#。
    這個是用來表示這個欄位在這個區段中是否可重複出現。這下子有個問題浮現了。兩個欄位區隔符號的中間代表這個欄位,可是這個欄位又可重複?那表示需要有一個重複區隔符號。
    那為什麼不用欄位區隔符號?注意,在SEQ不是提到這個順序性是固定的,要是用欄位分隔符號來做重複,那後面的欄位順序不要亂了嗎?由於,這些分隔符號都可以自定,先用預設符號是~。若有個訊息是長這樣時|AAA~BBB~CCC|,表示這個欄位重複了三次。
    N或空白:表至這個欄位不可以重複。
    Y:表示這個欄位可以重複,且可以重複任意次數。注意,可重複並不代表一定要重複,若出現一次也是合法的。
    數字:如果你確定知道這個欄位最多可以重複幾次時,那就把上限值寫入。
6. Table 參照表
    在表中的第六欄,欄位名稱是TBL#。
    許多欄位的內容值是受限制的。HL7把這些限制範圍都用另一個參照表來描述,並給每一個參照表一個號碼。如果這個欄位有用到參照表,那就把這個參考表的編號填入本欄中。
    所謂的限制範圍其實又可根據他的強度與來源,共分成三大類型:
    (1)HL7 Table:這個是HL7標準給定的內容值,使用者不得修改之。此類欄位的資料型態會是ID。
    (2)User-defined Tables:使用者可以自行定義、增加、修改參考表內容。此類欄位的資料型態會是IS。
    (3)External Tables:前兩者的參考表都來自HL7內部定義。若此參考表是別的單位組織所致定時就屬於本類。此類欄位的資料型態會是CF、CNE與CWE。
    至於ID、IS、CF、CNE與CWE屬於資料型態範疇,有討論到實在詳細說明。
    另外在新版的標準書中還增加了兩類的參照表,Imported Tables與Local Tables這邊就保留吧。
7. ID number 流水號
    在表中的第七欄,欄位名稱是ITEM#。
    HL7針對每一個定義不同的欄位都指定一個欄位號碼且不重複。這個只是查表方便而已,但有些API會把這個當鍵值。
8. Name 欄位名稱
    在表中的第八欄,欄位名稱是ELEMENT NAME。
    就是這個欄位的完整名稱。
看懂這個屬性表,後續各章節所提到的所有訊息,各區段有什麼欄位內容其表達方式都一樣。
=============================

這次有提到欄位分隔符號與重複分隔符號,那還有哪些呢?也許是下一次的主題吧。

沒有留言:

張貼留言