目次 | 索引 |
---|---|
今、次のような天気予報のホームページについて考えます。
スタイルシートを使いますと、意味データと表示データが分離できます。
ここでは、都市の
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の正規のドキュメントとその(個人的な)日本語訳です。