因為,還沒有講解Resource結構,在這邊的理解度上,可能會有所不足。
得說聲抱歉,有結構性的系列文件,還在思考中。真的,文件太多了。
==========
共用性查詢參數
這部份又可以分成兩塊,查詢前與查詢後。- 查詢前
- _id
- _lastUpdated
- _tag
- _profile
- _security
- _text
- _content
- _list
- _has
- _type
- _query
- 查詢後
- _sort
- _count
- _include
- _revinclude
- _summary
- _elements
- _contained
- _containedType
=====
查詢前
=====
- _id
就是查詢id,只不過利用Router的設定,可以變成uri的一部分。也就是說,下兩個查詢模式是一樣的。
GET [base]/Patient?_id=23
GET [base]/Patient/23
- _lastUpdated, _tag, _profile, _security
每一個資源都是繼承於DomainResource,而DomainResource又繼承於Resource。
Resource有一個element叫meta,他的資料型態是Meta。Meta的element結構為:
Structure
- lastUpdated -> Date/DateTime
- profile -> Token, URI
- servurity -> Token
- tag -> Token
範例
GET [base]/Observation?_lastUpdated=gt2010-10-01
GET [base]/Condition?_tag=http://acme.org/codes|needs-review
GET [base]/DiagnosticReport?_profile=http://hl7.org/fhir/StructureDefinition/lipid GET [base]/DiagnosticReport?_profile=Profile/lipid
- _text, _content
這兩個傢伙是用來查詢narrative的部分。前段說,所有資源都繼承於DomainResource。而DomainResource有個屬性text,就是攜帶Human Readable的部分。可以想像,這就是全文檢索之意。至於_text與_content之差異,抱歉,我看不出來也理解不出來。
Structure
GET [base]/Condition?_text=(bone OR liver) AND metastases --> 原文是and,我改成AND。
- _list
用在List資源打包回資源,他是有順序性的。用這個可以取出特定的那一個。
範例
GET [base]/Patient?_list=42
- _has
這是個限定搜尋的概念。可是他又引入一個新觀念稱之為Reverse Chaining。看範例先。
ET [base]/Patient?_has:Observation:patient:code=1234-5
這個若看得懂,那HL7 FHIR的功力應該超人一等。
他的意思是說,我要找Patient這個資源,但是,用了_has,也就是說,這個Pateint必須要有Observation。那我怎麼知道這個Observation是哪個Patient呢?那就是利用了Observation的查詢參數patient,而且呀,要求這個Observation的code這個欄位必須等於1234-5。
再看這範例(看看什麼叫做Chain)
GET [base]/Patient?_has:Observation:patient:_has:AuditEvent:entity:user=MyUserId
抓Patient,但需要有Observation,透過patient查詢參數連結。而這個Observation需要有AuditEvent,透過entity查詢參數連結,而且AuditEvent的查詢參數user必須等於MyUserId。
- _type
一般而言,我們的查詢的URI是長這樣子:GET [base]/Observation?params... 也就是說,每次只能針對一種Resource來處理。如果,我們想一次抓好幾種Resource時,就要用這個查詢參數。
GET [base]/?_type=Observation,Condition&other params...
- _query
這個也不是很懂。總之,就是預先定義好查詢條件,並且設定名稱。然後就可以直接使用。語法結構如下。照文件說是要與OperationDefinition這個Resource配合。
GET [base]/Patient?_query=name¶meters...=====
查詢後
=====
- _sort
把查詢所得進行排序。其中前置符號有-,表示遞減排序。
GET [base]/Observation?_sort=status,-date,category
- _count
這個不是只有多少筆數,而是頁數。什麼意思呢?例如透過Bundle回來的資源筆數非常多,我們可以切成批次,也就是分成數頁,每一次只傳回固定的項目。那_count就是告訴我們,調回來的資源被切成了幾頁,是要求Server每一頁要有多少筆。(實作後之認知)
- _include, _revinclude
Resource常常會參照到其他的Resource。如何在調閱時,也希望把相關參照到的資源也一塊調回來,就可以用_include。至於要找反過來被參考到的,則是用_revinclude。(沒實作過,不太清楚運作結果,已實作)
- _summary
這個是非常重要的查詢參數,可以決定回傳資料包含哪些。範例GET [base]/ValueSet?_summary=true
value可以設定下列值:
- true:Resource定義中,欄位被設定要放入summary者。
- text:只傳回text, id, meta等Top-level的必要element。
- data:不包含text element。也就是Human Readable那塊。
- count:只傳回合乎條件的資源筆數,Resource沒傳回。
- false:什麼都要傳。
有點要注意,當設_summary=text時,就不能合併_include與_revinclude。這個應該可以想得通吧。
- _elements
如果覺得_summary所指定的element還是不適用,那就可以利用這個查詢參數來指定要哪些element回來。不過,那些必要的element,還是會一起回來。
- _contained, _containedType
這個是講到串連條件的問題,誰包含誰。抱歉,我還是看不懂。
沒有留言:
張貼留言