私がXMLという言葉を初めて耳にしたのは2000年ごろ、Javaで書かれたワープロソフト「一太郎Ark」のソースコードを公開するというリリースでした。これからは「Java+XML」かぁ…と飛びつき、御多聞にもれずJavaにもXMLにも挫折。Internet Explorer がXMLに対応だか言いつつWebの文書においてXMLは一向に広まる気配はないし…なんて、ちょっとした勘違いを交えつつ、「XML」に対する黙殺状態が続きました。
現在、OpenOffice.org など、ファイルフォーマットにXMLを適用したり、SVGのようにXMLの応用形態が文書以外のデータを表現できたりと、XMLが無視できない存在になっています。ここでは面倒にならない程度にXMLの扱いについて学習します。
ただし、この章ではまだXMLは書きません。XMLを書く前に、XMLの背景である「データ」の本質的な側面を確認していきます。
XMLとはマークアップ言語です。名称は "eXtensible Markup Language" に由来します。マークアップ言語の例としてはHTMLが有名でしょう。HTMLとXMLとは、一見似ているようですが、HTMLは「文書の構造」を示すのに対して、XMLは「データの意味や構造」を示します。ここでいう「データ」とは総称的であり、「文書」でも、「行列・テーブル(=レコードとフィールド)」でも、果ては「音楽」や「画像」といったものでも良いでしょう。こうした「データ」を、XMLでマークアップしたテキストファイルとして記述します。以降、XMLでマークアップしたテキストファイルを「XML文書」と表記します。
以下に列挙します。
|
包含関係とは「含む/含まれる」の関係です。YがXの一部分であるとき、XとYは包含関係にあるといいます。階層構造とは、ここでは、複数の要素によって集合を形成し、複数の集合が集まって大きな集合を形成し…という構造を指します。
例として、日の丸の旗を考えてみます。下図のように、日の丸の旗は、図1.1に示すように「白い長方形」と「赤丸」とで構成されます。
図1.1 日の丸の旗 |
さらに、この図をテキストで正確に表現するためには、長方形および丸のサイズ、そして図の名前も必要でしょう。これらをまとめて包含関係で表した場合と階層構造で表した場合とを以下に示します。
(a)包含関係 | (b)階層構造 |
図1.2 図1の構造 |
同様に、あるドキュメントならば「いくつかの章で構成され、章はいくつかの節で構成され、節はいくつかのパラグラフ・箇条書き・図表…で構成される」、のように考えることができるでしょう。自動車であれば「シャシー、エンジン、ボディ、タイヤ、…」のようにも「メーカー名、車名、グレード、値段、…」のようにも考えることができます。
XMLにおいて、マークアップとは、「タグ」と呼ばれる命令を記述することを意味します。XMLのタグは「<」と「>」で括った文字列として定められています。先に挙げたHTMLも同様のマークアップを行いますが、HTMLのタグが「文書の構造・意味や装飾」を記述するのに対して、XMLのタグは「データの要素や構造」を記述する、と表現するのが妥当でしょう。通常、「<element>」から「</element>」までの間に要素 element の実体を文字列で表します。
「XMLのタグはデータの要素や構造を記述する」の意味を考えてみましょう。
「包含関係、階層構造?」の節で、日の丸の旗やドキュメント、そして自動車といった「データ」を階層構造で表現してみました。これらのデータを構成する「名前、長方形、丸、章、節、パラグラフ、箇条書き、図表、シャシー、エンジン、ボディ、タイヤ、メーカー名、車名、グレード名、値段」のひとつひとつが、それぞれのデータの「要素」です。では、XMLでは多様なデータを表現するために、わざわざ「名前、長方形、ボディ、タイヤ、…」に相当する命令を持っているのでしょうか。当然、そんなことをしていてはキリがありません。
したがって、データ構成はあなたが決めます。つまり、必要に応じて構成要素を定めて「名前、長方形、ボディ、タイヤ、…」といったタグをあなたが決めるということです。ただしこの段階で「名前、長方形、ボディ、タイヤ、…」というのはただの「文字列」に過ぎません。そこで、それぞれの要素の意味もあなたが決めることになります。
本章では、XMLの概要として以下の事を学びました。
XMLの実体が見えない中、ここまでで述べたことはすぐには理解できないかもしれません。「多様なデータを独自の解釈で表す」と言われれば、なおさらイメージは湧きにくいことでしょう。次の章では、本章の理解を深めるため、実際にXML文書を書いてみます。
2009/04/01: 作成