イベント構造には、19 の 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 回発生します。パーサは、このイベントにはパラメータを渡しません (ユーザ・トークンを除く)。
- 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"/>
- end_of_element
- パーサがタグの終わり山括弧を認識するたびに、それぞれの要素終了タグまたは空の要素タグで 1 回発生します。パーサは、要素名および該当するネームスペース情報を含んでいるテキストのアドレスと長さを渡します。
- start_of_CDATA_section
- CDATA セクションの始まりで発生します。CDATA セクションは <![CDATA[ 文字列で始まり、]] 文字列で終わります。これは、XML マークアップとして認識される文字を含むテキストのブロックをエスケープするために使用します。パーサは、このイベントにはパラメータを渡しません (ユーザ・トークンを除く)。
このイベントの後で、パーサはこれらの区切り文字間にある CDATA セクションの内容を、1 つまたは複数の content-characters イベントとして渡します。上記の例では、content-characters イベントに We should add a <relish> element in future! というテキストが渡されています。
- end_of_CDATA_section
- このイベントは、パーサが CDATA セクションの末尾を認識すると発生します。パーサは、このイベントにはパラメータを渡しません (ユーザ・トークンを除く)。
- content_characters
-
このイベントは、XML ドキュメントの本体を表します。これは、要素の開始と終了のタグ間にある文字データです。パーサは、このデータを含んでいるテキストのアドレスと長さを渡します。このデータは通常、複数の行に分かれていても 1 つの文字列のみを含んでいます。
パーサは、次のイベントによって内容の一部を構成する他の文字が提供されるかどうかを示す、フラグ・バイトも渡します。開始と終了のタグ間に多くのデータがあるときが、これに該当します。
さらにパーサは content_characters イベントを使用して CDATA セクションのテキストをアプリケーションに渡します。
- processing_instruction
- Processing instruction (PI) により、XML ドキュメントにアプリケーションの特殊な命令を含めることができます。このイベントは、パーサが PI 開始文字シーケンス <? の後の名前を認識すると発生します。さらに、この PI ターゲットの後から PI 終了文字シーケンス ?> までのデータ (終了文字は含まない) もこのイベントの対象になります。データの先頭でなく末尾にある余白文字も対象に含まれます。上記例では、パーサはターゲット spread を含んでいるテキストのアドレスと長さと、データ please use real mayonnaise を含んでいるテキストのアドレスと長さを渡します。
- comment
- XML ドキュメントのすべてのコメントに発生します。パーサは、コメントの開始 <!-- と終了 --> の区切り文字間にあるテキストのアドレスと長さを渡します。上記例では、唯一のコメント・テキストは This document is just an example です。
- namespace_declare
- XML ドキュメントのすべてのネームスペース宣言に発生します。パーサは、ネームスペース・プレフィックス (もしあれば) のアドレスと長さ、およびネームスペース URI のアドレスと長さを渡します。ネームスペース・プレフィックスがない場合、渡される長さはゼロでアドレスの値は使用されません。PLIXSAXA と PLISAXB ビルトインには、対応するイベントはありません。
- end_of_input
- このイベントは、パーサが現在の入力バッファの終わりに達すると発生します。パーサは、(BYVALUE ユーザ・トークンとともに) 2 つの BYADDR パラメータ、つまり次のバッファのアドレスと長さを渡し、処理されるようにします。BYADDR パラメータを持つイベントは、このイベントとコンテンツ文字イベントに限られますが、このイベントは呼び出されたイベントによって変更されるパラメータを持つ唯一のイベントです。PLIXSAXA と PLISAXB ビルトインには対応するイベントはなく、このイベントが PLISAXC による任意サイズの XML ドキュメントの解析を許可するイベントです。
- unresolved_reference
- このイベントは、XML ドキュメントですべての未解決リファレンスに発生します。パーサは、未解決リファレンスのアドレスと長さを渡します。
- unknown_attribute_reference
- 定義済みのエンティティ・リファレンス以外のエンティティ・リファレンスの属性値の中で発生し、イベント attribute_predefined_reference にリストされます。パーサは、エンティティ名を含んでいるテキストのアドレスと長さを渡します。
- exception
- パーサは、XML ドキュメントを処理するエラーを検出したとき、このイベントを生成します。