XML イベントの処理

パーサーが処理プロシージャーに渡すイベントを 判別するには、XML-EVENT 特殊レジスターを使用します。 XML-EVENT には、'START-OF-ELEMENT' 等のイベント名が含まれています。 パーサーは、XML PARSE ステートメント内の XML の ID のタイプに応じて、 特殊レジスター XML-TEXT または XML-NTEXT にイベントの内容を入れて渡します。

イベントは、基本的に、このサンプル XML 文書で発生する順番に示されています。 「サンプル XML テキスト」の下に示されているテキストは、このサンプルから来るものです。 正確なテキストは、区切り文字「<<>>」に囲まれています。

<?xml version="1.0" encoding="ibm-1140" standalone="yes" ?>
<!--This document is just an example-->
<sandwich>
  <bread type="baker&apos;s best" />
  <?spread please use real mayonnaise ?>
  <meat>Ham &amp; turkey</meat>
  <filling>Cheese, lettuce, tomato, etc.</filling>
  <![CDATA[We should add a <relish> element in future!]]>
</sandwich>junk
START-OF-DOCUMENT
説明
文書の構文解析の最初に、1 回発生します。ここでは XML テキストは文書全体であり、 それは LF (ライン・フィード) や NL (改行) 等の、行の制御文字を含みます。
サンプル XML テキスト
このサンプルの場合のテキストは、長さ 336 文字です。
 
VERSION-INFORMATION
説明
オプションの XML 宣言の中で、バージョン情報に対して発生しま す。 XML テキストは、バージョンの値を含みます。XML 宣言 とは、 使用されている XML のバージョンと文書のエンコード方式を指定する XML テキストです。
サンプル XML テキスト
<<1.0>>
 
ENCODING-DECLARATION
説明
XML 宣言の中で、オプションのエンコード宣言に対して発生します。 XML テキストは、エンコード方式の値を含みます。
サンプル XML テキスト
<<ibm-1140>>
 
STANDALONE-DECLARATION
説明
XML 宣言の中で、オプションのスタンドアロン宣言に対して発生します。 XML テキストは、スタンドアロン値を含みます。
サンプル XML テキスト
<<yes>>
 
DOCUMENT-TYPE-DECLARATION
説明
パーサーが、文書タイプ宣言 (DTD) を検出すると発生します。 文書タイプ宣言は、文字シーケンス「<!DOCTYPE」で始まり、 「>」の文字で終わります。その間の中身については、かなり複雑な文法 規則によって記述されています。 (「XML specification」を参照してください。) このイベントに対しては、XML テキストは、開始文字シーケンスと終了文字シーケンスを含む宣言文全体を含みます。 このイベントは、XML テキストが区切り文字を含む、唯一のイベントです。
サンプル XML テキスト
サンプルには文書タイプ宣言がありません。
 
COMMENT
説明
XML 文書中のコメントに対して発生します。XML テキストは、 コメント開始区切り (「<!--」) および コメント終了区切り (「-->」) の間のデータを含みます。
サンプル XML テキスト
<<This document is just an example>>
 
START-OF-ELEMENT
説明
各エレメント開始タグまたは空エレメント・タグに対して 1 回ずつ発生します。XML テキストには、 エレメント名が設定されます。
サンプル XML テキスト
START-OF-ELEMENT イベントとして発生する順番に挙げると次のようになります。
  1. <<sandwich>>
  2. <<bread>>
  3. <<meat>>
  4. <<filling>>
 
ATTRIBUTE-NAME
説明
エレメント開始タグまたは空エレメント・タグ中の各属性に対して、有効な属性名を認識する度に 1 回ずつ発生します。 XML テキストは、属性名を含みます。
サンプル XML テキスト
<<type>>
 
ATTRIBUTE-CHARACTERS
説明
属性値の各断片に対して発生します。XML テキストは、断片を含みます。 属性値は、たとえ複数行にまたがって分かれている場合でも、通常は単一のストリングのみで構成されます。 しかし、属性値が複数のイベントで構成されることはあります。
サンプル XML テキスト
ATTRIBUTE-CHARACTERS イベントとして発生する順番に挙げると次のようになります。
  1. <<baker>>
  2. <<s best>>

サンプルの「type」属性の値が、3 つの断片から成り立っていることに注目してください。 ストリング「baker」単一の文字「'」、およびストリング「s best」です。 単一の文字「'」の断片は、ATTRIBUTE-CHARACTER イベントとして、別に渡されます。

 
ATTRIBUTE-CHARACTER
説明
属性値の中で、事前定義エンティティー参照である 「&amp;」、「&apos;」、「&gt;」、「&lt;」、 および「&quot;」に対して発生します。 事前定義エンティティーについては、「XML specification」を参照してください。
サンプル XML テキスト
<<'>>
 
ATTRIBUTE-NATIONAL-CHARACTER
説明
属性値の中で、「&#dd..;」または「&#hh..;」という形式の 数字参照 (Unicode のコード・ポイントまたは「スカラー値」) に対して発生します。 ただし、ここでは「d」および「h」はそれぞれ 10 進数および 16 進数の桁を表しています。
サンプル XML テキスト
このサンプルには、数字参照は含まれていません。
 
