COBOL コピーブック形式

MIME タイプ: application/flatfile

ID: flatfile

COBOL コピーブックは、COBOL データファイルのレコードと項目のレイアウトを記述するフラットファイルの種別です。

Transform Message コンポーネントは、COBOL コピーブック形式を処理するための設定を提供します。たとえば、COBOL 定義を Transform Message コンポーネントにインポートしてコピーブック変換で使用できます。

DataWeave の COBOL コピーブックは最大 15 のファイルをサポートし、メモリ要件は約 40 対 1 です。たとえば、1 MB のファイルは処理に最大 40 MB のメモリを必要とするため、大きいコピーブックファイルに対する TPS のニーズと組み合わせてこのメモリ要件を考慮することが重要です。これは正確な数値ではありません。この値は、マッピング命令の複雑さによって異なる可能性があります。

コピーブック定義のインポート

コピーブック定義をインポートすると、Transform Message コンポーネントは、​schemaPath​ プロパティで参照できるフラットファイルスキーマに定義を変換します。

コピーブック定義をインポートする方法

  1. Studio で Transform コンポーネントの入力ペイロードを右クリックし、​[Set Metadata (メタデータを設定)]​ を選択して [Set Metadata Type (メタデータ型を設定)] ダイアログを開きます。

    コピーブック定義をインポートする前に、メタデータ型を定義する必要があります。

  2. コピーブックメタデータの名前を入力します (例: copybook​)。

  3. [Type (型)]​ ドロップダウンメニューから [Copybook (コピーブック)] 型を選択します。

  4. コピーブック定義ファイルをインポートします。

  5. [Select (選択)] をクリックします。

    コピーブック定義のインポート
    Figure 1. コピーブック定義ファイルのインポート

たとえば、次のようなコピーブック定義ファイル (​mailing-record.cpy​) があるとします。

       01  MAILING-RECORD.
           05  COMPANY-NAME            PIC X(30).
           05  CONTACTS.
               10  PRESIDENT.
                   15  LAST-NAME       PIC X(15).
                   15  FIRST-NAME      PIC X(8).
               10  VP-MARKETING.
                   15  LAST-NAME       PIC X(15).
                   15  FIRST-NAME      PIC X(8).
               10  ALTERNATE-CONTACT.
                   15  TITLE           PIC X(10).
                   15  LAST-NAME       PIC X(15).
                   15  FIRST-NAME      PIC X(8).
           05  ADDRESS                 PIC X(15).
           05  CITY                    PIC X(15).
           05  STATE                   PIC XX.
           05  ZIP                     PIC 9(5).
  • コピーブック定義は常に ​01​ エントリから始まる必要があります。コピーブック内の ​01​ 定義ごとに個別のレコードタイプが生成されます (コピーブックを使用できるようにするには 1 つ以上の ​01​ 定義が存在する必要があります。定義がない場合は、任意の名前を使用して、コピーブックの開始位置に定義を追加します)。コピーブックファイルに複数の ​01​ 定義がある場合、変換で使用する定義をドロップダウンリストから選択できます。

  • COBOL 形式では、各行の列 7 ~ 72 のみを使用するように定義する必要があります。列 1 ~ 5 と列 72 より後のデータは、インポートプロセスで無視されます。列 6 は、行継続マーカーです。

スキーマをインポートすると、Transform コンポーネントは、Muke プロジェクトの ​src/main/resources/schema​ フォルダーに保存しているフラットファイルスキーマにコピーブックファイルを変換します。フラットファイル形式では、上記のコピーブック定義は次のようになります。

form: COPYBOOK
id: 'MAILING-RECORD'
values:
- { name: 'COMPANY-NAME', type: String, length: 30 }
- name: 'CONTACTS'
  values:
  - name: 'PRESIDENT'
    values:
    - { name: 'LAST-NAME', type: String, length: 15 }
    - { name: 'FIRST-NAME', type: String, length: 8 }
  - name: 'VP-MARKETING'
    values:
    - { name: 'LAST-NAME', type: String, length: 15 }
    - { name: 'FIRST-NAME', type: String, length: 8 }
  - name: 'ALTERNATE-CONTACT'
    values:
    - { name: 'TITLE', type: String, length: 10 }
    - { name: 'LAST-NAME', type: String, length: 15 }
    - { name: 'FIRST-NAME', type: String, length: 8 }
- { name: 'ADDRESS', type: String, length: 15 }
- { name: 'CITY', type: String, length: 15 }
- { name: 'STATE', type: String, length: 2 }
- { name: 'ZIP', type: Integer, length: 5, format: { justify: ZEROES, sign: UNSIGNED } }

