このページでは、Cloud Healthcare API が FHIR リソース リファレンスどのようにサポートしているかを説明します。
概要
FHIR リソース リファレンスは、ソースリソースからターゲット リソースへの方向リンクです。FHIR リソース リファレンスを使用してリソースを接続できます。たとえば、FHIR リソースタイプ Observation
には、リファレンス型の subject
フィールドがあり、これを使用して Observation の対象として 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
は、リクエスト時にターゲット リソース ID に解決されるターゲット リソース用の条件付きリファレンス検索クエリを受け入れます。例: Patient?identifier=abc
。
検索クエリがターゲット リソースに解決されない場合や、複数のターゲット リソースに解決される場合、参照整合性チェックが有効かどうかにかかわらず、サーバーはリクエストを拒否します。
urn:uuid
または urn:oid
で始まる URI
トランザクション バンドルで executeBundle
メソッドを使用する場合、Universally Unique Identifier(UUID)またはオブジェクト識別子(OID)参照を使用して、同じバンドル内に作成または更新される他のリソースへの参照を解決できます。詳細については、FHIR バンドルの管理ガイドをご覧ください。
完全な外部 URL
http://www.example.com/abc
などの外部 URL はすべて、リファレンス フィールドにそのまま保存されます。Cloud Healthcare API は、URL を解決したり、有効性の検証を試みたりしません。
完全な外部 URL がリクエストの FHIR ストアの完全な URL と一致する場合、そのリファレンスはローカル リソース リファレンスとして処理されます。
フラグメント リファレンス
フラグメント リファレンスは、リソースにインライン化されている格納されたリソースを指します。たとえば、Observation レコードによって一般の従事者が言及されているが、管理された従事者ディレクトリがない場合、完全な従事者リソースは作成できません。一般的の従事者は、Observation レコード内の格納されたリソースです。リソースのリファレンス フィールドは、#[INLINE_RESOURCE_ID]
形式のインライン リソースを指すことができます。
次の FHIR R4 サンプルでは、p1
と p2
がインライン リソース ID であり、#p1
と #p2
として参照されます。
{
"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]
はリソース内に格納されたリソースとして存在する必要があります。存在しない場合、サーバーはリクエストを拒否します。格納されたリソースは、そのコンテナ、または同じコンテナ内の他の格納されたリソースによってのみ参照できます。