XML ひとめぐり
XML の簡単な例
HTML 文書の制作を始める前に、XML に就いて少し学んでおきましょう。XHTML は、XML を基礎に設計されていますので、XML の書き方がそのまま通用します。
ここでは、実際に XML の例を見てみることによって、どのようにして意味づけが行われるのかを覗いてみることにしましょう。XML は簡単な文法で成り立っていますから、実際の例を見れば感じが掴めることと思います。(ここでは、heading は見出し、p, em, はそれぞれ段落・強調、ol, li は、リスト、リストの中身というくらいの意味で考えて下さい。)
いかがでしょう。これを見るだけでも、少しは XML が分かったような気にならないでしょうか。或いは、多少なりとも、規則が推測できるような気がしませんか? 殆どの人は、<document> の様に < > で囲まれた部分に、何か意味があることが推測できたはずです。
次の節から、XML の文法に就いて実際に学んでいきます。
XML の文法
上記の XML 文書は、大きく分けると次の2つから成り立っています。
- XML 宣言
- XML インスタンス
ここでは、それぞれについて簡単な説明を加えますが、特に XML インスタンスについて説明します。
XML 宣言
先程の XML 文書の例を見てください。一番最初に次のような記述があります。
この記述は、この文書が 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 宣言自体が省略可能なこともありますが、やはり基本的には省略出来ないものとして考えておけば良いでしょう。
- XML 宣言の encoding 属性の内容に関わらず、ヘッダによる宣言が優先される。
- text/xml で送られた場合、文字コードセット宣言がヘッダで省略された場合は、XML 宣言の内容に関わらず、常に US-ASCII と見倣さなければならない。
- application/xml で文字コードセット宣言がヘッダで省略された場合は、XML 宣言の内容に従う。
ウェブ上で文書をやりとりする際にはこれらのことが問題になって来るかも知れませんが、殆どの場合は気にする必要は有りません。encoding 属性をきちんと書くことを心がけておけば、大抵大丈夫であると思われます。
XML インスタンス
XML インスタンスは、XML 文書の本体とも言えるものです。上記の例で、XML 宣言を除いた部分全てが該当します。
XML インスタンスでは、< と > ではさまれるタグと呼ばれるもので意味のまとまりごとに目印を付けていきます。これを、マークアップと言います。XML インスタンス中のデータは、全て要素という単位で成り立っています。次のように、開始タグと終了タグで囲まれたものを、タグまで含めて要素と言います。
タグは、名前を < と > で括って表します。終了タグは、/ を先頭に付けることで表します。タグによって括られた中身を、要素の内容と言います。
XML インスタンスは、要素をツリー状に構築することによって表現されます。例えば次のコードは、要素 A の下に、要素 B 、要素 C という二つの要素を持ちます。
要素は、次の規則に従ってマークアップしなければいけません。
- ルート要素を必ず一つだけ持つ。ルート要素とは、最も上位の要素のことである。
- 要素は、入れ子になっていなければならない。
次の例は、要素が互い違いになっている、間違ったマークアップの例です。
尚、上記の例では、ルートノードは document 要素になります。即ち、最も外側にあるタグ、全てを括っているタグでマークアップされたものが、ルートノードになります。
属性
タグが表現出来るのは、要素の構造だけではありません。要素になんらかの付加情報を与えることが出来ます。これを、属性と言います。
属性は、開始タグの中で指定し、属性名と属性値の組で表現します。例えば、次の要素 item は、属性に「製造場所 (madein)」と「製造年月日 (date)」が指定されている例です。
属性値は、必ず二重引用符、もしくはアポストロフィで囲まなければなりません。また、同じ要素に同じ属性名を何度も指定することは出来ません。従って、次のマークアップの例は間違いです。
空要素
XML では、要素の内容として、他の要素やテキストを持たない要素も存在します。これを、空要素といいます。空要素では、開始タグと終了タグを合わせて次のように記述することが出来ます。また、今までの方法で、要素の内容に何も書かないことで表すことも出来ます。
この二つの例は、どちらも正しい例です。
実体参照
XML では、< と > は、タグのために用いられるので、これらを単独で使いたいときは、実体参照と呼ばれるものを用いなければなりません。実体参照は、例えば次のように、& と ; を用いて表します。
" は属性値を表す時に、そして、& は、実体参照を表すときに用いられます。即ち、ここにあげた5つの文字は、XML では、特殊な文字として扱われます。実体参照は、DTD というもの(後述)の中で定義されなければならないのですが、ここにあげた五つの実体参照は、どの XML 文書でも使えることになっています。これらは通常の文字とは違いますので、通常の文字として表現したいときには、実体参照を用いて表現するべきです。
コメント
XML インスタンスを書いているとき、しばしばデータとして認識させたくないコメントを残しておきたいことがあります。XML では、コメントは、次のように <!– と –> で囲んで表記します。
なお、コメント中に – が現れてはいけません。また、開始タグや終了タグの中にコメントをいれることは出来ません。次の例は、誤ったコメントの例です。
その他のルール
今までのルールが XML のルール全てというわけではありませんが、最低限必要な記述の仕方のルールです。
XML を記述するにあたって、もう少し知っておいたほうが良いと思われることを紹介します。
空白の扱い
XML では、連続した空白は、基本的には一つの空白と同様の扱いになります。ここで、空白とは、次の四つを指します。全角スペースは、空白とはみなされません。
- 半角スペース (space)
- タブ (tab)
- 改行記号 (line feed)
- 復帰文字 (carriage return)
即ち、次の二つの要素は、大抵の場合同様に扱われることになります。
大文字と小文字の区別
XML では、要素名や属性名等の大文字、小文字を区別します。例えば、<author> と、<AUTHOR> は、違う開始タグとして認識されます。
整形式 XML 文書と、妥当な XML 文書
これまで、XML の文法を簡単に述べて来ました。以上の規則に則った XML 文書は、整形式 XML 文書と呼ばれ、XML 文書の必要最低限の仕様を守っていることになります。整形式 XML 文書では、要素名や、属性名などは、自由に指定して構いません。すなわち、形式的に文法に則っているかどうかで判断されます。
ところで、いくら XML の文法に則った XML 文書を作成しても、それがそのままアプリケーションで使えるわけではありません。即ち、XML の文法の上に、さらに要素の名前や、属性に関する規則、要素間の規則 (例えばある要素の子として持てる要素が取り決められている等) が必要になります。これらの規則は、DTD (文書型定義) と呼ばれるもの等によって、定義されることになります。
指定された文書型定義に則った XML 文書を、妥当な(valid) XML 文書 と言います。DTD は、XML 宣言の後にされることになります。例えば XHTML1.1 の規則を使う場合には、次の様に、XHTML1.1 の DTD を使うことを明示します。これを、ドキュメントタイプ宣言 と言います。
XHTML1.1 では、必ずこのドキュメントタイプ宣言をしなければなりませんし、XHTML 以外の XML アプリケーションを使うにも、それぞれのドキュメントタイプ宣言をしなければなりません。