いまやXMLは、BtoB、Webサービス、.NETなど、注目される技術のコアとして採用されている。そのため、多くのエンジニアはXMLとはどういうものか、その概要をご存じだろう。しかし、いざ仕事でXMLに取り組むとなると、きちんと基礎からあらためて学習する必要がある。本連載は、そういった技術者のために用意された。聞きかじりのXMLの知識から脱却し、その概念と基礎、そして応用まできちんと理解できるようになるはずだ。
XMLは、いまやITを語るうえで欠かせないキーワードになった。そのためXMLを扱った書籍・雑誌が数多く存在している。読者の中には、すでにXML入門書を一読された方も多いのではないだろうか。しかし、そうした方々から次のような話を聞くことがある。
本連載はこのような、XMLを実際に使うにあたって戸惑いを覚えている方、XMLを聞きかじった程度で人に説明できるほどではない方……など、いまさら人に聞けずに密かに悩んでいる(?)XML初級技術者のために用意された。筆者はこうした方々のために、字数の許す範囲内で微力ながらお役に立ちたいと思っているので、しばらくお付き合いをお願いしたい。
では初回は復習も兼ねて、XMLとは何か、XMLのどういう特徴が注目されているのか、というところから始めよう。
XML(Extensible Markup Language:拡張可能なマークアップ言語)は、汎用的なデータ記述言語だ。XMLは、もとをただせば出版業界で使うために文書記述言語としてISOが標準化したSGML(Standard Generalized Markup Language)から派生したものだが、特にインターネット上でのデータ交換を意識して設計されている。従って、XMLはSGMLのころからの用途である文書の記述だけでなく、電子商取引データをはじめとしてインターネット上で交換可能なあらゆるデータの記述に使われようとしている(図1)。
XMLがさまざまな分野で活用されている理由は、XMLの持つ特徴がこれまでのデータ記述方式にないメリットを生み出すからだ。以下にXMLの代表的な特徴を述べ、なぜそれがメリットとなるかを説明しよう。
XMLはテキスト形式で記述されるため、マルチプラットフォーム環境でのデータ交換に適している。
例を使って説明しよう。A社製のワープロソフトで作成した文書は、そのままではB社製のワープロで開けないのはなぜだろうか。それはワープロ文書が各社独自のバイナリ形式で保存されているからだ。異なるベンダのワープロ間で文書を交換するためには、いったんテキストファイルにする必要がある。テキスト形式のデータなら異なるプラットフォームでも読み込み可能だからだ(図2)。
同様に、XML文書もテキスト形式で記述されるため、プラットフォームの壁を越えてデータ交換が可能だ。もっとも、テキスト形式でも文字コードの相違が問題になることがある。XMLではその点でも工夫がなされているが、詳しくは、この連載の別の回で説明しよう。
XMLでは、文書構造を構成する個々のパーツを「要素」(エレメント:Element)と呼び、要素はタグ(tag)を使って記述する。タグを使った記述方式を採用することで、データの意味やデータ構造を保持したまま、インターネット上でデータ交換ができる。さらに仕様変更や異なるシステム間でのデータ交換に柔軟に対応できるようになる。
こうしたメリットが生まれる理由を以下に説明する。
タグを使ってデータを記述するとは、具体的にいうと要素の始まりを示すタグ(「開始タグ」という)と、終わりを示すタグ(「終了タグ」という)の2つのタグでデータを挟み込んで、要素を表現するということだ。
<社員番号>1000</社員番号>
上の例でいうと、<社員番号>が開始タグ、</社員番号>が終了タグ、“1000”が要素内容、<社員番号>から</社員番号>までが要素だ。また要素を名前で呼ぶ場合、タグ名“社員番号”に合わせて、“社員番号”要素というように呼ぶ。このように文書を記述するためにタグ付けをすることを「マークアップ(markup)する」という。
HTMLもマークアップして文書を記述する言語だが、XMLがHTMLと大きく異なるところは、使用するタグ名を“住所”とか“お住まい”とか“address”など、ユーザーが決められる点だ。タグ名を要素内容の意味を反映させたものにすれば、そのXML文書を読む人間やシステムに、データの内容だけでなくデータの意味も伝えることができる。
さらにXMLは、タグでマークアップされた要素を入れ子構造にすることでデータ構造を表現できる。図3で示されるデータ構造を持つ社員情報を例にして説明する。
図3を見てお分かりのとおり、社員情報を構成する社員番号や氏名などの各要素は、ツリー構造として表現されている。
そこで、ある社員の社員情報をXMLで記述すると次のようになる。
<社員情報> <社員番号>1000</社員番号> <氏名> <姓>田中</姓> <名>次郎</名> </氏名> <部署>総務</部署> </社員情報>
図3のツリー構造で表されていた要素間の親子関係が、要素の入れ子構造によってうまく記述されているのにお気付きいただけるだろう。
このようにXMLは、タグ名と要素の入れ子構造というシンプルな方法で、データの意味とデータ構造を保持したままでのデータ交換を可能にしている。
タグでデータを記述するというXMLの手法は、効率的で柔軟なシステムを構築する際に役立つ。これは、従来のデータフォーマットの1つであるCSV形式と比較するとよく分かる。CSV形式とは、データをカンマ(,)で区切り、先頭から数えて何番目か、という順番でデータを識別するフォーマットだ。前述の社員情報をCSV形式で記述すると以下のようになる。
"1000","田中","次郎","総務"
CSV形式の場合、“1000”というデータだけでは、そのデータが社員番号なのか、あるいは在庫数なのかすぐには分からない。一方、次のようにXML形式で記述するとどうだろう。
<社員番号>1000</社員番号>
こうすれば人間は、すぐにデータの意味を理解できる。またシステムは、タグ名をたよりにしてデータの意味を理解できるようになるので、人手を介さずにデータを処理しやすくなる。つまり、例えば電子商取引の場合、受発注データのフォーマットとしてXMLを採用すれば、容易に受発注処理を自動化できるようになるわけだ。
さらに、タグでデータを記述すれば仕様変更に柔軟に対応できるシステムを構築できる。再び、CSV形式のデータとXML形式のデータを比較する。仕様変更があって、氏名と部署の間に住所が入ることになったとする。
"1000","田中","次郎","港区虎ノ門1-1-1","総務"
CSV形式の場合、先頭から数えて何番目かでデータの項目を識別するため、挿入された住所データ以降のすべてのデータの順番が影響を受けることになる。これではプログラムのあちこちを書き直すことになりかねない。
一方、同じデータをXML形式で記述したらどうだろう。下記のようになる。
<社員情報> <社員番号>1000</社員番号> <氏名> <姓>田中</姓> <名>次郎</名> </氏名> <住所>港区虎ノ門1-1-1</住所> <部署>総務</部署> </社員情報>
データの出現順ではなくタグ名でデータをアクセスするようにプログラムを書いておけば、新たな要素を挿入してもプログラム修正を少なく済ませることができるはずだ。
CSV形式などの従来のデータフォーマットと比較して、タグを使って記述するXML形式がはるかに優れたデータフォーマットであることをご理解いただけたと思う。
「XMLはタグで記述する」で説明したとおり、XMLはタグの名前やタグの階層構造などをユーザーが定義できる。これは特定の用途に特化したタグセットを定義することによって、XML文法に従う新しいマークアップ言語を定義できるということを意味している。XMLに「拡張可能な(Extensible)」という名前が付けられた理由はここにある。
「言語を定義する言語」のことをメタ言語という。XMLは、メタ言語機能を持っているため、電子商取引データの記述や、マルチメディア・プレゼンテーションのための記述や、数学で用いる数式の記述など、さまざまなデータを記述する応用言語のベースとなる言語だ。参考までにXMLをベースにして作成されたデータ記述言語(本連載では、これをXML応用言語と呼ぶことにする)のいくつかを以下に示す。
ところで、人間同士で使われる自然言語は、その言語を話す人が多くいて初めてコミュニケーションツールとしての意味を持つ。
同様に、特定の企業間や業界内でひとそろいのタグセット、すなわち特定のXML応用言語を使用するという約束事があって初めて、そのXML応用言語はコミュニケーションツールとしての存在価値が出てくる。従って、XMLのメタ言語機能について語ったが、XMLユーザーの多くは、業界団体が標準化したXML応用言語を使用することがほとんどで、自分で新しいXML応用言語を作ることはまずないだろう。
XMLはデータ記述言語として優れているが、あらゆる電子データをXML化すればよいわけではない。これまで挙げたXMLの特長は、裏返してみればXMLのデメリットにもなる。
例えばXMLがテキスト形式であることや、タグでマークアップされていることは、バイナリデータに比べて冗長という意味だ。データの交換量が膨大な場合、これはパフォーマンスの点で大きな問題となる。つまり、XML導入にあたってはXMLのメリット・デメリットを比較・考慮し、XMLのメリットを生かせる領域でのみXML化を図るべきだ。
ここまでで述べたとおり、XMLは汎用のデータ記述言語として優れた特徴を持っている。しかしXMLは、プログラミング言語ではなく、あくまでデータを表現する技術にすぎない。従って、XML文書を表示したり、文書構造を変換したり、アプリケーションプログラムから操作したりするXML関連技術が必要になる。次回は、そうしたXML関連技術を概観して、どうすればXMLを“動かす”ことができるのかを解説する。
Copyright © ITmedia, Inc. All Rights Reserved.