【COBOL学習|初心者向け】モダンCOBOLでXML出力をスマートに!SUPPRESS句の活用術

1. 導入:なぜSUPPRESS句が重要なのか

COBOLでXMLデータを生成する際、データベースの空の項目や数値のゼロが、そのまま「」といった空タグとして出力されてしまうことに悩んだことはありませんか?不必要な空タグは、データ容量を肥大化させるだけでなく、受け取り側のシステム(Web APIや外部連携先)で無駄なパース処理を発生させる原因となります。COBOL 2002以降で導入された「SUPPRESS句」を使えば、こうした不要なタグをスマートに除外できます。システム間の通信効率を上げ、保守性を高めるために必須のテクニックです。

2. 基礎知識:XML GENERATEとSUPPRESSの仕組み

COBOLの「XML GENERATE」文は、データ構造をXML形式のテキストに変換する強力な命令です。通常、この命令を実行すると、グループ項目や基本項目がすべてタグ化されます。
ここで登場するのが「SUPPRESS句」です。これは、特定の条件を満たす項目をXML生成時に無視(抑制)する指定です。例えば、「SUPPRESS ZERO」と書けば、値がゼロの数値項目はタグ自体が出力されません。これにより、クリーンなXMLデータを効率よく生成することが可能になります。

3. 実装と解決策

実装は非常にシンプルです。「XML GENERATE 変換先 FROM 変換元」の末尾に「SUPPRESS」句を追加するだけです。
主な指定方法は以下の通りです。
・SUPPRESS ZERO:値がゼロの数値項目を除外。
・SUPPRESS SPACE:値がすべてスペースの英数字項目を除外。
・SUPPRESS ALL:ゼロまたはスペースの項目を除外。

4. サンプルプログラム

以下のコードをコピーして、コンパイル環境で試してみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. XML-SUPPRESS-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-REC.
05 ITEM-NAME PIC X(10) VALUE ‘BOOK-001’.
05 ITEM-PRICE PIC 9(5) VALUE 0. > ゼロ値
05 ITEM-CATEGORY PIC X(10) VALUE SPACES. > 空白値
01 XML-OUTPUT PIC X(200).

PROCEDURE DIVISION.
> SUPPRESS ALLを指定して、ゼロやスペースの項目をタグから除外する
XML GENERATE XML-OUTPUT FROM WS-REC
SUPPRESS ALL
END-XML.

> 結果を表示(ITEM-NAMEのみがタグとして生成されるはずです)
DISPLAY ‘生成されたXML: ‘ FUNCTION TRIM(XML-OUTPUT).

STOP RUN.

5. 応用・注意点:現場での運用アドバイス

現場で活用する際の注意点は、「受け取り側の定義」との整合性です。
タグ自体が消滅するため、受け取り側のXMLパーサが「必須項目」としてそのタグを待ち構えている場合、エラーになる可能性があります。必ず連携先の仕様を確認してください。
また、複数の条件を使い分けたい場合、項目ごとに細かく制御したいという要望も出ますが、基本的なXML GENERATEは全項目一括変換が前提です。もし特定の項目だけを除外したい場合は、一時的なデータエリア(ダミーのグループ項目)を作成し、必要な項目だけを転記してからXML変換をかけるという工夫も、ベテランの間では定石となっています。モダンなCOBOL開発では、こうした標準機能の特性を理解して、コードをいかにシンプルに保つかが腕の見せ所ですよ。

コメント

タイトルとURLをコピーしました