В этой статье не процитировать какие - либо источники . ( апрель 2014 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) |
Термин CDATA , означающий символьные данные , используется для разных, но связанных целей в языках разметки SGML и XML . Этот термин указывает на то, что определенная часть документа представляет собой общие символьные данные , а не несимвольные данные или символьные данные с более конкретной ограниченной структурой.
Разделы CDATA в XML [ править ]
В XML-документе или внешнем объекте раздел CDATA - это часть содержимого элемента, размеченная для интерпретации буквально как текстовые данные, а не как размеченное содержимое. [1] Раздел CDATA - это просто альтернативный синтаксис для выражения символьных данных; нет семантической разницы между символьными данными в разделе CDATA и символьными данными в стандартном синтаксисе, где, например, " <
" и " &
" представлены как " <
" и " &
" соответственно.
Синтаксис и интерпретация [ править ]
Раздел CDATA начинается со следующей последовательности:
< ! [CDATA [
и заканчивается следующим появлением последовательности:
]]>
Все символы, заключенные между этими двумя последовательностями, интерпретируются как символы, а не как разметка или ссылки на объекты. Каждый символ воспринимается буквально, за исключением ]]>
последовательности символов. В:
<sender> Джон Смит </sender>
начальный и конечный теги «отправитель» интерпретируются как разметка. Однако код:
<! [CDATA [<sender> Джон Смит </sender>]]>
эквивалентно:
& lt; отправитель & gt; Джон Смит & lt; / отправитель & gt;
Таким образом, «теги» будут иметь тот же статус, что и «Джон Смит»; они будут рассматриваться как текст.
Точно так же, если числовая ссылка на символ ð
появляется в содержимом элемента, она будет интерпретироваться как единственный символ 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
Ссылки [ править ]
- ^ Разделы CDATA
Внешние ссылки [ править ]
- CDATA путаница
- Символьные данные и разметка (в XML)