先就從Document的角度來看。CDA R2很明確,就是當時事件發生時,把所有的資料打包成一份完整的xml文件。FHIR的話,你要視為文件,那就建議採用Composition這個Resource。其中section的元素結構如下(Composition的結構有點大,就不列出)
這個就是對應到CDA R2的Section,也就是Level 2。在往下看,有一個entry,他就叫對應到Level 3的部分。但注意看其資料型態是Reference(Any),這是說可以連結到任何Resource。
所以,這時候有一個很詭異的點,也是初學實作FHIR者常犯的錯誤。在產生這份FHIR文件之前,這些被Reference的Resource必須要先存在。(這也是我要強調的,搞好FHIR的大前提是有一個功能完整的EMR System)。你可以說他們叫low couple。
所以,這時候有一個很詭異的點,也是初學實作FHIR者常犯的錯誤。在產生這份FHIR文件之前,這些被Reference的Resource必須要先存在。(這也是我要強調的,搞好FHIR的大前提是有一個功能完整的EMR System)。你可以說他們叫low couple。
細節就不想討論了。回歸正題,References機制到底有幾種。注意,R3與R4的描述有差異。這邊討論的是R4。
- Resource references:也就是R3所說的內部參照。
- Canonical references:也就是R3所說的外部參照。
還是先看看References的結構
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Reference | ΣIN | Element | A reference from one resource to another + Rule: SHALL have a contained resource if a local reference is provided Elements defined in Ancestors: id, extension | |
reference | ΣI | 0..1 | string | Literal reference, Relative, internal or absolute URL |
type | Σ | 0..1 | uri | Type the reference refers to (e.g. "Patient") ResourceType (Extensible) |
identifier | Σ | 0..1 | Identifier | Logical reference, when literal reference is not known |
display | Σ | 0..1 | string | Text alternative for the resource |
- 他繼承了Element,所以他是Data Tyep。自然會有Element的屬性。
- reference:這是指向參考的位置。其型態是string,所以彈性很大。這邊可以動很多手腳。
- type:這個是用來定義是指向哪種Resource。
- identifier:這個真的要好好解釋(很多人觀念都錯了)。這個不是Logic Id,他不是FHIR Server給的。而是EMR、LIS或者其他產生這個Resource案例的資料源所給定的ID。若是LIS,他有可能是一個檢驗單號。
- display:就是顯示名稱。有完HTML的話,就是包覆在<a>與</a>中間的文字。
有了以上的基礎後,再來看看,各種參考模式要如何套用。
最簡單且常用的模式,在同一台FHIR Server上,採用相對路徑指向另一個Resource案例。
<subject> <reference value="Patient/034AB16" /> </subject>當然,這個參照並不一定要掛Resource,可用絕對路徑指向符合URL的資源。
{ "profile" : { "reference" : "http://fhir.hl7.org/svc/StructureDefinition/c8973a22-2b5b-4e76-9c66-00639c99e61b" } }若指向的參照有版本的話,其URL就把版次的語法拿來用即可。
<target> <reference value="http://example.org/fhir/Observation/1x2/_history/2" /> </target>
以上這幾種情境,都叫做Literal References。
還有一種情境,我們並不知道Resource案例,只知道要參考資訊來源。這種叫Logical References。<patient> <identifier> <system value="http://hl7.org/fhir/sid/us-ssn" /> <value value="000111111" /> </identifier> </patient>無論是Literal還是Logical,都可以補上簡短描述。
<custodian> <reference value="Organization/123" /> <display value="HL7, Inc" /> </custodian>
最後還有一種情境,跟上面完全不同。上面都是主體與參考分開來。接著要題的是參考的Resource,合併在主體上。直接看範例。
<Condition xmlns="http://hl7.org/fhir"> <contained> <Practitioner> <id value="p1"/> <name> <family value="Person"/> <given value="Patricia"/> </name> </Practitioner> </contained> <!-- other attributes --> <asserter> <reference value="#p1" /> </asserter> <!-- other attributes --> </Condition>
- Reference的value是被參照resource的Id前加"#"。
- 要被參照的Resource,整個放在contained元素之下。
- 被參照元素的id不是FHIR Server給的,而是自訂,注意要與主體reference的內容值相同。
- 這個contained元素是來自DomainResource。
R4還多了一種情境是Circular Resource References,還沒很懂,就不多說了。
沒有留言:
張貼留言