CDATA

Поделись знанием:
Перейти к: навигация, поиск

CDATA (/ˈsi.deɪ.tə/) — сокращение от character data, что в переводе с английского обозначает «символьные данные». Используется для разных, но связанных между собой целей в языках разметки SGML и XML. CDATA показывает, что определённая часть документа представляет собой символьные данные, в отличие от несимвольных или символьных, но особым образом структурированных, данных.





CDATA в XML

В XML документах фрагмент, помещённый внутрь CDATA, — это часть содержания элемента, которая помечена для парсера как содержащая только символьные данные, а не разметку. CDATA — это просто альтернативный синтаксис для отображения символьных данных, нет никакой смысловой разницы между символьными данными, которые объявлены как CDATA и символьными данными, которые объявлены в обычном синтаксисе и где «<» и «>» будут представлены как «&lt;» и «&amp;», соответственно.

Синтаксис и интерпретация

Раздел CDATA начинается со следующей последовательности символов:

<![CDATA[

и заканчивается с первым появлением последовательности:

]]>

Все символы, заключённые между этими двумя последовательностями, интерпретируются как символы, а не как разметка или ссылки на объект. Например, в этой строке:

<sender>John Smith</sender>

открывающий и закрывающий теги «sender» будут интерпретированы как разметка. Однако, если записать её вот так:

<![CDATA[<sender>John Smith</sender>]]>

то этот код будет интерпретирован так же, как если бы было записано:

&lt;sender&gt;John Smith&lt;/sender&gt;

Таким образом, теги sender будут восприниматься так же, как «John Smith», то есть как текст.

