Введение

Разделитель секций в языках разметки SGML и XML. Термин CDATA, означающий символьные данные, используется для различных, но взаимосвязанных целей в языках разметки SGML и XML. Этот термин указывает на то, что определенная часть документа представляет собой общие символьные данные, а не несимвольные данные или символьные данные с более конкретной, ограниченной структурой.

Разделы CDATA в XML

В XML-документе или внешней сущности секция CDATA – это фрагмент содержимого элемента, предназначенный для буквальной интерпретации как текстовые данные, а не как размеченный контент. Секция CDATA является лишь альтернативным синтаксисом для представления символьных данных; семантической разницы между символьными данными в секции CDATA и символьными данными в стандартном синтаксисе, где, например, "<" и "&" представляются как "&lt;" и "&amp;" соответственно, нет.

Использование разделов CDATA

Новые авторы XML-документов часто неправильно понимают назначение секции CDATA, ошибочно полагая, что она предназначена для "защиты" данных от интерпретации как обычные символьные данные при обработке. Некоторые API для работы с XML-документами и предлагают возможности независимого доступа к секциям CDATA, но эти возможности являются дополнительными и не входят в стандартные требования систем обработки XML, и всё равно не меняют подразумеваемого значения данных. Символьные данные остаются символьными данными, независимо от того, представлены они через секцию CDATA или обычную разметку. Секции CDATA полезны для включения XML-кода в качестве текстовых данных внутри XML-документа. Например, если требуется сверстать книгу с использованием XSL, объясняющей применение XML-приложения, то XML-разметка, которая должна отображаться в самой книге, будет записана в исходном файле в секции CDATA.

Проблемы с кодированием

В текстовых данных любой символ Unicode, отсутствующий в кодировке, указанной в заголовке <?xml ?>, может быть представлен числовой ссылкой на символ &#nnn;. Однако текст внутри секции CDATA строго ограничен символами, доступными в данной кодировке. Поэтому программное использование секции CDATA для заключения данных, которые потенциально могут содержать символы "&" или "<", может привести к проблемам, если эти данные содержат символы, которые невозможно представить в указанной кодировке. В зависимости от реализации кодировщика, эти символы могут быть потеряны, заменены на числовые ссылки &#nnn; или привести к ошибке кодирования. Но они не будут сохранены. Другая проблема заключается в том, что XML-документ может быть транскодирован из одной кодировки в другую при передаче. При преобразовании XML-документа в более ограниченный набор символов, например ASCII, символы, которые больше нельзя представить, преобразуются в числовые ссылки &#nnn; для сохранения данных без потерь. Однако внутри секции CDATA эти символы не могут быть представлены вообще и должны быть удалены или заменены на эквивалентные, что изменяет содержимое секции CDATA.