9.3.3 公開識別子が指定されたXMLドキュメント
XML連携機能では,カタログファイルに公開識別子とファイル名を対応づけることで,外部DTDや外部実体を取り込めます。
(1) カタログファイル
カタログファイルは,公開識別子とファイル名を対応づけするファイルです。カタログファイルはcblxmlコマンドの-catalogオプション,または実行時にCBLXML-READ-CATALOG-FILEサービスルーチンで入力できます。
次に,カタログファイルの形式を示します。
(a) カタログファイルの形式
公開識別子を対応づける場合,区切り文字「->」の左側に公開識別子,右側にファイル名を記述します。
公開識別子->ファイル名
開始文字「{」と終了文字「}」の間の文字列をコメントとみなします。
{ コメント }
DTDの公開識別子とカタログファイルを対応づけた例を次に示します。
- (UNIXの場合)
-
- (DTDの例)
: <!DOCTYPE root PUBLIC "-//HITACHI//DTD test//EN" "/home/project1/myDTD.xml"> <!ENTITY letter PUBLIC "-//HITACHI//ENT letter 1.0//EN" "/home/project1/letter.xml"> :
- (カタログファイルの例)
-//HITACHI//DTD test//EN->/home/local1/abc.xml -//HITACHI//ENT letter 1.0//EN->/home/local1/xyz.xml
- (Windowsの場合)
-
- (DTDの例)
: <!DOCTYPE root PUBLIC "-//HITACHI//DTD test//EN" "C:\home\project1\myDTD.xml"> <!ENTITY letter PUBLIC "-//HITACHI//ENT letter 1.0//EN" "C:\home\project1\letter.xml"> :
- (カタログファイルの例)
-//HITACHI//DTD test//EN->C:\home\local1\abc.xml -//HITACHI//ENT letter 1.0//EN->C:\home\local1\xyz.xml
(b) 公開識別子
公開識別子は,次の文字や数字で構成できます。
#x20 #xD #xA a〜z A〜Z 0〜9 - ' ( ) + , . / : = ? ; ! * # @ $ _ %
カタログファイルで指定できる公開識別子は,1,024バイト以下で指定してください。1,024バイトを超えた場合,cblxmlコマンドによるCOBOL原始プログラム生成時にエラーとなります。CBLXML-READ-CATALOG-FILEサービスルーチンは,戻り値として-2を返します。
(c) ファイル名
ファイル名として使用できる文字を指定できます。
ファイル名は絶対パスまたは相対パスで指定します。ファイル名を相対パスで指定した場合,その相対パスはプロセスのカレントディレクトリ(フォルダ)からの相対パスとなります。
ファイル名は255バイト以下で指定してください。255バイトを超えた場合,cblxmlコマンドによるCOBOL原始プログラム生成時にエラーとなります。CBLXML-READ-CATALOG-FILEサービスルーチンは,戻り値として-2を返します。
(d) 注意事項
-
公開識別子の前後にある空白文字(スペース,タブ,および改行)は削除されます。
-
公開識別子の中に現れる連続する空白文字(スペース,タブ,および改行)は正規化され一つの1バイトスペースとみなします。
-
公開識別子を対応づけた行の右側にコメントを記述できません。
-
コメントの開始文字「{」と終了文字「}」を示す文字は,複数行にわたって指定できます。
-
(Windowsの場合)カタログファイルはシフトJISで記述します。
(UNIXの場合)カタログファイルは環境変数LANGに従って,シフトJIS,日本語EUC,またはUTF-8で記述します。
(2) カタログファイルの使い方
公開識別子を使用する場合,カタログファイルで公開識別子とファイル名の対応づけを解決します。次に,cblxmlコマンド,および実行時でのカタログファイルの指定方法を示します。
(a) cblxmlコマンド
cblxmlコマンドに指定するDTDに公開識別子がある場合,cblxmlコマンドの-catalogオプションでカタログファイルを指定します。カタログファイルには相対パス,絶対パスも指定できます。次に例を示します。
- cblxmlコマンドでのカタログファイルの指定例
cblxml a.cxd -dtd a.xml -o a.cbl -catalog mycatalog.cxc
- 注意事項
-
-
カタログファイルの拡張子には「.cxc」を指定します。
-
カタログファイルが見つからない場合は,-catalogオプションに指定したカタログファイルのオープン処理中にエラーとなります。
-
カタログファイルのフォーマット不正などで入力できない場合は,エラーとなります。
-
-catalogオプションで入力したカタログファイルの情報は,実行時には有効となりません。
-
(b) 実行時
公開識別子を有効にするには,XMLドキュメントを開く前にカタログファイルを読み込む必要があります。そのため,CBLXML-READ-CATALOG-FILEサービスルーチンを,CBLXML-OP-Interfaceアクセスルーチン,またはCBLXML-OB-Interfaceアクセスルーチンの前に呼び出さなければなりません。
次にカタログファイルを使う場合のXMLアクセスルーチン,およびXMLサービスルーチンの呼び出し順序の例を示します。
- カタログファイルを使う場合の呼び出し順序
-
-
CBLXML-CREATE-XML-POINTER
XMLポインタを作成する。
-
CBLXML-READ-CATALOG-FILE
カタログファイルの情報を入力する。
-
CBLXML-OP-Interface
アクセスモード「E」を追加してXMLドキュメントを開く。
-
CBLXML-RD-Interface-BaseElement
XMLドキュメントを入力する。
-
CBLXML-CL-Interface
XMLドキュメントを閉じる。
-
CBLXML-FREE-XML-POINTER
XMLポインタを解放する。
-
- 注意事項
-
カタログファイルの入力に失敗した場合,CBLXML-OP-InterfaceアクセスルーチンはDTDに記述した公開識別子に対応するシステム識別子を公開識別子の代わりに参照します。システム識別子のファイルを入力できない場合は,CBLXML-OP-Interfaceアクセスルーチンがステータス110を返します。
(3) CBLXML-READ-CATALOG-FILEサービスルーチン
CBLXML-READ-CATALOG-FILEサービスルーチンは,公開識別子で利用するカタログファイルを設定します。
- 形式
-
CALL 'CBLXML-READ-CATALOG-FILE' USING XML-POINTER CATALOG-FILE CATALOG-FILE-LENGTH.
- 引数
-
引数のデータ型
指定
説明
01 XML-POINTER USAGE POINTER.
○
XMLドキュメントのポインタを受け取るポインタ項目を指定する。
01 CATALOG-FILE
PIC X(n).
○
カタログファイル名の領域を英数字項目で指定する。
01 CATALOG-FILE-LENGTH PIC 9(9) COMP.
○
カタログファイル名の長さを4バイトの2進項目で指定する。
- (凡例)
-
○:サービスルーチンの呼び出し時,値を設定しておく項目
- 戻り値
-
戻り値
内容
0
正常終了した。
-1
カタログファイルが見つからない。または,カタログファイルが読み込めない。
-2
カタログファイルの形式が不正。
-3
操作を続けるためのメモリが不足した。
- 注
-
戻り値は,RETURN-CODE特殊レジスタに設定されます。
- 規則
-
-
CBLXML-READ-CATALOG-FILEサービスルーチンはXMLドキュメントを開くアクセスルーチン(CBLXML-OP-Interface,CBLXML-OB-Interface)より前に呼び出してください。
-
カタログファイル名を相対パスで指定した場合,その相対パスはプロセスのカレントディレクトリ(フォルダ)からの相対パスとなります。
-
環境変数CBLLANGにUNICODEを設定した場合,CATALOG-FILEに指定されたファイル名は,UTF-8をシフトJISに変換した文字列でアクセスします。ただし,Linuxの場合は変換しないで,UTF-8の文字列でアクセスします。
-