先就從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 |
|---|---|---|---|---|
![]() | Σ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 | |
![]() ![]() | ΣI | 0..1 | string | Literal reference, Relative, internal or absolute URL |
![]() ![]() | Σ | 0..1 | uri | Type the reference refers to (e.g. "Patient") ResourceType (Extensible) |
![]() ![]() | Σ | 0..1 | Identifier | Logical reference, when literal reference is not known |
![]() ![]() | Σ | 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,還沒很懂,就不多說了。




沒有留言:
張貼留言