使用 FHIR nuget 包通过引用查找包中的资源
Posted
技术标签:
【中文标题】使用 FHIR nuget 包通过引用查找包中的资源【英文标题】:Finding a resource in a bundle by reference using FHIR nuget package 【发布时间】:2020-02-08 10:03:41 【问题描述】:我正在使用 FHIR 包,并尝试使用 .net FHIR R4 nuget 包解析对包中资源的引用。我使用this 信息作为参考。
如何解析 Bundle 中的引用:
如果引用不是绝对引用,则将其转换为绝对 URL: 如果引用的格式为 [type]/[id],并且 如果包含资源的包条目的 fullUrl 是 RESTful 的(请参阅 RESTful URL 正则表达式) 从 fullUrl 中提取 [root],并将引用(类型/id)附加到它 然后尝试在捆绑包中解析为 RESTful URL 引用。 如果无法解决,则参考在本规范中没有定义的含义 否则无法解决,并且参考在本规范中没有定义的含义 其他 查找具有与引用中的 URI 匹配的 fullUrl 的条目 如果没有找到匹配项,并且 URI 是可以解析的 URL(例如,如果是 http: URL),请尝试直接访问)另外请注意,引用可以是标识符,如果它 是,并且没有url,可以通过扫描里面的id来解决 捆。另请注意,事务可能包含条件引用 在处理匹配之前必须由服务器解决。
如果引用是特定于版本的(相对的或绝对的), 然后在匹配 fullUrl 之前从 URL 中删除版本,然后 根据 Resource.meta.versionId 匹配版本。请注意, 解析包含资源中的引用的规则与 那些用于解析包含 包含资源。
如果找到多个匹配项,则不明确哪个是正确的。 应用程序可能会返回错误或采取其他措施,因为它们 认为合适。
Bundle.FindEntry 扩展方法似乎只适用于绝对引用,例如 this...
<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>
是否提供了可以解析相对引用的任何功能? 失败的东西已经提供,我将如何编写自己的?
如何按照规范中的说明将相对网址转换为绝对网址? 从 EntryComponent 的 FullUrl 中提取根来解析的逻辑是什么?我怎么知道根是什么? 我如何知道引用是通过标识符?它看起来就像一个相对参考。【问题讨论】:
【参考方案1】:.Net FHIR 库中已经有相应的功能,以 ResourceReference 上的扩展方法的形式。对于您的示例,这样的事情可能会起作用:
ResourceReference r1 = ((Observation)b.Entry[0].Resource).Subject;
var abs = r1.GetAbsoluteUriForReference(b.Entry[0].FullUrl);
这从源资源中的主题字段获取(相对)引用,并使用源条目的 fullUrl 将端点/根与相对引用结合起来。
根/基/端点将始终是绝对 url 的一部分,直到资源类型,但由于有时很难确定,库为您提供 ResourceIdentity
功能来构建引用或查看特定部分其中。有关这方面的许多示例,请参见 ResourceIdentity unit tests。
如果引用是标识符,则填写ResourceReference的.Identifier。或者,如果是条件引用,则填写ResourceIdentity的.Query。
【讨论】:
如果我已将捆绑结构向下导航到 ResourceReference,有没有办法找到它所属的 EntryComponent 以便我可以创建绝对 uri? 也许您可以看一下 ScopedNode,它会保留有关您正在调查的节点的父资源的信息。如果这对你没有意义,你能告诉我当你沿着结构导航时你有什么样的对象,或者你是如何导航的?以上是关于使用 FHIR nuget 包通过引用查找包中的资源的主要内容,如果未能解决你的问题,请参考以下文章