CDA XSL 変換のカスタマイズ
CDA XSL 変換の標準ライブラリを拡張する必要が生じることがあります。例えば、特定の CDA セクションを変換する場合に、ロジックの一部を変更する必要が生じることがあります。あるいは、カスタム SDA 拡張、カスタム・ペア、またはカスタム・オブジェクトのサポートを追加したい場合もあります。カスタム SDA 拡張、ペア、およびオブジェクトの詳細は、"SDA : インターシステムズの臨床データ形式" の "SDA のカスタマイズ" のセクションを参照してください。
XSL の標準ライブラリを直接編集する代わりに、カスタム XSL を作成することができます。次の 2 つの理由により、直接編集よりもカスタム XSL を作成することを推奨します。第 1 に、標準のルート XSL をこの方法で上書きすることで、その変換への既存のアプリケーション呼び出しを変更する必要がなくなります。第 2 に、アップグレードの結果、標準の XSL ライブラリが置き換えられてカスタマイズが消去される事態を防止することができます。カスタム・ディレクトリ内の XSL はアップグレード時に置き換えられません。
変換のカスタマイズの準備 : Docker コンテナ
変換をカスタマイズする計画があり、InterSystems IRIS for Health が Docker コンテナで実行されている場合、コンテナは永続ディレクトリを指している必要があります。永続ディレクトリの詳細は、"コンテナ内でのインターシステムズ製品の実行" を参照してください。
インスタンスがコンテナ内で実行されている場合は、以下の準備ステップを実行してから、変換のカスタマイズを開始する必要があります。
-
管理ポータルで、/csp/xslt Web アプリケーションを作成します。
-
管理ポータルに %HS_Administrator ロールを持つユーザとしてログインします。
-
[システム管理]→[セキュリティ]→[アプリケーション]→[ウェブ・アプリケーション] に移動します。
-
[新しいウェブ・アプリケーションを作成] をクリックします。
-
フォームで、以下のようにフィールドに情報を入力します。
-
名前 — /csp/xslt
-
ネームスペース — HSLIB
-
有効 — [アプリケーション有効] と [CSP/ZEN] を選択
-
[CSP ファイルの設定] は以下のようにします。
-
静的ファイルの提供 — 既定値を使用
-
静的ファイルの提供タイムアウト — 既定値を使用
-
物理パス — 永続ディレクトリ内のディレクトリ (/container/durable/csp/xslt/ など)。必ず末尾にスラッシュを付けてください。
-
ウェブ設定 — 既定値を使用
-
-
-
[保存] をクリックします。
-
-
ターミナル・セッションを開き、%HS_Administrator ロールを持つユーザとしてログインします。
-
カスタマイズする XSLT ファイルを上の手順で指定された物理パスにコピーするには、HSLIB ネームスペース内で以下を実行します。
do ##class(HS.HC.Util.Installer.Upgrade.XSLTDirectoryCopy).Update()
詳細な出力を表示するには、Update() メソッドの単一パラメータとして 1 を指定します。
カスタム変換の作成
カスタム CDA 変換を作成するには、以下の手順に従います。
-
変換が存在するディレクトリに Custom サブディレクトリを作成します。例えば、install-dir/CSP/xslt/SDA3/CDA-to-SDA.xsl をカスタマイズする場合、カスタム・サブディレクトリは install-dir/CSP/xslt/SDA3/Custom にする必要があります。カスタム・フォルダ内のファイルはアップグレード時に上書きされません。
-
好みの IDE で、カスタマイズする変換を開き、その一部をコピーできるようにします。
-
カスタマイズする XSL と同じ名前の空のカスタム XSL を作成します。例えば、CDA-to-SDA.xsl をカスタマイズする場合は、install-dir/CSP/xslt/SDA3/Custom に CDA-to-SDA.xsl という名前の XSL を作成します。
-
以下の初期文をカスタム XSL に追加します。最初の 2 つ (XSL 宣言と XSL スタイルシート) は、元の CDA XSL ファイルからコピーできます。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:isc="http://extension-functions.intersystems.com" xmlns:hl7="urn:hl7-org:v3" xmlns:sdtc="urn:hl7-org:sdtc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:exsl="http://exslt.org/common" exclude-result-prefixes="isc hl7 sdtc xsi exsl">
-
スタイルシートの終了タグを追加します。カスタマイズは、xsl:stylesheet の開始タグと終了タグの間に配置されます。
</xsl:stylesheet>
-
カスタマイズする変換の import 文を追加します。
<xsl:import href="../<filename>"/>
<filename> はカスタマイズする変換の名前です (例 : CDA-to-SDA.xsl)。カスタマイズするファイルがインポートされ、そのテンプレートを 1 つ以上上書きできるようになります。
-
上書きするテンプレートを元の変換からコピーして、新しいファイルに貼り付けます。
-
必要に応じて、テンプレート・ロジックをカスタマイズします。これにより、元の XSL のテンプレートが上書きされます。
-
ベストプラクティスとして、テンプレートのコピー元を示すコメントを追加します。例えば、テンプレートが元々 install-dir/CSP/xslt/SDA3/CDA-Support-Files/Import/Entry-Modules/Medications.xsl にあった場合は、その旨を記載します。
-
作業内容を保存します。
-
インストール環境がミラーにデプロイされている場合は、上記のプロセスをすべてのミラー・メンバで繰り返します。
-
プロダクションを再起動してカスタム XSL を有効にします。
変換の拡張
"SDA : インターシステムズの臨床データ形式" の “SDA のカスタマイズ” の章で説明されているように、SDA は複数の方法で拡張できます。以下の拡張をカスタム CDA 変換に組み込むことができます。
-
カスタム・コンテナまたはカスタム・オブジェクトにより、サポートされていない CDA セクションを取得できる
-
拡張クラスにより、サポートされているセクションに属しているのに SDA で取得されないデータを追加できる
空のテンプレートを CDA のインポートおよびエクスポートの XSL に含めて、以下を容易に行うことができます。
-
サポートされていない CDA セクションをカスタム・コンテナまたは <CustomObject> にインポートする
-
CDA データを SDA 拡張クラスまたは既存の SDA セクション内の <CustomPairs> にインポートする
-
カスタム・コンテナまたは <CustomObject> をサポートされていない CDA セクションにエクスポートする
空のテンプレートには常に Custom という語が含まれるため、容易に識別できます。
以下で、上記の各カスタマイズを実装する方法を詳しく説明します。
-
サポートされていない CDA セクションをカスタム・コンテナまたは <CustomObject> にインポートするには、編集する XSL でカスタム・テンプレートを見つけます。例えば、CDA-to-SDA.xsl では、テンプレートは <xsl:template match="*" mode="ImportCustom-Container"> という名前です。このテンプレートをカスタム CDA-to-SDA.xsl ファイル (または、カスタマイズするファイルのカスタム・バージョン) にコピーし、空のカスタム・テンプレートを編集して必要なロジックを含めます。
-
CDA データを SDA 拡張クラスまたは既存の SDA セクション内の <CustomPairs> にインポートするには、目的のセクションのインポート XSL でカスタム・テンプレートを見つけます。例えば、BodySite 要素を Procedure にインポートするには、Entry-Modules/Procedure.xsl 内でカスタム・テンプレートを見つけます。この例では、テンプレートは <xsl:template match="*" mode="ImportCustom-Procedure"> という名前です。このテンプレートをカスタム CDA-to-SDA.xsl ファイル (または、カスタマイズするファイルのカスタム・バージョン) にコピーし、空のカスタム・テンプレートを編集して必要なロジックを含めます。
-
カスタム・コンテナまたは <CustomObject> をサポートされていない CDA セクションにエクスポートするには、XSL 内で編集するカスタム・テンプレートを見つけます。例えば、SDA-to-C32v25.xsl では、テンプレートは xsl:template match="*" mode="ExportCustom-ClinicalDocument"> という名前です。このテンプレートをカスタム SDA-to-C32v25.xsl ファイル (または、カスタマイズするファイルのカスタム・バージョン) にコピーし、空のカスタム・テンプレートを編集して必要なロジックを含めます。
カスタム変換のデバッグ
カスタム変換のデバッグは、さまざまな状況に適用可能な一連のツールと手法で構成されます。
デバッグでは、以下を行うことができます。
-
<DEBUGGING> タグ内に含まれるコードを使用して、変換の実行時に値を取得できます。
-
プロダクション内で相互運用性ツールを使用してドキュメントのトレースを表示できます (HealthShare Unified Care Record のみ)。
コードのデバッグ
<DEBUGGING> タグを使用すると、ステップを追って変換を実行することができます。変換内で値を取得したい場所に <DEBUGGING> タグを配置します。タグ内のコードで変数、属性、または Xpath の値を取得できます。
以下に、さまざまな状況におけるデバッグ・コードの例を示します。
変数の値の取得
この例では、FileName.xsl という XSL 内で変数 $variable の値を取得します。
<DEBUGGING-VARIABLE-file-FileName.xsl-TemplateName>
$variable = <xsl:value-of select="$variable"/>
</DEBUGGING-VARIABLE-file-FileName.xsl-TemplateName>
属性の値の取得
この例では、/ClinicalDocument/id にある root 属性の XSL パス値を取得します。
<DEBUGGING-PATHVALUE>
CDA source OID = <xsl:value-of select="/hl7:ClinicalDocument/hl7:id/@root"/>
</DEBUGGING-PATHVALUE>
ノード位置付きの XPath の取得
XPath の取得では、テンプレートを利用します。テンプレート currentXPathWithPos を呼び出すと、現在の XPath がノード位置付きで返されます。例えば ClinicalDocument/component[1] と指定すると、ClinicalDocument 内の最初の component 要素が返されます。以下の例は、現在の位置の XPath をノード位置付きで取得する方法を示しています。
<DEBUGGING-PATHXMLWithPos>
<xsl:apply-templates select="." mode="currentXPathWithPos"/>
</DEBUGGING-PATHXMLWithPos>
この呼び出しの結果は、以下のようになります。
<DEBUGGING-PATHXMLWithPos>/ClinicalDocument[1]/component[1]/structuredBody[1]/component[8]
/section[1]/entry[1]/procedure[1]</DEBUGGING-PATHXMLWithPos>
ノード位置なしでの XPath の取得
currentXPath テンプレートを呼び出すと、XPath がノード位置なしで返されます。以下の例は、現在の位置の XPath をノード位置なしで取得する方法を示しています。
<DEBUGGING-PATHXMLWithoutPos>
<xsl:apply-templates select="." mode="currentXPath"/>
</DEBUGGING-PATHXMLWithoutPos>
この呼び出しの結果は、以下のようになります。
<DEBUGGING-PATHXMLWithoutPos>/ClinicalDocument/component/structuredBody/component
/section/entry/procedure</DEBUGGING-PATHXMLWithoutPos>
テンプレート currentXPathWithPos と currentXPath は、install-dir/csp/xslt/SDA3/CDA-Support-Files/System/Common/Functions.xsl にあります。
XPath ツリーの取得
copy テンプレートを呼び出すと、現在の XPath ツリーが返されます。以下の例では、DEBUGGING タグに現在の XPath ツリーを挿入して、現在の XPath ツリーを取得します。
<DEBUGGING-PATHXMLTree>
<xsl:apply-templates select="." mode="copy"/>
</DEBUGGING-PATHXMLTree>
テンプレート copy は、install-dir/csp/xslt/SDA3/CDA-Support-Files/System/Common/Functions.xsl にあります。
これらの <DEBUGGING> タグと取得した値は、変換には表示されますが、Clinical Viewer や [要約の表示] ページには表示されません。
<DEBUGGING> タグを使用すると、CDA の処理が失敗する場合があります。このため、<DEBUGGING> タグはデバッグ・プロセスでのみ使用してください。
相互運用性ツール
インターシステムズ製品では、変換プロセスを検査できる相互運用性ツールが用意されています。メッセージ・トレースを使用して、以下のポイントでプロセスを検査できます。
-
HealthShare Unified Care Record :
-
ドキュメント取得時に、コンシューマの Edge Gateway プロダクションで (リポジトリ内の CDA が SDA に変換されるとき)
-
Clinical Viewer が受信 SDA を受け取ったとき
-
-
InterSystems IRIS for Health および Health Connect : 関連するビジネス・オペレーションのメッセージ・トレースを検証します。例えば、インバウンド SDA の場合は、インバウンド SDA 処理の変換を扱うビジネス・オペレーションのメッセージ・トレースを調べます。
さらに、[要約を表示] ページで送信 CDA の変換を確認することもできます。
メッセージ・トレース
メッセージ・トレースを表示するには、以下の手順に従います。
-
管理ポータルに %EnsRole.Administrator ロールを持つユーザとしてログインします。
-
適切なネームスペースを選択します。
-
HealthShare Unified Care Record の場合 :
-
ドキュメント取得のトレースを表示するには、コンシューマ Edge Gateway のネームスペースを選択します。
-
受信 SDA のトレースを表示するには、Access Gateway のネームスペースを選択します。
-
-
InterSystems IRIS for Health または Health Connect の場合 : 変換を処理するビジネス・ホストの Foundation ネームスペースを選択します。
-
-
[相互運用性]→[構成]→[プロダクション] に移動します。
-
プロダクションを開きます。
-
適切なコンポーネントを選択します。例えば、HS.IHE.XDSb.Consumer.Operations を使用してドキュメントを取得できます。
-
右側のパネルで [メッセージ] タブをクリックします。
-
[メッセージ・ビューワに移動] リンクをクリックします。
-
変換を表すメッセージを選択します。上の例に従うと、このメッセージのソースは HS.IHE.XDSb.Consumer.Operations です。
-
右側のパネルで [トレース] タブをクリックします。
-
[完全トレースを表示] リンクをクリックします。
-
右側のパネルで [コンテンツ] タブをクリックします。
[コンテンツ] タブにメッセージ・トレースが表示されます。
要約の表示
HealthShare Unified Care Record を実行している場合は、CDA ドキュメントと SDA の対応ドキュメントとを Clinical Viewer 内で比較することもできます。
Clinical Viewer を使用するには、以下の手順に従います。
-
管理ポータルに %HS.Administrator ロールを持つユーザとしてログインします。
-
[HealthShare]→ <Access_Gateway_Namespace> [患者検索] に移動します。
-
表示する CDA ドキュメントの患者の検索情報を入力します。
-
患者を選択します。
Clinical Viewer でページ上部の [要約の表示] リンクをクリックして、[要約の表示] ページを開きます。このページで、患者の要約を SDA ドキュメントとして、または Continuity of Care Document (CCD、HITSP C32) などの CDA ドキュメントとして表示できます。[要約の表示] ページの使用の詳細は、"Unified Care Record セキュリティ・ガイド" の “患者レポートの表示および変更” の章を参照してください。