XMLは、情報を正確に受け渡すことが出来るフォーマットの1つです。

SGMLでも似たような事は出来ますが、より拡張性があり(Extensible)プログラム上での取り扱いも容易なので、広く普及しています。

昨今、私たちはコンピューターを使用する上で、実に様々なシーンでXMLの技術を利用しています。
しかし技術者でもない限り、直にXMLのデータを目にしたり編集したりすることはあまりないと思います。それは、XMLが運んできた情報は、コンピューター上で私たちが使いやすい様に、または見やすい様に加工され、利用されることが多いからです。

いわば、XMLはコンピューターの為の媒体なので、利用者がそれを直接扱う事は多くないわけです。

それでは、実際XMLの技術は私たちのコンピューターのまわりでどのように活用されているのでしょう。いくつか具体例をご紹介してみます。

社員名簿

具体例と言えるかわかりませんが、XMLの解説の本やサイトを見てみると大体以下の様な社員リストがサンプルで載っている事が多いです。
まずは、このサンプルを見ながら、少しだけXMLの構造について解説してみたいと思います。

<stafflist>

  <staff>
    <name>大光太郎</name>
    <age>22</age>
    <dept>営業部</dept>
  </staff>

  <staff>
    <name>大光花子</name>
    <age>20</age>
    <dept>開発部</dept>
  </staff>

</stafflist>

このサンプルでは2人の社員、「大光太郎・22歳・営業部」「大光花子・20歳・開発部」の情報をXMLで表現した時の一例です。実際のXMLもう少し記述が必要ですが、核の部分は大体こんな感じです。

XMLはマークアップ言語なので、その構造単位はタグです。「<」と「>」で囲まれた<stafflist>や<staff>等がそれです。

タグは基本的に「開始タグ」「終了タグ」セットです。「開始タグ」と「終了タグ」は「<」と「>」で囲まれた部分は同じですが、「終了タグ」は「/」から始まります。
<stafflist>の場合、<stafflist>が開始タグ</stafflist>が終了タグになります。

タグの見方がわかると、上記のサンプルの構造が見えてくると思います。

「stafflist」という大きなタグの中に、「staff」というタグが2つ存在し、
その中には「name」「age」「dept」の3つのタグが存在します。
「name」「age」「dept」のタグにはそれぞれ、名前、年齢、部署の情報が記載されているという構造です。

コンピューターがこのXMLの構造を理解して、情報を抽出、編集、追加、削除したり出来ます。
利用方法としては、例えば、名前だけを抽出して社員リストを作成したり、組版ソフトで情報を読み込んで名刺のレイアウトを自動組版したり、部署毎に情報をまとめて会社の組織図を作成したり、等々です。

多くのXMLを利用した技術やサービスも、基本的な考え方は上記の例と同様です。膨大な数と種類のタグを使い分けて、多種多様な情報を表現している訳です。

XMLデータベース

そもそも、データベースとはデータを集めて管理・保守出来るようにしたものの事で、住所録や商品情報などを格納して、特定のデータを呼び出したり、追加したり、削除したり出来るものです。

一般的なデータベースはリレーショナルデータベースといって、データはテーブル(表)で管理されています。
上の社員名簿のXMLの例をデータベースに格納すると例えば下記のようになります。

リレーショナルデータベースのイメージ
名前 年齢 部署
大光太郎 22 営業部
大光花子 20 開発部

リレーショナルデータベースのデータは、表組みになっているのでデータをカッチリ管理しやすく、解りやすいです。

反面、新たに列を追加したり、不要な列を削除したり、後から仕様をすることにはあまり向いていません。
テーブルでデータを管理する時に困るのは下記の様な例です。

リレーショナルデータベースで困る例
名前 年齢 部署 趣味1 趣味2 趣味3
大光太郎 22 営業部 釣り 読書 ドライブ
大光花子 20 開発部 料理 手芸

大光太郎さんが、ものすごく多趣味もっともっと趣味を書きたい場合、現状だと3つ以上は書けません。

列を追加すればいいですが、あといくつ趣味を書きたいのか決めてもらわないと、何列追加したらいいのかわかりません。それに、大光花子さんは趣味が2つしかないので、これ以上趣味の列を増やすのは、ブランクのセルが増えてしまって無駄です。

こんなとき、XMLだと下記のようにデータを格納できます。<hobby>というタグで趣味を記述するとします。

<stafflist>

  <staff>
    <name>大光太郎</name>
    <age>22</age>
    <dept>営業部</dept>
    <hobby>釣り</hobby>
    <hobby>読書</hobby>
    <hobby>ドライブ</hobby>
    <hobby>写真</hobby>
    <hobby>園芸</hobby>

  </staff>

  <staff>
    <name>大光花子</name>
    <age>20</age>
    <dept>開発部</dept>
    <hobby>料理</hobby>
    <hobby>手芸</hobby>

  </staff>

