[英]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.