基于FHIR Basic资源扩展自定义人体模型StructureDefinition的技术问询
基于Basic资源扩展的StructureDefinition实现方案
1. 核心思路
因为FHIR没有直接支持动态键值对的原生字段,我们可以通过可重复的复合扩展来实现需求:基于Basic资源扩展,添加固定的title字段,再定义一个能重复的attribute扩展,每个扩展实例包含key和value两个子字段(value支持多类型适配未知属性)。
2. 顶层StructureDefinition(生物力学模型资源)
先定义扩展后的Basic资源结构,通过切片(slice)区分不同扩展类型:
<StructureDefinition xmlns="http://hl7.org/fhir"> <id value="BiomechanicalModel"/> <url value="http://your-project-domain/StructureDefinition/BiomechanicalModel"/> <name value="BiomechanicalModel"/> <status value="active"/> <kind value="resource"/> <abstract value="false"/> <type value="Basic"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Basic"/> <derivation value="constraint"/> <differential> <element id="Basic"> <path value="Basic"/> <short value="生物力学人体模型"/> <definition value="患者运动传感器数据生成的预计算生物力学模型"/> </element> <!-- 约束:必填的title扩展 --> <element id="Basic.extension:title"> <path value="Basic.extension"/> <sliceName value="title"/> <min value="1"/> <max value="1"/> <type> <code value="Extension"/> <profile value="http://your-project-domain/StructureDefinition/bio-model-title"/> </type> </element> <!-- 约束:可重复的attributes扩展 --> <element id="Basic.extension:attributes"> <path value="Basic.extension"/> <sliceName value="attributes"/> <min value="0"/> <max value="*"/> <type> <code value="Extension"/> <profile value="http://your-project-domain/StructureDefinition/bio-model-attribute"/> </type> </element> </differential> </StructureDefinition>
3. 子扩展定义
3.1 bio-model-title(模型标题扩展)
存储可读标题的简单字符串扩展:
<StructureDefinition xmlns="http://hl7.org/fhir"> <id value="bio-model-title"/> <url value="http://your-project-domain/StructureDefinition/bio-model-title"/> <name value="BioModelTitle"/> <status value="active"/> <kind value="complex-type"/> <type value="Extension"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension"/> <derivation value="constraint"/> <differential> <element id="Extension"> <path value="Extension"/> <short value="模型标题"/> <definition value="生物力学模型的可读名称,如'深蹲动作生物力学分析模型'"/> </element> <element id="Extension.value[x]"> <path value="Extension.value[x]"/> <min value="1"/> <type> <code value="string"/> </type> </element> </differential> </StructureDefinition>
3.2 bio-model-attribute(键值对属性扩展)
这是动态属性的核心,包含key和value两个子扩展:
<StructureDefinition xmlns="http://hl7.org/fhir"> <id value="bio-model-attribute"/> <url value="http://your-project-domain/StructureDefinition/bio-model-attribute"/> <name value="BioModelAttribute"/> <status value="active"/> <kind value="complex-type"/> <type value="Extension"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension"/> <derivation value="constraint"/> <differential> <element id="Extension"> <path value="Extension"/> <short value="模型属性"/> <definition value="生物力学模型的动态键值对"/> </element> <element id="Extension.extension:key"> <path value="Extension.extension"/> <sliceName value="key"/> <min value="1"/> <max value="1"/> <type> <code value="Extension"/> <profile value="http://your-project-domain/StructureDefinition/bio-model-attribute-key"/> </type> </element> <element id="Extension.extension:value"> <path value="Extension.extension"/> <sliceName value="value"/> <min value="1"/> <max value="1"/> <type> <code value="Extension"/> <profile value="http://your-project-domain/StructureDefinition/bio-model-attribute-value"/> </type> </element> </differential> </StructureDefinition>
3.2.1 bio-model-attribute-key(属性键扩展)
<StructureDefinition xmlns="http://hl7.org/fhir"> <id value="bio-model-attribute-key"/> <url value="http://your-project-domain/StructureDefinition/bio-model-attribute-key"/> <name value="BioModelAttributeKey"/> <status value="active"/> <kind value="complex-type"/> <type value="Extension"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension"/> <derivation value="constraint"/> <differential> <element id="Extension"> <path value="Extension"/> <short value="属性键"/> <definition value="生物力学属性名称,如'膝关节最大屈曲角度'"/> </element> <element id="Extension.value[x]"> <path value="Extension.value[x]"/> <min value="1"/> <type> <code value="string"/> </type> </element> </differential> </StructureDefinition>
3.2.2 bio-model-attribute-value(属性值扩展)
支持多类型适配未知属性,可根据需求添加更多类型(如Quantity带单位):
<StructureDefinition xmlns="http://hl7.org/fhir"> <id value="bio-model-attribute-value"/> <url value="http://your-project-domain/StructureDefinition/bio-model-attribute-value"/> <name value="BioModelAttributeValue"/> <status value="active"/> <kind value="complex-type"/> <type value="Extension"/> <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension"/> <derivation value="constraint"/> <differential> <element id="Extension"> <path value="Extension"/> <short value="属性值"/> <definition value="生物力学属性的取值,支持多类型"/> </element> <element id="Extension.value[x]"> <path value="Extension.value[x]"/> <min value="1"/> <type> <code value="string"/> </type> <type> <code value="decimal"/> </type> <type> <code value="integer"/> </type> <type> <code value="boolean"/> </type> </element> </differential> </StructureDefinition>
4. 示例资源
最终的FHIR实例示例(JSON格式):
{ "resourceType": "Basic", "meta": { "profile": ["http://your-project-domain/StructureDefinition/BiomechanicalModel"] }, "id": "bio-squat-001", "extension": [ { "url": "http://your-project-domain/StructureDefinition/bio-model-title", "valueString": "标准深蹲动作生物力学模型" }, { "url": "http://your-project-domain/StructureDefinition/bio-model-attribute", "extension": [ { "url": "http://your-project-domain/StructureDefinition/bio-model-attribute-key", "valueString": "膝关节最大屈曲角度" }, { "url": "http://your-project-domain/StructureDefinition/bio-model-attribute-value", "valueDecimal": 128.3 } ] }, { "url": "http://your-project-domain/StructureDefinition/bio-model-attribute", "extension": [ { "url": "http://your-project-domain/StructureDefinition/bio-model-attribute-key", "valueString": "动作标准度" }, { "url": "http://your-project-domain/StructureDefinition/bio-model-attribute-value", "valueBoolean": true } ] } ] }
关键注意点
- 用**切片(slice)**确保FHIR验证器能识别不同扩展类型,避免扩展混淆
- 动态键值对通过重复
bio-model-attribute扩展实现,每个实例对应一组key-value value字段的多类型选择可根据实际生物力学数据需求调整,比如增加Quantity类型存储带单位的物理量
内容的提问来源于stack exchange,提问作者com98
相关产品推荐
相关产品推荐

