XML PARSE ステートメントは、COBOL ランタイムに含まれる高速 XML パーサーへの COBOL 言語インターフェースです。 XML PARSE ステートメントは、XML 文書を解析し、それを個々の部分に分割します。それぞれの部分は、 一度に 1 つずつ、ユーザーが作成した処理プロシージャーに渡されます。
XML PARSE ステートメントを宣言型プロシージャー内で指定することはできません。
ID-1 が国別グループ項目の場合、ID-1 は国別カテゴリーの基本データ項目として処理されます。
CHAR(EBCDIC) コンパイラー・オプションが有効であり、ID-1 が USAGE DISPLAY の基本項目である場合、ID-1 のデータ記述記入項目で NATIVE キーワードを指定することはできません。
CHAR(EBCDIC) コンパイラー・オプションが有効であり、ID-1 が 英数字グループ項目または英数字データ基本項目である場合、ID-1 の 内容を EBCDIC でエンコードする必要があります。 そのほかの ASCII やパック 10 進数などのエンコード方式を使用すると、実行時にエラーが発生することがあります。
ID-1 が英数字であり、かつ、データ記述記入項目に NATIVE 句が含まれるか CHAR(EBCDIC) コンパイラー・オプションが無効であるかのいずれかの場合、「COBOL for Windows プログラミング・ガイド」の『XML 文書のコード化文字セット』にリストされている ASCII 文字セットで ID-1 の内容をエンコードする必要があります。このようなデータ項目内の XML 文書がエンコード宣言を指定していない場合、XML 文書は、現在のランタイムのロケールで示されるコード・ページを使用して解析されます。
ID-1 が英数字であり、データ記述記入項目に NATIVE 句が含まれず、かつ、CHAR(EBCDIC) コンパイラー・オプションが有効である場合、ID-1 の内容は、「COBOL for Windows プログラミング・ガイド」の『XML 文書のコード化文字セット』にリストされている単一バイトの EBCDIC 文字セットのいずれかを使用してエンコードする必要があります。このようなデータ項目内の XML 文書がエンコード宣言を指定していない場合、XML 文書は、EBCDIC_CODEPAGE 環境変数で指定されたコード・ページを使用して解析されます。あるいは、EBCDIC_CODEPAGE 環境変数が設定されていない場合、現在のランタイムのロケールに選択されているデフォルトの EBCDIC コード・ページを使用して解析されます。詳しくは、「COBOL for Windows プログラミング・ガイド」を参照してください。
ランタイムのロケールおよびコード・ページの設定と使用については、 「COBOL for Windows プログラミング・ガイド」を参照してください。単一バイトの ASCII および EBCDIC コード・ページは、サポートされるロケールおよびコード・ページで「表意文字 (漢字)」を指定していない表の、言語グループというラベルの付いた列 (右端の列) のコード・ページです。
ID-1 が国別カテゴリーの場合、その内容は、CCSID 1202 (Unicode UTF-16LE) を使用してエンコードする必要があります。 この ID-1 には、複数のエンコード・ユニットを使用して表現される文字エンティティーを含めることはできません。そうした文字を表現する場合は、
プロシージャー名-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 ステートメントを指定して、実行単位を終了できます。
処理プロシージャーの詳細については、制御フローを参照してください。
XML 文書の処理中に XML パーサーでエラーが検出されると、例外条件が発生します。最初にパーサーは、特殊レジスター XML-EVENT に 'EXCEPTION' が設定された処理プロシージャーに制御を渡して、XML 例外をシグナル通知します。パーサーは、特殊レジスター XML-CODE にも数値のエラー・コードを格納します。詳しくは、「COBOL for Windows プログラミング・ガイド」を参照してください。
XML-CODE に -1 を設定し、処理プロシージャーで解析を故意に終了した後、通常の XML イベントからパーサーに戻る場合も、例外条件が存在します。この場合、パーサーは、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 句が指定されている場合)。
XML PARSE 処理の終了時に例外条件が存在しない場合は、NOT ON EXCEPTION 句の命令ステートメント-2 に制御が移ります (NOT ON EXCEPTION 句が指定されている場合)。NOT ON EXCEPTION 句が指定されていない場合は、XML PARSE ステートメントの終わりに制御が移ります。 ON EXCEPTION 句は、指定されていても無視されます。
XML PARSE ステートメントを実行すると、特殊レジスター XML-CODE にゼロが格納されます。
条件 XML GENERATE または XML PARSE ステートメントの有効範囲は、次のいずれかによって終了します。
END-XML は、ON EXCEPTION 句または NOT ON EXCEPTION 句を指定しない XML GENERATE ステートメントまたは XML PARSE ステートメントと共に使用することもできます。
明示的範囲終了符号の詳細については、範囲区切りステートメントを参照してください。
XML GENERATE ステートメントまたは XML PARSE ステートメントが 命令ステートメント-1 または命令ステートメント-2 として出現する場合、あるいは別の XML GENERATE ステートメントまたは XML PARSE ステートメントの命令ステートメント-1 または 命令ステートメント-2 の一部として出現する場合、その XML GENERATE ステートメントまたは XML PARSE ステートメントはネストされた XML GENERATE ステートメントまたは XML PARSE ステートメントになります。
ネストされた XML GENERATE ステートメントまたは XML PARSE ステートメントは、左から右に処理される、一致した XML GENERATE と END-XML、または XML PARSE と END-XML の組み合わせとみなされます。したがって、検出される END-XML 句はすべて、暗黙的または明示的に終了されていない、先行の最も近い場所にある XML GENERATE ステートメントまたは XML PARSE ステートメントと一致します。
XML パーサーは、XML PARSE ステートメントから制御を受け取ると、XML 文書を分析し、以下の処理時で制御を プロシージャー名-1 に渡します。
処理プロシージャーが終了すると、XML パーサーに制御が戻ります。
以下の状態になるまでは、パーサーと処理プロシージャーとの間で制御のやり取りが行われます。
パーサーが終了し、制御が XML PARSE ステートメントに戻ると、XML-CODE 特殊レジスターには、 パーサーまたは処理プロシージャーによって設定された最新の値が格納されます。
XML イベントが処理プロシージャーに渡されるたびに、 XML-CODE、 XML-EVENT、 および XML-TEXT または XML-NTEXT 特殊レジスターには、特定のイベントに関する情報が格納されます。 XML-CODE 特殊レジスターの内容は、 XML PARSE ステートメントの実行中、および実行後に定義されます。処理プロシージャーの範囲の外では、 その他すべての XML 特殊レジスターの内容が未定義となります。
通常の XML イベントの場合は、制御が処理プロシージャーに移ると、特殊レジスター XML-CODE にゼロが格納されます。 XML 例外イベントの場合は、「COBOL for Windows プログラミング・ガイド」に示された XML 例外コードのいずれかが、XML-CODE に格納されます。特殊レジスター XML-EVENT には、'START-OF-DOCUMENT' などのイベント名が設定されます。XML-TEXT または XML-NTEXT には、イベントに対応する文書の一部が格納されます。詳しくは、XML-EVENTを参照してください。
XML 特殊レジスターの詳細については、特殊レジスターを参照してください。
どのような XML イベントの場合でも、処理プロシージャーがパーサーに制御を戻したときに XML-CODE がゼロでなければ、 パーサーはそれ以上 EXCEPTION イベントを発生することなく終了します。 XML-CODE に -1 を設定してから、EXCEPTION 以外のイベントで処理プロシージャーからパーサーに戻ると、 パーサーは、ユーザー起動の例外条件により、強制的に終了されます。 EXCEPTION イベントによっては、処理プロシージャーでイベントを処理してから XML-CODE にゼロを設定し、パーサーを強制的に続行できます。ただし、その後の結果は予測できません。 XML-CODE がゼロの場合は、XML 文書が完全に解析されるまで、 または例外条件が発生するまで、解析が続行されます。
EXCEPTION イベントおよび例外処理の詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。