コピーブックをインポートしたら、​schemaPath​ プロパティを使用して ​output​ ディレクティブを介して関連付けられているフラットファイルを参照できます。たとえば、​output application/flatfile schemaPath="src/main/resources/schemas/mailing-record.ffd"​ です。

サポートされるコピーブック機能

すべてのコピーブック機能が DataWeave の COBOL コピーブック形式でサポートされるとは限りません。一般に、この形式では次を含む最も一般的な使用方法と簡単なパターンがサポートされます。

  • DISPLAY、BINARY (COMP)、COMP-5 および PACKED-DECIMAL (COMP-3) の使用方法。 文字エンコードの制限については、「​文字エンコード​」を参照してください。

  • 以下のみで構成される数値の PICTURE 句

    • 「9」- 1 つ以上の数字位置

    • 「S」- 1 つの省略可能な符号文字位置 (先頭または末尾)

    • 「V」- 1 つの省略可能な小数点

    • 「P」- 1 つ以上の 10 進数位取り位置

  • 「X」文字位置のみで構成される英数字値の PICTURE 句

  • PICTURE 句での「9」、「P」、および「X」文字の反復数 (5 桁数値の場合の ​9(5)​ など)

  • スキーマの ​controlVal​ プロパティが含まれる OCCURS DEPENDING ON。含まれる構造内で制御値がネストされている場合、生成されたスキーマを手動で変更して、「container.value」の値のフルパスを指定する必要があります。

  • REDEFINES 句 (レコードデータの同じ部分の異なるビューを提供するために使用 - 以下のセクションの詳細を参照)

次の機能は​サポートされていません​。

  • 英数字で編集された PICTURE 句

  • 挿入、置換、およびゼロサプレスのすべての形式を含む、数値で編集された PICTURE 句

  • 特殊なレベル番号:

    • レベル 66 - 項目またはグループの代替名

    • レベル 77 - 独立データ項目

    • レベル 88 - 条件名 (値の列挙に相当)

  • グループレベルの SIGN 句 (PICTURE 句を含む基本項目でのみサポートされます)

  • COMP-1 または COMP-2 の USAGE、およびグループレベルの USAGE 句 (PICTURE 句を含む基本項目でのみサポートされます)

  • VALUE 句 (リテラルまたは別のデータ項目からデータ項目または条件名の値を定義するために使用)

  • SYNC 句 (レコード内で値を一致させるために使用)

REDEFINES のサポート

REDEFINES は、レコードのデータの動的な解析を促進します。REDEFINES を指定してコピーブックをインポートする場合、生成されたスキーマでは、「*」 (同じレベルで複数の REDEFINES グルーピングが指定される場合は、「*1」、「*2」など) という名前の特殊なグルーピングを使用して、異なるすべての解析を結合します。この特殊なグルーピング名は、他のグルーピング名と同様に DataWeave 式で使用します。

REDEFINES グルーピングを使用すると、通常のコピーブックグルーピングよりもオーバーヘッドが大きくなるため、可能な場合は Studio にインポートする前にコピーブックから REDEFINES を削除することをお勧めします。

文字エンコード

BINARY (COMP)、COMP-5、または PACKED-DECIMAL (COMP-3) の使用方法は、256 個の文字コード候補の範囲全体を使用する 1 バイト文字エンコードでのみサポートされます。これらの使用方法では、UTF-8 と他の可変長エンコードはサポートされません (1 バイトではないため)。また、ASCII もサポートされません (範囲全体を使用しないため)。サポートされている文字エンコードには、ISO-8859-1 (完全な 8 ビットへの ASCII の拡張) や他の 8859 バリエーションおよび EBCDIC (IBM037) などがあります。

REDEFINES では、データに 1 バイト/文字の文字エンコードを使用する必要がありますが、BINARY、(COMP)、COMP-5、PACKED-DECIMAL (COMP-3) の使用方法がデータに含まれていない限り、任意の 1 バイト/文字の文字エンコードを使用できます。

コピーブックのインポートに関する一般的な問題

コピーブックのインポートに関する最も一般的な問題は、入力行領域の COBOL 標準に従っていないことです。コピーブックのインポート解析では、各行の列 1 ~ 6 の内容が無視され、列 7 に「*」 (アスタリスク) が含まれているすべての行が無視されます。また、各行の列 72 を超える部分はすべて無視されます。 つまり、実際のすべてのデータ定義が入力行の列 8 ~ 72 の間に存在する必要があります。

