8 August 2005
ページ ツール |
中級
この記事では、XML の使用が要件に含まれているプロジェクトを受注したチームや、単にこのテクノロジーに接してみたいというユーザーのために、XML の基本を紹介します。多くの企業がデータ交換の手段として XML を使い始めています。各国の行政機関がデータ交換形式として XML を標準化したため、Web 開発者は XML の使い方を習得する必要に迫られています。そのため、XML について学習し、自らの技術を拡張することには大きな利点があります。さらに、近々発売される Macromedia Dreamweaver 8 では、XML および XSL ドキュメントの作成と編集が最初からサポートされているため、クライアントサイドおよびサーバーサイドでの XSL 変換を実行することができます。この記事では、Dreamweaver 8 の出荷時にデベロッパーがすぐに作業に取り掛かれるように XML の基本を紹介します。まず XML に関する説明から始め、次に XML の長所と短所、そして XML を使用する状況や方法を例を挙げながら説明します。
ご存知のとおり XML は EXtensible Markup Language の略です。XML は HTML に似たマークアップ言語であり、HTML と同じくタグを使用します。では、XML は何をするのでしょうか。また、なぜ顧客は XML の使用を要求するのでしょうか。驚かれるかもしれませんが、XML 自体は何も実行しません。情報を記述して、その情報をプラットフォームに依存しないフォーマットで配信するだけです。
XML は特定の言語を使用しないため、プラットフォームに依存せずに済みます。XML のタグは事前に定義されていないので、ユーザーが独自のタグを作成することができます。タグを作成できるという長所があるため、XML は自己記述的と呼ばれます。
意外かもしれませんが、私たちは無意識のうちにあらゆるところで XML を使用しています。電子メールクライアントでニュースの見出しを直接読み取るときや、携帯電話を使って Web ページにアクセスするときに、実は XML ベースのテクノロジーを使っているのです。
まず、XML は HTML に取って代わるものではなく、まったく異なる目的を持っています。HTML は人間が読み取りできる形式でデータを表示するために設計されているのに対し、XML はデータを記述、保存、および交換することを目的として設計されています。HTML ではタグおよび属性と呼ばれる一連の定義済みエレメントを使用して、ページレイアウトやテキストのフォーマットなどのドキュメントの視覚的な面を定義したり、ドキュメントやイメージへのリンクを組み込んだりします。HTML では、このように限られたタグしか使用できないため、表示できる情報の種類は限られています。たとえば、HTML を使って数式を表示するのに非常に苦労する場合があります。XML では、拡張性によってそのような問題を解決します。つまり、ユーザー独自のタグとドキュメント構造を "作り出す" ことができるのです。ドキュメントの全体構造に影響を与えずに、エレメントを追加および削除できます。
<department>
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
<employee>
<name>Jane Fletcher</name>
<job>Designer</job>
<salary>2500</salary>
</employee>
</department>
試しに Dreamweaver で新規の XML ドキュメントにこのテキストを入力またはコピーし、ブラウザでプレビューすることもできます。Dreamweaver MX 2004 で新規の XML ドキュメントを作成するには、[ファイル] メニューをクリックして [新規] を選択します。[新規ドキュメント] ウィンドウで [基本ページ] カテゴリを選択し、基本ページのリストから [XML] を選択してください。
次に、[作成] ボタンをクリックします。Dreamweaver により、次のような行が含まれるドキュメントが作成されます。
<?xml version="1.0" encoding="iso-8859-1"?>
これは XML 宣言で、各 XML ドキュメントの先頭に記述する必要があります。この宣言により、ドキュメントで使用する XML のバージョンと文字セットが指定されます。
新規に作成した XML ドキュメントの先頭行の後に、上記の例のテキストを入力してください。Dreamweaver では、XML ドキュメント用のシンタックスカラーリングが固有にサポートされています。
メモ : 通常のブラウザでは、デフォルトで XML がサポートされています。ブラウザが異なる場合に XML ドキュメントがどのように表示および処理されるかを確認するには、W3Schools Web サイトのページ*にアクセスしてください。
各タグの隣にあるマイナス記号をクリックすると、エレメントが縮小されます。エレメントを展開するには、エレメントの隣のプラス記号をクリックします。
同じ例を HTML で書くと次のようになります。
<table>
<tr>
<td>John Doe</td>
<td>Software Analyst</td>
<td>2000</td>
</tr>
<tr>
<td>Jane Fletcher</td>
<td>Designer</td>
<td>2500</td>
</tr>
</table>
このページをブラウザでロードすると、標準的な HTML テーブルのように表示されます。ここでは見やすいようにボーダーを追加しました。
上記の例で使用したタグは、ある企業の従業員情報を記述するために固有に設計したものです。2 つの例を比較すると、HTML はフォーマット主導であり XML はコンテンツ主導であることがわかります。つまり、HTML のタグはタグ内のデータの表示方法を記述するのに対し、XML のタグ名はタグ内のデータを記述します。
上記の例は、XML と HTML のいくつかの重要な違いを示すために使用しました。ただし、XML は HTML に代わるものとして設計されてはいないため、すべての XML ドキュメントを HTML ドキュメントに変換できるとは限りません。
聞き慣れない専門用語が次々に登場したため、混乱してきているかもしれません。XHTML はこの記事の対象外ですが、状況を明解にするため、XHTML とは何かを簡単に説明します。
XHTML とは eXtensible Hyper Text Markup Language の略で、XML をベースに HTML をさらにわかりやすくしたものです。XHTML は HTML のより厳密な仕様*であり、将来的には HTML に代わるものとして設計されています。XHTML には HTML とほぼ同じタグが含まれていますが、XML のシンタックスルールに従って書き換えられています。このことについては、この記事の後半で詳しく説明します。
XML はデータを保存および記述するため、データベースに似ています。XML に関連して話題になる "スキーマ" や "クエリー言語" という言葉を耳にしたことがあるかもしれません。では XML と一般的な DBMS (Database Management System : データベース管理システム) の違いは何でしょうか。
まず、XML には移植性があります。 データベースは設計の対象である特定のデータベース言語に依存しており、その言語でなければ正しく解釈されない場合がありますが、XML ではタグの中にその意味が保持されます。データベースはデータの構造を定義することしかできませんが、XML は自己記述的であり、データの構造と意味の両方を伝えることができます。
さらに、前のセクションで見たとおり、XML はデータを階層ツリーとして表現することができます。たとえば、<employee> エレメントは <department> エレメントの子であり、XML ツリーにそのように埋め込まれています。
もちろん、データベースと比較して XML にも短所があります。それぞれ開発の目的が異なるので短所があるのは当然です。XML の最も明白な短所は、トリガ、マルチユーザーアクセス、効率的な格納、インデックス、セキュリティ、トランザクション、データの整合性チェック、複数ドキュメント間のクエリーなどのデータベース固有の機能がないことです。DBMS は迅速かつ安全な方法でデータを処理、保存、および取得することを目的としていますが、XML は複数のプラットフォーム間でデータを交換することを目的としているので、この短所は当然のものと言えます。
したがって、データベースでは一般的なインデックスや検索の最適化機能が XML にはないために、XML ドキュメントの検索速度はデータベースと比べて遅くなります。
また、XML ではデータ項目ごとにタグと属性のペアが必要になるため記述は冗長になります。
データ中心かドキュメント中心かで分類することはやや時代遅れかもしれませんが、XML の理念や XML テクノロジーの背景にある基本概念を理解する上で重要です。
次のセクションでは、XML のいくつかの長所と短所について考察し、XML を使用することのメリットを理解できる実際の状況を説明します。
どのような状況で XML を使用するかを判断するには、XML の重要な長所を把握している必要があります。一部の長所については前のセクションで簡単に説明しました。このセクションでは、他のマークアップ言語や類似のテクノロジーと比べた XML の長所に注目します。
XML を使用する際、多くの人は X が "eXtensible" (拡張性) の略であることを忘れています。拡張性があるということは、アプリケーションのクラッシュを引き起こさずに、追加タグをいくつでも定義できることを意味します。たとえば、次のエレメントに子エレメントを追加できます。
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
追加した後は次のようになります。
<employee>
<name>John Doe</name>
<job>Software Analyst
<responsibility>Write technical specifications</responsibility>
<responsibility>Translate client requirements into software requirements</responsibility>
</job>
<hire_date>Jun 25, 2005</hire_date>
<salary>2000</salary>
</employee>
このように追加しても、この XML ドキュメントを読み取るアプリケーションは、どの従業員を参照しているかを理解できます。
移植性は、ユーザー自身がタグや属性を定義できるという事実に基づいています。XML ドキュメントを読み取るのに特別なライブラリやアプリケーションサーバーは必要ありません。ただし、開発環境を XML に対応させるには多少の設定が必要です。この設定については今後の記事で説明します。XML ドキュメントはプレーンテキストファイルであるため、通常のバイナリファイルとは異なり、XML ドキュメントを解釈するのに専用のソフトウェアは必要ありません。つまり、XML ファイルはメモ帳で開いて編集することができます。
そのため、互換性のない複数のハードウェアやソフトウェアプラットフォーム、またはアプリケーションの間で情報をやり取りしなければならない場合に、XML が選ばれるようになりました。これが発展して、XML を適用したいくつもの通信テクノロジーが生まれてきました。広く普及している WML (Wireless Markup Language : ワイヤレスマークアップ言語) や WAP (Wireless Application Protocol : ワイヤレスアプリケーションプロトコル) などがその一例です。WML は XML ベースの言語で、電話機や PDA などの携帯端末向けのインターネットアプリケーションのマークアップに使用されています。WML の詳細については、W3 Consortium のチュートリアル*を参照してください。
移植性は、多くの企業がプラットフィームに依存しない方法で大量の財務情報を交換する必要がある、企業間取引用のアプリケーションにおいても大いに役立ちます。多くの異なるアプリケーションが、インターネット上でこの種の情報を交換するのに、SOAP* (Simple Object Access Protocol : 簡易オブジェクトアクセスプロトコル) を使用しています。SOAP は、評判の高い XML ベースのプロトコルです。XML ベースのこれらの情報共有アプリケーションは、Web サービスと呼ばれています。
XML を使用すると、コンテンツが重複する危険性を低減できます。顧客がレイアウトやプレゼンテーションを定義するのに HTML や CSS に注意を集中しているときに、個別の XML ファイルに保存されている基本の情報を変更しても、レイアウトやプレゼンテーションが影響を受けることはありません。
たとえば、CMS (Content Management System : コンテンツ管理システム) では、HTML や PDF などのさまざまなフォーマットでエンドユーザーにドキュメントを提供する場合がありますが、フォーマットごとに各ドキュメントの個別のバージョンを保存していては無駄が生じます。コンテンツを複製すると貴重なディスクスペースが使用されるため、重複する情報が原因で CMS の動きは鈍り、処理は遅くなります。XML ベースのエンジンを使用すると、コンテンツを 1 度保存するだけで適切なフォーマットで抽出または表示することができます。
任意の処理またはフォーマットの要件がある場合は、個別の XSL (eXtensible Style sheet Language) ドキュメントで処理します。XSL スタイルシートは、XML ファイルに含まれるデータのプレゼンテーションを指定するためのものです。XML と XSL は出力時に結合され、HTML のスタイルが CSS で設定されるのと同じ要領でフォーマット要件がデータに適用されます。
XSL については次回の記事で詳しく取り上げる予定です。XML と XSL を使用して、アプリケーションに適したフォーマット出力を生成する方法を説明します。Dreamweaver 8 には、カスタム XML ファイルに合わせて独自の XSL スタイルシートを簡単かつ視覚的に作成できる機能があります。これを使用すると、ご自分のサイトに RSS フィードを読み込んだり、サイトの訪問者に最新ニュースや更新データを提供することがどれほど簡単にできるかご理解いただけるでしょう。
XML の 3 つの重要な長所を理解すれば、どのような状況で XML を使用すべきかすぐにわかります。
XML は、異なるデータベースアプリケーション間でのデータ転送用に既に広く使用されています。Microsoft Access や phpMyAdmin* など、DBMS の多くは、既にデータベーステーブルを XML ファイルで書き出せるようになっています。
RSS (Really Simple Syndication) は、最も普及している XML の適用の 1 つです。RSS は、ニュースやニュースのようなコンテンツを配信するように設計された、まったく別の XML ドキュメントフォーマットです。RSS を利用している人気の Web サイトには、Wired* や Slashdot*、個人のブログなどのコミュニティサイトがあります。Macromedia 社では、デベロッパーセンターの記事を RSS フィード*形式で提供しています。RSS の主な長所は、コンテンツの読者が自分の好みのフォーマットでコンテンツを読むことができ、自分の Web サイトに読み込むことができることです。次回の記事の 1 つで、Dreamweaver 8 を使用した RSS フィードの取り込み方法を説明します。
XML の短所をいくつか考えれば、XML の使用を避けた方がよい状況を簡単に判断できます。
前の例を学習したユーザーであれば、XML ドキュメントがどのようなものであるかを理解しているでしょう。XML シンタックスは直接的でわかりやすく、そのルールは明快できわめて単純です。XML ドキュメントは、1 つの XML 宣言と 1 つのルートエレメントまたはタグで構成され、ルートエレメントまたはタグには、ネストされた複数のエレメントが含まれます。まず、最も重要なシンタックスルールを簡単に説明します。
すべての XML ドキュメントは XML 宣言から開始する必要があります。Dreamweaver を使用して XML ドキュメントを作成する場合は、XML 宣言が自動的に追加されます。XML 宣言は、XML ドキュメントを呼び出すアプリケーションが情報を正確に読み取り、解釈するために使用されます。デフォルトでは、Dreamweaver で作成される XML ドキュメントは 1.0 の仕様*に準拠しており、ISO-8859-1 (Latin-1/West European) 文字セットを使用します。XML 宣言はエレメントではなく、XML ドキュメントの一部とは見なされません。
次に、ドキュメントにはルートエレメントが 1 つだけ含まれます。前の例では、ルートエレメントは <department> でしたが、会社に複数の部署があるとします。その場合、2 番目の <department> エレメントを、次のようにドキュメントに追加できるでしょうか。
<?xml version="1.0" encoding="iso-8859-1"?>
<department> </department>
<department> </department>
いいえ、できません。この場合、<company> という新しいルートエレメントを定義する必要があります。. 新しいルートエレメントには、次のように、任意の数の department という子エレメントを含めることができます。
<company>
<department>
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
<employee>
<name>Jane Fletcher</name>
<job>Designer</job>
<salary>2500</salary>
</employee>
</department>
<department>
<employee>
</employee>
</department>
</company>
その他のすべての子エレメントは、ルートタグで囲む必要があります。
HTML では <hr> や <br> などの単一タグエレメントを使用できますが、XML ではすべてのエレメントに終了タグが必要です。終了タグを省略すると、次のようなエラーがブラウザに表示されます。
The following tags were not closed:department.Error processing resource 'http://www.domain.org/company.xml'.
Dreamweaver 8 の新機能の 1 つは、デフォルトのコード補完機能です。この機能は XML ファイルにも対応しています。たとえば、次のように入力したとします。
<company>
<department>
<employees>
「</」と入力すると、Dreamweaver 8 で終了タグが自動的に正しく入力されます。上記の例では、最初に「</」と入力すると、</item> が自動的に挿入されます。次回「</」と入力すると、</items> が自動的に挿入されます。次回「</」と入力すると、</root> が自動的に入力されます。Dreamweaver 8 ではページ内での現在の位置が把握され、適切な終了タグが挿入されます。コード補完機能は、特にユーザーがコーディングの達人でない場合に、適切に形成された XML ドキュメントを作成するのに役立ちます。
さらに、タグ名の大文字と小文字は区別されます。つまり、"<Department>" は "<department>" や "<DEPARTMENT>" とはまったく異なるエレメントです。当然のことながら、1 つのエレメントの開始タグと終了タグでは大文字と小文字を一致させて入力する必要があります。次の例は、XML 内の不正なタグの組み合わせを示します。
<JOB>Software Analyst </job>
既に説明したとおり、XML エレメントは親子関係で関連付けられています。上記の例では <employee> は <department> の子エレメントで、<department> は一意のルートエレメント <company> の子エレメントです。これらの関係を保つには、エレメントを正しくネストさせる必要があります。HTML では次の例のようにタグを交差させることができましたが、XML のエレメントはすべて、それぞれのタグ内で正しくネストさせる必要があります。
<b>This text is <i> emphasized </b> and italic</i>.
上の例は HTML ではまったく問題なく、ブラウザで表示すると次のようになります。
XML では、コンテンツまたは実際の情報は、エレメントおよびエレメントの属性に保持されます。1 つのエレメントには、単純なテキスト、その他のエレメント、またはその両方を含めることができます。たとえば、次のエレメントを考えてみましょう。
<employee>
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
上のエレメントは、次のように書き替えることができます。
<employee>
John Doe
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
これは、エレメント employee に単純なテキストと他のエレメントが混在していることを意味します。
空のエレメントを含めることもできます。次のエレメントは、"求人中で、現在も適任者を探している" と解釈できます。
<employee></employee>
同じエレメントを、属性を使用して書き替えることもできます。
<employee job="Software Analyst">
John Doe
<salary>2000</salary>
</employee>
XML では、属性は 1 つのエレメントのプロパティです。属性には、エレメントの特徴が記述されます。
属性値をマークするには、一重引用符 (' ') または二重引用符 (" ") を使用します。これまでの一連の例からわかるように、1 つのデータを子エレメントまたは属性のいずれかとして格納できます。使用する方法としては、データに関する追加情報を指定する場合のみ、つまりメタデータを必要とする場合のみは属性を使用するのが理想的です。次に例を示します。
<employee id="31">
<name>John Doe</name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
この場合、従業員 ID は実際のデータには何の関係もありません。ただし、XML 処理ソフトウェアでこの ID を使用すれば、対応する従業員を迅速に特定することができます。このような情報、つまりデータに関するデータをメタデータと呼びます。
エレメントの代わりに属性を使用する方法には、いくつか欠点もあります。XML ドキュメントの全体的な構造が不明瞭になり、拡張性が低下します。さらに、属性は複数の値を保持できないため、処理がより難しくなります。従業員に関する情報を、次のように格納した場合を考えてみましょう。
<employee name="John Doe" job="Software Analyst" salary="2000"></employee>
これでは、情報を明確に構造化し、交換を容易にするという XML の目的をまったく実現できなくなります。
この時点で、"ユーザー自身がタグを定義できるのなら、エレメントに対して本当に何を使ってもかまわないのだろうか" という質問が当然生じることでしょう。答えは "はい" であり、"いいえ" でもあります。XML には予約語がないので、エレメントには何でも使用できますが、次の単純な命名規則に従う必要があります。
エレメント名の中に "." 文字や "-" 文字を使っても問題はありませんが、推奨していません。XML ファイルを処理するアプリケーションが、これらの記号を演算子として解釈することがあるためです。名前を長くしなければならない場合は、それらの記号を、次の例のように "_" に置き換えることができます。
<employee>
<first_name>John</first_name>
<last_name>Doe</last_name>
<job>Software Analyst</job>
<salary>2000</salary>
</employee>
基本的には何でも使用できます。英語以外の文字もサポートされていますが、適切な文字セットを設定しているかどうか、また XML ドキュメントを処理するクライアントアプリケーションが英語以外のコンテンツをサポートしているかどうかを確認する必要があります。また、HTML とは異なり、コンテンツ内の空白はそのまま保持されます。つまり、空白を連続して入力しても、取り除かれることはありません。
すべてのマークアップまたはプログラミング言語では、コメントの入力が許可されています。XML も例外ではありません。シンタックスは HTML と同様です。
<!-- This employee deserves a raise. -->
この記事の前半で、XML の適用範囲として RSS を取り上げました。次の例は、簡略化された Macromedia デベロッパーセンターのフィードです。適用された XML ドキュメントの構造とシンタックスルールの構造を示しています。
<?xml version="1.0" encoding="utf-8"?>
<rss version="1.0">
<channel>
<title>Macromedia Developer Center RSS Feed June 27, 2005</title>
<link>http://www.macromedia.com/devnet/</link>
<description>Macromedia Developer Center is your center for the tutorials, articles, and sample applications you need to master Macromedia products.</description>
<item>
<title>Creating a Dynamic Playlist for Progressive Flash Video</title>
<link>http://www.macromedia.com/devnet/flash/articles/prog_download.html</link>
<description>Learn how to create an XML-driven playlist for viewing progressive FLV files.</description>
</item>
<item>
<title>Chatting Through IM Gateways in ColdFusion MX 7</title>
<link>http://www.macromedia.com/devnet/coldfusion/articles/imgateway.html</link>
<description>Learn the fundamentals of gateway apps as you build a sample chat application that monitors your ColdFusion server status</description>
</item>
</channel>
</rss>
RSS で項目や記事などのリスト指向の情報が保持される方法に注目してください。RSS は同じような項目を大量に交換するように設計されていますが、簡単にするために、上記の例では 2 つの項目しか含まれていません。項目により情報の "チャンネル" が構成されます。チャンネルはタイトル、リンク、および説明を表します。各項目はデベロッパーセンターで発行される 1 つの記事を表し、記事のタイトル、記事へのリンク、および短い説明が子エレメントとして定義されています。さらに、各記事の筆者、公開日、主題に対応したエレメントを追加することもできます。これについては、次回の記事で説明します。ここまで、XML を適切に形成するにあたって必要なもの、つまり適切なシンタックスにするためのルールについて説明してきました。XML に精通するにつれ、XML DTD (Document Type Definitions : ドキュメントタイプ定義) と XML スキーマについても理解しておく必要があります。これらは XML ベースの言語を作成し使用するのに役立つルールです。DTD では、XML ドキュメントで使用できる正当なエレメントを指定します。DTD を使用した XML ドキュメントの検証方法の詳細については、W3Schools のチュートリアル*を参照してください。XML スキーマは、DTD を XML ベースのバージョンにしたものです。
この記事は、XML の入門にすぎません。テクノロジーの総合的な説明書でも XML ベースのアプリケーションを開発するための完全ガイドでもありません。XML に関するユーザーの知識を補足するものです。また、Web 開発における XML のさまざまな使用方法を見つけることができるよう、次のサイトを紹介します。
既に XML を使用している場合は、W3 Schools の XML バリデータ*で、自分の XML ドキュメントが適切に形成されているかどうかを判別できます。
次回の記事では、XML データをフォーマット化および表示するための言語である XSL を紹介します。ここから参照してください。将来の記事では、Dreamweaver 8 で新しい XML および XSL 機能を使用する方法、Dreamweaver 8 を使用して自分のサイトに RSS フィードを取り込む方法、およびサーバーサイドで XSL 変換する場合のサーバーの設定方法についても説明します。引き続きご利用ください。Dreamweaver 8 の先行注文の受け付けは既に始まっています。InterAKT Online の Macromedia アフィリエイトプログラム*からお申し込みいただくと、ImpAKT を無料で*ご利用いただけます。