パーサーに XML テキストを 1 セグメントずつ渡すことによって、XML 文書を構文解析することができます。 この手法を適用するのは主に次の 2 とおりの場合です。
この機能を使用するには、XMLPARSE(XMLSS)コンパイラー・オプションを有効にしてプログラムをコンパイルする必要があります。
1 セグメントずつ XML 文書を構文解析するには、構文解析データ項目を XML 文書の最初のセグメントに初期化してから、XML PARSE ステートメントを実行します。 パーサーは通常の場合と同様に、XML テキストを処理してから、XML イベントを処理プロシージャーに返します。 テキスト・セグメントの最後で、パーサーは、XML-CODE をゼロに設定して、END-OF-INPUT XML イベントをシグナル通知します。 処理対象の文書のセグメントがまだ存在する場合には、処理プロシージャーで XML データの次のセグメントを構文解析データ項目に移動し、XML-CODE を 1 に設定してから、パーサーに戻ります。 XML セグメントの最後をパーサーにシグナル通知するには、XML-CODE をゼロに設定したままにしてパーサーに戻ります。
構文解析データ項目の長さはセグメントごとに評価され、これによってセグメント長が決定されます。
推奨: XML 文書セグメントが可変長である場合、構文解析データ項目には可変長項目を指定します。 たとえば、可変長の XML セグメントの場合、構文解析データ項目には次のようなものが考えられます。
XML 文書をパーサーに複数のセグメントで送信した場合、 文書コンテンツは、単一イベントで 1 つの大きなフラグメントとしてではなく、 複数のイベントで複数のフラグメントとして、処理プロシージャーに返されることがあります。
たとえば、コンテンツ文字のストリングの真ん中を分割点として 2 つのセグメントに文書を分割した場合、 パーサーは 2 つの別個の CONTENT-CHARACTERS イベントでコンテンツを返します。 処理プロシージャーは、必要に応じてアプリケーションでコンテンツのストリングを再組み立てする必要があります。 開始エレメント・タグ、属性名、名前空間宣言、および終了エレメント・タグは、文書の 2 セグメントに分割された場合でも常に、単一イベントで処理プロシージャーに送信されます。
セグメントの分割がマルチバイト文字のバイトを横断して行われた場合、パーサーは、単一イベントで送信するために、分割を検出して文字を再組み立てします。
QSAM または VSAM ファイルに保管された XML 文書は、次のように処理することができます。
使用上の注意: XML 文書のルート・エレメントの後には各種情報 (任意の順序の 0 個以上のコメントまたは処理命令) が続く可能性があります。 ただし、1 セグメントずつ文書を構文解析した場合、 パーサーは、セグメントの最後の項目が不完全である場合にのみ、 ルート・エレメントの終了タグの処理後に、END-OF-INPUT XML イベントをシグナル通知します。 セグメントが完全な XML 項目 (ルート・エレメント終了タグ、またはその後ろに完全なコメントまたは処理命令がある場合など) で終了している場合、 項目自体のイベントの後に発生する、次の XML イベントは、END-OF-DOCUMENT XML イベントになります。
推奨: ルート・エレメントの最後に続けて XML データのセグメントを提供するには、各セグメントの最後に、少なくとも最初がスペースではない文字の XML 項目を組み込んでください。 パーサーが処理する最後のセグメントにのみ、完全な項目を組み込んでください。 たとえば、次の例 (各行が XML 文書の 1 セグメント) では、テキスト This comment ends this segment が入っているセグメントが構文解析される最後のセグメントです。
<Tagline> COBOL is the language of the future! </Tagline> < !--First comment-- > <?pi data?> <!- -This comment ends this segment--> <!-- This segment is not included in the parse-->