XML ひとめぐり

XML の基本を押さえることで、これからの HTML 文書制作のための基礎を作ります。

XML の簡単な例

HTML 文書の制作を始める前に、XML に就いて少し学んでおきましょう。XHTML は、XML を基礎に設計されていますので、XML の書き方がそのまま通用します。

ここでは、実際に XML の例を見てみることによって、どのようにして意味づけが行われるのかを覗いてみることにしましょう。XML は簡単な文法で成り立っていますから、実際の例を見れば感じが掴めることと思います。(ここでは、heading は見出し、p, em, はそれぞれ段落・強調、ol, li は、リスト、リストの中身というくらいの意味で考えて下さい。)

<?xml version="1.0" encoding="EUC-JP"?>
<document priotiry="4">
<head>
    <title>第一回総会について</title>
    <author>丹治 愛</author>
    <date>2002-07-08</date>
</head>
<body>
    <heading>第一回総会開催のご案内</heading>
    <p>このたび、当社では、全構成員からなる総会を、2002 年
       7 月 25 日に開催する運びとなりました。つきましては、
       <em>7 月 20 日までに</em>出欠のご確認を取らせて
       頂きたく存じます。別紙の出欠確認表をご覧頂き、
       提出して下さいますよう、お願い申し上げます。</p>
    <p>尚、総会の議題は以下の通りです。</p>
    <ol>
        <li>取締役の選出</li>
        <li>次世代製品に向けての戦略決定</li>
    </ol>
    <p>総会終了後には、懇親会も予定していますので、是非ご参
       加頂けます様ご案内申し上げます。</p>
</body>
</document>

いかがでしょう。これを見るだけでも、少しは XML が分かったような気にならないでしょうか。或いは、多少なりとも、規則が推測できるような気がしませんか? 殆どの人は、<document> の様に < > で囲まれた部分に、何か意味があることが推測できたはずです。

次の節から、XML の文法に就いて実際に学んでいきます。

XML の文法

上記の XML 文書は、大きく分けると次の2つから成り立っています。

  • XML 宣言
  • XML インスタンス

ここでは、それぞれについて簡単な説明を加えますが、特に XML インスタンスについて説明します。

XML 宣言

先程の XML 文書の例を見てください。一番最初に次のような記述があります。

<?xml version="1.0" encoding="EUC-JP"?>

この記述は、この文書が XML によって記述されているということを示すためのもので、XML 宣言と呼ばれます。

XML 宣言は、この文書が XML によって書かれているということを宣言し、同時に、この文書の XML のバージョンや、使われている文字コードを指定するためのものです。version=“1.0” が XML のバージョンを表し、encoding=“EUC-JP” でこの文書が EUC-JP という文字コードで書かれていることを示します。ここは、自分が使っている文字コードを記述してください。自分の文字コードが Shift_JIS ならば、encoding=“Shift_JIS” と、iso-2022-jp ならば、encoding=“iso-2022-jp” と記述しなければなりません。encoding 属性は、例えば HTTP のヘッダ等に適切な文字コードが指定されている場合等、省略可能なこともあります。しかし、ローカルで閲覧する際等、そのような文字コードの情報を得られるのは、(本文から推測する場合を除いて) XML 宣言くらいしかありません。基本的には省略出来ないものと考えておけば、まず間違いありません。

この XML 宣言自体が省略可能なこともありますが、やはり基本的には省略出来ないものとして考えておけば良いでしょう。

【注】:RFC 3023 によると、encoding 属性は次のように解釈されます。

  • XML 宣言の encoding 属性の内容に関わらず、ヘッダによる宣言が優先される。
  • text/xml で送られた場合、文字コードセット宣言がヘッダで省略された場合は、XML 宣言の内容に関わらず、常に US-ASCII と見倣さなければならない。
  • application/xml で文字コードセット宣言がヘッダで省略された場合は、XML 宣言の内容に従う。

ウェブ上で文書をやりとりする際にはこれらのことが問題になって来るかも知れませんが、殆どの場合は気にする必要は有りません。encoding 属性をきちんと書くことを心がけておけば、大抵大丈夫であると思われます。

