Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

カスタム・スキーマ・カテゴリの作成

Ensemble でカスタム・スキーマ・カテゴリを作成しなければならない場合があります。この章では、その詳細について説明します。以下のトピックについて説明します。

Important:

組み込みスキーマ・カテゴリ定義は絶対に編集しないでください。カスタム・スキーマが必要な場合 (または、HL7 では、Z セグメントを含むカスタム・メッセージ・タイプが必要な場合) は、組み込みスキーマ・カテゴリ定義をスキーマ・ベースとして使用するカスタム・スキーマ・カテゴリ定義を作成します。

これらのタスクはプロダクションが存在しているネームスペースで実行する必要があります。

カスタム・スキーマ・カテゴリが必要な場合

ASTMEDIFACTHL7、および X12 標準は拡張可能です。

例えば、ASTM をカスタマイズする一般的な方法は、他の標準の ASTM ドキュメント構造にカスタム・セグメントを追加することです。

同様に、HL7 をカスタマイズする一般的な方法は、他の標準の HL7 メッセージ構造にカスタム・セグメントを追加することです。規則により、カスタム・セグメントは Z の文字で始まる名前 (ZEK、ZPM など) を持つため、カスタム・セグメントは Z セグメントと呼ばれます。カスタムのメッセージ構造は、多くの場合、いくつかの Z セグメントが追加されている標準メッセージで構成されます。

ロードした標準スキーマに従っていないドキュメントを操作する場合は、以下のどちらかを実行するために対応するカスタム・カテゴリを作成する必要があります。

  • 構造的なドキュメントの検証の実行

  • BPL、DTL、およびルーティング・ルール構文でのセグメントおよびフィールド・パス名の使用

カスタム・スキーマ・カテゴリの作成方法

カスタム・スキーマ・カテゴリを作成する一般的な方法が 4 つあります。

  • カスタム HL7 スキーマを作成するには、"HL7 バージョン 2 開発ガイド" の “カスタム・スキーマ・エディタの使用法” の説明に従ってカスタム・スキーマ・エディタを使用できます。

  • 最も厳密にニーズを満たしているスキーマ・ファイルのコピーを作成します。そのファイルを編集します。その後で、“ポータル・ツール” の章の説明に従って、そのファイルをインポートします。

  • スタジオで、最も厳密にニーズを満たしているスキーマ・カテゴリ定義を開きます。[ファイル]→[名前を付けて保存] を使用して新しい定義を作成します。その後で、そのコピーを編集します。“Ensemble 内でのスキーマ・カテゴリの構文” の節で、この定義の構文について詳しく説明します。

  • スタジオ・ウィザードを使用して、新しいスキーマ・カテゴリ定義を作成してから、それを編集します。"Ensemble X12 開発ガイド" の “カスタム X12 スキーマの作成” を参照してください。同じプロセスを ASTMEDIFACT、および HL7 に対しても使用できます。

スタジオの [ワークスペース] ウィンドウに、特定のネームスペース内のスキーマ・カテゴリが一覧表示されます。[その他] フォルダを参照してください。これらの定義には、.AST.HL7.X12 などのファイル拡張子が付けられます。

Ensemble 内でのスキーマ・カテゴリの構文

Ensemble では、ASTMEDIFACTHL7、および X12 用のスキーマ・カテゴリ定義を表現するために同じ XML ベースの構文が使用されます。以下に例を示します。この例は、項目を省略するための省略記号 (...) が含まれており、右端で切れているため、実際のテキストはこれより広範囲に及びます。

generated description: portal schema xml

<Category> 要素内において、この例は、使用する必要のない 2 つの XML 要素のセット、<MessageGroup> および <MessageEvent> で始まります。これらの要素は、HL7 メッセージを機能カテゴリにグループ化します。この例は、使用する必要のない別の 2 つの XML 要素、<DataStructure> および <CodeTable> で終了します。これらの要素は、特定のメッセージの特定のフィールドの有効値の範囲を定義します。

カスタム・スキーマ・カテゴリを作成する際、カスタム・セグメント (Z セグメント) を定義し、これらのセグメントを含む可能性のあるメッセージ・タイプとメッセージ構造を記述することにより、既存のスキーマを補足します。これを行うために必要なことは、XML 要素 <MessageType>、<MessageStructure>、および <SegmentStructure> を使用することのみです。

