若熟悉HL7 v2.X或者 v3相關標準,那對於HL7 FHIR的資料型態就可以輕鬆入門了。
如果你想成為HL7 FHIR無論前端或後端的開發者,資料型態物必要研究清楚。
(補充說明:本篇講的資料型態是R4版本)
==========
HL7 FHIR的資料型態可分成四大類型:
- Primitive Types
- General Purpose Data types
- Special Purpose Data types
- Metadata Types
有幾點要說明。
- R3的資料型態分成:Primitive Types與Complex Types
- 就程式語言的角度,資料型態可分成:
- C#命名法:Value types與Reference types。
- Java命名法:Primary types與Refernce types。
- 程式語言角度的Primary或者Value types。其機制是可以直接放值,值的內容就是尤其資料型態所決定。但實際上只有三大類型。
- 數值類
- 字串類
- 日期類
- 程式語言角度的Reference Types,其實就是把變數宣告成某個類別。
- 但是...HL7 FHIR所有的資料型態都是類別,都是繼承於Element。
接著就來看看,HL7 FHIR所有資料型態。
看到一個重點了嗎?
Element
所以,先來搞定這傢伙。
所有的資源都是由一堆Element所組成,每一個Element都會定義為一種資料型態,或者是一組資料結構。這樣子有聽沒有懂。要從XML角度切入。
借用別人的圖:
Student是一個element,他有sub-element。
講到者,就得提一下HL7 FHIR與HL7 V3的最大不同點。
HL7 v3的物件結構中,我們要分辨,誰是sub-element誰是attribute。沒經驗,可能就為放錯。除非使用程式庫。
但在HL7 FHIR中,就算是Data type他也是element。所以,剛剛四大類型的資料型態,都是繼承於Element。硬分成Primitive或Complex,也只不過是說裡面的Element是一條,還是很多條,或者還有sub-element。
=========
Element是屬於Foundation這個Module。但是,去Foundation Module的首頁,看不到Element的相關連接。
只能從DataType頁面中取得,或者是到Documentation Index的頁面,在Base Type的區塊中取得連結。
來看看Element的資料結構(這邊就不能說是資料型態,能理解嗎?)。
原來,所有的element都可以有id與extension這兩個sub-element。而資料型態分別為string(primitive),Extension(Special)。[別被這種你中有我,我中有你的結構給打敗了]
其實,這兩個Element其實不重要。重要的是,那個限制條件。
他規定說,所有的Element都必須要有一個Value的屬性,否則的話,他就必須要有sub-element。
所以,在HL7 FHIR中的任何一個element(包含資料型態),他的XML呈現結構都可以是:(抱歉,此時id被展現在屬性)
<use id="[internal id]"> <extension url="..."/> ... if there are any extensions <extension> .. elements of Coding type... </use>
JSON的話(看吧!這就不會受到是不是放在屬性之干擾)
{ "use" : { "id" : "[internal id]", "extension" : [ ..extensions, if present... ], .. properties of Coding type... } }
我們用Patient這個Resource來說明吧。下圖是Patient的部分結構。
他繼承DomainResource,所以,有些欄位在這邊看不到。(這部份在講Resource篇的時候會提到)
就看identifier與active。先看active。他的資料型態是boolean(Primitive),根據文件,他的值只能有true或者false。
但是,他還是繼承於element呀。element告訴我們,他是Primitive,沒有sub-element,他就得要有@value的屬性。
來看看Patient所提供的範例:
<active value="true"/>
這樣子看懂了嗎?(如果他要多加一個id屬性也是可以的。想想HTML的id,喔!是一樣的。)
再看identifier。他的資料型態是Identifier(General Purpose),他會有自己的資料結構。
是的,就這樣子一層一層展開,一直碰到Primitive的Element時才會停止展開。來看範例。
<identifier> <use value="usual"/> <type> <coding> <system value="http://hl7.org/fhir/v2/0203"/> <code value="MR"/> </coding> </type> <system value="urn:oid:1.2.36.146.595.217.0.1"/> <value value="12345"/> <period> <start value="2001-05-06"/> </period> <assigner> <display value="Acme Healthcare"/> </assigner> </identifier>
現在,看到這個範例應該舒服多了吧。
若要全部看懂,就得把所有的Primitive Type全部看過一遍,就更清楚了。
沒有留言:
張貼留言