第21回 物理構造の基本、「実体」の種類と意味を理解する Page 1

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

川俣 晶
株式会社ピーデー
2004/5/11

第4章「物理構造」の概要

今回の主な内容
第4章「物理構造」の概要
Physical Structures(物理構造)の必要性
Physical Structures(物理構造)の本文
解析対象実体の用語定義
解析対象外実体の用語定義
実体の参照方法
一般実体とパラメタ実体の用語定義

 前回の「第20回 DTDで指定範囲の有効/無効を切り替える」では、条件付きセクションについて読んだ。これは、ベテランが作成したDTDにしばしば顔を出す機能で、DTDの一部の有効/無効を容易に切り替えることができる。しかし、これは条件付きセクションだけでは実現されず、パラメタ実体との併用が不可欠である。それ故に、XML勧告の条件付きセクションの部分を読んでも使い方がよく分からず、取っつきにくい機能の1つといえる。

 前回までで、「3 Logical Structures(3 論理構造)」の範囲をすべて読み終えた。

 さて今回は、新しく「4 Physical Structures(4 物理構造)」を読む。前回までのLogical Structures(論理構造)とは異なる、別の領域に足を踏み入れるわけである。特に今回は、文字参照実体参照を読んでいく。

 文字参照は、文字をコードによって記述するもので、キーボードから直接入力できない文字をXML文書に書き込む場合などに使われる。実体は、文書内容で使用する一般実体とDTDで使用するパラメタ実体に分類できる。一般実体はさらに、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勧告の原文を示しています。


Physical Structures(物理構造)の必要性

 ここからは、「4 Physical Structures(4 物理構造)」を読んでいく。

 物理構造で最も大きく取り上げられているのは実体関係といってよいだろう。実体は、基本的にDTD宣言をせずには使えないもののように思える。そのため、整形式しか使わない利用者にはやや縁遠く感じられるかもしれない。しかし、「&」のような定義済み実体を使わずにXML文書を書くことは困難だろう。さらに、XML文書の本体も、実は実体の一種であったりする。それを考えると、実体抜きでXMLを利用することなど本来は不可能といえるかもしれない。

 また、ここで解説される「一」のような文字参照も、しばしば目にする。例えば、扱える文字の種類が少ない文字エンコーディングで記述されたXML文書を見ると、文字参照が含まれることは多い。それらの点からも、DTDを使わないからといって、「4 Physical Structures(4 物理構造)」を読み飛ばしてよいことにはならない。ぜひ、きっちりと読み切って、確かな知識を身に付けていただきたい。

Physical Structures(物理構造)の本文

 では、早速読み始めよう。まず、ここで扱う基本的な用語である「entities(実体)」「content(内容)」「name(名)」の定義から入る。

[Definition: An XML document may consist of one or many storage units. These are called entities; they all have content and are all (except for the document entity and the external DTD subset) identified by entity name.] Each XML document has one entity called the document entity, which serves as the starting point for the XML processor and may contain the whole document.

[定義:XML文書は、1つ以上の記憶単位から構成する。これらの記憶単位を、entities(実体)といい、文書実体および外部DTDサブセットを除くすべての実体は、content(内容)を持ち、実体name(名)によって特定する。] 各XML文書は、文書実体と呼ぶ実体を1つ持ち、XMLプロセサは、この文書実体から処理を開始し、文書実体が、文書のすべてを含んでもよい。

オブジェクトとXMLの違い

 冒頭では、「XML文書は、いくつかの単位に分割され記憶されたものにすぎない。記憶されている、という以上の何かの効能は持たない。これは、XML文書はオブジェクト指向プログラミングでいうオブジェクトではない」ことを示していると考えてよい。

 例えば、オブジェクトが、「識別可能」「振る舞いを持っている」「状態を持っている」というものであるとするなら(この定義は最近読んでよかった浅海智晴さんの『やさしいUML入門』より引用)、XML文書はこの3つの条件を満たさないことになる。

 状態が情報であるとすれば、情報を記録している記憶単位は「状態を持っている」といえるだろう。振る舞いが、何かのトリガによってアルゴリズムが動作するプログラムのようなものだとすれば、ただ単に記憶されるだけの単位に、そのような機能があるとは考えられない。記憶単位にアルゴリズムであるとか、それを実現したプログラムのコードを入れることはできるが、記憶と実行は異なる機能なので、記憶だけを行う単位の中で実行されることはないだろう。また、参照される記憶単位には識別可能な名前が割り当てられるだろうが、名前で参照されない実体もあり得るので、その場合は識別可能な名前が割り当てられていない可能性も考えられる。その点でも、XML文書がオブジェクトであるとはいいがたい。

 いずれにせよ、XMLはオブジェクト指向という世界の内側にはないものであり、オブジェクト指向の常識で見るとトラブルのもとだといえる。XMLとオブジェクト指向の世界を結び付けるには、RelaxerのようにXMLとオブジェクトのマッピングを行うツールであるとか、DOMのようなXML文書をオブジェクトモデルで表現する別の仕様を必要とする。

「内容と名」の用語定義

 次の文章には複数の情報が詰め込まれているので、分解して把握しよう。

 まず、実体とは記憶単位のことである、ということが分かる。実体というと、何やら難しそうに思えるかもしれないが、要するに何かが記憶されている単位であるというだけのことである。記憶されているものは、もちろん何らかのデジタル情報であると期待してよいだろう


期待してよいだろう、とややあいまいな表現になっているのは、記法などを用いた参照によって、デジタル情報ではないものが参照されることがあるのではないか、という一抹の疑念をぬぐえないためである。

 次に、実体は、例外を除き、内容と名を持っていることが示されている。ここで注意すべきは、内容と名が、ここで用語定義されていることである。つまり、「内容と名とは、実体が持っているものである」という形で用語定義されている。もちろん、それだけでは内容と名が具体的に何であるかは分からないが、それは用語定義ではなく、別の個所で規定されるべきことである。

 さて、もう1つ、内容と名を持つものの例外として、文書実体および外部DTDサブセットが挙げられている。この2つは、内容と名を持たない。といっても、必ず名無しの権兵衛でなければならないとか、内容のない空のファイルでなければならない、という意味ではない。ここで定義されている内容と名を持たないという意味であって、それとは異なる内容や名を持つことはあり得ることである。

 これで用語定義は終わりである。次からは普通の文である。

文書実体についての規定

 次の文章は、文書実体についての規定を行っている。われわれが日常的にXML文書と呼んでいるものは、かなりの割合でこの文書実体に該当するだろう。

 まず、XML文書を構成するすべての情報が文書実体に含まれていれば、まさに文書実体イコールXML文書である。また、外部DTDサブセットへの参照を含んだXML文書は、本来外部DTDサブセットも含めてXML文書という定義になるが、文書実体だけをXML文書と呼んで使用しているケースも多い。この場合は、XML文書と呼ぶことが本来は間違いであり、正しくは文書実体と呼ぶべきものだ。

 もう1つ、XMLプロセッサは文書実体から処理を開始するという規定も注意しておく価値がある。XML文書の処理の開始点は、文書実体しかない。外部解析対象実体が単独でXMLプロセッサに処理されることはない、ということである。(次ページに続く)

  1/2 Page 2

 Index
やさしく読む「XML 1.0勧告」 第21回
物理構造の基本、「実体」の種類と意味を
理解する
Page 1
第4章「物理構造」の概要
Physical Structures(物理構造)の必要性
Physical Structures(物理構造)の本文
  Page 2
解析対象実体の用語定義
解析対象外実体の用語定義
実体の参照方法
一般実体とパラメタ実体の用語定義

 

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


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間