【えっくすえむえる】

XML とは?

💡 タグで「階層構造のデータ」を表現する汎用マークアップ言語
📌 このページのポイント
XML — マークアップ言語 <?xml version="1.0"?> <bookstore> <book id="1"> <title>XML入門</title> <price>1500</price> </book> </bookstore> XMLドキュメント ツリー構造 bookstore book title price "XML入門" "1500" タグで構造化 → 人にも機械にも読みやすいデータ形式
XMLのイメージ
ひよこ ひよこ

XMLってHTMLと何が違うの?

ペンギン先生 ペンギン先生

HTMLはWebブラウザで表示するための言語でタグが決まっている。XMLはデータ交換のための言語でタグを自由に定義できる。「Ken25」のように独自のタグ構造を作れる。

ひよこ ひよこ

JSONが普及しているのになぜXMLがまだ使われるの?

ペンギン先生 ペンギン先生

レガシーシステムとの互換性・スキーマバリデーション(XSD)・変換(XSLT)・名前空間など高度な機能があるから。大企業・官公庁・金融機関のシステムはXMLベースのものが多く、まだまだ現役。

ひよこ ひよこ

どんなファイルがXML形式なの?

ペンギン先生 ペンギン先生

拡張子.xmlのファイルはそのまま。Word(.docx)・Excel(.xlsx)・PowerPointなどのOffice形式も実はZIP+XMLで構成されている。Javaプロジェクトのpom.xml(Maven設定)・AndroidのManifest.xml・RSSフィードなど。

ひよこ ひよこ

XMLのパースって面倒って聞いたけど?

ペンギン先生 ペンギン先生

JSONに比べると冗長で扱いが面倒なのは確か。DOMパーサ(全部メモリに読み込む)とSAXパーサ(ストリーミングで処理)の2種類があって、大きなXMLファイルはDOMだとメモリ不足になる。Pythonならxml.etree.ElementTreeが比較的簡単に使えるよ。

ひよこ ひよこ

XMLの脆弱性ってあるの?

ペンギン先生 ペンギン先生

XXE(XML External Entity)攻撃が有名で、OWASP Top 10にも入っている脆弱性だよ。XMLには外部エンティティを参照する機能があって、悪意あるXMLを処理させるとサーバのローカルファイルを読み取られたりSSRFを引き起こされたりする。対策はXMLパーサの外部エンティティ処理を無効化すること。最近はAPIJSONを使うケースが多いけど、SOAPやSAMLのようなXMLベースのプロトコルを扱うときは注意が必要だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
XMLって出てきたら「タグで階層構造を表現するマークアップ言語、企業システムや設定ファイルでよく使われる」と思えばOK!
📖 おまけ:英語の意味
「eXtensible Markup Language」 = 拡張可能なマークアップ言語
💬 W3Cが1998年に標準化。HTMLの厳格版として設計されたが、今はデータ交換や設定記述の用途で使われる。JSONの台頭でWebAPIでの使用は減少
← 用語集にもどる