本页面介绍了 Cloud Healthcare API 如何支持 FHIR 资源引用。
概览
FHIR 资源引用是从源资源到目标资源的方向链接。FHIR 资源引用可用于连接资源。例如,FHIR 资源类型 Observation
有一个 引用 类型的 subject
字段,可用于关联到 Patient
作为观察对象的主题。
FHIR 资源引用也可以循环。例如,FHIR 资源类型 CarePlan
具有可以指向另一个 CarePlan
的 replaces
字段。
FHIR 引用结构中最重要的元素是引用。display
和 identifier
等其他元素均保留在 Cloud Healthcare API 中。
Cloud Healthcare API 中受支持的 Reference.reference
格式包括:
本地资源引用
资源引用定义为 RESOURCE_TYPE/RESOURCE_ID
。Cloud Healthcare API 还支持在 RESOURCE_TYPE/RESOURCE_ID
前面加上完整的 FHIR 存储区名称。例如:FHIR_STORE_NAME/RESOURCE_TYPE/RESOURCE_ID
。如果您使用此格式,商店名称必须与请求的 FHIR 存储区匹配。否则,请求将因非局部引用而被拒绝。
存储配置选项 FhirStore.disableReferentialIntegrity
控制本地引用验证的引用完整性检查,该功能默认启用。如需详细了解引用完整性检查,请参阅 FHIR 引用完整性。
有版本控制的引用
Cloud Healthcare API 支持引用特定版本的目标资源。如需链接到特定目标资源的特定版本,请在本地引用的 RESOURCE_ID/_history/VERSION_ID
] 之后使用格式即可。
启用引用完整性检查后,服务器会验证历史版本是否存在于 FHIR 存储区中。Resource-purge
方法可移除历史版本,无论它们是否被引用。
条件引用
作为明确指定目标资源 ID 的替代方法,executeBundle
会接受在请求时间解析到目标资源的目标对象的条件引用搜索查询。例如 Patient?identifier=abc
。
如果搜索查询无法解析到目标资源,或者解析到多个目标资源,则无论是否启用了引用完整性检查,服务器都会拒绝请求。
URI 以 urn:uuid
或 urn:oid
开头
将 executeBundle
方法与事务包结合使用时,通用唯一标识符 (UUID) 或对象标识符 (OID) 引用可用于解析对同一事务包中要创建或更新的其他资源的引用。如需了解详情,请参阅管理 FHIR 软件包指南。
完整的外部网址
完整外部网址(例如 http://www.example.com/abc
)将未经修改地存储在引用字段中。Cloud Healthcare API 不会解析网址或尝试验证其有效性。
当完整的外部网址与请求的 FHIR 存储区的完整网址匹配时,引用将被视为本地资源引用。
Fragment 引用
Fragment 引用指向内嵌在资源中包含的资源。例如,如果观察记录提及全科医生,但没有受控医生目录,则无法创建完整的全科医生资源。全科医生是观察记录中所含的资源。资源中的引用字段可以使用 #[INLINE_RESOURCE_ID]
形式指向内嵌资源。
在以下 FHIR R4 示例中,p1
和 p2
是作为 #p1
和 #p2
引用的内嵌资源 ID:
{
"resourceType": "Observation",
"contained": [
{
"resourceType":"Patient",
"id": "p1",
"generalPractitioner": {"reference": "#p2"}
},
{
"resourceType":"Practitioner",
"id": "p2"
}
],
"status": "final",
"subject": {"reference": "#p1"},
"performer": [{"reference": "#p2"}]
}
[INLINE_RESOURCE_ID]
必须作为资源中包含的资源存在,否则服务器会拒绝请求。其所包含的资源只能由其容器或同一容器内的其他包含资源引用。