FHIRPath では、式はコレクション・ベースです。 各関数は 1 つの入力コレクションに対して機能し、各二項演算子は 2 つの入力コレクションに対して作用し、式から返される値は出力コレクションにまとめられます。一部の関数や演算は、入力コレクションのサイズに制約を課します。
ワークフロー
インターシステムズのテクノロジにより、FHIRPath を使用してリソースのデータを評価して抽出するプロセスは簡単に実行できます。
以下のセクションでは、ワークフローの各手順を詳細に説明します。
HS.FHIRPath.API のインスタンス化
FHIRPath を使用してリソースのデータを評価して抽出するプロセスは、HS.FHIRPath.API.getInstance()Opens in a new tab の呼び出しから始まります。このメソッドを呼び出す場合は、FHIR のバージョンに対応する FHIR パッケージを指定する必要があります。例えば、評価しているリソースが FHIR R4 に準拠している場合、対応するパッケージの ID は、現在、hl7.fhir.r4.core@4.0.1 になります。この場合、HS.FHIRPath.API のインスタンス化は、次のようになります。
set fhirPathAPI = ##class(HS.FHIRPath.API).getInstance($lb("hl7.fhir.r4.core@4.0.1"))
管理ポータルまたは ObjectScript を使用して、現在ロードされているパッケージの ID を取得できます。
-
管理ポータル — [ホーム] → [Health] → [MyFHIRNamespace] → [FHIR 構成] に移動し、[パッケージ構成] カードを選択します。@ 記号とバージョン番号をパッケージの名前に追加すると、パッケージの ID になります。例えば、以下のパッケージの ID は hl7.fhir.r4.core@4.0.1 です。
-
ObjectScript — パッケージの ID をプログラムによってリストするには、"利用可能なパッケージのリスト" を参照してください。
HS.FHIRPath.API オブジェクトには、FHIRPath 式を解析し、リソースを評価するのに使用されるメソッドが含まれています。このオブジェクトはまた、FHIRPathAPI プロパティの HS.FHIRMeta.API オブジェクトにプロパティとしても含まれます。
FHIRPath 式の解析
HS.FHIRPath.API オブジェクトをインスタンス化したら、FHIRPath 式を解析する準備は完了です。式を解析するメソッド HS.FHIRPath.API.parse()Opens in a new tab は、リソースを評価するメソッドで使用されるツリー構造を返します。例えば、前のセクションで示したように、インスタンス化された fhirPathAPI という名前のオブジェクトがあるとした場合、以下のようになります。
set tree = fhirPathAPI.parse("name.given.empty()")
リソースの評価
FHIRPath 式を解析したら、そのツリー構造を使用して、リソースのデータを評価または抽出できます。次の 2 つの評価メソッドを使用できます。
どちらの場合も、評価されるリソースはダイナミック・オブジェクトとしてメソッドに渡されます。parse() メソッドによって返されたツリーもまた、引数として渡されます。例を以下に示します。
set tree = fhirPathAPI.parse("name.given.empty()")
// myResource is a dynamic object
do fhirPathAPI.evaluate(myResource, tree, .OUTPUT)
set DynArray = fhirPathAPI.evaluateToJson(myResource, tree)
追加のメソッド HS.FHIRPath.API.evaluateArray()Opens in a new tab を使用して、evalaute() メソッドから返される多次元配列を解析できます。
結果の操作
evaluateToJson() によって生成されたダイナミック配列で結果を操作することにはメリットがあります。evaluate() によって生成された多次元配列には、他では入手できない追加情報が含まれます。以下に、多次元配列のデータに関する指針を示します。evaluate() に対する応答は OUTPUT という名前の変数で返されたものとします。
ノード |
説明 |
OUTPUT |
配列内の値を含むノード数。 |
OUTPUT(n) |
配列の n 番目の要素の値。 |
OUTPUT(n,"t") |
FHIR データ型の識別を含む、配列の n 番目の要素のデータ型。 |
返された多次元配列は、evaluateArray() メソッドを使用してさらに解析することができます。
対照的に、evaluateToJson() を使用してダイナミック配列を生成する場合、配列内の値を見ると、データ型が文字列、ブーリアン、数字、またはオブジェクトのどれであるかは判断できますが、FHIR データ型は判断できません。
ワークフローの例 : evaluate() メソッド
この例には、評価されるリソース、リソースの評価に必要な ObjectScript、および評価によって生成される多次元配列の確認が含まれます。
サンプル・リソース
set myResource = {
"resourceType":"Patient",
"telecom": [
{
"system": "phone",
"value": "(03) 5555 6473",
"use": "official"
},
{
"system": "phone",
"value": "(03) 5555 6473",
"use": "home"
},
{
"system": "email",
"value": "myName@email.com",
"use": "official"
}
]
}
リソースからのデータの抽出
set fhirVersion = $lb("hl7.fhir.r4.core@4.0.1")
set fhirPathAPI = ##class(HS.FHIRPath.API).getInstance(fhirVersion)
set tree = fhirPathAPI.parse("telecom.where(use = 'official')")
do fhirPathAPI.evaluate(myResource, tree, .OUTPUT)
多次元配列の表示
InterSystems ターミナルで zw OUTPUT コマンドを使用して、evaluate() から返された多次元配列を表示する場合、結果は以下のようになります。
OUTPUT=2
OUTPUT(1)={"system":"phone","value":"(03) 5555 6473","use":"official"}
OUTPUT(1,"t")="ContactPoint"
OUTPUT(2)={"system":"email","value":"myName@email.com","use":"official"}
OUTPUT(2,"t")="ContactPoint"
値は、ContactPoint FHIR データ型として識別されることに注意してください。
ワークフローの例 : evaluateArray() メソッド
この例では、上記の evaluate() 例の評価で生成された多次元配列を入力として使用し、結果として生じる配列の評価に必要な ObjectScript を示し、評価によって生成される多次元配列を表示します。
出力配列からのデータの抽出
Merge INPUT = OUTPUT
Kill OUTPUT
Set tree = fhirPathAPI.parse("ContactPoint.value")
do fhirPathAPI.evaluateArray(.INPUT, tree, .OUTPUT)
多次元配列の表示
InterSystems ターミナルで zw OUTPUT コマンドを使用して、evaluateArray() から返された多次元配列を表示する場合、結果は以下のようになります。
OUTPUT=2
OUTPUT(1)="(03) 5555 6473"
OUTPUT(1,"t")="string"
OUTPUT(2)=”myName@email.com"
OUTPUT(2,"t")="string"
値は、ObjectScript データ型 (文字列、ブーリアン、数字、またはオブジェクト) によって識別されることに注意してください。
ワークフローの例 : evaluateToJson() メソッド
この例には、評価されるリソース、リソースの評価に必要な ObjectScript、および評価によって生成されるダイナミック配列の確認が含まれます。
サンプル・リソース
set myResource = {
"resourceType":"Patient",
"name": [
{
"family": "Cooper",
"given": [
"James",
"Fenimore"
]
}]
}
リソースの評価
set fhirVersion = $lb("hl7.fhir.r4.core@4.0.1")
set fhirPathAPI = ##class(HS.FHIRPath.API).getInstance(fhirVersion)
set tree = fhirPathAPI.parse("name.given.empty()")
set dynArray = fhirPathAPI.evaluateToJson(myResource, tree)
ダイナミック配列の表示
InterSystems ターミナルで zw dynArray コマンドを使用してダイナミック配列を表示する場合、結果は以下のようになります。
dynArray=[false]