付録H.1 COBOL2002のUnicode機能に対応したXML連携機能を使用するCOBOLプログラムの作成
COBOL2002のUnicode機能に対応したXML連携機能を使用する場合,Unicode機能に対応したデータ定義ファイル(DDF)を作成し,cblxmlコマンドでUnicode機能に対応したXMLアクセスルーチンを生成する必要があります。
また,生成したXMLアクセスルーチン(COBOLソース)やXMLアクセス用データ定義(登録集原文),それを呼び出すユーザプログラムのCOBOLソースは,コンパイル時に-UniObjGenオプションを指定して,Unicode機能に対応したコンパイルを行う必要があります。
次にUnicode機能に対応したプログラムの作成手順を示します。
- 〈この項の構成〉
(1) Unicode機能に対応したCOBOLソースの作成
Unicode機能に対応したCOBOLソースの作成については,マニュアル「COBOL2002 使用の手引 手引編」または「COBOL2002 ユーザーズガイド」を参照してください。
(2) Unicode機能に対応したデータ定義ファイル(DDF)の作成
COBOL2002のUnicode機能を使用する場合,XMLドキュメントから入力する値や,DDFでItem要素のemptyValue属性などに指定する値が,Unicodeに変換されることを考慮した設計が必要です。
例えば,COBOLの英数字項目(UTF-8)に,文字エンコーディングがShift_JIS(シフトJIS)のXMLドキュメントから値'日立'を入力する場合,表H-1に示すように文字コードによって1文字を構成するバイト数が異なるため,DDFに指定するsize属性のけた数は,UTF-8の文字列として格納できるけた数を設定する必要があります。この例ではUTF-8に変換されることを考慮し,DDFでのsize属性には6を指定する必要があります。
文字 |
日 |
立 |
---|---|---|
シフトJIS |
0x93FA |
0x97A7 |
UTF-8 |
0xE697A5 |
0xE7AB8B |
次の仕様に従ってデータ定義ファイル(DDF)を作成してください。
-
Item要素,AttrItem要素に指定するsize属性には,XMLドキュメントから入力した値をUnicode(英数字項目の場合UTF-8,日本語項目の場合UTF-16)に変換した文字列を格納するのに十分な大きさを指定してください。
-
Item要素,AttrItem要素に指定した次に示す属性の値は,Unicodeに変換した文字列になります。そのため,size属性に指定するけた数は,おのおのの値をUnicodeに変換した文字列の長さが収まるけた数を指定してください。
-
emptyValue属性
-
emptyContentValue属性
-
invalidCharValue属性
-
overflowValue属性
-
-
Interface要素,BaseElement要素のcobName属性(省略時はelemName属性)に指定する値に,UTF-8に変換すると多バイトになる文字は指定できません。
(3) Unicode機能に対応したXMLアクセスルーチンやXMLアクセス用データ定義の生成
Unicode機能に対応したXMLアクセスルーチンやXMLアクセス用データ定義を生成するため,cblxmlコマンドに-unisrcオプションを指定してください。-unisrcオプションを指定した場合,cblxmlコマンドの-oオプションにUnicodeに変換すると多バイトになる文字は指定できません。
(4) Unicode機能に対応したCOBOLソースのコンパイル
-unisrcオプションを指定したUnicode機能に対応したXMLアクセスルーチンやXMLアクセス用データ定義,Unicode機能に対応したユーザプログラムのCOBOLソースをコンパイルする場合,ccbl2002コマンドに-UniObjGenオプションを指定します。また,日本語項目の定数のバイトオーダを指定したい場合は-UniEndianオプションを指定します。
(5) オブジェクトのリンク
-UniObjGenオプションを指定して,生成されたオブジェクトをリンクします。
図H-1にXML連携機能を使用するUnicode機能に対応したCOBOLプログラムの作成の概略を示します。