カスタムのスキーマ・カテゴリ定義は、組み込みの定義より単純で、含まれる文は少なくなります。ベース・カテゴリ内のすべてがカスタムのスキーマ・カテゴリ定義に含まれます。標準メッセージ・タイプの定義を繰り返す必要はありません。カスタム・メッセージ・タイプを定義するだけです。これを行うための規則は以下のとおりです。

定義対象 定義方法
カスタムのスキーマ・カテゴリ定義 <Category>
カスタム・セグメント (HL7 メッセージの場合は Z セグメントと呼ばれる) <SegmentStructure>
カスタム・セグメントを含むメッセージ構造 <MessageStructure>
カスタム・セグメントのあるメッセージ構造を含むメッセージ・タイプ。メッセージ・タイプは以下を指定します。
  • 送信するメッセージ構造

  • 応答で予定されるメッセージ構造

<MessageType>

スタジオで表示すると、カスタム・スキーマ・カテゴリ定義は以下の図のようになります。実際のテキストは例よりも幅広くなります。例では、右側が省略されています。この例のすべてを表示するには、ENSDEMO ネームスペースのスキーマ定義ファイル Demo.HL7.MsgRouter.Schema.HL7 を開いてください。

generated description: portal schema xml custom

<Category>

<Category> 要素は、カスタム・スキーマ・カテゴリを記述する XML ドキュメントの最上位のコンテナです。以下は、カスタムのスキーマ・カテゴリ定義の <Category> 構文の例です。

<Category name="Demo.HL7.MsgRouter.Schema" base="2.3.1">
  <!-- All the statements in the custom schema category definition -->
</Category>

以下のテーブルは、<Category> の属性を示しています。

属性 説明
name [スキーマ構造] ページの利用可能なスキーマ・カテゴリのリストに表示される名前。 文字列。便宜上、.HL7 ファイルまたはその他のスキーマ・ファイルの名前を使用します。
std 1 (真) の場合、この <Category> ブロックは標準の HL7 スキーマ・カテゴリを示します。デフォルトは、0 (偽) です。 標準のスキーマ・カテゴリ定義専用。カスタム・スキーマには std を使用しないでください。
base このカスタム・スキーマ・カテゴリのベースとなるスキーマ・カテゴリを指定します。スキーマ・ベース内の各定義が自動的にカスタム・カテゴリに含まれ、カスタム・スキーマ・カテゴリ内の文が単純にベースに追加されます。 別の .HL7 ファイルまたはその他のスキーマ・ファイル内の <Category> ブロックを使用して定義された標準またはカスタム・スキーマ・カテゴリの name

<SegmentStructure>

<Category> 要素には、1 つ以上の <SegmentStructure> 要素を含めることができます。各 <SegmentStructure> 要素では、カスタム・セグメント (Z セグメント) の構造を定義します。以下は、<SegmentStructure> 要素の構文の例です。

<SegmentStructure name='ZNB' description='Newborn Abstract'>
  <SegmentSubStructure piece='1' description='SetID' symbol='!'
                       length='4' required='R' ifrepeating='0'/>
  <SegmentSubStructure piece='2' description='Birth Status Code'
                       length='60' required='O' ifrepeating='0'/>
  <SegmentSubStructure piece='3' description='Birth Type Code'
                       length='60' required='O' ifrepeating='0'/>
  <SegmentSubStructure piece='4' description='C-Section Indicator'
                       length='2' required='O' ifrepeating='0'/>
  <SegmentSubStructure piece='5' description='Gestation Period - Weeks'
                       length='3' required='O' ifrepeating='0'/>
  <SegmentSubStructure piece='6' description='Encounter Number' symbol='!'
                       length='12' required='R' ifrepeating='0'/>
  <SegmentSubStructure piece='7' description='Newborn Code' symbol='!'
                       length='60' required='R' ifrepeating='0'/>
  <SegmentSubStructure piece='8' description='Newborn Weight'
                       length='10' required='O' ifrepeating='0'/>
  <SegmentSubStructure piece='9' description='Stillborn Indicator'
                       length='8' required='O' ifrepeating='0'/>
