XML PARSE ステートメント
XML PARSE ステートメントは、 XMLPARSE コンパイラー・オプションの設定に応じて、2 つの高速 XML パーサーのいずれか に対する COBOL 言語インターフェースです。
2 つの高速 XML パーサーは以下のとおりです。
- のz/OS解析機能が強化された XML システム サービス パーサー。 このパーサーは、XMLPARSE(XMLSS) コンパイラー・オプションによって選択されます。
- Enterprise COBOL for z/OS 3 との互換性のために、COBOL ランタイムで提供される XML パーサー。 互換性のあるパーサーは、 XMLPARSE(COMPAT) コンパイラー・オプションによって選択されます。
XML PARSE ステートメントは、XML 文書を解析し、それを個々の部分に分割します。それぞれの部分は、 一度に 1 つずつ、ユーザーが作成した処理プロシージャーに渡されます。
- identifier-1
- ID-1 は国別カテゴリーの基本データ項目、国別グループ、
英数字カテゴリーの基本データ項目、または英数字グループ項目でなければなりません。 ID-1 を関数 ID にすることはできません。 ID-1 には
XML 文書の文字ストリームが含まれます。
ID-1 が国別グループ項目の場合、ID-1 は国別カテゴリーの基本データ項目として処理されます。
identifier-1 が国別カテゴリーの場合、その内容は Unicode UTF-16BE (CCSID 1200)を使用してエンコードする必要があります。 XMLPARSE(COMPAT) コンパイラー・オプションが有効な場合、ID-1 には複数のエンコード・ユニットを使用して表現される文字エンティティーを含めることはできません。 文字参照を使用してそのような文字を表します。例:- "񧘃" または
- "𐠓"
identifier-1 は、動的長グループ項目や動的長基本項目であってはなりません。
identifier-1 が英数字カテゴリーの場合、その内容は、 Enterprise COBOL プログラミング・ガイドの XML 文書のコード化文字セット にリストされている文字セットのいずれかを使用してエンコードする必要があります。 XMLPARSE (COMPAT) コンパイラー・オプションが有効で、 identifier-1 が英数字で、エンコード宣言を指定していない XML 文書を含んでいる場合、その XML 文書は CODEPAGE コンパイラー・オプションで指定されたコード・ページで構文解析されます。
XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合、XML 文書は、ENCODING 句に指定されたコード・ページを使用して構文解析されます。ENCODING 句を使用しない場合、文書は、CODEPAGE コンパイラー・オプションによって指定されたコード・ページを使用して構文解析されます。 XML 文書内のエンコード宣言は無視されます。
- RETURNING NATIONAL 句
- RETURNING NATIONAL 句は、XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合にのみ指定可能です。
ID-1 が英数字カテゴリーのデータ項目を参照し、RETURNING NATIONAL 句を指定した場合、XML 文書フラグメントが自動的に Unicode UTF-16 表記に変換され、国別特殊レジスター XML-NTEXT、XML-NNAMESPACE、および XML-NNAMESPACE-PREFIX 内の処理プロシージャーに戻されます。
RETURNING NATIONAL 句が指定されず、ID-1 が英数字カテゴリーのデータ項目を参照する場合は、XML 文書フラグメントは、英数字特殊レジスター XML-TEXT、XML-NAMESPACE、および XML-NAMESPACE-PREFIX 内の処理プロシージャーに戻されます。ただし XMLPARSE(COMPAT) が有効な場合は除きます。この場合、ATTRIBUTE-NATIONAL-CHARACTER および CONTENT-NATIONAL-CHARACTER XML イベントのテキストは、常に特殊レジスター XML-NTEXT に戻されます。
identifier-1 が国別データ項目を参照する場合、XML 文書フラグメントは常に Unicode UTF-16 表記で国別特殊レジスター XML-NTEXT、XML-NNAMESPACE、および XML-NNAMESPACE-PREFIX に戻されます。
- VALIDATING 句
- VALIDATING 句は、
パーサーが構文解析中に XML スキーマ・ファイルに照らして XML 文書を検査することを指定します。 Enterprise COBOLでは、XML 妥当性検査に使用されるスキーマは、 Optimized Schema Representation または OSRと呼ばれるプリプロセス・フォーマットです。 VALIDATING 句は、XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合にのみ指定可能です。
詳しくは、 Enterprise COBOL プログラミング・ガイド の 妥当性検査を伴う XML 文書の構文解析 を参照してください。
identifier-2 は、動的長グループ項目や動的長基本項目であってはなりません。
FILE キーワードが指定されない場合には、ID-2 が、最適化された XML スキーマが入っているデータ項目を参照する必要があります。 ID-2 は、必ず、英数字カテゴリーのもので、関数 ID にすることはできません。
FILEキーワードが指定されている場合、xml-schema-name-1既存のz/OS最適化された XML スキーマを含む UNIX ファイルまたは MVS データ セット。 XML スキーマ名-1 は、XML-SCHEMA 節を使用してスキーマの外部ファイル名に関連付けられる必要があります。 XML-SCHEMA 節の詳細については 、SPECIAL-NAMES パラグラフを参照してください。
制限: XML検証FILEキーワードはサポートされていませんCICS。検証を伴う構文解析の間、検証エラーまたは文書内の他のエラーによる例外が発生するまでは、検証を行わない構文解析の場合のように通常の XML イベントが返されます。
XML 文書が有効でない場合、パーサーは、XML 例外をシグナル通知し、特殊レジスター XML-EVENT に 'EXCEPTION'、特殊レジスター XML-CODE の上位ハーフワードに戻りコード 24、下位ハーフワードに理由コードが設定された状態で制御を処理プロシージャーに渡します。
妥当性検査を使用して XML 文書を構文解析するときに発生する可能性のある例外の戻りコードおよび理由コードについては、「 Enterprise COBOL プログラミング・ガイド」の XML PARSE 例外 XMLPARSE (XMLSS) が有効な場合 を参照してください。
- ENCODING 句
- ENCODING 句は、XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合にのみ指定可能です。
ENCODING 句は、 ID-1内のソース XML 文書に想定されるエンコードを指定します。 コード・ページは、有効なコード化文字セット ID (CCSID) を表す符号なし整数データ項目または符号なし整数リテラルでなければなりません。 ENCODING 句の指定は、CODEPAGE コンパイラー・オプションによって指定されたエンコード方式をオーバーライドします。 どの XML 宣言であってもその中に指定されたエンコード方式は常に無視されます。
ID-1 が国別カテゴリーのデータ項目を参照する場合、codepage は CCSID 1200、Unicode UTF-16 用を指定しなければなりません。
ID-1 が英数字カテゴリーのデータ項目を参照する場合、codepage には UTF-8 用の CCSID 1208 またはサポートされている EBCDIC または ASCII コード・ページ用の CCSID を指定する必要があります。 詳しくは、「 Enterprise COBOL Programming Guide 」の「 Coded character sets for XML documents 」を参照してください。
- PROCESSING PROCEDURE 句
- XML パーサーにより生成された各種のイベントを処理するプロシージャーの名前を指定します。
- procedure-name-1, procedure-name-2
- PROCEDURE DIVISION の中のセクションまたは段落を指名しなければなりません。 プロシージャー名-1 およびプロシージャー名-2 の両方を指定する際に、いずれか一方が宣言型プロシージャー内のプロシージャー名である場合は、両方が同じ宣言型プロシージャー内のプロシージャー名でなければなりません。
- procedure-name-1
- 処理プロシージャーの中の最初の (または唯一の) セクションまたは段落を指定します。
- procedure-name-2
- 処理プロシージャー内にある最後のセクションまたは段落を指定します。
- プロシージャー名-1 が段落名であり、プロシージャー名-2 が指定されていない場合、プロシージャー名-1 の段落の最後のステートメントの実行後に制御の戻りが行われます。
- プロシージャー名-1 がセクション名であり、プロシージャー名-2 が指定されていない場合、プロシージャー名-1 のセクションにある最後の段落の最後のステートメントの実行後に制御の戻りが行われます。
- プロシージャー名-2 指定されており、それが段落名である場合、プロシージャー名-2 の段落の最後のステートメントの実行後に制御の戻りが行われます。
- プロシージャー名-2 が指定されており、それがセクション名である場合、プロシージャー名-2 のセクションにある最後の段落の最後のステートメントの実行後に制御の戻りが行われます。
プロシージャー名-1 とプロシージャー名-2 との間で保持しなければならない唯一の関係は、連続する一連の処理を、プロシージャー名-1 によって指名されるプロシージャーから始まり、プロシージャー名-2 によって指名されるプロシージャーの実行によって終了するように定義する、ということだけです。
戻る地点への論理パスが 2 つ以上ある場合、 EXIT ステートメントだけからなる段落の名前をプロシージャー名-2 として指定することができます。 その場合、戻り点へのすべてのパスは、この段落に導かれます。
処理プロシージャーは、XML イベントを処理するすべてのステートメントから構成されます。 処理プロシージャーの範囲の中には、プロシージャーの範囲内の CALL、EXIT、GO TO、GOBACK、INVOKE、MERGE、 PERFORM、および SORT ステートメントにより 実行されるすべてのステートメントと、処理プロシージャーの範囲にあるステートメント実行の結果として実行される宣言型プロシージャーの中のすべてのステートメントが含まれます。
処理プロシージャーの範囲内では、GOBACK ステートメントまたは EXIT PROGRAM ステートメントを実行させることはできません。ただし、処理プロシージャーの範囲内で実行された INVOKE ステートメントまたは CALL ステートメントによってそれぞれ制御が渡されたメソッドまたはプログラムから制御が戻る場合を除きます。
処理プロシージャーの範囲内では、 XML PARSE ステートメントを実行させることはできません。ただし、処理プロシージャーの範囲内で実行された INVOKE ステートメントまたは CALL ステートメントによって制御が渡されたメソッドまたは最外部プログラムで XML PARSE ステートメントが実行される場合を除きます。
複数のスレッド上でプログラムが実行されている場合は、同じ XML ステートメント、 または別の XML ステートメントを同時に実行できます。
処理プロシージャーでは、STOP RUN ステートメントを指定して、実行単位を終了できます。
処理手順の詳細については 、「制御の流れ」 を参照してください。
- ON EXCEPTION
- ON EXCEPTION 句では、XML PARSE ステートメントで例外条件が発生したときに実行する命令ステートメントを指定します。
XML 文書の処理中に XML パーサーでエラーが検出されると、例外条件が発生します。 最初にパーサーは、特殊レジスター XML-EVENT に 'EXCEPTION' が設定された処理プロシージャーに制御を渡して、XML 例外をシグナル通知します。 また、パーサーは、特殊レジスター XML-CODE に数値エラー・コードを提供します。詳しくは、 XML PARSE 例外の処理 での Enterprise COBOL プログラミング・ガイドを参照してください。
例外条件が存在する場合処理手順はXML-CODEを次のように設定します。-1通常の XML イベントのためにパーサーに戻る前に。 この場合、パーサーは EXCEPTION XML イベントをシグナル通知せず、構文解析処理は終了します。
ON EXCEPTION 句が指定されている場合、パーサーは制御を命令ステートメント-1 に移します。 ON EXCEPTION 句が指定されていない場合は、NOT ON EXCEPTION 句が指定されていても無視され、 制御は、XML PARSE ステートメントの終わりに移ります。
XML PARSE ステートメントの実行後、特殊レジスター XML-CODE には XML 例外を示す数字のエラー・コードまたは -1 が格納されます。
パーサーに制御が戻る前に、処理プロシージャーで XML 例外イベントを処理し、 XML-CODE にゼロを設定すると、例外条件は発生しません。 パーサーの終了前に、その他の処理対象外の例外が発生しない場合は、 NOT ON EXCEPTION 句の命令ステートメント-2 に制御が移ります (NOT ON EXCEPTION 句が指定されている場合)。
- NOT ON EXCEPTION
- XML PARSE 処理の終了時に例外条件が存在しない場合もありますが、NOT ON EXCEPTION 句では、
そうした場合に実行する命令ステートメントを指定します。
XML PARSE 処理の終了時に例外条件が存在しない場合は、NOT ON EXCEPTION 句の命令ステートメント-2 に制御が移ります (NOT ON EXCEPTION 句が指定されている場合)。 NOT ON EXCEPTION 句が指定されていない場合は、XML PARSE ステートメントの終わりに制御が移ります。 ON EXCEPTION 句は、指定されていても無視されます。
XML PARSE ステートメントを実行すると、特殊レジスター XML-CODE にゼロが格納されます。
- END-XML 句
- この明示範囲終了符号は、XML GENERATE ステートメントまたは XML PARSE ステートメントの有効範囲を設定します。 END-XML は条件
XML GENERATE ステートメントまたは XML PARSE ステートメント (つまり、ON EXCEPTION 句または NOT ON EXCEPTION 句を指定する XML GENERATE ステートメントまたは XML PARSE
ステートメント) を別の条件ステートメントにネストすることを許可します。
条件 XML GENERATE または XML PARSE ステートメントの有効範囲は、次のいずれかによって終了します。
- ネスト構造で同じレベルにある END-XML 句。
- 分離文字ピリオド。
END-XML は、ON EXCEPTION 句または NOT ON EXCEPTION 句を指定しない XML GENERATE ステートメントまたは XML PARSE ステートメントと共に使用することもできます。
明示的なスコープ終端子の詳細については 、「区切り記号付きスコープ文」 を参照してください。
