イベント構造体には、24 個の ENTRY 変数があります。これらの変数は、さまざまなイベントでパーサが呼び出す関数をポイントしています。
このトピックの各イベントの説明は、次の XML ドキュメントの例を参照しています。
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 & turkey</meat>'
|| '<filling>Cheese, lettuce, tomato, etc.</filling>'
|| '<![CDATA[We should add a <relish> element in future!]]>'
|| '</sandwich>'
|| 'junk';
説明の中の XML テキストという用語は、イベントに渡されるポインタおよび長さに基づいて構成されたストリングです。この構造体での出現順に、パーサは次のイベントを認識することができます。
- start_of_document
- ドキュメントの構文解析が開始されるときに、1 回発生します。パーサは、LF (改行) または NL (改行) などの行制御文字を含む、ドキュメント全体のアドレスと長さを渡します。上記の例では、ドキュメントの長さは 305 文字です。
- version_information
- オプションの XML 宣言内のバージョン情報に対して発生します。パーサは、バージョン値 (上記の例では "1.0") が入ったテキストのアドレスと長さを渡します。
- encoding_declaration
- XML 宣言内のオプションのエンコーディング宣言に対して発生します。パーサは、エンコーディング値が含まれたテキストのアドレスと長さを渡します。
- standalone_declaration
- XML 宣言内のオプションのスタンドアロン宣言に対して発生します。パーサは、スタンドアロン値 (上記の例では "yes") が入ったテキストのアドレスと長さを渡します。
- document_type_declaration
- パーサがドキュメント・タイプ宣言を検出したときに発生します。ドキュメント・タイプ宣言は、文字シーケンス <!DOCTYPE" から始まり、> 文字で終わります。この間には、内容を記述するやや複雑な文法規則が入ります。
パーサは、宣言全体が含まれたテキストのアドレスと長さを渡します。これには、開始と終了の文字シーケンスが含まれます。このイベントは、XML テキストに区切り文字が含まれる唯一のイベントです。上記の例には、ドキュメント・タイプ宣言はありません。
- end_of_document
- ドキュメントの構文解析が完了したときに 1 回発生します。
- start_of_element
- エレメント開始タグまたは空エレメント・タグごとに 1 回発生します。パーサは、エレメント名が含まれたテキストのアドレスと長さを渡します。上記の例では、構文解析で最初に発生する start_of_element イベントに、ストリング sandwich が含まれています。
- attribute_name
- エレメント開始タグまたは空エレメント・タグ内の属性ごとに、有効な名前を認識した後に発生します。パーサは、属性名が含まれたテキストのアドレスと長さを渡します。上記の例に含まれる属性名は、type だけです。
- attribute_characters
-
属性値のフラグメントごとに発生します。パーサは、フラグメントが含まれたテキストのアドレスと長さを渡します。属性値は通常、次のように複数の行に分割されている場合でも、ただ 1 つのストリングで構成されます。
<element attribute="This attribute value is split across two lines"/>
ただし、属性値は複数の部分で構成されている場合があります。例えば、sandwich の例の最初にある type 属性の値は、ストリング baker、単一文字 '、およびストリング s best の 3 つのフラグメントで構成されています。パーサは、これらのフラグメントを 3 つの別々のイベントとして渡します。複数の文字からなる各ストリングは attribute_characters イベントとして渡し、単一文字は attribute_predefined_reference イベントとして渡します。
- attribute_predefined_reference
- 属性値の中で、5 つの定義済みエンティティ参照 &、'、>、<、および " に対して発生します。パーサは、&、'、>、<、または " のいずれか 1 つがそれぞれ入った CHAR(1) または WIDECHAR(1) の値を渡します。
- attribute_character_reference
-
属性値の中で、次の形式の数字参照に対して発生します。
&#dd;
または
&#xhh;
ここで、d は 10 進数、h は 16 進数を表します。パーサは、対応する整数値が含まれた FIXED BIN(31) 値を渡します。
- end_of_element
- エレメント終了タグまたは空エレメント・タグごとに、パーサがタグの終了不等号括弧を認識したときに 1 回発生します。パーサは、エレメント名が含まれたテキストのアドレスと長さを渡します。
- start_of_CDATA_section
- CDATA セクションの開始時に発生します。CDATA セクションはストリング <![CDATA[ で始まり、ストリング ]] で終わります。このセクションは、エスケープしないと XML マークアップとして認識される文字を含むテキストのブロックをエスケープするために使用されます。パーサは、開始文字 <![CDATA[ が含まれたテキストのアドレスと長さを渡します。パーサは、これらの区切り文字間にある CDATA セクションの内容を、単一の content-characters イベントとして渡します。上記の例では、content-characters イベントとして We should add a <relish> element in future! が渡されます。
- end_of_CDATA_section
- パーサが CDATA セクションの終了を認識したときに発生します。パーサは、終了文字シーケンス "]]" が含まれたテキストのアドレスと長さを渡します。
- content_characters
-
このイベントは、XML ドキュメントの本体を表します。これは、エレメント開始タグとエレメント終了タグの間にある文字データです。パーサは、このデータが含まれたテキストのアドレスと長さを渡します。これは、次のように複数の行に分割されている場合でも、ただ 1 つのストリングで構成されます。
<element1>This character content is split across two lines"</element1>
エレメントの内容に参照や他のエレメントが含まれている場合、内容全体は複数のセグメントで構成されている場合があります。
例えば、上記の例の meat エレメントの内容は、ストリング Ham、文字 &、およびストリング turkey で構成されます。最初のストリング・フラグメントには後ろにスペース、2 番目のストリング・フラグメントには先頭にスペースがあります。パーサは、これらの 3 つの内容のフラグメントを別々のイベントとして渡します。ストリングの内容のフラグメント (Ham および turkey) は content_characters イベントとして渡され、単一の & 文字は content_predefined_reference イベントとして渡されます。また、パーサは content_characters イベントを使用して CDATA セクションのテキストをアプリケーションに渡します。
- content_predefined_reference
- エレメント内容の中で、定義済みエンティティ参照 &、'、>、<、および " に対して発生します。パーサは、&、'、>、<、または " のいずれか 1 つがそれぞれ入った CHAR(1) または WIDECHAR(1) の値を渡します。
- content_character_reference
-
エレメント内容の中で、次の形式の数字参照に対して発生します。
&#dd;
または
&#xhh;
ここで、d は 10 進数、h は 16 進数を表します。パーサは、対応する整数値が含まれた FIXED BIN(31) 値を渡します。
- processing_instruction
- 処理命令 (Processing Instruction; PI) を使用すると、XML ドキュメントにアプリケーション用の特別な命令を含めることができます。このイベントは、パーサが PI 開始文字シーケンス <? に続く名前を認識したときに発生します。また、このイベントは、PI ターゲットに続く PI 終了文字シーケンス ?> までのデータ(?> 自体は含まない)も対象とします。データの末尾にある空白文字は含まれますが、先頭にある空白文字は含まれません。パーサは、ターゲットが含まれるテキスト (例では spread) のアドレスと長さ、およびデータが入ったテキストのアドレスと長さ (例では please use real mayonnaise) を渡します。
- comment
- XML ドキュメント内のコメントに対して発生します。パーサは、開始および終了コメント区切り文字 (それぞれ <!-- と -->) の間にあるテキストのアドレスと長さを渡します。上記の例では、This document is just an example だけがコメントのテキストです。
- unknown_attribute_reference
- 属性値の中で、定義済みエンティティ参照 (イベント attribute_predefined_reference の項に示したもの) 以外のエンティティ参照に対して発生します。パーサは、エンティティ名が含まれたテキストのアドレスと長さを渡します。
- unknown_content_reference
- エレメント内容の中で、定義済みエンティティ参照 (イベント content_predefined_reference の項に示したもの) 以外のエンティティ参照に対して発生します。パーサは、エンティティ名が含まれたテキストのアドレスと長さを渡します。
- start_of_prefix_mapping
- このイベントは、現在は生成されません。
- end_of_prefix_mapping
- このイベントは、現在は生成されません。
- exception
- XML ドキュメントの処理中にエラーを検出すると、パーサはこのイベントを生成します。