XML文字エスケープとCDATAセクション
XMLの文字エスケープルールを学びます。5つの定義済みエンティティ、数値文字参照、CDATAセクション、XML属性と要素コンテンツのエスケープの違いを解説します。
詳細な説明
XML文字のエスケープ
XMLでは、マークアップとして解釈されることを防ぐために特定の文字のエスケープが必要です。ルールはHTMLと似ていますがより厳格です — XMLパーサーはエラーに寛容ではなく、不正なドキュメントを完全に拒否します。
5つの定義済みエンティティ
XMLはちょうど5つの名前付きエンティティを定義しています:
& → &(アンパサンド)
< → <(小なり)
> → >(大なり)
" → "(ダブルクォート)
' → '(アポストロフィ/シングルクォート)
HTMLとは異なり、XMLは © や — のような文字の名前付きエンティティを定義していません。数値参照を使用するか、DTDでカスタムエンティティを定義する必要があります。
数値文字参照
XMLはあらゆるUnicodeコードポイントに対して10進数と16進数の参照をサポートします。
要素コンテンツ vs 属性値
要素コンテンツでは & と < のエスケープが必須です。属性値ではさらにクォートデリミタのエスケープも必要です。
CDATAセクション
CDATAセクションでは、終了シーケンス ]]> を除きエスケープなしのテキストが許可されます。CDATAはコード、SQL、多くの特殊文字を含むコンテンツの埋め込みに特に有用です。
処理命令とコメント
処理命令(<? ?>)とコメント(<!-- -->)内ではエンティティ参照は処理されません。コメント内では -- シーケンスがXML仕様により禁止されています。
XML vs HTMLのエンティティ処理
HTML5パーサーは寛容で、エスケープされていないアンパサンドやセミコロンの欠落からリカバリします。XMLパーサーは整形式エラーで停止します。この厳格さにより、XMLエスケープは完全かつ正確でなければなりません。
ユースケース
XMLエスケープは、SOAPメッセージの生成、RSS/Atomフィードの構築、SVGグラフィックスの作成、XSLTスタイルシートの構築、Office XML形式(DOCX、XLSX)の操作、Androidリソースファイルの生成、Maven POMファイルの構築、XML形式でデータを交換するあらゆるシステムで必要です。