2018年12月15日 星期六

HL7 FHIR Server初體驗 - 查詢篇 - 戰技之1

有了前傳的基礎,理論應該來個上機實作一番。可惜,HL7 FHIR的查詢機制,博大精深。我們還是要先蹲好馬步,把戰技練練才能上場。
==========
本篇先就前傳中所提到2.21.1.1 Summary Table深入解釋。

查詢參數資料型態

可以分成八大類型:(1) number, (2) date, (3) string, (4) token, (5) reference, (6) composite, (7) quantity, (8) uri。
說實在,沒有從基礎談起,一下子要講這些,確實有困難。而且,還要預留以後寫基礎性文章,哈!只能盡力了。

(1) number

這個容易理解。看範例就知:
GET [base]/Encounter?length=gt20
補充說明:為什麼知道有length這個查詢名稱,那要回去看Resource。查看Encounter所提供的查詢參數,有列出length這個查詢參數名稱。
NameType   Description                      Expression         In Common
lengthnumberLength of encounter in daysEncounter.length
此時,查詢結構name=value中,name可以是length,而value呢,因為他是number,可以帶prefixe(還記得有哪些嗎?number, date與quantity可以有喔)。
注意,這個length並不一定等同於Resource的element喔。在Expression欄位,才是指這個查詢參數名稱對應於哪一個element。Encounter.length的資料型態是Duration,而這個length的資料型態是number,是前者計算後之結果。也就是說,這一次Encounter所經歷的時間。所以,範例是要找出Encounter期間大於20天者。(抱歉,好像越講越複雜)

(3) string

這個也容易理解。看範例也可知:
GET [base]/Patient/23/Procedure?given=eve

(8) uri

其實跟string是一樣的,只不過他的value的內容有限定。另外,他的modifier只能用:above或:below。
GET [base]/ValueSet?url=http://acme.org/fhir/ValueSet/123
GET [base]/ValueSet?url=http://acme.org/fhir/ 
GET [base]/ValueSet?url=urn:oid:1.2.3.4.5

(5) reference

其實也是跟uri類似,只是他的格式是前段限定是資源名稱。
GET [base]/Observation?subject=Patient/23

(2) date

這類查詢,可以應用在下列資料型態中date, dateTime, instant, Period, Timing。(忍不住還是要說一下,首字小寫的資料型態是指Primitive Types,而首字大寫者是指Complex Types)。
GET [base]/Patient/23/Procedure?date=ge2010-01-01&date=le2011-12-31

(7) quantity

這傢伙有點麻煩,你必須考量到查詢的value是什麼單位。他的基本參數查詢語法結構:

  • [parameter]=[prefix][number]|[system]|[code]
搞懂這就好。
GET [base]/Observation?value=5.4|http://unitsofmeasure.org|mg
當然,也可以不加編碼系統,不過,分隔符號又留下來。
GET [base]/Observation?value=5.4||mg

(4) token

這傢伙就是專注在編碼系統。其語法結構:
  • [parameter]=[code]
  • [parameter]=[system]|[code]
  • [parameter]=|[code]
  • [parameter]=[system]|
此結構可以用在下列資料型態:Coding, CodeableConcept, Identifier, ContactPoint, code, boolean與string。
Modifiers可以有:

  • :text
  • :not
  • :above
  • :below
  • :in
  • :not-in

看範例:
GET [base]/Patient?identifier=http://acme.org/patient|2345
GET [base]/Patient?gender:not=male

(6) composite(抱歉,我也還看不太懂)

顧名思義,就是打包組合,各查詢條件用$串連(注意喔!跟&的意義是不同的)。看範例:
GET [base]/DiagnosticReport?result.code-value-quantity=http://loinc.org|2823-3$gt5.4|http://unitsofmeasure.org|mmol/L
GET [base]/Observation?component-code-value-quantity=http://loinc.org|8480-6$lt60

==========
得先打住了。其他適用於所有資源的查詢參數設定,得留到下回分解。

沒有留言:

張貼留言