XML インスタンス

XML インスタンスは、XML 文書の本体とも言えるものです。上記の例で、XML 宣言を除いた部分全てが該当します。

XML インスタンスでは、<> ではさまれるタグと呼ばれるもので意味のまとまりごとに目印を付けていきます。これを、マークアップと言います。XML インスタンス中のデータは、全て要素という単位で成り立っています。次のように、開始タグと終了タグで囲まれたものを、タグまで含めて要素と言います。

<author>丹治愛</author>

タグは、名前を <> で括って表します。終了タグは、/ を先頭に付けることで表します。タグによって括られた中身を、要素の内容と言います。

XML インスタンスは、要素をツリー状に構築することによって表現されます。例えば次のコードは、要素 A の下に、要素 B 、要素 C という二つの要素を持ちます。

<A><B>……</B><C>……</C></A>
 |  |       |   |       |  |
 |  +-------+   +-------+  |
 +-------------------------+

要素は、次の規則に従ってマークアップしなければいけません。

  • ルート要素を必ず一つだけ持つ。ルート要素とは、最も上位の要素のことである。
  • 要素は、入れ子になっていなければならない。

次の例は、要素が互い違いになっている、間違ったマークアップの例です。

……<em>……<kbd>……</em>……<kbd>……
     |        |        |        |
     +--------|--------+        |
              +-----------------+

尚、上記の例では、ルートノードは document 要素になります。即ち、最も外側にあるタグ、全てを括っているタグでマークアップされたものが、ルートノードになります。

属性

タグが表現出来るのは、要素の構造だけではありません。要素になんらかの付加情報を与えることが出来ます。これを、属性と言います。

属性は、開始タグの中で指定し、属性名と属性値の組で表現します。例えば、次の要素 item は、属性に「製造場所 (madein)」と「製造年月日 (date)」が指定されている例です。

<item madein="徳島" date="2002-07-08">さぬきうどん</item>

属性値は、必ず二重引用符、もしくはアポストロフィで囲まなければなりません。また、同じ要素に同じ属性名を何度も指定することは出来ません。従って、次のマークアップの例は間違いです。

<item madein="徳島" madein="愛媛" date="2002-07-08">さぬきうどん</item>
<item madein="徳島" madein="徳島" date="2002-07-08">さぬきうどん</item>

【注】:属性値を囲む際にはアポストロフィでも良いことになっていますが、通常は二重引用符を用いて下さい。アポストロフィでは、HTML との互換性に難があることがあります。

空要素

XML では、要素の内容として、他の要素やテキストを持たない要素も存在します。これを、空要素といいます。空要素では、開始タグと終了タグを合わせて次のように記述することが出来ます。また、今までの方法で、要素の内容に何も書かないことで表すことも出来ます。

<img src="./greatbarrierleaf.jpg" alt="グレートバリアリーフ" />
<img src="./greatbarrierleaf.jpg" alt="グレートバリアリーフ"></img>

この二つの例は、どちらも正しい例です。

実体参照

XML では、<> は、タグのために用いられるので、これらを単独で使いたいときは、実体参照と呼ばれるものを用いなければなりません。実体参照は、例えば次のように、&; を用いて表します。

&amp;  -- & を表す。
&lt;   -- < を表す。
&gt;   -- > を表す。
&quot; -- " を表す。
&apos; -- ' を表す。

は属性値を表す時に、そして、& は、実体参照を表すときに用いられます。即ち、ここにあげた5つの文字は、XML では、特殊な文字として扱われます。実体参照は、DTD というもの(後述)の中で定義されなければならないのですが、ここにあげた五つの実体参照は、どの XML 文書でも使えることになっています。これらは通常の文字とは違いますので、通常の文字として表現したいときには、実体参照を用いて表現するべきです。

【注】:これらの文字が、タグとして扱われずにそのまま現れてもよい場合も有りますが、基本的には次に述べる例外を除き、実体参照を用いるようにしてください。

