はじめに
データの世界では「どう見せるかより、どう伝えるか」が重要だ。
XML はそのために生まれた “意味ごとデータを包装する” マークアップ言語 である。
HTML が “画面に表示される文章を装飾する言語” だとすれば、
XML は “データの構造や意味を正確に表現する言語” と言える。
1. XML はどんなもの?
XML は次のような特徴を持つ:
- タグ()を自由に定義できる
- 階層構造(ツリー構造)でデータを整理できる
- 人間にも機械にも読みやすい
- 拡張可能(Extensible)で用途が広い
たとえば、以下はごく普通の XML 文書だ:
<?xml version="1.0" encoding="UTF-8"?>
<user id="1">
<name>Anna</name>
<age>21</age>
<languages>
<language>Japanese</language>
<language>Chinese</language>
</languages>
</user>
読むだけで意味がわかる。
タグが “データの意味” を担保しているからだ。
2. XML を構成する要素
XML は以下のパーツでできている:
要素(Element)
タグで囲まれた部分のこと。
例:<name>Anna</name>
属性(Attribute)
要素に追加情報を付けるためのラベル。
例:<user id="1">
テキスト(Character Data)
要素の中の実データ。
例:Anna
宣言(XML Declaration)
XML 文書のメタ情報。
例:<?xml version="1.0" encoding="UTF-8"?>
3. XML はどこで使われている?
「まだ XML なんて使うの?」と思う人もいるが、実は超現役だ。
-
Android 開発
Manifest、レイアウト、権限定義など、XML だらけ。 -
業務システムのデータ交換
銀行・保険・官公庁など「堅牢さ重視」の領域で強い。 -
SOAP / Web Services
レガシーな API だが、現在も多くの企業で使われている。 -
Office ファイル(docx / xlsx)
内部は全部 XML の集合体。 -
設定ファイル
Maven の pom.xml なども XML。
XML は「堅くて信頼度高い場面」で好まれる傾向がある。
4. JSON と何が違うの?
近年は JSON が主流だが、XML もまだ健在。
| 観点 | XML | JSON |
|---|---|---|
| 構造 | タグで表現 | キーと値 |
| 規模 | 従来の大規模システム向け | Web / モバイル向け |
| 表現力 | 高い(属性・DTD・Schema など) | シンプル |
| バリデーション | 強力(XSD, DTD) | JSON Schema |
| 人間の読みやすさ | 賛否両論 | 比較的読みやすい |
XML は「厳格な構造が必要な大規模・ミッションクリティカルな領域」に強い。
5. DTD や XML Schema とは?
XML には「文法チェック機能」がある。
DTD(Document Type Definition)
XML の構造ルールを定義する文書。
例:
<!DOCTYPE user [
<!ELEMENT user (name, age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
XSD(XML Schema Definition)
DTD より強力で、型チェックもできる。
6. XML が持つ“闇の一面” —— XXE 脆弱性
便利な機能は武器にもなる。
XML の外部参照機能を悪用した攻撃が XXE(XML 外部実体攻撃) だ。
例:
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>&xxe;</root>
パーサがこれを展開してしまうと、
サーバ上のファイル内容が攻撃者に漏れてしまう。
7. XML のメリットまとめ
- 拡張し放題
- 構造が厳格で機械に優しい
- バリデーションが強力
- 長期運用システムに向く
- 文書型アプリケーションに強い(Office など)
8. XML のデメリット
- JSON より重い
- 記述が長くなる
- パーサ設定を誤ると XXE などの脆弱性
- 初見で少し堅苦しい
9. まとめ:XML は“意味を保ったままデータを運ぶ”ための言語
XML は、データの意味・構造・整合性を保ったまま交換するための強力な仕組み。
JSON が軽量で柔らかいなら、XML は堅牢で厳格な職人。
現代でも Android、企業システム、設定ファイルなど、いたるところで動いている。