</stafflist>

これなら、<hobby>タグを何度も使うことで、大光太郎さんは趣味を無限に書き連ねることが出来ますし、花子さんのデータに無駄がうまれません。

XMLデータベースはテーブル(表)ではなく、このようなXML形式でデータを格納する事が出来ます。
自由度の高いデータを格納する事の出来る、データベースの形式の1つです。

Office Open XML

MicrosoftのOffice2007以降のデータは、XMLをベースにした「Office Open XML」というファイル形式です。Wordの「.docx」やExcelの「.xlsx」はzipファイルと同様に解凍すると、XMLファイル画像ファイルが格納されたフォルダを確認する事が出来ます。Officeのデータの本体はこのXMLで、ここにファイルの諸々の情報が記載されています。
XML形式にする事で、以下の様な利点があるそうです。

  • Microsoft Office をインストールされていない環境でもファイルの読み書きが可能
  • パーツの再利用が容易になる
  • パーツに分けることによりファイル破損のリスクを限定する事ができる
  • zip圧縮されることでファイルサイズが小さくなる

出典:Wikipedia

Officeデータを編集して保存するたび、このXMLが書き換えられています。XMLはこのように裏方的に仕事をしてくれている事が多いです。

RSS

いわゆる「フィード」と呼ばれる、主にWebサイトの更新情報を配信する為に用いられるフォーマットの1つです。
サイト管理者が提供しているRSSを、フィードリーダーと呼ばれるアプリケーションに登録して利用します。サイトに更新があるとフィードリーダーで更新内容の概要を確認でき、いちいちWebサイトを毎日チェックしなくても、更新の有無を確認出来るというものです。

RSSの内容は比較的シンプルで、更新ページのタイトルURL概要等の情報がタグで記載されています。それをフィードリーダーが受け取り、利用者に内容を表示する仕組みです。

ダイコウクリエのサイトもRSSを配信していますので、是非登録してみてください。

ダイコウクリエ株式会社HPのフィード

SVG

画像を表現できるXMLです。
下記に赤い丸をSVGで表現してみます。最近のブラウザだと大抵SVGを表示出来るそうですが、きちんと表示されていますでしょうか?


SVGで表現した円

<svg xmlns=”http://www.w3.org/2000/svg”>
  <circle cx=”50″ cy=”50″ r=”50″ fill=”red”></circle>
</svg>

ソース

XMLなので当然この円もタグで表現されています。例えばこの円の場合は、<circle>というタグを使用しています。ソースの詳細な解説は省きますが、<circle>タグに、座標位置(cx、cy)半径(r)塗りつぶしの色(fill)にそれぞれ値を記述すると上記の様な円を表現出来ます。

文字ばかりのデータが視覚的に表現出来るのは面白いですね。Adobe社のイラストレーター等でもSVGを作成・編集出来ますので、複雑な図柄も作れます。
アニメーションを表現する事も出来るので、スタイリッシュなWebデザインを支える技術の1つでもあります。

MathML

数式を表現できるXMLです。コンピューター上で、分数や平方根(ルート)等複雑な計算記号を使った計算式を表現出来ます。現状ではSVG程表示出来るブラウザは多くありません。下記に二次方程式の解の公式MathMLで記載していますが、おそらくFireFox以外のブラウザではきちんと表示されていないと思います。

x=b± b 2 4 a c2 a

MathMLで表現した二次方程式の解の公式

MathMLを表現できるブラウザの場合、下記の画像の様な数式が表示されているはずです。
qe

二次方程式の解の公式の例はソースが複雑ですが、単純な分数、例えば2分の1(1/2)を表現する場合は以下の様な感じです。

<mfrac>
  <mrow><mn>1</mn></mrow>
  <mrow><mn>2</mn></mrow>
</mfrac>

<mfrac>タグで囲まれた部分が「分数」<mrow>タグで囲まれた部分がそれぞれ「分子」「分母」<mn>で囲まれた部分は「数値」を表しています。

MathMLは数式のレイアウト出来るだけではなく、数式の意味をコンピューターに理解させられます。たとえば、「分母が2の数式」といった条件で上記の数式を検索したりも出来るわけです。

まとめ

XMLは情報を構造的に整理して、他のコンピューターに伝える事の出来るデータ形式です。
格納するデータの違いで様々に活用されています。

上記の例は、XMLの活用の一部です。SGMLから派生したXML形式のデータは、今私たちの身のまわりに様々なかたちで広く普及しています。