第31回 実体置換テキストの構築と定義済み実体 Page 3

川俣 晶
株式会社ピーデー
2005/3/9

定義済み実体の規定

 さて、次は「4.6 Predefined Entities(4.6 定義済み実体)」を読んでいこう。これは、すべてのXML利用者が、どれほどの初心者であろうとかかわりを持つ機能といえる。しかし、あまりに当たり前の機能であるが故に注意を要する点もある。

 早速読んでいこう。最初の段落は、それ全体がescape(別扱い)という用語の定義になっている。

[Definition: Entity and character references MAY both be used to escape the left angle bracket, ampersand, and other delimiters. A set of general entities (amp, lt, gt, apos, quot) is specified for this purpose. Numeric character references MAY also be used; they are expanded immediately when recognized and MUST be treated as character data, so the numeric character references "&#60;" and "&#38;" MAY be used to escape < and & when they occur in character data.]

[定義:不等号(より小)、アンパサンドおよびほかの区切り子を別扱いするには実体参照および文字参照のどちらも使用できる。いくつかの一般実体(amp、lt、gt、apos、quot)をこの目的のために使用する。番号による文字参照も、この目的のために用意されている。文字参照は、認識されると直ちに展開され、文字データとして扱われるので、番号による文字参照"&#60;"および"&#38;"は、文字データ内に出現する<および&を別扱いするために使用できる。]

 「<」と「&」は、多くのコンテキストで特別な意味が与えられ、普通の文字として記述することができない。同様の事例はほかにもいくつかある。そのような文字を記述する方法として、冒頭の文章では実体参照と文字参照の2つの方法があることが説明されている。

 次に列挙された5つの実体は、わざわざ名前を示して書かれていることから分かるとおり、利用者が自由に定義して使う実体とは性格が異なっている。つまり、それがPredefined Entities(定義済み実体)ということである。この5つの名前は「&、<、>、'、"」記号にそれぞれ相当する。

 次は、一般的に上記の名前を使って別扱いすることが多いが、文字参照を使って悪い理由は何もないということである。そのことが、次の文でより具体的に説明されている。つまり、「&lt;」と書くのではなく「&#60;」と書いても何ら問題はない。

 以上で、escape(別扱い)という用語の定義は終わる。次は、Predefined Entities(定義済み実体)のより本質的な規定の話に入っていく。

All XML processors MUST recognize these entities whether they are declared or not. For interoperability, valid XML documents SHOULD declare these entities, like any others, before using them. If the entities lt or amp are declared, they MUST be declared as internal entities whose replacement text is a character reference to the respective character (less-than sign or ampersand) being escaped; the double escaping is REQUIRED for these entities so that references to them produce a well-formed result. If the entities gt, apos, or quot are declared, they MUST be declared as internal entities whose replacement text is the single character being escaped (or a character reference to that character; the double escaping here is OPTIONAL but harmless). For example:

すべてのXMLプロセサは、宣言されているかどうかに関係なく、これらの実体を認識しなくてはならない。相互運用性のためには、妥当なXML文書は、これらの実体を使用する前にほかの実体と同様に宣言することが望ましい。実体ltまたはampを宣言する場合、内部実体として宣言し、その置換テキストは、別扱いされる文字(不等号(より小)またはアンパサンド)への文字参照としなければならない。これらの実体を参照しても結果が整形式となるためには、2重の別扱いを必要とする。実体gt, aposまたは quotを宣言する場合、これらの実体を内部実体として宣言し、その置換テキストは、別扱いされる単一の文字(またはその文字への文字参照)としなければならない。この場合、2重の別扱いは不要であるが、有害ではないことに注意。次にその例を示す。

 冒頭でいう「これらの実体」とは「amp、lt、gt、apos、quot」の5つである。つまり、この5つは実体を宣言することなく利用できることが保証されている。逆にいえば、異なる定義を与えて使うことはできない。例えば、「&lt;」を「Lucky Town」という言葉に置換させたい、と思ってもそれはできない。

 次の文章にある「相互運用性のためには」とは、以下のような意図を示す言葉であった。

拘束力は持たない推奨事項について記述する文を示す。ISO 8879へのWebSGML適用附属書以前から存在するSGMLプロセサが、XML文書を処理できる可能性を高めるために、これらの推奨事項を取り入れる。

 つまり、XMLネイティブの処理系がふんだんに入手できる現状ではあまり意味のない規定である。さて、ここで述べているのは、この5種類の実体を使う前に宣言しておくことが望ましいという話である。この5種類の実体を定義済みと見なすのはXMLの規定であり、古い世代のSGMLにはそのような規定はない。つまり、古い世代のSGMLプロセッサでも処理可能であるようにしようと思うなら、これら5種類の実体の宣言を用意する必要がある。

 次は重要なポイントになるので、注意が必要である。「lt」「amp」の2つの実体は、多くのコンテキストで特別の意味を持つ記号を表現するために使われる。従って、それらの記号を直接記述することはできない。しかし、文字参照としてなら記述できる。この後に出てくる実際の定義を見て、よく確認してもらいたい。

 次も要注意である。つまり、文字参照を記述するための先頭の「&」記号そのものも、文字参照で記述する必要のあるケースがあるということである。この後に出てくる実際の定義を見て、よく確認してもらいたい。

 次に述べられている3種類の文字(gt、apos、quot)については、多くのコンテキストで別扱いする必要性が存在しないか、あるいは必要性が薄いものである。これは、2重の別扱いをする必要はなく、単に1つの文字を置換テキストにすればよいわけである。

 最後の文章は、多くのコンテキストで特別な意味を持たない文字である以上、2重の別扱いは必要ではないが、それを行っても等価の結果が得られるので、行ってもよいということである。

 この段落に続いて、実際に5種類のPredefined Entities(定義済み実体)の定義の例が掲載されている。

<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

 実際にPredefined Entities(定義済み実体)の定義を明示的にDTDに書き込む場合は、この定義をそのまま使うのが最も安全だろう。

 以上で、「4.5 Construction of Entity Replacement Text(4.5 実体置換テキストの構築)」と「4.6 Predefined Entities(4.6 定義済み実体)」を読み終えた。実体置換テキストは、利用者には分かりにくい概念かもしれないが、これを明確に規定することで相互運用性は高まるので、利用者にもメリットのある話だろう。一方、定義済み実体は、初心者も日常的に使う機能の具体的な規定なので、多くの読者が興味を持てたのではないかと思う。

 さて、次回は「4.7 Notation Declarations(4.7 記法宣言)」について読んでいこう。使われる機会が極めて少ない記法について宣言する個所にようやくたどり着いたわけである。記法に興味を持てない読者は、その後に続く「4.8 Document Entity(4.8 文書実体)」に期待してほしい。文書実体は、記法と異なり、どのようなXML利用者もお世話になる重要な存在である。(次回に続く)

3/3

 Index
やさしく読む「XML 1.0勧告」 第31回
実体置換テキストの構築と定義済み実体
  Page 1
・実体を置換するタイミングの規定
・実体置換テキストの構築
  Page 2
・実体置換テキストの活用例
Page 3
・定義済み実体の規定


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


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間