Аналогично, если в содержимом элемента появляется цифровая последовательность &#240;, это будет интерпретировано как простой символ Юникода 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, заменяют все вхождения этого набора символов на следующее:

 ]]]]><![CDATA[>

CDATA в DTD

Значения атрибутов типа CDATA

В DTD файлах и в SGML и в XML атрибуту может быть назначен тип CDATA — произвольные символьные данные. Внутри атрибута типа CDATA разрешены указатели на символ и ссылки на сущность, они будут обрабатываться при чтении документа.

Например, если XML DTD содержит

 <!ATTLIST foo a CDATA #IMPLIED>

это значит, что элементы, названные foo, имеют необязательный атрибут «a» типа CDATA. В XML документе, который соответствует этому DTD, может появиться такой элемент:

 <foo a="1 &amp; 2 are &lt; &#51; &#x10;">

и XML парсер интерпретирует атрибут «a» как символьные данные «1 & 2 are < 3».

Сущности типа CDATA

SGML и XML DTD могут также включать объявления сущностей, в которых маркер CDATA используется, чтобы указать, что сущность представляет собой символьные данные. Символьные данные могут появиться в самом описании или же могут быть доступны как внешний ресурс по ссылке URI. Так или иначе в этой сущности разрешены указатели на символ и ссылки на сущность, которые будут обрабатываться при чтении документа.

Содержание элемента типа CDATA

SGML DTD может объявить содержание элемента типом CDATA. Внутри элемента типа CDATA не обрабатывается никакая разметка. Можно провести аналогию с разделом CDATA в XML, но в данном случае нет никакой специальной разметки, тип CDATA действует сразу на всё содержимое элемента.

Смотри также

Напишите отзыв о статье "CDATA"

Отрывок, характеризующий CDATA

Раевский доносил, что войска твердо стоят на своих местах и что французы не смеют атаковать более. Выслушав его, Кутузов по французски сказал:
– Vous ne pensez donc pas comme lesautres que nous sommes obliges de nous retirer? [Вы, стало быть, не думаете, как другие, что мы должны отступить?]
– Au contraire, votre altesse, dans les affaires indecises c'est loujours le plus opiniatre qui reste victorieux, – отвечал Раевский, – et mon opinion… [Напротив, ваша светлость, в нерешительных делах остается победителем тот, кто упрямее, и мое мнение…]
– Кайсаров! – крикнул Кутузов своего адъютанта. – Садись пиши приказ на завтрашний день. А ты, – обратился он к другому, – поезжай по линии и объяви, что завтра мы атакуем.
Пока шел разговор с Раевским и диктовался приказ, Вольцоген вернулся от Барклая и доложил, что генерал Барклай де Толли желал бы иметь письменное подтверждение того приказа, который отдавал фельдмаршал.
Кутузов, не глядя на Вольцогена, приказал написать этот приказ, который, весьма основательно, для избежания личной ответственности, желал иметь бывший главнокомандующий.
И по неопределимой, таинственной связи, поддерживающей во всей армии одно и то же настроение, называемое духом армии и составляющее главный нерв войны, слова Кутузова, его приказ к сражению на завтрашний день, передались одновременно во все концы войска.
Далеко не самые слова, не самый приказ передавались в последней цепи этой связи. Даже ничего не было похожего в тех рассказах, которые передавали друг другу на разных концах армии, на то, что сказал Кутузов; но смысл его слов сообщился повсюду, потому что то, что сказал Кутузов, вытекало не из хитрых соображений, а из чувства, которое лежало в душе главнокомандующего, так же как и в душе каждого русского человека.
И узнав то, что назавтра мы атакуем неприятеля, из высших сфер армии услыхав подтверждение того, чему они хотели верить, измученные, колеблющиеся люди утешались и ободрялись.


Полк князя Андрея был в резервах, которые до второго часа стояли позади Семеновского в бездействии, под сильным огнем артиллерии. Во втором часу полк, потерявший уже более двухсот человек, был двинут вперед на стоптанное овсяное поле, на тот промежуток между Семеновским и курганной батареей, на котором в этот день были побиты тысячи людей и на который во втором часу дня был направлен усиленно сосредоточенный огонь из нескольких сот неприятельских орудий.
Не сходя с этого места и не выпустив ни одного заряда, полк потерял здесь еще третью часть своих людей. Спереди и в особенности с правой стороны, в нерасходившемся дыму, бубухали пушки и из таинственной области дыма, застилавшей всю местность впереди, не переставая, с шипящим быстрым свистом, вылетали ядра и медлительно свистевшие гранаты. Иногда, как бы давая отдых, проходило четверть часа, во время которых все ядра и гранаты перелетали, но иногда в продолжение минуты несколько человек вырывало из полка, и беспрестанно оттаскивали убитых и уносили раненых.
С каждым новым ударом все меньше и меньше случайностей жизни оставалось для тех, которые еще не были убиты. Полк стоял в батальонных колоннах на расстоянии трехсот шагов, но, несмотря на то, все люди полка находились под влиянием одного и того же настроения. Все люди полка одинаково были молчаливы и мрачны. Редко слышался между рядами говор, но говор этот замолкал всякий раз, как слышался попавший удар и крик: «Носилки!» Большую часть времени люди полка по приказанию начальства сидели на земле. Кто, сняв кивер, старательно распускал и опять собирал сборки; кто сухой глиной, распорошив ее в ладонях, начищал штык; кто разминал ремень и перетягивал пряжку перевязи; кто старательно расправлял и перегибал по новому подвертки и переобувался. Некоторые строили домики из калмыжек пашни или плели плетеночки из соломы жнивья. Все казались вполне погружены в эти занятия. Когда ранило и убивало людей, когда тянулись носилки, когда наши возвращались назад, когда виднелись сквозь дым большие массы неприятелей, никто не обращал никакого внимания на эти обстоятельства. Когда же вперед проезжала артиллерия, кавалерия, виднелись движения нашей пехоты, одобрительные замечания слышались со всех сторон. Но самое большое внимание заслуживали события совершенно посторонние, не имевшие никакого отношения к сражению. Как будто внимание этих нравственно измученных людей отдыхало на этих обычных, житейских событиях. Батарея артиллерии прошла пред фронтом полка. В одном из артиллерийских ящиков пристяжная заступила постромку. «Эй, пристяжную то!.. Выправь! Упадет… Эх, не видят!.. – по всему полку одинаково кричали из рядов. В другой раз общее внимание обратила небольшая коричневая собачонка с твердо поднятым хвостом, которая, бог знает откуда взявшись, озабоченной рысцой выбежала перед ряды и вдруг от близко ударившего ядра взвизгнула и, поджав хвост, бросилась в сторону. По всему полку раздалось гоготанье и взвизги. Но развлечения такого рода продолжались минуты, а люди уже более восьми часов стояли без еды и без дела под непроходящим ужасом смерти, и бледные и нахмуренные лица все более бледнели и хмурились.