本文へスキップ
BecomeCoder

XMLコース · 第3章 特殊な記法 · レッスン8

実体参照とCDATA ― 記号を「文字」として書く

ブラウザで完結

導入

< はタグの始まりを表す特別な記号でした。では「3 < 5」のように 不等号そのもの をデータに書きたいときはどうするのでしょう。そのまま書くとXMLがタグの始まりだと勘違いしてしまいます。ここで使うのが 実体参照(entity reference)CDATA です。

説明

XMLで特別な意味を持つ記号は、そのままでは中身に書けません。代わりに &名前; という決まった綴りに置き換えます。これを実体参照と呼びます。覚えるのは次の5つだけです。

書きたい文字XMLでの書き方(実体参照)名前の由来
<&lt;less than
>&gt;greater than
&&amp;ampersand
"&quot;quotation
'&apos;apostrophe

たとえば「3 < 5 & 4 > 2」を要素の中身に書くと、次のようになります。

<formula>3 &lt; 5 &amp; 4 &gt; 2</formula>

特に & は要注意 です。& 自体が実体参照の開始記号なので、文字としての & は必ず &amp; と書きます。「AT&T」は AT&amp;T です。

<&常に 置き換えが必要です。> " ' は文脈によっては書けますが、迷ったら実体参照にしておけば安全です。

説明(CDATAセクション)

置き換える記号がたくさんあると読みづらくなります。ソースコードやHTMLの断片のように <& を大量に含むテキスト を丸ごと入れたいときは、CDATAセクション が便利です。<![CDATA[]]> で囲んだ範囲は、中の記号がすべて ただの文字 として扱われます。

<code><![CDATA[
  if (a < b && b > 0) {
    print("a & b");
  }
]]></code>

CDATAの中では実体参照への置き換えが不要になります。唯一の制約は、中に ]]> という並びを書けない ことです(そこがCDATAの終わりだと解釈されるため)。

  • 記号が数個 → 実体参照(&lt; など)で十分。
  • コードやマークアップの塊 → CDATAで丸ごと囲むと読みやすい。

やってみよう

まずは &lt;(= <)と &amp;(= &)の2つを覚えましょう。この2つは実務でも頻出です。次章では、大規模なXMLで名前の衝突を防ぐ「名前空間」と、XMLが実際に使われている場所を見ていきます。

実際に動かしてみよう

下のエディタに XML を書くと、右側にその場で「整形式(well-formed)かどうかの判定」と「木構造ツリー」が表示されます(ブラウザ標準のXMLパーサを使うので、タグの閉じ忘れ・大文字小文字違い・ルート要素が2つ・入れ子の交差などは本物どおりエラーになります)。下の XPath 欄に式(例 `//title`)を入れると、一致したノードを一覧できます。本文の例を打ち込んだり書き換えたりして確かめましょう。

XML — 整形式チェック & 木構造プレビュー

書いた XML をその場で解析し、整形式(well-formed)かどうかの判定・木構造ツリー・XPath検索を表示する学習用ウィジェットを読み込みます(ブラウザ標準のXMLパーサ/XPathを使うため外部依存なし・軽量です)。
スクロールして表示された時点でも自動で読み込まれます。