第30回 実体参照における「振る舞い」とは何か Page 1

XML 1.0は、1998年にW3Cから勧告として公開された。当然中身は英語で、しかもEBNFと呼ばれる式によって重要な部分が記述してある。この連載では、XML 1.0を深く理解するために、そのXML 1.0勧告の最新版「Extensible Markup Language (XML) 1.0 (Third Edition)」をだれでも分かるように、やさしく読み解きながら解説していくことを目指している。(編集局)

川俣 晶
株式会社ピーデー
2005/2/5

XMLプロセッサによる実体および参照の「振る舞い」

主な内容
--Page 1--
XMLプロセッサによる実体および参照の「振る舞い」
文脈別に見る実体と参照の表
振る舞いの内容
 ・4.4.1 Not Recognized(認識しない)
 ・4.4.2 Included(取り込み)
--Page 2--
 ・4.4.3 Included If Validating(検証のために取り込み)
 ・4.4.4 Forbidden(禁止)
 ・4.4.5 Included in Literal(リテラル内での取り込み)
--Page 3--
 ・4.4.6 Notify(通知)
 ・4.4.7 Bypassed(処理しない)
 ・4.4.8 Included as PE(PEとして取り込み)
 ・4.4.9 Error(誤り)

 前回は、「4.4 XML Processor Treatment of Entities and References(4.4 XMLプロセッサによる実体および参照の扱い)」を読み始めた。これは、さまざまな実体の種類と、それが出現する場所(文脈)ごとに、どのように処理すればよいのかを示した表とその説明文から構成される。これは、XML 1.0勧告最大の山場かもしれない大物である。しかし、この表があることで分かりやすくなるという側面もあるので、取り組むことは決して無駄ではない。ここに規定された内容には、ほかの場所で記述された規定との重複が見られる場合があるが、表形式で実体の種類と場所(文脈)の関係を一望できる利便性は高い。そして、表形式にしたことで、あいまいさも減らすことができるのである。

 今回はこの表の続きを読む。正確にいえば、前回は表を読むために必要とされる2つの情報のうち、「参照が現れる文脈」について読んだが、今回はもう1つの「振る舞い」について読んでいくことになる。

編集注:この連載では、XML 1.0勧告であるW3Cの「Extensible Markup Language (XML) 1.0 (Third Edition)」(英語)を参照し、その日本語訳として、日本工業規格 JIS X 4159:2002(Second Edition相当。リンク先は該当規格の原案ですが、最終版とほぼ同等の内容です)と追補1として出版予定の原稿(Third Edition対応)を参照しています。本文中のピンクの地の部分は、XML 1.0勧告の原文を示しています。

文脈別に見る実体と参照の表

 前回のおさらいをしておこう。ここで読んでいくのは、実体と参照の扱いに関する表を読むために必要な説明である。

 この表は、「どこで」「何が出現したとき」「どうする」ということを読み取るために作られている。表の最も左に記述されているのが、「どこで」(つまり文脈)である。上部に記述されているのが「何が出現したとき」(実体の種類)である。そして、「どうする」(つまり振る舞い)が、表の中央部分に記述されている。縦軸で「どこで」を、横軸で「何が出現したとき」を選んで、それが交差したところに記述されている振る舞いが、「どうする」必要があるかを示している。「どこで」(文脈)は前回読んだ。「何が出現したとき」(実体の種類)は、すでに規定済みであり、特別な説明を要しないものなので、特に追加説明はない。「どうする」(振る舞い)は今回読んでいく範囲で規定されている。

 前回にも掲載した表を再掲しておこう。

  Entity Type Character
Parameter Internal General External Parsed General Unparsed
Reference in Content Not recognized Included Included if validating Forbidden Included
Reference in Attribute Value Not recognized Included in literal Forbidden Forbidden Included
Occurs as Attribute Value Not recognized Forbidden Forbidden Notify Not recognized
Reference in EntityValue Included in literal Bypassed Bypassed Error Included
Reference in DTD Included as PE Forbidden Forbidden Forbidden Forbidden

振る舞いの内容

 今回は、表の中央部分に書き込まれた振る舞いの具体的な内容について読んでいこう。

4.4.1 Not Recognized(認識しない)

