第26回 解析対象実体の「テキスト宣言」と「整形式」 Page 3

川俣 晶
株式会社ピーデー
2004/10/15

整形式の解析対象実体

 ここからは、「4.3.2 Well-Formed Parsed Entities(4.3.2 整形式の解析対象実体)」を読んでいこう。これは、解析対象実体が整形式である条件を示したものである。すべてのXML文書は整形式なので、この条件はすべてのXML文書で求められる正しい書式について記述していることになる。

 まず、そのものずばりの条件から記述されている。

The document entity is well-formed if it matches the production labeled document. An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. All external parameter entities are well-formed by definition.

ラベルdocumentを持つ生成規則にマッチすれば、文書実体は整形式とする。ラベルextParsedEntを持つ生成規則にマッチすれば、外部の一般解析対象実体は、整形式とする。定義によりすべての外部パラメタ実体は整形式である。

 ここでは文書実体、つまり最上位の実体について述べられていることに注意が必要である。これは実体参照で参照される外部実体ではない。文書実体は、生成規則[1] documentに当たるもので、本連載の第5回で読んだ部分である。以下のような内容であった。

[1]    document    ::=    prolog element Misc*

 生成規則[22] prologはXML宣言や文書型宣言を、生成規則[39] elementは要素(ここでは文書要素)を、生成規則[27] Miscは空白文字やコメントを示すものである。これについては、すでに解説済みであるだけでなく、おそらく読者の多くも実際に体験している構文なので深く立ち入る必要もないだろう。

 次は、いよいよここでの主役ともいうべき規定である。解析対象実体の中で、特に外部でかつ一般(つまりパラメタではない)の実体についての規定である。それは、生成規則[78] extParsedEntにマッチすれば、それは整形式であるという。具体的な生成規則[78] extParsedEntの定義はこの後すぐ出てくる。その前に、もう1つ文章がある。

 前の文章は外部でかつ一般(つまりパラメタではない)の実体についての規定であったが、次の文章は外部でかつパラメタ実体についての補足文書である。この条件を満たすパラメタ実体の内容は、整形式になるように定義されているといっている。これは、すでに読んできた定義をたどっていけばそうなるという話であって、特に新しいことを述べているわけではないので、先に進もう。

 さて、次は今回の主役ともいうべき「整形式の解析対象実体」の生成規則である。

Well-Formed External Parsed Entity(整形式の解析対象実体)
[78]    extParsedEnt    ::=    TextDecl? content

 見出しは「整形式の解析対象実体」だが、厳密にいえば対象は一般解析対象実体のみであり、パラメタ実体は対象に含まない。この生成規則の定義は至ってシンプルである。TextDeclは今回読んだテキスト宣言の生成規則[77] TextDeclそのものである。これは後に「?」記号が付いていることから分かるとおり、省略可能である。そして、後半の生成規則[43] contentは、実は「3.1 Start-Tags, End-Tags, and Empty-Element Tags(3.1 開始タグ、終了タグおよび空要素タグ)」にすでに出てきている。本連載の第13回である。ここに出てきた要素の内容の生成規則[43] contentが、ここに再登場したわけである。これは要素の内容の生成規則である。つまり、通常<element>……</element>と記述する「……」の部分に相当する生成規則である。いい換えれば、解析対象実体のテキスト宣言の後ろに記述できるものは、要素の内容に記述できるものに等しいわけである。

 例えば、要素elementの内容として以下のように記述できる。

<element>
  <element/>
  <!-- comment -->
  <?pi sample?>
</element>

 この内容をごっそり取り出して先頭にテキスト宣言を付ければ、以下のような外部解析対象実体の出来上がりである。

<?xml encoding="UTF-8"?>
<element/>
<!-- comment -->
<?pi sample?>

 さて、さらにいくつかの説明が続く。

An internal general parsed entity is well-formed if its replacement text matches the production labeled content. All internal parameter entities are well-formed by definition.

置換テキストが、ラベルcontentを持つ生成規則にマッチすれば、内部の一般解析対象実体は、整形式とする。すべての内部のパラメタ実体は、定義から整形式になる。

 先の文章は「外部」の一般解析対象実体について語っていたが、この文章は「内部」の一般解析対象実体について語っている。つまり、置換テキストがDTD内で与えられる実体である。このような実体が整形式となる条件は、置換テキストが生成規則[43] contentにマッチすることとなる。ここで注意すべきことは、テキスト宣言についての言及がないことである。「外部」の一般解析対象実体は、先頭にテキスト宣言を付けることもできたが、「内部」の一般解析対象実体ではテキスト宣言の出番は認められていない。テキスト宣言の目的からいっても、記述する意味はないといえる。なぜなら、バージョンも符号化方式も、これを処理する時点ではすでに確定済みであるはずだからである。

 そして最後は、すでに見たように外部のパラメタ実体と同様である。次は、一般実体すべてに関する補足説明である。

A consequence of well-formedness in general entities is that the logical and physical structures in an XML document are properly nested; no start-tag, end-tag, empty-element tag, element, comment, processing instruction, character reference, or entity reference can begin in one entity and end in another.

一般実体はすべて整形式なので、XML文書の論理的および物理的構造は、厳密に入れ子となる。開始タグ終了タグ空要素タグ要素コメント処理命令文字参照および実体参照が、1つの実体で開始し、別の実体で終了することはない。

 まず、一般実体はすべて整形式、という表現はこれまで読んできたさまざまな内容から明らかだろう。論理的構造とは「3 Logical Structures(3 論理構造)」で読んだ部分。物理的構造とは、「4 Physical Structures(4 物理構造)」に当たる。

 次は、上記の入れ子という説明のより具体的なものといえる。例えば、開始タグが「1つの実体で開始し、別の実体で終了する」というのは、最初の「<」と最後の「>」が異なる実体上に記述された状況を意味する。この2つの実体の参照を並べて書けば、一見、開始タグを正しく記述したかのように見せ掛けることができるかもしれない。しかし、そのような記述方法は許されていない。これを許さないことにより、トリックのような読みにくいXML文書が生まれることを阻止でき、またXMLプロセッサの実装も単純化されるだろう。

 以上で「4.3 Parsed Entities(4.3 解析対象実体)」から「4.3.2 Well-Formed Parsed Entities(4.3.2 整形式の解析対象実体)」までを読み切った。解析対象実体は一般とパラメタ、内部と外部があって、それぞれ条件が異なるので、注意して確認しておこう。特に、外部解析対象実体の正しい構文を把握することは重要である。テキスト宣言を知らずにXML宣言だと思い込んで、誤った修正を行ってしまう可能性は十分にあり得ることである。

 さて、まだ「4.3 Parsed Entities(4.3 解析対象実体)」は終わりではない。この後、「4.3.3 Character Encoding in Entities(4.3.3 実体における文字符号化)」という大物が残されている。これは、外部解析対象実体の文字符号化について扱う。つまり、実体をUTF-8で記述したのか、シフトJISで記述したのか、といった相違を正しく判定する方法について記述している。XMLでは比較的まっとうに文字符号化の問題に対処できているものの、そもそも文字の符号化は複雑で悩ましい問題故にそれなりのボリュームを含む。外部実体の文字化けとサヨナラするために、次回はこれを読んでいくことにしよう。(次回に続く)

3/3

 Index
やさしく読む「XML 1.0勧告」 第26回
解析対象実体の「テキスト宣言」と「整形式」
  Page 1
・解析対象実体の概要
・解析対象実体とは何か
  Page 2
・テキスト宣言
Page 3
・整形式の解析対象実体


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


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間