正規表現によるデータ・エレメントの構文解析

実際のデータ値の検査によってのみ存在または欠落を判別できるオプションのサブフィールド (例えば、数字の後に、1 つ以上の英字が続くオプションのフィールド) を入力メッセージに含めることができる場合、「データ・エレメント分離」メソッドの「データ・パターンの使用」を使用する必要があります。特にこれは、SWIFT 業界標準に準拠するメッセージに関係します。 このメソッドを使用するには、サブフィールドに関連付けられる入力メッセージ内の該当部分を識別するための正規表現を指定する必要があります。 また、複合タイプのそれぞれの子の「データ・パターン」プロパティーに正規表現の値を指定する必要もあります。

構文解析時にデータは、複合タイプのそれぞれの子に順番に突き合わされます。パーサーは子の正規表現を使って突き会わせを行って、該当する子に適用されるメッセージ内の文字数を判別します。 その文字数は、メッセージ内の現在位置から始まって、正規表現に一致する最長ストリングの長さになります。正規表現に一致する最長ストリングの長さがゼロの場合、エレメントはメッセージ内に存在するということなので、値には空のストリングが使用されます。 どのストリングも正規表現に一致しないと、エレメントは存在しないということです。そのような場合に、エレメントが必要とされていれば、以後の検証はエラーになる可能性があります。

入力メッセージの文字数が判別されたら、入力メッセージのテキストに対して通常のデータ変換が実行されるか、複合エレメントの場合はさらに構文解析が実行されて、エレメントに値が割り当てられます。 その場合、パターンによって識別された長さが子の定義に適していないと、データのオーバーランまたはアンダーラン・エラーが起きる可能性があります。

正規表現の構文は、構文の完全な規則とその適用方法について説明していますが、データ・パターンを使用する解析の簡単な例が以下の表にいくつか示されています。 それより詳しい例が表の後に示されています。

入力メッセージ データ・パターン 一致する値
"123456ABC" [0-9]* "123456"
"123" [A-Z]* ""
"123" [A-Z]+ 存在しない
"ABCD123"

[A-Z]{1,3} first field

[A-Z]{2,4} second field

"ABC" - 第 1 フィールド (パターンに一致する最も長いストリング)

存在しない - 第 2 フィールド (2 つの英字の最小の長さは存在しない)

"ABCDEFGHIJ1234"

[A-Z]{1,3} first field, repeat

[0-9]+ second field

"ABC" - 第 1 フィールド [1]

"DEF" - 第 1 フィールド [2]

"GHI" - 第 1 フィールド [3]

"J" - 第 1 フィールド [4]

"1234" - 第 2 フィールド (第 1 フィールドに指定されているデータ・パターンにデータ "1234" が一致しなくなると、反復フィールドは終了する)

以下の例は、3 つの分野でのパターン・マッチングを示します。

Message definition:
Complex type: Data Element Separation=Use Data Pattern
Field1: xsd:string minOccurs=1, maxOccurs=1, Length=5, Pad=SPACE,
Data Pattern=".{5}"
Field2: xsd:int minOccurs=0, maxOccurs=1,
Data Pattern="[0-9]{0,6}"
Field3: xsd:string minOccurs=1, maxOccurs=1, minLength=3, maxLength=4,
Data Pattern="[A-Z][A-Za-z0-9]{2,3}"

Input1: "ABCDE123F12"
Result1: Field1="ABCDE", Field2="123", Field3="F12"

Input2: "ABCDEF12"
Result2: Field1="ABCDE", Field2=not present, Field3="F12"

Input3: "ABCDE123456XXXX"
Result3: Field1="ABCDE", Field2="123456", Field3="XXXX"

Input4: "ABCDE1234567"
Result4: Field1="ABCDE", Field2="123456", Field3=not present,
これにより、妥当性検査が有効になっていると例外が発生します。One
character ("7") remains unassigned to any element, which
also causes an exception.

反復する子の場合、子のインスタンスはパターン一致と同じ回数だけ構文解析されます。これは、反復するエレメントに「最大数」が指定されていて、出現回数が上限を超える場合にも当てはまります。したがって、いくらかの終了条件が、エレメントの正規表現のパターンから判別可能でなければなりません。 表には、反復するエレメントの例が示されています。

構文解析時には、「データ・パターン」に一致していて、しかもエレメントに割り当てられている入力メッセージ内のデータが、より高いレベルの複合タイプの区切り文字の探索のためにさらにスキャンされることはありません。 この振る舞いは、「データ・エレメント分離」メソッドの「固定長」の振る舞いと似ています。 ただし、いくつかの区切り文字候補のいずれかにデータを突き合わせる正規表現をコーディングすることはできます。

子に長さが指定されていると、書き込み時に、その長さに合わせて値に対する埋め込みが行われます。この振る舞いは、「データ・エレメント分離」メソッドの「可変長エレメントを区切る」の振る舞いと似ていますが、区切り文字はありません。

構成」が「選択」に設定された複合タイプがメッセージに含まれている場合、「データ・エレメント分離」メソッドを「データ・パターンの使用」に設定することができます。 その場合、子の「データ・パターン」の値が、選択 の解決に使用されます。最初の子から始めて、一致を生じた最初のパターンによって、どの子が存在するかが判別されます。したがって、選択内の子の順序が重要となる場合があります。

無制限の「最大数」を設定された反復する子を複合タイプに入れることができます。長さや、位置調整および埋め込みなどのその他の関連プロパティーを子に指定することもできます。

データ・エレメント分離」メソッドの「データ・パターンの使用」の使用時に従うべき規則の詳細についてはTDS メッセージ・モデルの完全性 を参照し、「構成」および「内容の妥当性検査」の有効な設定の詳細については構成と内容の妥当性検査の組み合わせを参照してください。

関連概念
メッセージのモデル化
メッセージ・モデル
TDS 形式: 論理モデルとの関係
関連タスク
メッセージ・モデルの開発
メッセージ定義ファイルの処理
メッセージ・モデル・オブジェクトの処理
関連資料
メッセージ・モデルの参照情報
メッセージ・モデル・オブジェクトのプロパティー
追加の MRM ドメイン情報
追加の TDS 情報
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ad09870_