【注】:\' に関して、HTML との互換性のためには、実体参照を使わずにそのまま書く必要があります。かつての HTML では、' が使えないことになっていました。

コメント

XML インスタンスを書いているとき、しばしばデータとして認識させたくないコメントを残しておきたいことがあります。XML では、コメントは、次のように <!––> で囲んで表記します。

<!-- コメント -->

なお、コメント中に が現れてはいけません。また、開始タグや終了タグの中にコメントをいれることは出来ません。次の例は、誤ったコメントの例です。

<!-- コメント -- コメント -->
<title <!-- コメント -->>タイトル</title>

【注】:SGML ではコメント中に -- があらわれても良い場合もありますが、XML では許されません。

その他のルール

今までのルールが XML のルール全てというわけではありませんが、最低限必要な記述の仕方のルールです。

XML を記述するにあたって、もう少し知っておいたほうが良いと思われることを紹介します。

空白の扱い

XML では、連続した空白は、基本的には一つの空白と同様の扱いになります。ここで、空白とは、次の四つを指します。全角スペースは、空白とはみなされません

  • 半角スペース (space)
  • タブ (tab)
  • 改行記号 (line feed)
  • 復帰文字 (carriage return)

即ち、次の二つの要素は、大抵の場合同様に扱われることになります。

<author mail="[email protected]">丹治 愛</author>
<author       mail="[email protected]">丹治            愛</author>

【注】:これ以降で述べる文書型定義や、xml:preserve 属性などにより、要素の内容では連続した空白をそのまま扱うことも出来ますので、厳密には上記の二つの要素は異なったものになります。但し、タグ中の不要な空白は、無視されます。

大文字と小文字の区別

XML では、要素名や属性名等の大文字、小文字を区別します。例えば、<author> と、<AUTHOR> は、違う開始タグとして認識されます。

整形式 XML 文書と、妥当な XML 文書

これまで、XML の文法を簡単に述べて来ました。以上の規則に則った XML 文書は、整形式 XML 文書と呼ばれ、XML 文書の必要最低限の仕様を守っていることになります。整形式 XML 文書では、要素名や、属性名などは、自由に指定して構いません。すなわち、形式的に文法に則っているかどうかで判断されます。

【注】: XML 文書を書き、それを .xml という拡張子をつけて保存します。それを、mozilla や IE で開くと MIME タイプにより大抵は XML 文書であるとして認識され、内部の XML パーサによって、XML 文書が整形式であるかどうか検査されます。エラーがあればその旨が表示されますので、どこが間違っているのかを確認することが出来ます。

ところで、いくら XML の文法に則った XML 文書を作成しても、それがそのままアプリケーションで使えるわけではありません。即ち、XML の文法の上に、さらに要素の名前や、属性に関する規則、要素間の規則 (例えばある要素の子として持てる要素が取り決められている等) が必要になります。これらの規則は、DTD (文書型定義) と呼ばれるもの等によって、定義されることになります。

指定された文書型定義に則った XML 文書を、妥当な(valid) XML 文書 と言います。DTD は、XML 宣言の後にされることになります。例えば XHTML1.1 の規則を使う場合には、次の様に、XHTML1.1 の DTD を使うことを明示します。これを、ドキュメントタイプ宣言 と言います。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

XHTML1.1 では、必ずこのドキュメントタイプ宣言をしなければなりませんし、XHTML 以外の XML アプリケーションを使うにも、それぞれのドキュメントタイプ宣言をしなければなりません。

【注】:実際には、DTD は、XML インスタンスの前にもかくことが出来ます。そこに必要な定義を全部書いてしまった場合は、ドキュメントタイプ宣言は不要になります。但し、通常は利便性を考えて DTD を別ファイルにして、それをドキュメントタイプ宣言で指定するという方法を取ります。

ドキュメントタイプ宣言は、XML の要素のマークアップに似ていますが、全く違うものです。空要素に見えるからといって、/> などと閉じたりしないでください。

2002-01-01