FHIR 资源引用

本页面介绍了 Cloud Healthcare API 如何支持 FHIR 资源引用

概览

FHIR 资源引用是从源资源到目标资源的方向链接。FHIR 资源引用可用于连接资源。例如,FHIR 资源类型 Observation 有一个 引用 类型的 subject 字段,可用于关联到 Patient 作为观察对象的主题。

FHIR 资源引用也可以循环。例如,FHIR 资源类型 CarePlan 具有可以指向另一个 CarePlanreplaces 字段。

FHIR 引用结构中最重要的元素是引用displayidentifier 等其他元素均保留在 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:uuidurn:oid 开头

executeBundle 方法与事务包结合使用时,通用唯一标识符 (UUID) 或对象标识符 (OID) 引用可用于解析对同一事务包中要创建或更新的其他资源的引用。如需了解详情,请参阅管理 FHIR 软件包指南

完整的外部网址

完整外部网址(例如 http://www.example.com/abc)将未经修改地存储在引用字段中。Cloud Healthcare API 不会解析网址或尝试验证其有效性。

当完整的外部网址与请求的 FHIR 存储区的完整网址匹配时,引用将被视为本地资源引用。

Fragment 引用

Fragment 引用指向内嵌在资源中包含的资源。例如,如果观察记录提及全科医生,但没有受控医生目录,则无法创建完整的全科医生资源。全科医生是观察记录中所含的资源。资源中的引用字段可以使用 #[INLINE_RESOURCE_ID] 形式指向内嵌资源。

在以下 FHIR R4 示例中,p1p2 是作为 #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] 必须作为资源中包含的资源存在,否则服务器会拒绝请求。其所包含的资源只能由其容器或同一容器内的其他包含资源引用。