Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Разделы CDATA в XML [ править ]

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

Синтаксис и интерпретация [ править ]

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

< ! [CDATA [

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

]]>

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

<sender> Джон Смит </sender>

начальный и конечный теги «отправитель» интерпретируются как разметка. Однако код:

<! [CDATA [<sender> Джон Смит </sender>]]>

эквивалентно:

& lt; отправитель & gt; Джон Смит & lt; / отправитель & gt;

Таким образом, «теги» будут иметь тот же статус, что и «Джон Смит»; они будут рассматриваться как текст.

Точно так же, если числовая ссылка на символ &#240; появляется в содержимом элемента, она будет интерпретироваться как единственный символ Unicode 00F0 (строчная буква eth ). Но если то же самое появляется в разделе CDATA, он будет проанализирован как шесть символов: амперсанд, решетка, цифра 2, цифра 4, цифра 0, точка с запятой.

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

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

Вложенность [ править ]

Раздел CDATA не может содержать строку " ]]>", и поэтому раздел CDATA не может содержать вложенные разделы CDATA. Предпочтительный подход к использованию секций CDATA для кодирования текста, содержащего триаду " ]]>", заключается в использовании нескольких секций CDATA путем разделения каждого вхождения триады непосредственно перед " >". Например, чтобы закодировать " ]]>" , нужно написать:

<! [CDATA []]]]> <! [CDATA [>]]>

Это означает, что для кодирования " ]]>" в середине раздела CDATA замените все вхождения " ]]>" следующим:

]]]]> <! [CDATA [>

Это эффективно останавливает и перезапускает раздел CDATA.

Проблемы с кодировкой [ править ]

В текстовых данных любой символ Юникода, недоступный в кодировке, объявленной в <?xml ...?>заголовке, может быть представлен с помощью &#nnn; числовой ссылки на символы . Но текст в разделе CDATA строго ограничен символами, доступными в кодировке.

Из-за этого программное использование раздела CDATA для цитирования данных, которые потенциально могут содержать символы &"или" <, может вызвать проблемы, когда данные содержат символы, которые не могут быть представлены в кодировке. В зависимости от реализации кодировщика эти символы могут быть потеряны, могут быть преобразованы в &#nnn;символы ссылки на символ или могут вызвать сбой кодирования. Но они не будут поддерживаться.

Другая проблема заключается в том, что XML- документ можно перекодировать из одной кодировки в другую во время транспортировки. Когда XML- документ преобразуется в более ограниченный набор символов, такой как ASCII, символы, которые больше не могут быть представлены, преобразуются в &#nnn;ссылки на символы для преобразования без потерь. Но в разделе CDATA эти символы вообще не могут быть представлены, и их необходимо удалить или преобразовать в какой-либо эквивалент, изменяя содержимое раздела CDATA.

Использование CDATA в выводе программы [ править ]

Разделы CDATA в документах XHTML могут анализироваться веб-браузерами по-разному, если они отображают документ как HTML, поскольку анализаторы HTML не распознают маркеры начала и конца CDATA, а также не распознают ссылки на объекты HTML, такие как & lt; внутри тегов <script>. Это может вызвать проблемы с рендерингом в веб-браузерах и может привести к уязвимостям межсайтового скриптинга, если они используются для отображения данных из ненадежных источников, поскольку два вида парсеров не будут согласовывать, где заканчивается раздел CDATA.

Поскольку полезно иметь возможность использовать знаки «меньше» (<) и амперсанды (&) в скриптах веб-страниц и, в меньшей степени, стили, без необходимости помнить их экранирование, то маркеры CDATA обычно используются вокруг текст встроенных элементов <script> и <style> в документах XHTML. Но чтобы документ мог быть проанализирован парсерами HTML, которые не распознают маркеры CDATA, маркеры CDATA обычно закомментированы, как в этом примере JavaScript :

< script  type = "text / javascript" > // <! [CDATA [ document . написать ( "<" ); //]]> </ script >

или этот пример CSS :

< style  type = "text / css" > / * <! [CDATA [* / body  {  background-image :  url ( "marble.png? width = 300 & height = 300" )  }  / *]]> * / </ style >

Этот метод необходим только при использовании встроенных скриптов и таблиц стилей и зависит от языка. Таблицы стилей CSS, например, поддерживают только второй стиль комментирования ( / * ... * / ), но CSS также меньше нуждается в символах <и &, чем JavaScript, и поэтому меньше нуждается в явных маркерах CDATA.

CDATA в DTD [ править ]

Значение атрибута типа CDATA [ править ]

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

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

<! ATTLIST  foo  a  CDATA #  ПРЕДПОЛАГАЕТСЯ >

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

<foo  a = "1 и 2 являются & lt; & # 51; & # x0A;"  />

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

Сущность типа CDATA [ править ]

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

<DISPLAY_NAME  Attribute = "Y" > <! [CDATA [PFTEST0__COUNTER_6 __: 4: 199 :, PFTEST0__COUNTER_7 __: 4: 199:]]> </DISPLAY_NAME><SVLOBJECT> <LONG  name = ""  val = ""  INTEGER  name = ""  val = ""  LONG  name = ""  val = "" /> </SVLOBJECT>

См. Также [ править ]

  • PCDATA

Ссылки [ править ]

  1. ^ Разделы CDATA

Внешние ссылки [ править ]

  • CDATA путаница
  • Символьные данные и разметка (в XML)