| 目次 | 索引 |
|---|---|
今、次のような天気予報のホームページについて考えます。
スタイルシートを使いますと、意味データと表示データが分離できます。
ここでは、都市の
class
属性の値を"city"、天気の
class
属性の値を"weather"などとします。
<html>
<head>
<title>Weather forecast</title>
<style type="text/css">
<!--
body.weather_forecast {background-color: white}
div.date {background-color: aqua}
div.forecast {background-color: yellow}
span.city {color: red}
span.weather {color: blue}
-->
</style>
</head>
<body class="weather_forecast">
<div class="date">2004年7月3日</div>
<div class="forecast">
<span class="city">東京</span>
<span class="weather">晴れ</span>
</div>
<div class="forecast">
<span class="city">大阪</span>
<span class="weather">雨</span>
</div>
</body>
</html>
意味データと表示データの分離はできましたが、HTMLでは、意味データだけにすることはできません。
たとえ
class
属性を使って意味を表しても、
<div>
タグも
<span>
タグも表示データだからです。
意味データだけにするために、次のように書いてみます。
<weather_forecast>
<date>2004年7月3日</date>
<forecast>
<city>東京</city>
<weather>晴れ</weather>
</forecast>
<forecast>
<city>大阪</city>
<weather>雨</weather>
</forecast>
</weather_forecast>
これなら、表示データはありませんし、意味もタグによって表されます。 しかし、これはHTMLではありません。 実は、これがXMLなのです。
XML
とはeXtensible Markup Languageの略です。
直訳すると、拡張可能なマークアップ言語です。
拡張可能とは、自分でタグが定義できるという意味です。
この場合では、自分で
<city>
タグや
<weather>
タグを定義しています。
HTMLのタグは、多かれ少なかれ表示データを表します。
例えば、
<div>
タグならば、前後に改行が入ります。
一方、XMLのタグは、意味データを表しますが、表示データは表しません。
例えば、
<city>
タグならば、都市という意味を表しますが、これをどう表示するかは決まっていません。
XMLは、意味データを表すための言語なのです。
XMLで書かれたドキュメントを XMLドキュメント ( XML document )と呼びます。 XMLドキュメントが格納されたファイルを XMLファイル ( XML file )と呼びます。 XMLファイルのファイル名は、拡張子を〜.xmlとする場合が多いです。
HTMLドキュメントは、通常、ネットワーク経由で転送され、ウェブ・ブラウザで表示されるという使われ方をします。 これに対して、XMLドキュメントは、ネットワーク経由で転送される点は同じですが、直接表示されるという使われ方はしません。 XMLドキュメントは、ドキュメント処理プログラムに読み込まれ、データとして処理されるという使われ方をします。 このようなドキュメント処理プログラムは、 XMLパーサ ( XML parser )、または、 XMLプロセッサ ( XML processor )と呼ばれます。 ここで、もう一度、XMLが表示データではなく、意味データを表す言語であることを思い出してください。
HTMLには、実は文法があるのですが、HTMLドキュメントに多少の文法違反があっても、ウェブ・ブラウザが適当に解釈して表示してくれます。 人間が読むものだから、少しぐらい適当でも大丈夫というわけです。 しかし、XMLではこうはいきません。 プログラムが読むものだから、完全に文法に従わなければならないのです。
XMLの文法は二段階で成り立ちます。
まず、XMLドキュメントは整形式でなければなりません。
その上で、XMLドキュメントは妥当なものでなければなりません。
XMLドキュメントが
整形式
(
well-formed
)であるとは、例えば、開始タグは必ず終了タグと対応するといった、意味に無関係な文法に従っていることです。
これに対して、XMLドキュメントが
妥当な
(
valid
)ものであるとは、例えば、
<forecast>
タグは
<city>
タグと
<weather>
タグから構成されるといった、意味に関係のある文法に従っていることです。
XMLドキュメントが妥当なものかどうかは、そのXMLドキュメントがどの分野で作成されたかに依存します。
もし人口予想の分野でしたら、
<forecast>
タグは
<city>
タグと
<population>
タグから構成されるという文法になるでしょう。
XMLドキュメントが妥当なものかどうかを決める文法は、
文書型定義
(
document type definition
)と呼ばれるドキュメントで表現できます。
天気予報の文書型定義では、
<forecast>
タグは
<city>
タグと
<weather>
タグから構成される。
人口予想の文書型定義では、
<forecast>
タグは
<city>
タグと
<population>
タグから構成される。
という文法になるのです。
XMLでは、意味データの単位を
要素
(
element
)と呼びます。
天気予報の例ですと、
forecast
要素は
city
要素と
weather
要素から構成されるということです。
XMLドキュメントの要素どうしの関係は木構造で表されます。 天気予報のXMLドキュメントについては次のようになります。
|
weather_forecast
|
+-----------------+-----------------------+
| | |
date forecast forecast
| | |
| +-----+-----+ +-----+-----+
| | | | |
| city weather city weather
| | | | |
"2004年7月3日" "東京" "晴れ" "大阪" "雨"
木構造において、直接上位の要素を
親要素
(
parent element
)と呼び、直接下位の要素を
子要素
(
child element
)と呼びます。
例えば、
forecast
要素は
city
要素と
weather
要素の親要素である。
city
要素と
weather
要素は
forecast
要素の子要素である。
などと言えます。
木構造の最上位の要素は、
ルート要素
(
root element
)または
ドキュメント要素
(
document element
)と呼ばれます。
この場合は、
weather_forecast
要素がルート要素になります。
XMLドキュメントが整形式であるためには、ルート要素は一つでなければなりません。 つまり
<greeting>Good afternoon!</greeting>
は正しいですが、
Good afternoon!
や
<greeting>Good morning!</greeting> <greeting>Good afternoon!</greeting>
は間違っています。
XMLでは、HTMLと同じように、開始タグ
<
elt
>
と終了タグ
</
elt
>
で囲まれた部分が
elt
要素を表します。
タグがオーバーラップしてはいけない点も同様です。
つまり、
<a><b>123</a></b>
ではだめで、
<a><b>123</b></a>
ならOKです。
HTMLとの違いは、XMLでは要素の名前の大文字小文字が区別されることです。
また、HTMLでは終了タグのないタグがありますが、XMLでそのようなタグは
<
elt
/>
という書き方をします。
XMLでも、HTMLと同じように属性が使えます。
ただし、属性の形式は、値をダブルクオートで囲む
att
="
value
"
か、値をシングルクオートで囲む
att
='
value
'
です。
HTMLでの
<option selected>
〜
</option>
のような値のない属性は、XMLでは使えません。
特殊文字の書き換えもHTMLと同じですが、XMLではシングルクオートも書き換えます。
| 特殊文字 | 書き換え | 覚え方 |
|---|---|---|
| < | < |
Less Than |
| > | > |
Greater Than |
| & | & |
AMPersand |
| " | " |
QUOTe |
| ' | ' |
APOStrophe |
コメントについては、XMLとHTMLは同じです。
<!--
〜
-->
で囲まれた部分がコメントになります。
HTMLドキュメントと違い、XMLドキュメントは表示方法を直接指示するものではありません。 ウェブ・ブラウザでXMLファイルを開いても、HTMLでないタグが無視されるだけです。 しかし、最近のウェブ・ブラウザには、XMLドキュメントの木構造を表示する機能があります。 これを利用しますと、XMLドキュメントの構造が確認できます。
情報処理センターで利用できるウェブ・ブラウザの中では、 Mozilla Firefox が木構造の表示機能を持ちます。 Mozilla Firefoxを起動するには、Finderを開き、アプリケーション・ボタンをクリックし、Firefoxアイコンをダブル・クリックします。 木構造の表示は、SafariやInternet Explorerではうまくいきません。
例えば、以下のXMLドキュメント
<weather_forecast>
<date>2004年7月3日</date>
<forecast>
<city>東京</city>
<weather>晴れ</weather>
</forecast>
<forecast>
<city>大阪</city>
<weather>雨</weather>
</forecast>
</weather_forecast>
このXMLファイルをMozilla Firefoxで開きますと、次のように表示されます。
左端の記号"-"をクリックしますと、"-"が"+"に変わり、その要素が省略表示になります。 元に戻すには、記号"+"をクリックします。
この場合、2番目の
<forecast>
タグにある"-"をクリックしますと、
となり、
<weather_forecast>
タグにある"-"をクリックしますと、
となります。
なお、Mozilla Firefoxは、開いたXMLファイルが整形式でないとエラー・メッセージを表示します。 したがって、Mozilla Firefoxは、XMLドキュメントが整形式であることの確認にも使えます。
以下は、買い物リストを表示するHTMLドキュメントです。 このドキュメントから表示データを取り除き、意味データだけのXMLドキュメントを作成してください。 HTMLのタグをすべて取り除き、意味を表すタグに入れ換えます。 作成したXMLファイルは、Mozilla Firefoxで開くとエラーの有無が確認できます。
<html>
<head>
<title>Shopping</title>
<style type="text/css">
<!--
body.shopping {background-color: white}
div.item {background-color: yellow}
div.total {background-color: aqua}
span.name {color: blue}
span.price {color: purple}
span.quantity {color: green}
span.unit_price {color: red}
-->
</style>
</head>
<body class="shopping">
<div class="item">
<span class="name">缶ジュース</span>
<span class="unit_price">120</span>
<span class="quantity">3</span>
<span class="price">360</span>
</div>
<div class="item">
<span class="name">ペットボトル</span>
<span class="unit_price">150</span>
<span class="quantity">1</span>
<span class="price">150</span>
</div>
<div class="total">510</div>
</body>
</html>
(今回は、余力のある人の演習問題はありません。)
今日の演習11に従ってXMLドキュメントを作成し、そのURLをkonishi@twcu.ac.jpあてにメールで報告してください。 メールには、学生番号、氏名、科目名、授業の日付け(7/2)を明記してください。
XMLについて本格的に勉強したければ、以下のホームページを参考にするとよいでしょう。
このホームページは、W3Cの正規のドキュメントとその(個人的な)日本語訳です。