第1回,第2回でXMLの特徴を紹介してきた。XMLがどんなもので,そして実際にどのように使用されているかをイメージいただけただろうか。ちょうど第2回で一つのXMLドキュメントを作成できたので,今回はその続きとして,いくつかの具体的なXMLの文法を解説しよう。

■ XML宣言で文字エンコーディングを指定

 前回作成したXMLドキュメント(XML文書)は次のものである。


<rss>
  <item>
    <artist>BoA</artist>
    <coverArt width="53">ufkzowir.jpg</coverArt>
    <song>七色の明日</song>
  </item>
  <item>
    <artist>上木彩矢</artist>
    <coverArt width="53">xncpgduc.jpg</coverArt>
    <song>ピエロ</song>
  </item>
</rss>

 これを1個のテキスト・ファイルとして保存し,Internet Explorerで表示してみよう。ファイル名を「song.xml」としてみる(図1)。

図1 作成したXML文書

 手順によっては正常に表示できる(図2)かもしれないし,正常に表示できない(図3)かもしれない。この違いの原因が,どこにあるかわかるだろうか。

図2 作成したXML文書を正常に表示できた場合  [画像クリックで拡大表示]

  図3 作成したXML文書を正常に表示できない場合  [画像クリックで拡大表示]

 それはファイルの文字エンコーディングである。例えばWindowsのメモ帳でそのままファイル保存すると,ファイルの文字エンコーディングは「Shift_JIS」(正確には「Windows-31J」)になる。ところがXML文書としてデフォルトで識別できる文字エンコーディングは,「UTF-8」あるいは「UTF-16」の2種類と決められている。したがって,ファイル保存時の文字エンコーディングが「UTF-8」や「UTF-16」だったときは,そのXML文書をInternet Explorerで正常に表示できる。しかし,ファイルの文字エンコーディングが「Shift_JIS」などだと,そのままでは正常に表示できない。

 それでは「Shift_JIS」文字エンコーディングで保存されたXML文書を,Internet Explorerで正常に表示させるにはどうすればよいのだろうか。XMLでは,そのための文法を定めている。XMLの基本文法は,XML 1.0という公開された標準文書で定められており,XML文書の文字エンコーディングを明示するための文法としてXML宣言を定めている。文字エンコーディングを「Shift_JIS」と明示したXML宣言を加えたXML文書は,次のようなものになる。ただしXMLプロセッサ(XML 1.0を実装したXML処理ソフトウエア)にとって,「UTF-8」と「UTF-16」以外の文字エンコーディングの処理は必須でないため,すべてのXMLプロセッサが「Shift_JIS」文字エンコーディングを処理できるわけではない。


<?xml version="1.0" encoding="Shift_JIS"?>
<rss>
  <item>
    <artist>BoA</artist>
    <coverArt width="53">ufkzowir.jpg</coverArt>
    <song>七色の明日</song>
  </item>
  <item>
    <artist>上木彩矢</artist>
    <coverArt width="53">xncpgduc.jpg</coverArt>
    <song>ピエロ</song>
  </item>
</rss>

 あるいはファイルの文字エンコーディングが「UTF-8」の場合は,文書の先頭に次のXML宣言を明示的に記述してもよい。


<?xml version="1.0" encoding="UTF-8"?>

 XML宣言に関してXML 1.0では,XMLプロセッサが適切にXML宣言を処理できるように,XML宣言よりも前にはどんな文字も記述してはならないと定めている(半角の空白や改行も記述してはいけない)。したがってXML宣言を記述するなら,それは必ず文書の先頭でなくてはならない。

■ XHTML 1.0が取り上げている文法

 XMLのそのほかの文法から,XHTML 1.0を定めた標準文書の中で取り上げられているいくつかのものを解説しよう。XHTMLは,HTMLをXML形式に変更したものである。そしてXHTML 1.0では,XML形式ではないHTMLの記述方法について,その変更点をまとめている。

●要素のネスト
  HTML形式:<p>here is an emphasized <em>paragraph.</p></em>
  XML形式 :<p>here is an emphasized <em>paragraph</em></p>

 pタグとemタグのペアが記述されているが,HTML形式ではそれらがオーバーラップしている。XMLではこのような記述が許されておらず,pタグとemタグのペアがネストするような記述にしなくてはならない。

●終了タグの記述
  HTML形式:<p>here is a paragraph.<p>here is another paragraph.
  XML形式 :<p>here is a paragraph.</p><p>here is another paragraph.</p>

 HTMLでのpタグはその終了タグを省略することができるが,XMLでは終了タグを省略することはできない。

●属性の記述
  HTML形式:<td rowspan=3>
  XML形式 :<td rowspan="3">

 XMLでは,属性値を必ず引用符(2重引用符または1重引用符)で囲まなくてはならない。

●属性の最小化
  HTML形式:<dl compact>
  XML形式 :<dl compact="compact">

 XMLでは,属性の属性値を省略することはできない。

●空要素
  HTML形式:<br><hr>
  XML形式 :<br/><hr/>

 XMLでは,空要素を空要素タグで記述する。もしくは開始タグと終了タグで記述してもよい。例えば<br/>は,<br></br>でもよい。

 以上のようにXML 1.0は,それが正しいXML文書であるための文書の記述方法を厳格に定めており,XMLの文法に従った正しいXML文書のことを整形式(well-formed)XML文書と呼ぶ。そして処理対象の文書が整形式でない場合は致命的エラー(fatal error)であり,XMLプロセッサは正常処理を継続してはならないとされている。

 これまで代表的なXMLの文法をいくつか解説してみたが,これら以外の文法も定められているので,折に触れて一度まとめておくのがよいだろう。

木村 達哉
インフォテリア 教育部
インフォテリア認定教育センターの運営や,XML技術者認定制度のXMLマスターに対応したコーステキストの開発などに携わる。XMLは,何となく知っているようでもそれを正しく扱うためにはなかなか奥が深いもの。そんなXMLへの入口を紹介します。