【えっくすえむえる】

XML とは?

最終更新:
💡 タグで「階層構造のデータ」を表現する汎用マークアップ言語

タグや属性を使い、階層構造を持つ文書やデータを表すマークアップ言語。用途に合わせて要素名を定義でき、設定やデータ交換などに使われる。整形式の文書には1つのルート要素と正しい入れ子構造が必要だ。

📌 このページのポイント
XML:タグと属性から階層へ XML文書 <book id="1"><title>XML</title><price>1500</price></book> 木として扱う book id="1" title XML price 1500 要素の親子関係と属性を表す
book要素の属性idと、子要素title・priceの例。図の線は要素の親子関係を示す。
ひよこ ひよこ
XMLはHTMLの厳格版なの?
ペンギン先生 ペンギン先生
XMLはSGMLを制限した形式として設計された、文書やデータの構造を表す言語だよ。タグがある見た目は似ているけれど、XMLでは用途に合わせた要素名を定義する。図のbookの中にはtitleとpriceがあり、本の情報を階層で表しているんだ。
ひよこ ひよこ
タグは自由に書けばいい?
ペンギン先生 ペンギン先生
名前を決められても、構文の規則は守るよ。ルート要素は1つで、開始タグと終了タグを対応させ、要素を正しく入れ子にする。内容のない要素は<item />のように書けるし、属性値は引用符で囲む。名前や構造の規則を取り決めれば、受け手も内容を扱いやすくなるね。
ひよこ ひよこ
どんな用途で使われるの?
ペンギン先生 ペンギン先生
たとえばMavenのpom.xmlは、プロジェクトの依存関係やビルド設定を記述するXMLファイルだよ。文書の構造やデータ交換にも使える。名前空間を使うと、異なる用途で定義した同名の要素や属性を区別できるんだ。
ひよこ ひよこ
どうやって読み取るの?
ペンギン先生 ペンギン先生
XMLパーサーを使うよ。PythonのElementTreeなら、ルートや子要素、属性、文字列を木として扱える。DOMやSAXだけが選択肢ではなく、段階的に読むiterparseなどもある。ただし逐次読み込みでも木を保持することがあるので、大きな文書ではメモリの扱いも確認しよう。
ひよこ ひよこ
外から受け取ったXMLは安全?
ペンギン先生 ペンギン先生
パーサーが外部エンティティを解決すると、入力を通じてファイル参照や外部へのアクセスが起こるXXEの問題があるよ。不要なDTDや外部エンティティの読み込みを無効にするなど、使うパーサーに合った設定を確認しよう。既定値や対策は実装ごとに異なり、XXE対策だけで全リスクをなくせるわけではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「XML」って出てきたら「タグと属性で階層構造を表すマークアップ言語」と思えばだいたいOK!
📖 おまけ:英語の意味
「Extensible Markup Language」 = 拡張可能なマークアップ言語
💬 W3CのXML 1.0勧告は1998年2月に公開されたよ。SGMLを制限した形式として設計されており、単にHTMLを厳格にした言語という意味ではないんだ

参考資料

← 用語集にもどる