FHIR Contained Resources引用规则及嵌套配置技术咨询
FHIR Contained资源引用核心规则
引用嵌套Contained资源时,不存在通过代码侧元素别名、节点键名引用的机制,必须严格匹配被引用资源自身声明的id字段值,以#id值的格式完成引用。
具体规则细节:
- 所有进入
contained数组的资源,必须在自身根节点显式声明id字段,该字段值是所在contained范围内的唯一标识 - 引用锚点的匹配范围,是从当前引用位置所在的资源层级向上,逐层级遍历所有嵌套的contained资源列表,仅识别资源自身声明的
id值 - 代码开发时给自定义类属性、数组元素起的别名/变量名,只会存在于业务代码逻辑中,不会被序列化到最终的FHIR资源JSON结构里,FHIR解析器完全无法识别这类自定义名称
- id字段的匹配是大小写敏感的,引用值和被引用资源的id必须完全一致才能匹配成功
你提供示例中存在的问题
对照上述规则,当前生成的资源存在以下无法正常解析、不符合实现目标的问题:
- 根资源的
resourceType为TestInput,和你预期构建Basic资源的目标不一致,正式实现时需要将根资源类型调整为Basic - 第一个扩展字段的
valueReference.reference值为#testConfiguration,但对应的嵌套TestConfiguration资源声明的id为TestConfigurationId,锚点值不匹配,解析器无法定位目标资源 - TestConfiguration内部嵌套的DeviceDefinition资源没有显式声明
id字段,TestConfiguration中definition.reference写的#definition没有对应的匹配目标,属于无效引用 - 第二个扩展字段的
valueReference.reference值为#digitalSampleId,但对应嵌套的DigitalSample资源声明的id为DigitalSampleId,存在大小写错位,匹配会失败
正确实现的调整方式
- 逐一对所有Contained资源补充显式的id声明:比如给DeviceDefinition设置id为
definition,就可以让TestConfiguration内部的#definition引用正常匹配;如果希望扩展字段引用TestConfiguration,可直接将TestConfiguration的id设置为testConfiguration,和扩展里的引用值保持一致 - 对DigitalSample的id做统一调整:要么把资源id改成
digitalSampleId,要么把扩展里的引用值改成#DigitalSampleId,保证两边完全匹配 - 开发时注意.NET SDK的序列化逻辑不会自动把类属性名写入contained资源的id字段,需要在业务逻辑里显式给每个嵌套资源赋值id,不要依赖自动生成的名称
- 根资源类型修正为
Basic,匹配扩展挂载的目标资源要求
内容的提问来源于stack exchange,提问作者Rjeymonk
相关产品推荐
相关产品推荐

