XMLの基礎

はじめに

XMLはデータを記述するために、そしてそのデータが何であるかに焦点をあてる。
HTMLはデータを表示するために、そしてそのデータがどのように成っているかに 焦点をあてる。
したがって、XMLはHTMLを置き換える物ではない。相補的なものである。 HTMLは情報を表示し、XMLは情報を記述する。XMLはデータを運ぶために設計される。

XMLはeXtensible Markup Languageの意味。
XMLタグはXMLの中では定義されていない。ユーザが自分で定義しなければならない。 XMLはデータを記述するためにDTD(Document Type Definition)を使う。 DTDを使ったXMLは自分自身を記述するように設計される。
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
このnoteは1つのヘッダーと1つのボディーを持つ。そして、送り手と 受け手を持つ。しかし、この文章は何もしない。ただ単に、XMLタグで 情報を包んでいるだけである。誰かがこれを送り、受け取り、表示する ソフトウエアを書かなければならない。

XMLはどのように使われるか?

XMLで記述されたデータはHTMLの中に入れることもできるし、その 外にも格納できる。
HTMLがデータを表示する時はデータはHTMLの中に格納されるが、 そのデータはXMLファイルとは分けて格納できる。

XMLで記述されたデータは非互換の計算機間のデータ交換に使うことができる。 インターネット上でのビジネス間の情報交換に使われる主要な言語であり、 多くのアプリケーションが開発中である。

XMLはデータを分配するのに使われる。 XMLで記述されたデータはプレーンテキストフォーマットで格納されるので、 XMLは分配されたデータのソフトウエアとハードウエア独立な方法を提供する。

XMLはデータを格納するのに使われる。 XMLはファイルやデータベースの中にデータを格納するために使われる。

XMLは新しい言語を作るために使われる。

XMLシンタックス

<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
最初のラインはXMLのバージョンを記述している。 次のラインはこのドキュメントのルートの要素で、あたかもこのドキュメントは noteであると言っているようである。その次から4ラインはこのルート要素の 4つのチャイルド要素を記述している。最後のラインはこのルート要素が 終りであることを示す。

すべてのXML要素は終了タグを持たなければならない。

<p>This is a paragraph</p>
<p>This is another paragraph</p> 

XMLタグはケースセンシティブである。大文字小文字を区別する。
<Message>This is incorrect</message>

<message>This is correct</message>


すべてのXMLドキュメントはルートタグを持たなければならない。
<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root> 

属性値は必ずコーテンションで括られなければならない。
<note date=12/11/99>
</note>

<note date="12/11/99">
</note>
前者の場合はエラーである。データである12/11/99がコーテンションで括られて いないからである。後者のようにしなければならない。

XMLで記述されたデータは空白はそのまま保持される。HTMLのように トランケートしない。

XMLで記述されたデータのCR/LFはLFに変換される。

XML要素

XML要素は拡張性があり、それらは相互に関係を持っている。

<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>
上記のXMLデータを表示するプログラムが下記のXMLデータを表示 しようとした時、クラッシュするか?答えはノーである。 なぜなら、上記のデータを表示するプログラムは 下記のデータの中にある <to>,<from>,そして <body> 要素を発見し、処理することができるからである。
<note>
<date>1999-08-01</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

XML要素は親と子供のように関係しあっている。
<book>
<title>My First XML</title>
<prod id="33-657" media="paper"></prod>
<chapter>Introduction to XML
<para>What is HTML</para>
<para>What is XML</para>
</chapter>

<chapter>XML Syntax
<para>Elements must have a closing tag</para>
<para>Elements must be properly nested</para>
</chapter>

</book>
Bookはルート要素であり、titleとchapterはbookの子供要素である。Bookは titleとchapterの両方の親なので、titleとchapterは姉妹要素である。

要素は内容を持つ。要素は異なったタイプの内容を持つことができる。 1つのXML要素は開始タグから終了タグまでのすべてである。 1つの要素は要素内容、混成内容、単純内容、空内容を持つことができる。 また、属性も持つことができる。 上記の例で言えば、bookは要素内容を持ち、chapterはテキストと他の要素を 持っているのでchapterは混成内容を持ち、paraは単にテキストのみを持つので 単純内容を持つ。prodは何の情報も運ばないので空内容を持つ。
上記の例ではprodのみが属性を持っている。idという名前の属性は"33-657" という値を持ち、mediaという属性は"paper"という値を持つ。

要素の名前づけ XML要素は次のようなルールに従わなければ成らない。

ハイフンやドットは避けること。名前はいくらでも長くはできるが できるだけ短くすること。":"文字は使うべきではない。

XML属性

XML要素はその開始タグの中にXML属性を持つことができる。 XML属性はその要素についての付加的情報を用意するのに使われる。

<img src="computer.gif">
<a href="demo.asp">
上記のXMLデータはcomputer.gifやdemo.aspのようにデータの1部として 値を利用するが、下記の例のようにgifはデータの1部ではなく 要素を操作するのに使われるだけである。つまり、computer.gifの ファイルタイプがgifであるかどうかをチェックするためだけに利用される。 このような使い方もある。
<file type="gif">computer.gif</file>

コーテーションはダブルかシングルか?
<gangster name='George "Shotgun" Ziegler'>
ダブルコーテーション"が通常は使われるが、上記のように値そのものに コーテーションが必要な場合は、シングルコーテーション'を使う必要がある。

要素を使うか?それとも属性を使うか?
下記の2つの例をみると、どちらも同じことを記述しようと しているが、その方法が違っている。経験から言うと、 HTMLにおいては属性が手軽だったが、XMLにおいては 要素を使う方がいいと思われる。もしデータのような情報であったら 属性ではなく要素を使え。
<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

私の好み
<note date="12/11/99">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上記の属性を使ったXMLデータを要素を使った書き換えた物が 下記にのXMLデータである。
<note>
<date>12/11/99</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
このXMLデータを拡張したものが下記のデータである。
<note>
<date>
  <day>12</day>
  <month>11</month>
  <year>99</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 

属性の使用を避ける理由

XML確認

正しい構文法に基づくXMLはXMLをよく形作る。 DTDに確認されたXMLは妥当なXMLである。

"よく形作られた"XML文書

"よく形作られた"XML文書は正しいXML構文を持っている。

"妥当な"XML文書

妥当なXML文書は"よく形作られた"文書であり、また(Document Type Definition(DTD)のルールに従う。

XML DTD

DTDはXML文書の合法的な要素を定義する。DTDの目的はXML文書の合法的な 組み立てを定義する。それは合法的な要素のリストを持った文書構造 を定義する。

XMLスキーマ

XMLスキーマはXMLをベースにした、DTDに代わるものである。

ネットスケープとエクルプローラのXML

ネットスケープはXMLをサポートすることを約束した。 エクスプローラ5.0はXML1.0標準をサポートする。

データアイランドの中のXML

XMLのHTMLへの組み込み

エクスプローラ5.0で、XMLをHTMLページの中に組み込むことができる。
<xml id="note">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>
</xml>
あるいはXMLファイルと分離して、下記のように記述できる。
<xml id="note" src="note.xml">
</xml>

データバインディング

下記の例は、HTMLテーブルにXMLデータを入れて表示する。 cd_cataglog.xmlファイルから、XMLデータを読み込み、 XMLのid="cdcat"とHTMLのdatasrc="#cdcat"をリンクさせ、 HTMLのdatafld="ARTIST"、datafld="TITLE"とXMLを 対応させる。
<html>
<body>

<xml id="cdcat" src="cd_catalog.xml"></xml>

<table border="1" datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>

</body>
</html>