タブ位置に関する定義された標準はないため、入力内のタブは展開されません。コピーブックの入力列を数える場合、各タブ文字は 1 個のスペース文字として処理されます。

コピーブックを処理するときにインデントは無視され、レベル番号のみが有意として処理されます。これは通常は問題ではありませんが、COBOL コンパイラーで受け入れられないにも関わらずコピーブックのインポートが受け入れられる可能性があります。

コピーブックのインポートの結果として警告とエラーの両方が報告される場合があります。 一般に、警告は、有意であるかどうかに関係なく、機能がサポートまたは認識されないことを伝えます。エラーは、生成されたスキーマ (ある場合) がコピーブックの完全に正確な表現ではないことを意味する問題の通知です。報告されたすべての警告またはエラーを確認し、適切な処理を決定する必要があります。スキーマを生成されたとおりに単に受け入れたり、入力のコピーブックを変更したり、生成されたスキーマを変更したりすることができます。

Configuration のプロパティ

DataWeave では、この形式の以下の設定プロパティがサポートされています。

Reader のプロパティ

DataWeave は、この形式で入力データを読み取る指示を提供するプロパティを受け入れます。

パラメーター デフォルト 説明

allowLenientWithBinaryNotEndElement

Boolean

false

スキーマに型が Binary (バイナリ) または Packed (パック) の要素が含まれていると、最後の要素の形式種別に関係なく、​lenient​ オプションで短いレコードが許可されません。このプロパティを ​true​ に設定すると、検証はレコードが Binary (バイナリ) または Packed (パック) の型で終了するケースのみに適用されます。

enforceRequires

Boolean

false

必須値がない場合にエラーになります。 有効な値は、​true​ または ​false​ です。

missingValues

String

コピーブックスキーマの場合は ​nulls​、それ以外の場合は ​spaces

欠落値を表すために使用される文字を入力します。デフォルト以外の設定を有効化するには、​useMissCharAsDefaultForFill​ プロパティを ​true​ に設定し、​missingValues​ に次のいずれかの値を使用します。

  • none​: すべてのデータを実際の値として処理する

  • spaces​: スペースのみで構成される項目を欠落値として解釈する

  • zeroes​: 「0」文字のみで構成される数値項目とスペースのみで構成される文字項目を欠落値として解釈する

  • nulls​: 0 バイトのみで構成される項目を欠落値として解釈する

notTruncateDependingOnSubjectNotPresent

Boolean

false

DEPENDING ON の対象が存在しない場合にグループ全体を入力します。 2021 年 8 月リリースの Mule 4.3.0-20210622 の DataWeave 2.3 で導入されました。

recordParsing

String

strict

予想される、行/レコード間の分離:

  • strict​: 各レコードの末尾で改行が予想される。

  • lenient​: 改行が使用されるが、レコードがスキーマ仕様よりも短いまたは長い場合がある。ペイロードに改行がない場合は、​lenient​ を使用しないでください。​recordParsing​ のもう 1 つのオプションで改行がないレコードがサポートされます。

  • noTerminator​: レコードが分離されずに互いに続く。このオプションは、改行がない固定長のレコードでお勧めします。

  • singleRecord​: 入力全体が 1 つのレコード。

種別 ​Binary​ または ​Packed​ のスキーマでは、改行を検出できないため、​recordParsing​ を ​lenient​ に設定すると、長いレコードのみを処理でき、短いレコードは処理できません。現在、このスキーマも特定の 1 バイト文字エンコードでのみ機能します (つまり、UTF-8 などの複数バイト形式では機能しません)。

schemaPath​ (必須)

String

null

スキーマ定義。入力の解析で使用するスキーマファイルのローカルディスク内の場所。

segmentIdent

String

null

固定幅のスキーマまたはコピーブックスキーマのセグメント識別子 (1 つのセグメント/レコード定義を解析する場合と、スキーマに複数のセグメント定義が含まれている場合にのみ必要)。

structureIdent

String

null

フラットファイルスキーマのセグメント識別子 (構造定義を解析する場合と、スキーマに複数の構造定義が含まれている場合にのみ必要)。

truncateDependingOn

Boolean

false

COBOL コピーブックの DEPENDING ON 値を、使用される長さに切り捨てます。有効な値は、​true​ または ​false​ です。

useMissCharAsDefaultForFill

Boolean

false

