CDATA
CDATA (/ˈsi.deɪ.tə/) — сокращение от «character data» (в переводе с англ. — «символьные данные»). Используется для разных, но связанных между собой целей в языках разметки SGML и XML. CDATA показывает, что определённая часть документа представляет собой символьные данные, в отличие от несимвольных или символьных, но особым образом структурированных, данных.
CDATA в XML
В XML документах фрагмент, помещённый внутрь CDATA, — это часть содержания элемента, которая помечена для парсера как содержащая только символьные данные, а не разметку. CDATA — это просто альтернативный синтаксис для отображения символьных данных, нет никакой смысловой разницы между символьными данными, которые объявлены как CDATA и символьными данными, которые объявлены в обычном синтаксисе и где «<» и «>» будут представлены как «<» и «>», соответственно.
Синтаксис и интерпретация
Раздел CDATA начинается со следующей последовательности символов:
<![CDATA[
и заканчивается с первым появлением последовательности:
]]>
Все символы, заключённые между этими двумя последовательностями, интерпретируются как символы, а не как разметка или ссылки на объект. Например, в этой строке:
<sender>John Smith</sender>
открывающий и закрывающий теги «sender» будут интерпретированы как разметка. Однако, если записать её вот так:
<![CDATA[<sender>John Smith</sender>]]>
то этот код будет интерпретирован так же, как если бы было записано:
<sender>John Smith</sender>
Таким образом, теги sender будут восприниматься так же, как «John Smith», то есть как текст.
Аналогично, если в содержимом элемента появляется цифровая последовательность ð, это будет интерпретировано как простой символ Юникода 00F0. Но если эта последовательность появится в разделе CDATA, она будет разделена на 6 символов: амперсанд, знак октоторпа, цифру 2, цифру 4, цифру 0 и точку с запятой.
Использование CDATA
Новички в использовании XML часто неверно представляют назначение раздела CDATA как «защиту» от обработки данных внутри этого раздела. Некоторые API для работы с XML документами предоставляют независимый доступ к разделу CDATA, но эти возможности существуют поверх и вне обычных требований к системе обработки XML и не меняют смысл этих данных. Символьные данные — это символьные данные, независимо от того, записаны они в раздел CDATA или же с помощью обычной разметки.
Раздел CDATA полезен, когда надо написать XML код как текстовые данные внутри XML документа. Например, если надо набрать книгу про XML на XSL с примерами использования XML приложений, то встречающиеся примеры будут заключены в CDATA. Однако, CDATA не может содержать строку «]]>» и, следовательно, невозможно создавать вложенные разделы CDATA. Если текст содержит «]]>», то можно его отобразить, используя, например, несколько разделов CDATA, оканчивая один из них перед символом «>». Пример:
<![CDATA[]]]]><![CDATA[>]]>
Поэтому для того чтобы закодировать ]]> в разделе CDATA, заменяют все вхождения этого набора символов на следующее:
]]]]><