第22回 物理構造における「文字参照」と「実体参照」 Page 1

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

川俣 晶
株式会社ピーデー
2004/6/2

文字参照および実体参照の概要

主な内容
--Page 1--
文字参照および実体参照の概要
文字参照の定義
文字参照の生成規則と整形式制約
文字参照の表現形式
--Page 2--
実体参照の定義
実体参照の生成規則
実体参照の整形式制約と妥当性制約
文字参照、実体参照の例

 前回は、新しい章に入り「4 Physical Structures(4 物理構造)」を読み始めた。それ以前のLogical Structures(論理構造)とは異なる、別の領域に足を踏み入れたわけである。前回は特に実体について読んだ。

 実体は、文書内容で使用する一般実体とDTDで使用するパラメタ実体に分類できる。一般実体はさらに、XMLの構文に拘束される解析対象実体と、拘束されずに何でも扱える解析対象外実体に分けられる。これらは、役割も使い方も異なるものであり、正しい知識を持ってうまく使い分ける必要がある。

 さて今回は、「4.1 Character and Entity References(4.1 文字参照および実体参照)」を読んでいこう。文字参照は、文字をコードによって記述するもので、キーボードから直接入力できない文字をXML文書に書き込む場合などに使われる。実体参照は、宣言された解析対象実体、解析対象外実体、パラメタ実体などを参照するために使われる。例えば、ある実体が特定の文字列に当たると宣言されていれば、その実体の宣言はその文字列に置き換えられる。その際、パラメタ実体とそのほかの実体は、参照する構文が異なることに注意が必要である。そのあたりを把握しながら読んでみよう。

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


文字参照の定義

 ここからは、「4.1 Character and Entity References(4.1 文字参照および実体参照)」を読んでいこう。シンプルな使い方に徹していれば、実体を使う頻度は多くないといえる。しかし、実体参照は、定義済み実体(&など)を参照するためによく使うために避けては通れないものである。また、文字参照はそれとは異なり、XML文書を記述する文字エンコーディングの選択次第では、けっこう頻繁に目にする可能性がある。

[Definition: A character reference refers to a specific character in the ISO/IEC 10646 character set, for example one not directly accessible from available input devices.]

[定義:文字参照は、ISO/IEC 10646文字集合の特定の文字、例えば、入力機器から直接入力不可能な文字を参照する。]

 まずは文字参照からである。この文は、文字参照という用語定義になっている。JIS版では、ISO/IEC 10646ではなく、JIS X 0221-1と書かれているが、これは同じものを示している。とはいえ、この2つの表記には釈然としないものが残る。どちらの規格も、パート分けが行われており、Part 1には「-1」という文字を付けて表記する場合がある。つまり、ISO/IEC 10646-1やJIS X 0221-1という表記である。ここで気になるのは、W3C版では、「-1」抜きのISO/IEC 10646という表記であるのに、JIS版では「-1」入りのJIS X 0221-1であることだ。素直に置き換えるなら、JIS X 0221と書く方が自然に見えるが、「JIS X 0221などという規格は存在しない!(存在するのはJIS X 0221-1)」という強い意見により、「-1」が付け加えられているものである。

 しかし、この日本独自の賢明であり過ぎる修正は、3rd Editionの刊行によっておかしな状況を招いてしまっている。具体的にISO/IEC 10646が示す文献の詳細は、「A.1 Normative References」に示されているが、これは2nd Editionと3rd Editionで変化している。

2nd Edition

ISO (International Organization for Standardization). ISO/IEC 10646-1:1993 (E). Information technology ? Universal Multiple-Octet Coded Character Set (UCS) ? Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7).

3rd Edition