</SegmentStructure>

以下のテーブルは、<SegmentStructure> の属性を示しています。

属性 説明
name [スキーマ構造] ページの利用可能なセグメント構造のリストに表示される名前。 3–文字の文字列。規則により、カスタム・セグメント名は Z の文字で始まります。
description [スキーマ構造] ページおよび [ドキュメント・ビューア] ページのツールのヒントに表示される、セグメントのコンテンツを説明するテキスト。 文字列

<SegmentSubStructure>

<SegmentStructure> 要素には、1 つ以上の <SegmentSubStructure> 要素を含めることができます。各 <SegmentSubStructure> 要素は、カスタム・セグメントの 1 つのフィールドを、上から下に順に説明します。以下は、<SegmentSubStructure> 要素の構文の例です。

<SegmentSubStructure piece='6' description='Encounter Number' symbol='!'
                     length='12' required='R' ifrepeating='0'/>

以下のテーブルは、<SegmentSubStructure> の属性を示しています。

属性 説明
piece ユーザがこのフィールドを含むセグメントの詳細を表示するよう要求したときに [スキーマ構造] ページに表示される数値。この数値を使用して、仮想プロパティ・パスのフィールドを指定できます。 整数。<SegmentStructure> 内の各 <SegmentSubStructure> は、1 から始まり、1 ずつ増加するよう順に piece 値を使用する必要があります。
codetable このフィールドで有効な値を列挙するコード・テーブル。カスタム・スキーマでは通常この属性は使用されません。 <CodeTable> ブロックを使用して定義されたコード・テーブルの name
datastruct このフィールドの値の解釈方法を指定するデータ構造。カスタム・スキーマでは通常この属性は使用されません。 <DataStructure> ブロックを使用して定義されたデータ構造の name
description [スキーマ構造] ページおよび [ドキュメント・ビューア] ページのツールのヒントに表示される、フィールドのコンテンツを説明するテキスト。 文字列
symbol

セグメント内のこのフィールドの有無または繰り返しの要件を示す記号。

このフィールドはオプションです。これは [スキーマ構造] ページでインジケータとして機能します。フィールドの要件または繰り返しを実際に制御することはありません。required および ifrepeating を参照してください。

以下の単一文字

  • ! は、1 のみを意味します。フィールドは表示する必要がありますが、1 回のみです。

  • ? は、0 または 1 を意味します。フィールドは表示することができますが、最大 1 回です。

  • + は、1 以上を意味します。フィールドは 1 回以上繰り返すことができます。

  • * は、0 以上を意味します。フィールドは 0 回以上繰り返すことができます。

  • & は、特定の条件においてのみ、フィールドを表示し、繰り返すことができることを意味します。

length このフィールドに表示できる文字数の上限。 整数
required このフィールドをセグメント内に表示する必要性。

以下の単一文字

  • C は条件付きであることを意味します。

  • O はオプションであることを意味します。

  • R は必須であることを意味します。

ifrepeating このフィールドをセグメント内で繰り返す可能性。 整数。0 は繰り返す可能性がないことを意味し、1 は繰り返す可能性があることを意味します。

<MessageStructure>

<Category> 要素には、1 つ以上の <MessageStructure> 要素を含めることができます。各 <MessageStructure> 要素は、メッセージ構造内のセグメントの数および配置についての仕様を指定します。以下は、<MessageStructure> 要素の構文の例です。

<MessageStructure
  name='MFN_M03'
  definition='base:MSH~base:MFI~{~base:MFE~[~ZSI~]~base:OM1~[~base:Hxx~]~}'
  description='HNB MFN message'
  />

以下のテーブルは、<MessageStructure> の属性を示しています。

属性 説明
name [スキーマ構造] ページの利用可能なメッセージ構造のリストに表示される名前。 3 文字の文字列、アンダースコア (_)、および 3 文字の文字列で構成。
definition メッセージ構造内のセグメントの数および配置についての仕様。標準およびカスタムのメッセージ・セグメントの組み合わせを含む場合があります。以下の構文ルールを参照してください。 <SegmentStructure> を使用して定義された標準またはカスタムのメッセージ・セグメントの 3 文字の name 値を含む文字列。
description [スキーマ構造] ページおよび [ドキュメント・ビューア] ページのツールのヒントに表示される、フィールドのコンテンツを説明するテキスト。 文字列