デフォルトでは、フラットファイルリーダーおよびライターでは、欠落文字にスペースが使用され、​missingValues​ プロパティの設定が無視されます。このプロパティを ​true​ に設定すると、リーダーは ​missingValues​ プロパティの設定に従います。 2021 年 9 月リリースの Mule 4.3.0-20210823 の DataWeave 2.3 (2.3.0-20210823) で導入されました。​有効な値は、​true​ または ​false​ です。

zonedDecimalStrict

Boolean

false

COBOL コピーブックのゾーン 10 進数値に署名エンコードの ​strict​ ASCII 形式を使用します。 有効な値は、​true​ または ​false​ です。

Writer のプロパティ

DataWeave は、この形式で出力データを書き込む指示を提供するプロパティを受け入れます。

パラメーター デフォルト 説明

bufferSize

Number

8192

バッファライターのサイズ。

deferred

Boolean

false

true​ に設定すると、DataWeave は出力をデータストリームとして生成し、スクリプトの実行はそれがコンシュームされるまで延期されます。 有効な値は、​true​ または ​false​ です。

encoding

String

null

このライターで使用されるエンコード (​UTF-8​ など)。

enforceRequires

Boolean

false

必須値がない場合にエラーになります。 有効な値は、​true​ または ​false​ です。

missingValues

String

コピーブックスキーマの場合は ​NULLS​、それ以外の場合は ​SPACES

欠落値を表すために使用される文字を入力します。デフォルト以外の設定を有効化するには、​useMissCharAsDefaultForFill​ を使用し、​missingValues​ に次のいずれかの値を使用します。

  • NONE​: 欠落値の場合に何も書き込まない。

  • SPACES​: 項目をスペースで埋める。

  • ZEROES​: 数値項目を ​0​ 文字で、文字項目をスペース文字で埋める。

  • NULLS​: 項目を 0 バイトで埋める。

notTruncateDependingOnSubjectNotPresent

Boolean

false

DEPENDING ON の対象が存在しない場合にグループ全体を入力します。 2021 年 8 月リリースの Mule 4.3.0-20210622 の DataWeave 2.3 で導入されました。

recordTerminator

String

システムプロパティ ​line.separator

レコード区切り文字 (改行)。有効値:

  • lf

  • cr

  • crlf

  • none

Mule バージョン 4.0.4 以降では、これは、複数のレコードがある場合の区切り文字としてのみ使用されます。値は文字コードに直接変換されます (​none​ では各レコードの終端はありません)。

retainEmptyStringFieldsOnParsing

Boolean

false

true​ に設定すると、このプロパティによりリーダーは値がない項目を保持し、その値を空の文字列に設定します。リーダーのデフォルトの動作では、これらの項目を削除します。 2023 年 1 月バージョンの Mule バージョン 4.4.0-20230102 の DataWeave 2.4 で導入されました。

schemaPath​ (必須)

String

null

スキーマ定義。使用するスキーマファイルが配置されているパス。

segmentIdent

String

null

固定幅のスキーマまたはコピーブックスキーマのセグメント識別子 (1 つのセグメント/レコード定義を作成する場合と、スキーマに複数のセグメント定義が含まれている場合にのみ必要)。

structureIdent

String

null

フラットファイルスキーマのセグメント識別子 (構造定義を作成する場合と、スキーマに複数の構造定義が含まれている場合にのみ必要)。

trimValues

Boolean

false

末尾の文字を切り捨てることで、項目の長さを超える文字列値を切り取ります。有効な値は、​true​ または ​false​ です。

trimValues

Boolean

false

切り捨て値が項目幅より長いかどうかを示します。有効なオプションは、​true​ または ​false​ です。

truncateDependingOn

Boolean

false

COBOL コピーブックの DEPENDING ON 値を、使用される長さに切り捨てます。有効な値は、​true​ または ​false​ です。

useMissCharAsDefaultForFill

Boolean

false

デフォルトでは、フラットファイルリーダーおよびライターでは、欠落文字にスペースが使用され、​missingValues​ プロパティの設定が無視されます。このプロパティを ​true​ に設定すると、ライターは ​missingValues​ プロパティの設定に従います。 2021 年 9 月リリースの Mule 4.3.0-20210823 の DataWeave 2.3 (2.3.0-20210823) で導入されました。

zonedDecimalStrict

Boolean

false

COBOL コピーブックのゾーン 10 進数値に署名エンコードの ​strict​ ASCII 形式を使用します。有効な値は、​true​ または ​false​ です。

サポートされる MIME タイプ

COBOL コピーブック形式では、次の MIME タイプがサポートされています。

MIME タイプ

*/flatfile