Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


XML PARSE ステートメント

XML PARSE ステートメントは、次の 2 つの高速 XML パーサーのいずれか (XMLPARSE コンパイラー・オプションの設定によって選択) への COBOL 言語インターフェースです。

XML PARSE ステートメントは、XML 文書を解析し、それを個々の部分に分割します。それぞれの部分は、 一度に 1 つずつ、ユーザーが作成した処理プロシージャーに渡されます。

構文図を読む構文図をスキップする
フォーマット 

>>-XML PARSE--ID-1--+----------------------------------+------>
                    '-+------+--ENCODING--コード・ページ-'   
                      '-WITH-'                               

>--+--------------------+--------------------------------------->
   '-RETURNING NATIONAL-'   

>--PROCESSING PROCEDURE--+----+--プロシージャー名-1---+---------------------------------+-->
                         '-IS-'                      '-+-THROUGH-+--プロシージャー名-2-'   
                                                       '-THRU----'                         

>--+---------------------------------------+------------------>
   '-+----+--EXCEPTION--命令ステートメント-1-'   
     '-ON-'                                      

>--+--------------------------------------------+------------->
   '-NOT--+----+--EXCEPTION--命令ステートメント-2-'   
          '-ON-'                                      

>--+---------+-------------------------------------------------><
   '-END-XML-'   

ID-1
XML 文書の文字ストリームを含む、英数字グループ項目、国別グループ項目、英数字カテゴリーの基本データ項目、または国別カテゴリーの基本データ項目でなければなりません。 ID-1 を関数 ID にすることはできません。

ID-1 が国別グループ項目の場合、ID-1 は国別カテゴリーの基本データ項目として処理されます。

ID-1 が国別カテゴリーの場合、その内容は、CCSID 1200 (Unicode UTF-16BE) を使用してエンコードする必要があります。 XMLPARSE(COMPAT) コンパイラー・オプションが有効な場合、 ID-1 には複数のエンコード・ユニットを使用して表現される文字エンティティーを含めることはできません。そうした文字を表現する場合は、
  • "&#67603;" または
  • "&#x10813;"
などの文字参照を使用します。

ID-1 が英数字カテゴリーの場合、その内容は、Enterprise COBOL プログラミング・ガイド」の『 XML 文書のコード化文字セットにリストされている文字セットのいずれかを使用してエンコードする必要があります。 XMLPARSE(COMPAT) コンパイラー・オプションが有効であり、 ID-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 に戻されます。

ID-1 が国別データ項目を参照する場合、XML 文書フラグメントは、常に Unicode UTF-16 表記で国別特殊レジスター XML-NTEXT、XML-NNAMESPACE、および XML-NNAMESPACE-PREFIX に戻されます。

ENCODING 句
ENCODING 句は、XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合にのみ指定可能です。

ENCODING 句は、ID-1 のソース XML 文書用に考えられるエンコード方式を指定します。codepage は、有効なコード化文字セット 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 プログラミング・ガイド」の『XML 文書のコード化文字セットを参照してください。

PROCESSING PROCEDURE 句
XML パーサーにより生成された各種のイベントを処理するプロシージャーの名前を指定します。
プロシージャー名-1、プロシージャー名-2
手続き部の中のセクションまたは段落を指名しなければなりません。 プロシージャー名-1 およびプロシージャー名-2 を両方指定する場合、 いずれか一方が宣言型プロシージャーの中のプロシージャー名であれば、 両方が、同じ宣言型プロシージャーの中のプロシージャー名でなければなりません。
プロシージャー名-1
処理プロシージャーの中の最初の (または唯一の) セクションまたは段落を指定します。
プロシージャー名-2
処理プロシージャー内にある最後のセクションまたは段落を指定します。
XML イベントごとに、パーサーはプロシージャー名-1 というプロシージャーの最初のステートメントに制御を移します。制御は常に処理プロシージャーから XML パーサーに戻されます。 制御がどの地点で戻されるかは、次のようにして決定されます。
  • プロシージャー名-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 に数字のエラー・コード を格納します。詳しくは、Enterprise COBOL プログラミング・ガイド」を参照してください。

パーサーに通常の XML イベントが戻される前に、処理プロシージャーが XML-CODE を -1 に設定した場合、例外条件が存在します。この場合、パーサーは 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 ステートメントと共に使用することもできます。

明示的範囲終了符号の詳細については、範囲区切りステートメントを参照してください。

ネストされた 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 文書を分析し、制御をプロセスの以下の時点に転送します。

  • プロセス解析を開始するとき。
  • 文書のフラグメントを検出したとき。
  • XML 文書の解析時にパーサーがエラーを検出したとき。
  • XML 文書の処理を終了するとき。

処理プロシージャーが終了すると、XML パーサーに制御が戻ります。

以下の状態になるまでは、パーサーと処理プロシージャーとの間で制御のやり取りが行われます。

  • XML 文書全体が解析され、END-OF-DOCUMENT イベントで終了した場合。
  • パーサーに制御が戻る前に、処理プロシージャーが XML-CODE に -1 を設定して、解析を強制終了した場合。
  • XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合: パーサーはどのような種類の例外でも検出します。
  • XMLPARSE(COMPAT) コンパイラー・オプションが有効な場合:パーサーは例外 (エンコード矛盾以外の例外) を検出し、処理プロシージャーはパーサーに制御を戻す前に特殊レジスター XML-CODE をゼロにリセットしません。
  • XMLPARSE(COMPAT) コンパイラー・オプションが有効な場合:パーサーはエンコード矛盾の例外を検出し、処理プロシージャーは特殊レジスター XML-CODE をゼロまたは文書エンコードの CCSID にリセットしません。

いずれの場合にも、処理プロシージャーは制御をパーサーに戻します。 その後パーサーが終了し、制御が XML PARSE ステートメントに戻ると、XML-CODE 特殊レジスターには、パーサーによって設定された最新の値または -1 (パーサーまたは処理プロシージャーによって設定された可能性がある) が格納されます。

XML イベントが処理プロシージャーに渡されるたびに、 XML-CODE、 および XML-EVENT 特殊レジスターには、特定のイベントに関する情報が格納されます。特殊レジスター XML-EVENT には、'START-OF-DOCUMENT' などのイベント名が設定されます。ほとんどのイベントでは、XML-TEXT または XML-NTEXT 特殊レジスターに文書テキストが格納されます。さらに、XMLPARSE(XMLSS) コンパイラー・オプションが有効な場合、特殊レジスターの XML-NAMESPACE と XML-NAMESPACE-PREFIX または XML-NNAMESPACE と XML-NNAMESPACE-PREFIX には、可能な場合、ネーム・スペース ID およびネーム・スペース接頭部が格納されます。詳細については、XML-EVENTを参照してください。

XML-CODE 特殊レジスターの内容は、 XML PARSE ステートメントの実行中、および実行後に定義されます。処理プロシージャーの範囲の外では、 その他すべての XML 特殊レジスターの内容が未定義となります。

通常の XML イベントの場合は、制御が処理プロシージャーに移ると、特殊レジスター XML-CODE にゼロが格納されます。XML 例外イベントの場合、XML-CODE には XML 例外コードが格納されます。これについては、Enterprise COBOL プログラミング・ガイド」を参照してください。

XML 特殊レジスターの詳細については、以下を参照してください。

特殊レジスターの概要については、特殊レジスターを参照してください

EXCEPTION イベントおよび例外処理の詳細については、Enterprise COBOL プログラミング・ガイド」を参照してください。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)