XML PARSE 文は、COBOL ランタイム システムの一部である XML パーサーとのインターフェイスに使用される。XML PARSE 文は、XML 文書を各部に分けて解析し、各部を 1 つずつ、利用者が書いた処理手続きへと渡す。
一般形式
構文規則
- 一意名-1 は英数字または各国文字データ項目でなければならず、関数一意名であってはならない。また、XML 文書文字ストリームを含んでいるものとする。一意名-1 が各国文字データ項目の場合、その内容は CCSID 1200 (Unicode UTF-16) を使用して符号化されていなければならない。ここには、複数の符号化単位を使用して表現された文字が含まれてはならない。そのような文字を表現するには、"" や "" などの文字参照を使用すること。
- 手続き名-1 は、処理手続き中の最初または唯一の節または段落を指定する。
- 手続き名-2 は、処理手続き中の最後の節または段落を指定する。
- コードページは、有効なコード化文字セット識別コード (CCSID) を表す符号なしの整数データ項目または符号なしの整数リテラルでなければならない。
- 一意名-1 が参照するデータ項目の字類が各国文字の場合、コードページの指定は CCSID 1200 (Unicode UTF-16) でなければならない。
- 一意名-1 が参照するデータ項目の字類が英数字の場合、コードページの指定は CCSID 1208 (UTF-8) であるか、サポートされる 1140 または 1047 のいずれかでなければならない。
- 一意名-2 の字類は英数字でなければならず、関数一意名であってはならない。
- XML スキーマ名-1 は、特殊名段落の XML-SCHEMA 指定で定義されていなければならない。
- RETURNING NATIONAL 指定は、XMLPARSE(XMLSS) コンパイラ オプションが有効な場合にのみ記述できる。
- VALIDATING 指定は、XMLPARSE(XMLSS) コンパイラ オプションが有効な場合にのみ記述できる。
- ENCODING 指定は、XMLPARSE(XMLSS) コンパイラ オプションが有効な場合にのみ記述できる。
一般規則
- PROCESSING PROCEDURE 指定は、XML パーサーが生成するさまざまなイベントを取り扱う手続きの名前を指定する。この処理手続きは、XML イベントを取り扱う文により構成される。処理手続きの範囲には、この手続き中の CALL、EXIT、GO TO、GOBACK、INVOKE、および PERFORM の各文により実行されるすべての文も含まれる。処理手続きの最後の文の後に、コンパイラによって復帰機構が組み込まれる。処理手続きは、STOP RUN 文で実行単位を終了することができるが、GOBACK 文または EXIT PROGRAM 文でパーサーへ戻ろうとしてはならない。
- ENCODING 指定は、一意名-1 のソース XML 文書の想定される符号化を指定する。
- 一意名-1 が各国文字データ項目を参照する場合、返される XML 文書要素は常に Unicode UTF-16 形式となり、各国文字の特殊レジスタ XML-NTEXT、XML-NNAMESPACE、および XML-NNAMESPACE-PREFIX で返される。
- RETURNING NATIONAL 指定が記述されており、一意名-1 が参照するデータ項目の字類が英数字の場合、XML 文書要素は自動的に Unicode UTF-16 表現に変換され、各国文字の特殊レジスタ XML-NTEXT、XML-NNAMESPACE、および XML-NNAMESPACE-PREFIX で処理手続きに返される。
- RETURNING NATIONAL 指定が記述されておらず、一意名-1 が参照するデータ項目の字類が英数字の場合、XML 文書要素は英数字の特殊レジスタ XML-TEXT、XML-NAMESPACE、および XML-NAMESPACE-PREFIX で処理手続きに返される。ただし、XML イベント ATTRIBUTE-NATIONAL-CHARACTER および CONTENT-NATIONAL-CHARACTER のテキストは例外で、常に特殊レジスタ XML-NTEXT で返される。
- VALIDATING 指定は、パーサーによる XML 文書の解析時に XML スキーマと照合して検証するようにように指定する。XML の検証に使用するスキーマは、処理されないテキストの形式で記述する必要がある。
- FILE キーワードが指定されていない場合は、一意名-2 で XML スキーマを含むデータ項目を参照しなければならない。
- FILE キーワードが指定されている場合は、XML スキーマ名-1 で XML スキーマを含む既存のファイルを指定する。
解析で検証を実行する場合も、検証エラーやその他の文書のエラーによって例外が発生しない限りは、検証なしの解析と同様に通常の XML イベントが返される。
XML 文書が有効でない場合、パーサーは XML 例外を通知して処理手続きに制御を渡し、'EXCEPTION' を含む特殊レジスタ XML-EVENT と上位半語の戻りコード 24 および下位半語の理由コードを含む特殊レジスタ XML-CODE を返す。
- ON EXCEPTION 指定は、XML PARSE 文で例外条件が発生したときに実行される無条件文を指定する。例外条件は、XML 文書の処理中に、XML パーサーがエラーを検出したときに発生する。パーサーはまず、"EXCEPTION" を含むように設定された特殊レジスタ XML-EVENT とともに、処理手続きに制御を渡して、例外 XML イベントを通知する。その後、特殊レジスタ XML-CODE に数字エラー コードを与える。
例外条件はまた、通常の XML イベントからパーサーに戻る前に、処理手続きで XML-CODE を -1 に設定して故意に解析を終了した場合にも発生する。この場合、パーサーは EXCEPTION XML イベントを通知しない。以下が適用される。
- ON EXCEPTION 指定が記述されている場合、制御が無条件文-1 に移される。
- ON EXCEPTION 指定が記述されていない場合、NOT ON EXCEPTION 指定が記述されていても無視され、制御が XML PARSE 文の最後に移される。
- XML 処理手続きが例外 XML イベントを取り扱い、パーサーに制御を返す前に XML-CODE をゼロに設定した場合、例外条件は発生しない。
- 取り扱われない例外がほかに発生せずにパーサーが終了した場合、NOT ON EXCEPTION 指定の無条件文-2 が指定されていれば無条件文-2 に制御が移される。
- NOT ON EXCEPTION 指定は、XML PARSE 処理の終了時に例外条件がまったく存在しないときに実行される無条件文を指定する。以下が適用される。
- 例外条件が XML PARSE 処理の終了時にまったく存在しない場合、NOT ON EXCEPTION 指定の無条件文-2 が指定されていれば無条件文-2 に制御が移される。
- NOT ON EXCEPTION 指定が記述されていない場合、制御が XML PARSE 文の最後に移される。この場合、ON EXCEPTION 指定はあっても無視される。XML PARSE 文の実行後、特殊レジスタ XML-CODE にはゼロが格納される。
XMLPARSE"COMPAT" が設定されており、ネイティブ COBOL で実行されている場合、' などの XML 文字エンティティは個別のイベントとして出力される。XMLPARSE"XMLSS" が設定されており、マネージ COBOL で実行されている場合、XML エンティティは、そのエンティティが表す単一の文字に変換され、そのエンティティを囲む一般的なテキストとともに単一のイベントを生成する。