PLISAXC サブルーチン

目的

1 つ以上のプログラム バッファー内にある XML ドキュメントを処理するために XML パーサーを呼び出します。

構文

CALL PLISAXC(e, p, x, n, c)

パラメーター

e は、イベント構造体です。

p は、パーサーからイベント関数に渡すポインター値またはトークンです。

x は、処理対象の XML ドキュメントを含む初期バッファーのアドレスです。

n は、x で指定したバッファー内のデータのバイト数です。

c は、処理対象の XML ドキュメントのコード ページを指定する数値式です。

説明

PLISAXC 組み込みサブルーチンは、libmxml2 SAX パーサーに基づく内部 SAX 解析を提供します。19 種類のイベントに対応しており、その内の 16 イベントは PLISAXA および PLISAXB 組み込みサブルーチンと共通していますが、一部のパラメーターおよびアクションに若干の違いがあります。残りの 3 イベントは PLISAXC に固有です。この組み込みサブルーチンは、XML 文字列を含むメモリ アドレスへのポインターを操作できます。この文字列のコードは ASCII でも EBCDIC でも構いません。

PLISAXC は AMODE 24 ではサポートされていませんが、それ以外の特殊な環境要件はありません。CICS、IMS、WebSphere MQ、および TSO を含む、すべての主要なランタイム環境で動作します。

XML が CHARACTER VARYING または WIDECHAR VARYING 文字列に含まれている場合は、ADDRDATA 組み込み関数を使用して、最初のデータ バイトのアドレスを取得する必要があります。

XML が WIDECHAR 文字列に含まれている場合は、バイト数の値は、LENGTH 組み込み関数によって返される値の 2 倍になります。

この例ではネームスペースは使用されず、PLISAXC が最初に呼び出された際にすべての入力が渡されます (そのため、end_of_input イベントを呼び出すことはできません)。この例では、PLISAXC を呼び出すメイン ルーチンのみが示されており、イベント構造体や型宣言は示されていません。

dcl token        char(8);
dcl xmlDocument  char(4000) var;
xmlDocument =
    '<?xml version="1.0" standalone="yes"?>'
||  '<!--This document is just an example-->'
||  '<sandwich>'
||  '<bread type="baker's best"/>'
||  '<?spread please use real mayonnaise ?>'
||  '<meat>Ham &amp; turkey</meat>'
||  '<filling>Cheese, lettuce, tomato, etc.</filling>'
||  'We should add a <relish> element in future!'.
||  '</sandwich>'
||  ' ';
call plisaxc( eventHandler,
              addr(token),
              addrdata(xmlDocument),
              length(xmlDocument) );
end;

制約事項

-ebcdic オプションを使用してプログラムをコンパイルする場合、コールバック イベント ロジックでは、入力フォーマットが EBCDIC であってもコールバックに渡されるデータは ASCII であることが考慮されている必要があります。このため、データは使用前にコールバック内で変換される必要があります。さらに、FIXED BIN(31) として渡されるリファレンス値はすべて、ASCII 文字エンコーディング用です。

UNIX では、XML 入力が EBCDIC で、左角かっこおよび右角かっこ ([] など) を含んでおり、その値が X'BA' および X'BB' である場合、これらのルーチンを変換するためには、独自のカスタム コードセット モジュールを作成する必要があり、それらを実行する際には、カスタム コードセットをポイントするように環境変数 MFCODESET を設定する必要があります。これは ASCII 入力には適用されません。

Intel Chip 上でプログラムが動作している場合、そのプログラムは -bigendian コンパイラ オプションを使用してビルドされたものと見なされます。-bigendian コンパイラ オプションを使用せずにプログラムをコンパイルした場合は、使用前に -bigendian に対するパラメーター タイプの変換が必要になります。

content_characters イベントの FLAGS パラメーターを BIT(8) 配列として使用する場合、Intel と z/OS のビット順序の違いを考慮する必要があります。ビット配列ではなく単一のバイトとして評価する場合は、ビット順序は z/OS のビット順序と一致します。リトルエンディアン プラットフォームでのビット配列のビット順序の説明については、オンライン ヘルプのトピック「Bit (n)」を参照してください。

XML コンテンツに定義済みのリファレンス文字が含まれている場合、定義済みのリファレンス文字に先行する文字、リファレンス文字、およびリファレンス文字の後続の文字に対して、別個の content_characters イベントが駆動されます。たとえば、XML スニペットの <meat>Ham &amp; turkey</meat> は、PLISAXC を使用して 3 つの content_characters イベント (Ham&Turkey にそれぞれ 1 つずつ) を生成します。

content_characters イベントの FLAGS パラメーターの場合、次のイベントを示すフラグには content_characters ('80'x) が含まれます。これは、現在のところ、XML にエスケープする必要のある文字が現在のイベントに含まれている場合に、次のイベントに content_characters が含まれるかどうかのみを示します。また、XML にエスケープする文字がないことを示すフラグ ('40'x) は、文字列に PLISAXA の定義済みリファレンス文字のいずれか 1 つが含まれる場合のみ、セットされます。