Appendix C : XML

 HTML と並んで,WWW パブリッシングの場で注目されつつある XML とは何だろうか。概略を紹介しよう。

XML とは

 XML とは Extensible Markup Language のことである。これは SGML のサブセット(部分集合)であり,WWW で SGML をもっと一般的な形で実現しようと企図されたものである。1998年 2 月,W3C より勧告された。

 XML も HTML と同じように,タグ付けにより要素を示すマークアップ言語ではあるが,具体的な形を持っていない。どんな要素があるのかということについては,XML だけでは白紙同然なのである。したがって,“XML タグ(!?)リファレンス”などという書籍は存在し得ない。

 XML の利用に際しては,XML からたとえば HTML のような具体的な言語を作り出さなくてはならない。そのひとつに,MathML という,数式記述のためのマークアップ言語がある。また,XSL というスタイルシート用の言語が 1998 年 10 月現在,W3C で検討されている。

 XML を用いたマークアップ言語には,図形を記述する SVG の仕様が 2000 年 12 月現在,ほぼ固まっていて,(今のところ)ビューアを用意することにより,GIF,JPEG,PNG といったラスタグラフィクスは異なった,ベクトルグラフィクス(しかも記述はテキストベース)を閲覧することができる。

 SVG によって,“テキストエディタで Web 用の図形画像編集”が可能になったのである。

 また,HTML の XML の文法的枠組みの中で実現した XHTML 1.0 が,2000 年 12 月現在,HTML 4.01 と並んで,最新の W3C による HTML 関連の勧告である。

XML 文法の基礎

 HTML を知っている人ならば,XML の書法を知ることはたやすい。XML の書法は,HTML(もっと言えば,SGML)より簡略化されている。

 要素の存在は,タグによって示される。タグの省略は許されない。開始タグ,終了タグは HTML のそれと同じ形をしている。ただし,内容が空である要素とエンプティ要素には専用の形のタグを用いてもよい。スラッシュを後ろに入れたスタイルである。

<ELEMENT />

ただし,単に内容が空の要素は開始タグの直後に終了タグを書く書法(<ELEMENT></ELEMENT>),エンプティ要素は専用の形のタグを用いる書法(<ELEMENT />)が好ましい。

 属性は,ATTRIBUTE="value" の形で与えるが,引用符は省略できない。また,HTML にあった CHECKED 属性のように,属性値のみを与える書き方は存在しない(checked="checked" のように,省略せずに与える)。

 XML から作られたマークアップ言語を利用する際に気をつけるべきことはこれだけである。そのほかの書き方は HTML とほぼ同じである。

 この基本を知っておけば,XML ベースのマークアップ言語に対しては,それを定める DTD と仕様書から要素・属性を知れば使うことができるであろう。

簡単な XML 例

 XML をもとにしてつくった言語による文書をご覧いただこう。これから,XML の雰囲気を感じ取っていただきたい。

<?xml version="1.0"?>
<!DOCTYPE telmemo [
  <!ELEMNT telmemo (to, date, todo, body, memo?)>
  <!ELEMENT to (#PCDATA)>
  <!ELEMENT date (#PCDATA)>
  <!ELEMENT todo (#PCDATA | tel)*>
  <!ATTLIST todo
    priority (urgent|normal) "normal">
  <!ELEMENT body (para | list)+>
  <!ELEMENT memo (#PCDATA)>
  <!ELEMENT tel (#PCDATA)>
  <!ELEMENT para (#PCDATA | tel)*>
  <!ELEMENT list (item)+>
  <!ELEMENT item (#PCDATA | tel)*>
]>

<telmemo>
<to>○○係長</to>
<date>1998.10.30</date>
<todo priority="urgent">至急お電話ください</todo>
<body>
<para>本日△△商事の□□氏からお電話がありました。</para>
<list>
<item>新製品の契約について</item>
<item>現行製品の納期について</item>
</list>
<para>以上の 2 点について確認したいことがあるとのことなので,<tel>***-***-****</tel> まで至急電話を入れられたいとのことでした。</para>
</body>
</telmemo>