==========
為了讓查詢更加豐富,endpoint轉到官方提供的平台:https://vonk.fire.ly/。前端工具仍然使用Postman。
(R4也快公告了。此篇以後,都會採用R4的版本)
==========
暖身
- 抓Patient資源。因為沒有設定ID,所以取回全部。
- 目前這台FHIR Server上有199筆Patient Resource。用Bundle Resource打包多個Patient Resource。
別忘了,3.1.1查詢文件中,有3.1.1.1 Summary Table,裡面可以使用的參數。還要問問Patient Resource,可有哪些查詢參數。
(補充說明:這是R4的版本。Patient Resource已經是Normative,但是,查詢參數卻還是Trial Use)
- ID
現能理解/ID與查詢參數是一樣的東西。前者是被預設成路徑的一部分。
- _lastUpdated
_lastUpdate處理的是日期格式。那我們想知道2018年上半年有異動過的Resource。
- 輸入查詢參數。他是name=value的結構。value可以有prefix。
- 回傳用Bundle打包。總計30筆。
- 這些Patient Resource都會落在這個日期區間。
- _lastUpdated
_lastUpdate處理的是日期格式。那我們想知道2018年上半年有異動過的Resource。
- 輸入查詢參數。他是name=value的結構。value可以有prefix。
- 回傳用Bundle打包。總計30筆。
- 這些Patient Resource都會落在這個日期區間。
- _tag, _profile, _security
Server上的所有Patient Resource,都沒有這三個欄位,無法進行實戰展示。
- _text, _content
這兩個也不容易測試。兩者差異應是_text只會全文檢索,DomainResource.text的部分。而_content則是全部資源內容皆會。
這個功能不好測試,目前所使用https://vonk.fire.ly/的伺服器好像沒有支援。等有適當的案例時,再來補充。
- _list
這個要跟List資源一起看。可是呢,在List那邊又說盡量用_list查詢。
目前,也還沒有實作成功,並沒有找出適當的展示案例,待補充之。
- _has
這也是有點難理解的查詢條件,引入了Reverse Chaining的觀念。用以下這個範例來說明:
GET [base]/Patient?_has:Observation:patient:code=1234-5
目標是要取得Patient,但是這個Patient是被用在Observation中,真正去搜尋的是Observation。也就是說,去搜尋Observation,然後使用其查詢參數patient,來回傳所得到之Patient。但是,這邊對Observation又進一步的過濾,也就是,只需要code等於1234-5的Observation,然後傳給我這個Patient是誰。
- _tag, _profile, _security
Server上的所有Patient Resource,都沒有這三個欄位,無法進行實戰展示。
- _text, _content
這兩個也不容易測試。兩者差異應是_text只會全文檢索,DomainResource.text的部分。而_content則是全部資源內容皆會。
這個功能不好測試,目前所使用https://vonk.fire.ly/的伺服器好像沒有支援。等有適當的案例時,再來補充。
- _list
這個要跟List資源一起看。可是呢,在List那邊又說盡量用_list查詢。
目前,也還沒有實作成功,並沒有找出適當的展示案例,待補充之。
- _has
這也是有點難理解的查詢條件,引入了Reverse Chaining的觀念。用以下這個範例來說明:
GET [base]/Patient?_has:Observation:patient:code=1234-5
這個功能不好測試,目前所使用https://vonk.fire.ly/的伺服器好像沒有支援。等有適當的案例時,再來補充。
- _list
這個要跟List資源一起看。可是呢,在List那邊又說盡量用_list查詢。
目前,也還沒有實作成功,並沒有找出適當的展示案例,待補充之。
- _has
這也是有點難理解的查詢條件,引入了Reverse Chaining的觀念。用以下這個範例來說明:
GET [base]/Patient?_has:Observation:patient:code=1234-5
為了實作這個,我們得先去找適當的Observation來測試。
首先我們要知道Observation有什麼查詢參數可用。上述範例用的是code。一查確實有。
code TU | token | The code of the observation type | Observation.code | 13 Resources |
當然,也有patient。
patient TU | reference | The subject that the observation is about (if patient) | Observation.subject.where(resolve() is Patient) (Patient) | 33 Resources |
等等,他是資料型態是token。那就要去看看在name=value的value部分,應該要長什麼樣子。其中有一個格式最簡單:
[parameter]=[code]
: the value of[code]
matches a Coding.code or Identifier.value irrespective of the value of the system property
接著,我們先來看看Server有哪些Observation。
- 這個URI會取回所有Observation Resource。
- 我們找任意一筆。有個code的編碼85354-9。待會要用這個當查詢值。
- 順便看一下,這個Observation所參照的病患是誰。他的ID是example。等等,這只能說這一筆。說不一定其他筆就不是這個patient。查詢完再來驗證。
有這些資料後,我們就可以開始下_has的查詢條件了。(補充說明,這些流程是為了解說查詢,實務上不是如此)
- 再用查詢code=85354-9來看看。
- 總共有6筆。
這六筆的subject(Patient)分別是(用剪貼,順便比較不同的表達方式):
"subject": {
"reference": "https://vonk.fire.ly/Patient/example"
},
"subject": {
"identifier": {
"value": "547741699393"
}
},
"subject": {
"reference": "https://vonk.fire.ly/547741699393"
},
"subject": {
"reference": "https://vonk.fire.ly/Patient/example"
},
"subject": {
"reference": "https://vonk.fire.ly/Patient/example"
},
"subject": {
"reference": "https://vonk.fire.ly/Patient/example"
},
- URI的長相。
- 注意參數設定方式。
- 可惜,只有找回一筆。
- 此病患的ID是example。
為什麼只有一個呢?哈~回去看那六筆資料,其實只有一筆才是符合規範。
- _type
這傢伙是用來調出指定之Resource。若只有指定單一Resource,那個標準URI格式所得是一樣的。我們來試試除了Patient也要Observation。(應該要很多)
- URI。注意,各資源只有逗號,不可有空白。
- 總共取回2305筆。其中Patient是232筆,Observation是2073筆。
==========
這是實作查詢,對終端使用者來說,不會是這樣的流程。但是,如果你要發展Client端或Server端的程式,我想這個基礎功應該不可避免。
沒有留言:
張貼留言