Разделы CDATA
предназначены только для удобства авторов-людей, а не для программ. Их единственное назначение - дать людям возможность легко включать, например, пример кода SVG в страницу XHTML без необходимости тщательной замены каждого <
на & lt;
и так далее.
Это для меня предназначенное использование. Чтобы не уменьшать итоговый документ на несколько байтов, потому что вы можете использовать <
вместо & lt;
.
Также снова взяв образец сверху (код SVG в xhtml), он делает мне легко проверить исходный код файла XHTML и просто скопировать и вставить код SVG без повторной замены & lt;
на <
.
Я считаю, что CDATA был предназначен для разрешения необработанных двоичных данных: если он не содержит "]]>", тогда все будет помещено в раздел CDATA. Это отличает его от обычного XML и должно ускорить синтаксический анализ (и устранить необходимость в полнотекстовом кодировании, что дает второй прирост производительности).
На самом деле это оказалось довольно проблематичным из-за того, что люди не избегали заключительной последовательности и несколько ранних парсеров были по-разному сломаны, поэтому большинство теперь просто используют текстовую кодировку для двоичных данных, что делает раздел CDATA несколько бессмысленным, да.
РЕДАКТИРОВАТЬ: обратите внимание, что этот ответ на самом деле неверен, как Томалак указывает в комментариях. Я не удалял его, потому что знаю, что есть другие люди, которые думают, что необработанные двоичные файлы приемлемы в CDATA, и это могло бы устранить это небольшое недоразумение.
Я не знаю, насколько это будет полезно, но я добавлю и это:
Одна из проблем заключается в том, что существует несколько разных лагерей разработчиков XML, где некоторые рассматривают XML как представление данных , а некоторые рассматривают его более ориентированным на документы способом. (Прелесть XML в том, что он хорошо работает для обоих.)
Те, кто рассматривает XML как представление данных, где XML часто создается и используется инструментами, а люди участвуют только для устранения неполадок, будут не видят особой ценности в разделе CDATA, потому что он не имеет значения для их инструментов, тогда как те, кто использует XML для более документально-ориентированных целей, могут найти разделы CDATA гораздо более полезными.
Для меня CDATA - это просто еще одно слово, обозначающее ленивый. Когда я начинал с XML, я использовал его, но сейчас я всегда конвертирую данные.
Лучшая причина, которую я могу придумать, - это удобство. Особенно, когда вы используете XML как некую форму оболочки для передачи данных из одной системы в другую, в этом случае вы можете получить следующее:
Создать оболочку XML
Преобразование данных в XML
Поместите данные в оболочку
Отправить XML получателю
Разделить XML на XML + данные в XML
Преобразование данных из XML в данные
В то время как использование CDATA не потребовало бы дополнительных шагов преобразования.
Другим вариантом использования может быть встраивание данных без необходимости заботиться о различных пространствах имен во встроенных данных. Но на самом деле это не лучший способ его использования.
Я нашел еще один пример хорошего способа использования CDATA, о котором мне следовало подумать. Это тот случай, когда вам нужно встроить код в XML-файл, код не должен быть преобразован или он не будет работать и / или будет трудно читаемым.
MXML демонстрирует отличное использование тегов CDATA. Что мне нравится в MXML, так это то, что это действительный XML, что означает, что я могу делать полезные вещи, например генерировать флеш-виджеты программно из другого XML-файла с помощью преобразования и проверять MXML на соответствие схеме.
Теги CDATA полезны в MXML, поскольку они определяют блок сценария ActionScript в файле MXML, что позволяет мне комбинировать язык сценариев типа ECMA (с> и <и т.п.) и действительный XML в одном файле.
] РЕДАКТИРОВАТЬ:
Я полагаю, что еще одним вариантом объединения MXML и ActionScript было бы их объединение таким же образом, как вы объединяете HTML и Javascript, а именно заключить сценарий в тег комментария XML внутри блока сценария и выбрать использование CDATA вместо этого было сделано разработчиками компилятора MXML. Я полагаю, что причина, вероятно, больше связана с редактированием, поскольку редактор MXML проверяет ваш код на соответствие схеме, чтобы проверить синтаксис и предоставить контекстную справку, а также проанализировать ваш код ActionScript для синтаксиса и контекстной справки. Использование CDATA в редакторе позволяет делать и то, и другое, а также различать XML-комментарии и блоки сценария.
В случае сомнений проверьте спецификацию :
2.7 Разделы CDATA
[Определение: разделы CDATA могут встречаться везде, где могут встречаться символьные данные; они используются для экранирования блоков текста, содержащих символы, которые иначе были бы распознаны как разметка.
Разделы CDATA действительно полезны, когда вы хотите определить схему для некоторого XML, но частично это находится вне вашего контроля, и вы не можете гарантировать, что он будет соответствовать схеме или не нарушит XML.
Мне часто приходится работать с устаревшими системами, которые имеют выходные данные HTML, которые часто не являются правильно сформированным XHTML, Я могу прикрепить схему, которая гарантирует, что XML структурирован правильно, но имеет тег, который просто содержит раздел CDATA для размещения потенциально плохого HTML в CDATA.
Это не обычное использование, но определенно имеет его, когда вы этого не делаете.я не хочу, чтобы чужое непрочное программирование сломало вашу систему.
PCDATA - проанализированные символьные данные, что означает, что введенные данные будут проанализированы анализатором.
CDATA - данные, введенные между элементами CDATA, не будут анализироваться парсером. То есть текст внутри раздела CDATA будет проигнорирован парсером. в результате злоумышленник может отправить разрушающие данные в приложение, используя эти элементы CDATA.
Раздел CDATA начинается с и заканчивается на
]]>
.
Единственная строка, которая не может встречаться в CDATA, - это ]]>
.
Единственная причина, по которой мы используем CDATA: такой текст, как код Javascript, содержит много <
, & символов. Чтобы избежать ошибок, код сценария может быть определен как CDATA, потому что использование только <
приведет к ошибке, as синтаксический анализатор интерпретирует его как начало нового элемента. Аналогичным образом &
может интерпретироваться синтаксическим анализатором как начало символьной сущности.