VI.FUME
24 組合Bundle
終於到FUME的最後了,今天要討論的是要怎麼把一個Bundle組起來,
昨天討論到了可以用$resolve()與$search()將不同的Resource包攬進來,
但無論用不用搜尋功能,我們還是把Bundle組出來,
今天的架構會比較大一點,我會慢慢講。
在FUME的撰寫一開始,我們先令一個Bundle Resource,並填入必要的項
(以下僅供參考,不提供輸入內容)
#FUME
(
$serverURL := "https://test.com.tw/fhir/"
$entries := (
);
InstanceOf: Bundle
* id = bundle_id
* meta
* profile = bundle_profile
* type = 'collection'
* timestamp = $now()
* ($entries).entry
* resource = $
* fullUrl = $serverURL & resourceType & ($exists(id) ? '/' & id : '' )
)
這是最基礎的模板,除了基本該填入的bundle_id, bundle_profile之外,
為了讓驗證器能夠順利驗證過,在entry的部分我們要先定義出他的fullUrl,這樣驗證器確認他是一個有效的url才不會報錯。
可以注意到entry那邊套了一個$entries的物件,
這個$entries基本上是在交代所有的子Resource都包含在這個$entries裡面。
現在這樣子是已經可以完成一個Bundle Resource了,但是這個Bundle裡面空空如也。
所以接下來要來處理$entries
#FUME
$entries := (
$subResource1 := ();
$subResource2 := ();
...
[$subResource1, $subResource2, $...];
);
前面在討論FUME的特性的時候有提到,FUME在單一物件中永遠只會執行最後一行,
所以最後一行以一個array的方式把所有包含在entries內的物件都包括起來,
而這個entries最後是一個array,剛好可以作為Bundle中Entry欄位的複數對應,
這裡完成了之後,只要分別實作$subResource就可以把整個Bundle組起來了,
那當然的,$subResource也可以透過$resolve或$search來完成,這就是把別人家的Resource拿來組成自己的Bundle的過程,
$subResource := (
InstanceOf: ResourceType
* id = resource_id
* meta
* profile = resource_profile
* status = resource_status
* valueString = "resource_valueString"
);
這樣講起來很抽象,接下來的部分我會拿實際有在使用的IG來示範一下要怎麼從0開始的把Bundle組出來,
並且實際帶大家來閱讀一次IG,並且實作出一個可以轉換出該IG Bundle Profile的FUME Mapping出來
那邊的內容會有點長,
題外話,我真的快被MarkDown搞死了,那個程式碼區塊語法好難用Orz