XMLとは|構造・HTMLとの違い・用途とJSONとの比較をやさしく解説
XMLは、タグで囲んでデータに「意味」と「階層」を持たせるためのマークアップ言語です。本記事では「XMLとは何か」から、要素・属性・テキストの構造、整形式(well-formed)のルール、HTMLとの違い、設定ファイルやデータ交換・RSS・SVGなどの用途、そしてJSONとの比較までをやさしく解説します。
設定ファイルやアプリ間のデータのやり取りで「<name>山田太郎</name>」のような、山かっこで囲まれたタグの並びを見たことはないでしょうか。これがXMLです。一見HTMLによく似ていますが、XMLは「データそのものに意味と階層を持たせて、人にもプログラムにも読めるようにする」ことを目的に設計された、汎用的なマークアップ言語です。本記事では、XMLとは何か、どんな構造を持ち、HTMLやJSONとどう違うのかを順を追って解説します。
XMLとは何か
XML(Extensible Markup Language、拡張可能なマークアップ言語)とは、データをタグで囲んで構造化するためのテキスト形式です。W3Cによって標準化されており、特定のソフトウェアやプログラミング言語に依存しないため、異なるシステムの間でデータを受け渡す共通の「器」として長く使われてきました。
XMLの最大の特徴は、名前のとおり「拡張可能」な点にあります。HTMLが<p>や<a>といったあらかじめ決められたタグしか使えないのに対し、XMLでは<book>や<price>のように用途に合わせて自由にタグ名を定義できます。つまりXML自体は「タグの書き方のルール」を定めるだけで、どんなタグを使ってどんなデータを表すかは利用者が決めます。
もうひとつ重要なのは、XMLが人間にも機械にも読めるように設計されている点です。中身はただのテキストなので、メモ帳でも開いて内容を確認できますし、プログラムからは階層構造をたどって必要な値を取り出せます。実際にXMLがどう整形されるのかは、XMLフォーマッターツールに貼り付けて、インデントが整った読みやすい形に変換してみると分かりやすいでしょう。
XMLの構造:要素・属性・テキスト
XMLは、データを入れ子(ネスト)にして階層を表現します。基本となる部品は、要素(element)・属性(attribute)・テキスト(text)の3つです。次の例を見てみましょう。
<book id="b001">
<title>XML入門</title>
<price currency="JPY">1980</price>
</book>
- 要素:開始タグ(<title>)と終了タグ(</title>)で囲まれたひとまとまりです。要素の中にさらに要素を入れることで階層を作ります。上の例では<book>要素の中に<title>と<price>が入っています。
- 属性:開始タグの中に「名前="値"」の形で書く付加情報です。上の例の id="b001" や currency="JPY" が属性です。要素を補足する細かな情報を持たせるのに使います。
- テキスト:タグで挟まれた実際の中身の値です。「XML入門」や「1980」がテキストにあたります。
一番外側には、全体を包むルート要素(root element)がただ1つだけ存在しなければなりません。また、多くのXML文書は先頭に「<?xml version="1.0" encoding="UTF-8"?>」というXML宣言を置き、バージョンや文字コードを示します。この「要素・属性・テキスト」と「ひとつのルート要素」という考え方が、XMLの骨格になります。
整形式(well-formed)のルール
XMLには、文書として最低限守らなければならない文法ルールがあります。これらをすべて満たした文書を整形式(well-formed)と呼びます。整形式でないXMLは、多くのパーサー(解析プログラム)がエラーとして読み込みを拒否します。主なルールは次のとおりです。
- すべての要素を閉じる:開始タグには対応する終了タグが必要です。中身のない要素は「<br/>」のように自己終了タグで書きます。
- 正しく入れ子にする:タグの重なりが交差してはいけません。「<a><b>…</a></b>」のような閉じ方は不正です。
- ルート要素は1つ:文書全体を包む最上位の要素はちょうど1つでなければなりません。
- 属性値は引用符で囲む:属性の値は必ずダブルクオートまたはシングルクオートで囲みます。
- 大文字小文字を区別する:<Title>と<title>は別のタグとして扱われます。
- 特殊文字はエスケープする:「<」「&」などはそのまま書けないため、< や & のような実体参照に置き換えます。
なお、整形式は「文法的に正しい」という最低条件にすぎません。これに加えて、DTDやXML Schemaといった定義に照らして「決められた構造どおりか」まで検証されたものを妥当(valid)なXMLと呼びます。まずは整形式を満たすことが第一歩です。タグの閉じ忘れや入れ子の乱れは目視では気づきにくいので、XMLフォーマッターツールで整形しながら構造のおかしな箇所を確認すると効率的です。
HTMLとの違い
XMLとHTMLは見た目がそっくりで混同されがちですが、目的が根本的に異なります。ごく単純に言えば、HTMLは「データをどう表示するか」を、XMLは「データが何であるか」を記述するための言語です。
| XML | HTML | |
|---|---|---|
| 主な目的 | データの構造化・保存・交換 | Webページの表示 |
| タグ | 自由に定義できる | あらかじめ決まっている |
| 文法の厳密さ | 厳密(整形式必須) | 比較的寛容 |
| 大文字小文字 | 区別する | 区別しない |
HTMLは<h1>や<table>など意味と表示の決まったタグを使ってブラウザに見た目を伝えます。閉じタグの省略などにもある程度寛容で、多少崩れていても表示しようとします。一方XMLは、タグ名を自分で決められる代わりに文法のルールが厳格で、整形式でなければ読み込み自体が拒否されます。XMLが扱うのはあくまでデータの中身と構造であり、それをどう見せるかは別の仕組み(XSLTやアプリ側の処理)に委ねます。
なお、両者の橋渡しとしてXHTMLという、HTMLをXMLの厳密な文法に従って書き直した規格も存在します。これは「HTMLの内容を、XMLのルールで記述したもの」と捉えると理解しやすいでしょう。
何に使うのか:設定・データ交換・RSS・SVG
XMLは「構造化されたテキスト」という汎用性の高さから、現在もさまざまな場面で使われています。代表的な用途を見てみましょう。
1. 設定ファイル
多くのアプリケーションやフレームワークが、動作の設定をXML形式で保存します。階層構造でまとまった設定を表現でき、人間が開いて編集しやすいためです。Androidアプリのレイアウト定義やビルドツールの設定など、身近なところで広く使われています。
2. システム間のデータ交換
異なる企業やシステムの間でデータをやり取りする際、特定の製品に依存しないXMLは共通フォーマットとして重宝されてきました。電子文書の標準であるオフィス文書の内部形式や、企業間の取引データ、金融・行政の各種フォーマットなど、信頼性が重視される分野で今も現役です。
3. RSS / SVG など
ニュースやブログの更新情報を配信するRSSはXMLで記述されています。また、拡大しても劣化しないベクター画像形式のSVGも、その実体はXMLで図形を定義したテキストです。このように、XMLは多くの身近な技術の土台になっています。配信や設定で受け取ったXMLが読みにくいときは、XMLフォーマッターツールで整形すると構造を把握しやすくなります。
JSONとの比較
近年、特にWeb APIの分野ではXMLに代わってJSON(JavaScript Object Notation)が広く使われるようになりました。どちらも構造化データを表すテキスト形式ですが、性格が異なります。
| XML | JSON | |
|---|---|---|
| 書き方 | タグで囲む | 波かっこと配列で表す |
| 冗長さ | タグの分だけ長くなりがち | 簡潔で軽量 |
| 属性・コメント | 属性やコメントを持てる | 属性なし・標準でコメント不可 |
| 主な用途 | 文書・設定・厳密なデータ交換 | Web APIのデータ通信 |
JSONはタグの開始・終了を書かない分だけ記述が簡潔で、データ量が小さく、JavaScriptをはじめ多くの言語でそのままオブジェクトとして扱いやすいのが強みです。そのため、ブラウザとサーバーが頻繁にデータをやり取りするWeb APIでは、今やJSONが主流です。
一方XMLは、属性やコメントを書ける、スキーマで厳密に構造を検証できる、名前空間で語彙の衝突を避けられるなど、大規模で厳密な文書やデータ交換に強みがあります。RSSやSVG、オフィス文書のように「既にXMLで成り立っている世界」も多く、今後もなくなることはありません。どちらが優れているという話ではなく、用途に応じて使い分けるのが正解です。XMLとJSON、さらにYAMLの見た目の違いを比べたいときは、JSON/YAML変換ツールで同じデータを別形式に変換して見比べてみると、それぞれの特徴がつかみやすくなります。
XMLは、自由に定義できるタグと厳密な文法によって、データに意味と階層を与える基礎技術です。まずは手元のXMLをXMLフォーマッターツールで整形して構造を眺め、必要に応じてJSON/YAML変換ツールで他の形式と比べてみてください。実際に触れて見比べることが、理解への近道です。
なお本記事は一般的な情報の提供を目的としたものです。XMLの仕様やスキーマ、関連規格は更新されることがあり、実際のシステムで採用する際の最適解は要件によって変わります。最新の公式仕様やドキュメントを確認したうえで判断してください。
よくある質問
XMLとは何ですか?
XML(Extensible Markup Language、拡張可能なマークアップ言語)とは、データをタグで囲んで構造化するためのテキスト形式です。用途に合わせて自由にタグ名を定義でき、特定のソフトや言語に依存しないため、システム間のデータ交換や設定ファイルの共通フォーマットとして広く使われてきました。中身はただのテキストなので、人間にも機械にも読めるのが特徴です。
XMLとHTMLは何が違いますか?
HTMLは「データをどう表示するか」を記述するためのもので、使えるタグがあらかじめ決まっています。一方XMLは「データが何であるか」を記述するためのもので、タグ名を自由に定義できます。またXMLは文法が厳格で整形式(well-formed)でなければ読み込みが拒否され、大文字小文字も区別します。HTMLは比較的寛容です。
整形式(well-formed)なXMLとは何ですか?
整形式とは、XMLの基本的な文法ルールをすべて満たした文書のことです。すべての要素を閉じる、正しく入れ子にする、ルート要素は1つだけ、属性値は引用符で囲む、特殊文字はエスケープする、といったルールがあります。これを満たさないXMLは多くのパーサーがエラーとして読み込みを拒否します。さらにスキーマで構造まで検証したものは妥当(valid)なXMLと呼ばれます。
XMLとJSONはどちらを使うべきですか?
優劣ではなく用途次第です。JSONは記述が簡潔で軽量、多くの言語でそのまま扱いやすいため、Web APIのデータ通信で主流になっています。XMLは属性やコメントを書け、スキーマで厳密に検証でき、RSSやSVGなど既存の世界も多いため、大規模で厳密な文書やデータ交換に向きます。要件に応じて使い分けるのが正解です。
XMLフォーマッターツールに貼り付けたデータはサーバーに送信されますか?
WAZA TOOLSのXMLフォーマッターツールやJSON/YAML変換ツールはすべてブラウザ内で処理され、入力したデータがサーバーに送信・保存されることはありません。スマートフォンでも利用でき、何度でも無料でXMLの整形や変換ができます。