definition 文字列の構文規則は以下のとおりです。

  • 文字列全体を 1 行に収めます。

  • 各セグメントを左から右に向かって順に列挙します。

  • セグメントを列挙する際、<SegmentStructure> で定義された name 値を使用します。

  • セグメント間は ~ (チルダ) 文字で区切られます。

  • セグメントまたはセグメントのブロックが繰り返される場合、繰り返し部分を {~ および ~} で囲みます。

  • セグメントまたはセグメントのブロックがオプションの場合、オプション部分を [~ および ~] で囲みます。

definition 内では、name を単純にすることができます。この場合、Ensemble は、同じ .HL7 ファイル内のカスタム <MessageStructure> ブロックの値を参照していると見なします。さらに、name は、スキーマ・ベースの標準メッセージ構造を表すこともできます。これは、<Category> 要素に含まれる base 属性で指定された .HL7 ファイルで定義されます。これを指定するには、name で以下の接頭語を使用する必要があります。

base:

これにより、Ensemble は別のファイルで適切な <SegmentStructure> を見つけることができます。他の外部 .HL7 を参照することはできません。スキーマ・ベースのみとなります。

このトピックの最初の <MessageStructure> の例では、同じ .HL7 ファイルには ZSI セグメントのみが定義されています。その他のセグメント (MSH、MFI、MFE、OM1、および Hxx) はすべてスキーマ・ベース内で定義されます。

<MessageType>

<Category> 要素には、1 つ以上の <MessageType> 要素を含めることができます。<MessageType> エントリは、カスタム・セグメントのあるメッセージ構造を含むメッセージ・タイプを定義します。<MessageType> 要素は、以下の 2 つの項目の単純なリストです。

  • 送信するメッセージ構造

  • 応答で予定されるメッセージ構造

以下は、<MessageType> 要素の構文の例です。

<MessageType name='ADT_A31' structure='ADT_A01' returntype='base:ACK_A31'/>

以下のテーブルは、<MessageType> の属性を示しています。

属性 説明
name [スキーマ構造] ページの利用可能なメッセージ・タイプのリストに表示される名前。 3–文字の文字列、アンダースコア (_)、および 3 文字の文字列で構成。
structure 送信するメッセージ構造。 <MessageStructure> を使用して定義された標準またはカスタムのメッセージ構造の name
returntype 応答で予定されるメッセージ構造。これは、有効な ACK メッセージ構造である必要があります。returntype がスキーマ・ベースの値であることを確認してください。例 : returntype="base:ACK" <MessageStructure> を使用して定義された標準またはカスタムのメッセージ構造の name

structure 値は、現在の .HL7 ファイルの単純な name 値にすることができます。以下のように、structure が MFN_M03 である構文がファイルに含まれる場合、

<MessageType name='MFN_M03' structure='MFN_M03' returntype='base:MFK_M03'/>

同じファイルに以下のような構文を含め、MFN_M03 を定義する必要があります。

<MessageStructure
  name='MFN_M03'
  definition='base:MSH~base:MFI~{~base:MFE~[~ZSI~]~base:OM1~[~base:Hxx~]~}'
  description='HNB MFN message'
  />

代わりに、structure または returntype の値で、スキーマ・ベースの標準メッセージ構造を表すこともできます。これを指定するには、値に以下の接頭語を使用する必要があります。

base:

これにより Ensemble は適切な <MessageStructure> エントリを、<Category> 要素に含まれる base 属性で指定された .HL7 ファイルで見つけることができます。他の外部 .HL7 を参照することはできません。スキーマ・ベースのみとなります。

以下の例では、両方のスタイルの構文を使用しています。この例では、カスタムの MFN_M03 を送信し、応答として標準の MFK_M03 を受信する、カスタムのメッセージ・タイプ MFN_M03 を定義しています。

<MessageType name='MFN_M03' structure='MFN_M03' returntype='base:MFK_M03'/>
FeedbackOpens in a new tab