1. XML PARSE

XML PARSEステートメントは、XMLPARSEコンパイラー・オプションの設定によるCOBOL言語インターフェースです。

XMLPARSEコンパイラー・オプションには、XMLPARSE(XMLSS)とXMLPARSE(COMPAT)の2種類がありますが、OFCOBOLではXMLPARSE(XMLSS)を基準に扱います。

XML PARSEステートメントはXML文書をフラグメントごとに分析し、各文書をユーザーが作成した処理プロシージャに渡します。

figure pd xml parse
Figure 1. XML PARSEステートメントの形式

以下は、ステートメントの各設定項目についての説明です。

  • 識別子

    • identifier-1は、XML文書の文字列を含みます。identifier-1は英数字データ項目、または英数字グループ・データ項目である必要があります。

  • PROCESSING PROCEDURE句

    • XMLパーサーが作成する様々なイベントを処理するプロシージャの名前を指定します。

      • procedure-name-1, procedure-name-2

        手続き部のセクションや段落を指定します。procedure-name-1とprocedure-name-2の両方を指定した場合、同じプロシージャ領域内のセクションや段落である必要があります。いずれかが宣言部分内にある名前である場合、両方共、宣言部分内にある名前である必要があります。

      • procedure-name-1

        処理プロシージャの最初(または唯一)のセクションまたは段落を指定します。

      • procedure-name-2

        処理プロシージャの最後のセクションまたは段落を指定します。

    • XMLイベントに対してパーサーはprocedure-name-1というプロシージャの最初のステートメントに制御を転送します。制御は常に処理プロシージャからXMLパーサーに返されます。

      制御が返される時点は以下のように決定されます。

      • procedure-name-1が段落名で、procedure-name-2が指定されていない場合、procedure-name-1段落の最後のステートメントを実行した後返されます。

      • procedure-name-1がセクション名で、procedure-name-2が指定されていない場合、procedure-name-1セクションの最後の段落のステートメントを実行した後返されます。

      • procedure-name-2が指定され、段落名である場合、procedure-name-2段落の最後のステートメントを実行した後返されます。

      • procedure-name-2が指定され、セクション名である場合、procedure-name-2セクションの最後の段落のステートメントを実行した後返されます。

      procedure-name-1とprocedure-name-2の間で必要な唯一の関係は、procedure-name-1に命名されたプロシージャから始まり、procedure-name-2に命名されたプロシージャの実行により終了する連続する実行順序を定義することです。折り返し点までのパスが2つ以上ある場合、procedure-name-2はEXITステートメントでのみ構成された段落名を指定することができ、折り返し点までのすべてのパスはこの段落で構成される必要があります。

    • 処理プロシージャはXMLイベントが処理されるすべてのステートメントで構成されます。処理プロシージャの範囲には、処理プロシージャの範囲にあるCALL、EXIT、GO TO、GOBACK、PERFORMステートメントが実行されるすべてのステートメントが含まれます。処理プロシージャの範囲では、GOBACKまたはEXIT PROGRAMステートメントが実行されてはなりません。処理プロシージャではSTOP RUNステートメントを使用して実行装置を終了することができます。

  • ON EXCEPTION句

    • ON EXCEPTION句はXML PARSEステートメントで例外条件が発生したときに実行されます。

    • XMLパーサーがXML文書の処理中にエラーを検知した場合、例外条件が存在します。パーサーはまず「EXCEPTION」が含まれた特殊レジスターXML-EVENTを使用して制御を処理プロシージャに転送することで、XML例外を通知します。また一般のXMLイベントについて、パーサーに戻る前に処理プロシージャがXML-CODEを-1に設定した場合にも例外条件が存在します。この場合、パーサーがXML-EVENTを「EXCEPTION」に表示せずに句の分析が終了します。

    • ON EXCEPTION句を指定した場合、パーサーはimperative-statement-1に制御を転送します。ON EXCEPTION句を指定せずにNOT ON EXCEPTION句を指定した場合、NOT ON EXCEPTION句は無視され、制御はXML PARSEステートメントの最後に転送されます。処理プロシージャがXML例外イベントを処理し、XML-CODEを0に設定した後、制御権限をパーサーに返す場合、例外条件はそれ以上存在しません。

  • NOT ON EXCEPTION句

    • NOT ON EXCEOPTION句はXML PARSE処理を終了するとき、例外条件が存在しない場合に実行されます。XML PARSE処理を終了時に例外条件が存在しない場合、NOT ON EXCEPTIONが指定されていれば、制御はNOT ON EXCEPTION句のimperative-statement-2に転送されます。NOT ON EXCEPTION句が指定されていなければ、制御はXML PARSEステートメントの最後に転送され、ON EXCEPTION句が指定されていれば、無視されます。

    • 特殊レジスターXML-CODEはXML PARSEステートメントを実行した後に0を含みます。

  • END-XML句

    • XML GENERATEステートメントまたはXML PARSEステートメントの最後を示します。