改めてXMLを考える
マークアップと文字データの境
2003年10月号掲載記事
皆様こんにちは。インフォテリアの木村です。
前回は、「XML 1.0はXMLをテキストで表現するためのXMLのひとつの側面である」といったお話をしました。XML 1.0で記述されたXML文書はそれを直接閲覧することができますので、XMLの入り口で必ず目にし、また入門的にもここから入っていくことでしょう。「XML文書」とか「XMLがテキストで表現される」とは、まさにこのことを言っています。
ところがよくよく考えてみると、このXML 1.0は、「XMLを文字で構成しながらデータを文字で記す」ということを行っていますので、実はその点で話がややこしくなってしまいます。これに関連するルールとして、「<」と「&」という文字をXMLのデータとして直接記述することはできない、といったルールがあります。つまりこれは前述のややこしい部分の回避策というわけです。
ところで皆さん、「XMLを構成する文字(マークアップ)」と「データとしての文字(文字データ)」との境界について考えてみたことはあります?実はこのことはXML 1.0の2.4節「文字データとマークアップ」において明確に言及されていて、そこには「(XML文書の)テキストは文字データとマークアップから成る」、「マークアップでないすべてのテキストは文書の文字データを構成する」と記述されています。そしてXMLのマークアップとしてどのようなものがあるのか(開始タグ、終了タグ、実体参照など)について明確に定義されています。つまりXML文書内のすべての文字は、マークアップでるか文字データであるかのいずれかです。したがって何がマークアップで、何が文字データであるかを最初に把握してしまえば、前述のややこしい部分もなんてことはないのです。そしてこのことから、「文書要素(ルート要素)の外側に文字データは存在しない」、「属性はマークアップ(開始タグまたは空要素タグ)の中に存在する」などの事実も浮かび上がってきます。
開始タグやコメントなどの先頭文字である「<」と、実体参照と文字参照の先頭文字である「&」は、マークアップの開始を示す区切り子(デリミタ)となっています。したがって本コラムの最初に掲げたルールが必要になります。
XML 1.0で定義されているマークアップの中には「<」や「&」で始まらないマークアップもあります。そしてこれに関連して「XML 1.0 Specification Errata」や「5つの定義済み実体参照」の話につながっていきますので、次回はそれらについてお話します。