【问题标题】:Transitive reference to contained resources对包含资源的传递引用
【发布时间】:2021-01-04 11:35:16
【问题描述】:

我们有一个关于引用另一个资源的查询。假设场景,

ResourceA
  |- contains
       |- ResourceB
       |- ResourceC

并且 ResourceB 引用了 ResourceC。

在上述情况下,ResourceA 是否必须包含对资源 B 和 C 的直接引用?或者 A 引用 B 就足够了,因为已经有对 C 的讨厌引用(A->B->C)?

我们对 FHIR 规范的解释是后者(即传递引用就足够了),阅读下面来自 https://www.hl7.org/fhir/references.html#contained 的声明

一个包含的资源应该只包含在一个资源中,如果有的话 在该资源中(可能是另一个包含的资源)有 参考一下。

但是,在同一文档下还有另一条注释让我们感到困惑,主要是因为该示例仅演示了来自 current() 的引用。

实现说明:包含的资源仍然是参考而不是 而不是直接内联到作为参考的元素中 (例如上面的“保管人”)以确保采用单一方法解决 可以使用资源引用。虽然看起来直接收容 更简单,仍然需要支持内部引用 其中包含的相同资源被多次引用。在里面 最后,它所能实现的只是在 句法。对于使用 XPath 处理资源的用户,以下 XPath 片段解析内部引用:

ancestor::f:[not(parent::f:)]/f:contained/*[@id=substring-after(current()/ f:reference/@value, '#')]

请您帮忙澄清一下。谢谢。

【问题讨论】:

    标签: hl7-fhir


    【解决方案1】:

    目的是应该允许您所做的事情。但是,当前定义不变量的方式,它不起作用 - 在 XPath 或 FHIRPath 中(后者更重要)。老实说,我们还没有弄清楚如何正确表达它,因为我们正在寻找的是从包含资源到所有包含资源的引用链或从包含资源到包含资源的引用链.没有简单的 FHIRPath 或 XPath 表达式允许对此进行递归检查。 (XPath 的“祖先”仅适用于实例,而不适用于逻辑引用层次结构。)所以 - 您所做的在技术上与 R4 不一致。它(希望)在 R5 中不会不一致。这当然符合我们打算在 R4 中允许的精神...

    【讨论】:

    • 谢谢劳埃德。将已接受的答案更改为这个答案,因为这似乎可以提供更准确的信息,并且可以让人们做出更明智的决定。
    【解决方案2】:

    你的解释绝对正确。

    我相信 xpath 表达式很好,substring-after(current()/f:reference/@value, '#') 从当前节点中提取 Reference.reference.value 字段并去除前导 #。这是相对于参考字段,而不是包含的资源或容器。路径ancestor::f:*[not(parent::f:*)] 可以向上遍历祖先的多个步骤以找到包含的资源,因此它们是否在同一资源或容器中无关紧要。它使用了包含资源不能包含更多包含资源的约束,否则可能会产生歧义。

    【讨论】:

    • 非常感谢 Paul 的澄清。现在我阅读了您的回复并重新查看了文档,相对于参考字段的 xpath 部分确实非常明显,因为页面上的示例具有作为字段断言者的子项的引用。我已将您的答案标记为已接受,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多