[英]Finding a resource in a bundle by reference using FHIR nuget package
我正在使用 FHIR 包,並嘗試使用 .net FHIR R4 nuget ZEFE90A8E604A7C840E88D03A67F6B7DZ8 來解析對包中資源的引用。 我將此信息用作參考。
如何解析 Bundle 中的引用:
- 如果引用不是絕對引用,請將其轉換為絕對 URL:
- 如果引用的格式為 [type]/[id],並且
- 如果包含資源的包條目的 fullUrl 是 RESTful 的(請參閱 RESTful URL 正則表達式)
- 從 fullUrl 中提取 [root],並 append 對它的引用(類型/id)
- 然后嘗試在捆綁包中解析 RESTful URL 參考。
- 如果無法解決,則參考在本規范中沒有定義的含義
- 否則無法解決,並且該參考在本規范中沒有定義的含義
- 別的
- 查找具有與引用中的 URI 匹配的 fullUrl 的條目
- 如果沒有找到匹配項,並且 URI 是可以解析的 URL(例如,如果是 http: URL),請嘗試直接訪問)
另外請注意,引用可能是通過標識符,如果是,並且沒有 URL,則可以通過掃描包中的 id 來解決。 另請注意,事務可能包含在處理匹配之前必須由服務器解析的條件引用。
如果引用是特定於版本的(相對或絕對),則在匹配 fullUrl 之前從 URL 中刪除版本,然后根據 Resource.meta.versionId 匹配版本。 請注意,解析包含資源中的引用的規則與解析包含包含資源的資源中的資源的規則相同。
如果找到多個匹配項,則不明確哪個是正確的。 應用程序可能會返回錯誤或采取一些其他他們認為合適的操作。
Bundle.FindEntry 擴展方法似乎只適用於絕對引用,例如這個......
<entry>
<fullUrl value="http://example.org/fhir/Observation/124"/>
<resource>
<Observation>
<id value="124"/>
<subject>
<!-- this is reference to the first patient above -->
<reference value="http://example.org/fhir/Patient/23"/>
</subject>
</Observation>
</resource>
</entry>
...但是如果引用不是絕對的,則會引發異常,例如:
<entry>
<fullUrl value="http://example.org/fhir/Observation/123"/>
<resource>
<Observation>
<id value="123"/>
<subject>
<!-- this is reference to the first patient above -->
<reference value="Patient/23"/>
</subject>
</Observation>
</resource>
</entry>
是否提供了可以解析相對引用的任何功能? 失敗的東西已經提供,我將如何編寫自己的?
.Net FHIR 庫中已經有相應的功能,以 ResourceReference 上的擴展方法的形式。 對於您的示例,這樣的事情可能會起作用:
ResourceReference r1 = ((Observation)b.Entry[0].Resource).Subject;
var abs = r1.GetAbsoluteUriForReference(b.Entry[0].FullUrl);
這從源資源中的主題字段獲取(相對)引用,並使用源條目的 fullUrl 將端點/根與相對引用結合起來。
root/base/endpoint 將始終是絕對 url 的一部分,直到資源類型,但由於有時很難確定,該庫為您提供ResourceIdentity
功能來構建引用或查看它們的特定部分。 有關這方面的許多示例,請參閱ResourceIdentity 單元測試。
如果引用是標識符,則填寫ResourceReference的.Identifier。或者,如果是條件引用,則填寫ResourceIdentity的.Query。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.