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;

制約事項

If using the -ebcdic option to compile your program, the callback event logic should account for the fact that the data passed back to the call backs is in ASCII, even if the input format was in EBCDIC. Because of this, the data must be translated prior to use within the callbacks. In addition, all reference values passed as a FIXED BIN(31) are for ASCII character encoding.

It is assumed that your program is built using the -bigendian compiler option if operating on an Intel Chip. If compiling your program without using the -bigendian compiler option, then you must convert the parameter types to/from -bigendian prior to use.

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 つが含まれる場合のみ、セットされます。