PROCESSING-INSTRUCTION-TARGET
説明
パーサーが、処理命令 (PI) の開始文字シーケンスである、 「<?」に続く名前を認識すると発生します。PI により、XML 文書はアプリケーション用の特殊な命令を含むことができます。
サンプル XML テキスト
<<spread>>
 
PROCESSING-INSTRUCTION-DATA
説明
PI のターゲットに続くデータに対して発生します。 データは、PI の終了文字シーケンス (「?>」) までのものですが、終了文字シーケンスは含みません。 XML テキストに含まれる PI データは、後続のスペース文字を含みま すが、先行のスペース文字は含みません。
サンプル XML テキスト
<<please use real mayonnaise >>
 
CONTENT-CHARACTERS
説明
このイベントは、XML 文書の基本部分、つまりエレメントの開始タグと終了タグの間の文字データを表します。 XML テキストはこのデータを含み、それはたとえ複数行にまたがって分かれている場合でも、 通常は単一のストリングのみで構成されます。 エレメントの内容が参照または他のエレメントを含む場合は、 内容全体は複数のエレメントから構成されます。 パーサーはまた、プログラムの CDATA セクションのテキストを渡すために、 CONTENT-CHARACTERS イベントを使用します。
サンプル XML テキスト
CONTENT-CHARACTERS イベントとして発生する順番に挙げると次のようになります。
  1. <<Ham >>
  2. << turkey>>
  3. <<Cheese, lettuce, tomato, etc.>>
  4. <<We should add a <relish> element in future!>>

サンプルの「meat」エレメントの内容はストリング 「Ham」、文字「&」、およびストリング「 turkey」から成り立っていることに注目してください。 単一の文字「&」の断片は、CONTENT-CHARACTER イベントとして、別に渡されます。 また、この 2 つのストリング断片のそれぞれの先行のスペースおよび 後続のスペースに注目してください。

 
CONTENT-CHARACTER
説明
エレメント・コンテントの中で、事前定義エンティティー参照である「&amp;」、「&apos;」、「&gt;」、「&lt;」、 および「&quot;」に対して発生します。 事前定義エンティティーについては、「XML specification」を参照してください。
サンプル XML テキスト
<<&>>
 
CONTENT-NATIONAL-CHARACTER
説明
エレメント・コンテントの中で、「&#dd..;」または「&#hh..;」という形式の 数字参照 (Unicode のコード・ポイントまたは「スカラー値」) に対して発生します。 ただし、ここでは「d」および「h」はそれぞれ 10 進数および 16 進数の桁を表しています。
サンプル XML テキスト
このサンプルには、数字参照は含まれていません。
 
END-OF-ELEMENT
説明
各エレメント終了タグまたは空エレメント・タグに対して、 パーサーがタグの終了を示す不等号括弧を認識したときに 1 回ずつ発生します。 XML テキストは、エレメント名を含みます。
サンプル XML テキスト
END-OF-ELEMENT イベントとして発生する順番に挙げると次のようになります。
  1. <<bread>>
  2. <<meat>>
  3. <<filling>>
  4. <<sandwich>>
 
START-OF-CDATA-SECTION
説明
CDATA セクションの先頭で発生します。CDATA セクションは、ストリング 「<![CDATA[」で開始し、 ストリング「]]>」で終了します。 これらのセクションは、XML マークアップとして認識される可能 性がある文字を含むテキスト・ブロックを「エスケープ」するため に使用されます。 XML テキストは、開始文字シーケンスの「<![CDATA[」を必ず含みます。 パーサーは、これらの区切り文字の間の、 CDATA セクションの内容を、単一の CONTENT-CHARACTERS イベントとして 渡します。
サンプル XML テキスト
<<<![CDATA[>>
 
END-OF-CDATA-SECTION
説明
パーサーが CDATA セクションの終端を認識すると発生します。
サンプル XML テキスト
<<]]>>>
 
UNKNOWN-REFERENCE-IN-ATTRIBUTE
説明
属性値の中で、 上記の ATTRIBUTE-CHARACTER で示されている 5 つの事前定義エンティティー参照以外のエンティティー参照ついて発生します。
サンプル XML テキスト
サンプルは、不明エンティティー参照を含みません。
 
UNKNOWN-REFERENCE-IN-CONTENT
説明
エレメント・コンテント中で、 上記の CONTENT-CHARACTER で示されている事 前定義エンティティー参照以外のエンティティー参照について発生します。
サンプル XML テキスト
サンプルは、不明エンティティー参照を含みません。
 
END-OF-DOCUMENT
説明
文書の構文解析が完了したときに発生します。
サンプル XML テキスト
END-OF-DOCUMENT イベントの XML テキストは空です。
 
EXCEPTION
説明
XML 文書処理中のエラーが検出されたときに発生します。 構文解析が開始する前に通知される、 エンコード方式の矛盾による例外に関しては、XML-TEXT は長さ 0 であるか、 文書のエンコード宣言の値のみを含みます。
サンプル XML テキスト
例外が発生した位置 (<sandwich> エレメントの終了タグの後の余分な「junk」) を含む、 その個所までに構文解析した文書の部分です。
 

関連リファレンス
『XML-EVENT』(「ILE COBOL 言語解説書」)
『4.6 Predefined entities』(「XML specification」www.w3.org/TR/REC-xml#sec-predefined-ent)
『2.8 Prolog and document type declaration』(「XML specification」www.w3.org/TR/REC-xml#sec-prolog-dtd)