Outside the DTD, the % character has no special significance; thus, what would be parameter entity references in the DTD are not recognized as markup in content. Similarly, the names of unparsed entities are not recognized except when they appear in the value of an appropriately declared attribute.

DTDの外では、%文字は、いかなる特別な意味も持たず、従って、DTDの中ではパラメタ実体参照として認識するものであっても、contentの中ではマーク付けとしては認識しない。同様に、適切に宣言した属性の値の中に現れる場合を除き、解析対象外実体の名前は認識しない。

 まず、「4.4.1 Not Recognized(4.4.1 認識しない)」である。「content」を日本語に直さずに原文のままで書かれているのは、それが生成規則[43] contentに当たるためである。これは前回にも出たばかりなので、説明は繰り返さない。前半の文章で述べていることは、パラメタ実体参照はDTDの外では何の意味も持たず、ただの文字の列として扱われるということである。つまり、「%abc;」と書いたとしても、それは「%」で始まり、「;」で終わる5文字の文字という以上の意味は持たない。

 後半の文章は、解析対象外実体の名前は、属性リスト宣言でENTITY型かENTITIES型を指定した場合にのみ使用できるが、それ以外でその名前を使用してもエラーになるわけではなく、単に文字の列として扱われるだけ、という話である。「認識しない」とはエラーにならず、単に文字の列として扱われることを示す。

4.4.2 Included(取り込み)

[Definition: An entity is included when its replacement text is retrieved and processed, in place of the reference itself, as though it were part of the document at the location the reference was recognized.] The replacement text MAY contain both character data and (except for parameter entities) markup, which MUST be recognized in the usual way. (The string "AT&T;" expands to "AT&T;" and the remaining ampersand is not recognized as an entity-reference delimiter.) A character reference is included when the indicated character is processed in place of the reference itself.

[定義:実体参照を処理するには、その置換テキストを取り出し、処理し、参照自体の代わりに、参照があった位置で、文書の一部として含まれるものとして取り込む(included)。] 置換テキストは、文字データおよび(パラメタ実体以外の)マーク付けのいずれを含んでもよく、これらは、通常の方法で認識されなければならない(文字列"AT&T;"は、"AT&T;"に展開され、残されたアンパサンドは、実体参照の区切り子としては認識しない)。文字参照は、番号で示した文字を参照自体の代わりに取り込む

 次は、「4.4.2 Included(4.4.2 取り込み)」である。最初の文は、included(取り込み)という用語の定義になっている。つまり、表中でIncludedとされたものは、置換テキストへの置き換えが発生するわけである。例えば、実体objectの値がpenの場合、「This is a &object;.」は、実体参照「&object;」が値に置換され、「This is a pen.」となる。

 次の文章は、置換テキストの中身についての説明である。置換テキストには、当然文字データを記述できるが、それに加えてマーク付けを記述してもよいとしている。ここでパラメタ実体が例外とされているが、これはDTDの外側では使えないものなので、当然のことである。ちなみに、DTD内部に記述された置換テキスト自身も、置換後はDTD外部に存在することになり、そこではパラメタ実体が効力を発揮できないことになる。

 最後の文章では、文字参照には置換テキストは存在しないが、番号で示した文字を取り込む処理を行うことが示されている。もちろん、これは常識的に期待される処理ではあるが、ほかの処理とまとめて表によって示されることで、あいまいさが少なく、分かりやすくなっている。(次ページへ続く)

  1/3

 Index
やさしく読む「XML 1.0勧告」 第30回
実体参照における「振る舞い」とは何か
Page 1
・XMLプロセッサによる実体および参照の「振る舞い」
・文脈別に見る実体と参照の表
・振る舞いの内容
 ‐4.4.1 Not Recognized(認識しない)
 ‐4.4.2 Included(取り込み)
  Page 2
 ‐4.4.3 Included If Validating(検証のために取り込み)
 ‐4.4.4 Forbidden(禁止)
 ‐4.4.5 Included in Literal( リテラル内での取り込み)
  Page 3
 ‐4.4.6 Notify(通知)
 ‐4.4.7 Bypassed(処理しない)
 ‐4.4.8 Included as PE(PEとして取り込み)
 ‐4.4.9 Error(誤り)


連載 やさしく読む「XML 1.0勧告」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間