1. 導入:なぜSUPPRESS句が重要なのか
COBOLでXMLデータを生成する際、データベースの空の項目や数値のゼロが、そのまま「
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開発では、こうした標準機能の特性を理解して、コードをいかにシンプルに保つかが腕の見せ所ですよ。

コメント