ISO (International Organization for Standardization). ISO/IEC 10646-1:2000. Information technology ? Universal Multiple-Octet Coded Character Set (UCS) ? Part 1: Architecture and Basic Multilingual Plane and ISO/IEC 10646-2:2001. Information technology ? Universal Multiple-Octet Coded Character Set (UCS) ? Part 2: Supplementary Planes, as, from time to time, amended, replaced by a new edition or expanded by the addition of new parts. [Geneva]: International Organization for Standardization. (See http://www.iso.ch/ for the latest version.)

 つまり、ISO/IEC 10646が指し示す文献に、Part 1のみならず、Part 2も含まれるようになったのである。この修正を素直に適用すると、JIS版は、JIS X 0221-1という名前で、Part 1だけでなく、Part 2も参照することになってしまう。

 さて、話を本題に戻そう。この文章に出てくる「入力機器から直接入力不可能な文字を参照する」というのは、どういうことだろうか。基本的にはキーボードにない文字を参照する、と思えばよいだろう。日本では、強力なインプットメソッド(IMEなど)が普及しているため、たとえキーボード上にない文字であろうと、入力できてしまうことが多い。しかし、これは必ず可能というわけでもない。余談だが、IBM-PC互換機であればALTキーを押しながら10進コード入力という手もあるが、基本的には1バイトコードのみであると思う。XMLで使用可能な文字の中には、これに該当しないものも多い。それらの文字は、文字参照の機能を使って書き込むことができると述べている。これは、分かりやすくするために一例を述べたもので、何かの規定というわけではない。

文字参照の生成規則と整形式制約

 次は、文字参照の生成規則である。

Character Reference
[66]    CharRef    ::=    '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';' [WFC: Legal Character]

 内容的にはさほど難しくはない。[0-9]+は、0〜9の文字の1回以上の繰り返し、[0-9a-fA-F]+は0〜9、a〜f、A〜Fのいずれかの文字の1回以上の繰り返しである。'&#' [0-9]+ ';' は"のような文字列を示す。'&#x' [0-9a-fA-F]+ ';'は一のような文字列を示す。このどちらか1つが、生成規則[66] CharRef(文字参照)ということになる。両者の意味の違いは、この後で説明される。

 次は、この生成規則に付いている整形式制約である。

Well-formedness constraint: Legal Character

Characters referred to using character references MUST match the production for Char.

整形式制約:Legal Character(使用できる文字)

文字参照を用いて参照する文字は、生成規則Charにマッチしなければならない(MUST)。

 これは、整形式制約:Legal Character(使用できる文字)である。上記生成規則では、特にけた数の制限もなければ、値の制限も存在しない。そのため、XML的に禁止されているコードや、あり得ないほど大きなコードを指定することもできてしまう。そこで、この整形式制約によって制約が課せられているわけである。生成規則[2] Charは、以下のような定義であった。

[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

 この条件に当てはまらないコードを書くことは、MUSTで表現されるとおり、絶対に許容されない。この制約は、文字参照が入力できない文字を参照する手段であると考えれば当然のことだと分かるだろう。普通に文字を入力する場合と同じ制約が課せられることは、文字を指定する別の手段という役割のためには、好ましい特徴であるといえる。

 これで整形式制約の文章は終わり、次は、通常の文章が続く。

文字参照の表現形式

If the character reference begins with "&#x", the digits and letters up to the terminating ; provide a hexadecimal representation of the character's code point in ISO/IEC 10646. If it begins just with "&#", the digits up to the terminating ; provide a decimal representation of the character's code point

文字参照が"&#x"で始まれば、終端の;までの数字および字(letter)は、ISO/IEC 10646の文字符号位置を16進数で表現する。文字が "&#" で始まれば、終端の;までの数字は、文字符号位置を10進数で表現する。

 冒頭の文章は、"&#x"で始まる表記が16進数であることを示している。コンピュータ技術者でなければ、16進数はとっつきにくいかもしれないが、文字参照に限っていえば、特に計算を行う必要もなく、難しいことではないだろう。むしろ、指定できないと面倒なことになるとすらいえる。例えば、特定の文字に与えられたコードを調べるためにコード表を見たときに、16進数の表記しか載っていない場合がある。このような場合には、16進数のままXML文書に書き込めると楽である。

 次の文章では、x抜きで"&#"で始まった場合は、10進数で表記すると述べられている。常に16進数の方が便利とは限らず、10進数で表記する方がよい場合もあるので、サポートされているのだろう。例えば、IBM-PC互換機のALTキーを押しながらの10進コード入力に慣れていれば、コードを10進数で入力できる方が分かりやすいかもしれない。

 文字参照の話はここで終わる。次ページでは実体参照について読み進めよう。(次ページへ続く)

  1/2 Page 2

 Index
やさしく読む「XML 1.0勧告」 第22回
物理構造における「文字参照」と「実体参照」
Page 1
文字参照および実体参照の概要
文字参照の定義
文字参照の生成規則と整形式制約
文字参照の表現形式
  Page 2
実体参照の定義
実体参照の生成規則
実体参照の整形式制約と妥当性制約
文字参照、実体参照の例

 

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


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間