Раздел CDATA предназначен для того, чтобы разрешить буквальный текст, который обычно интерпретируется особым образом в документе XML. То есть что-то похожее на ссылку на сущность или что-то похожее на теги XML. Все в разделе CDATA может быть внутри допустимого XML без раздела CDATA; вам просто нужно использовать ссылки на сущности для кодирования различных специальных символов, чтобы они не обрабатывались как разметка XML, а как символьные данные, являющиеся значением тега.
Так что да, следующее абсолютно правильно, если вы намерены:
<?xml version="1.0" encoding="UTF-8" ?>
<outer>
<inner><![CDATA[©]]></inner>
</outer>
Здесь значением элемента inner
является значение ©
, которое не будет интерпретироваться анализатором XML как ссылка на сущность для символа авторского права. Вы также можете сделать следующее:
<?xml version="1.0" encoding="UTF-8" ?>
<outer>
<inner><![CDATA[<normally> this looks <like/> & xml </normally>]]></inner>
</outer>
где значение для элемента inner
равно
<normally> this looks <like/> & xml </normally>
Чтобы сделать это без раздела CDATA:
<?xml version="1.0" encoding="UTF-8" ?>
<outer>
<inner><normally> this looks <like/> &amp; xml </normally></inner>
</outer>
, который гораздо менее понятен человеку, но эквивалентен в том, что касается анализатора XML. Если вы сделали это (предполагая, что элемент inner
определен как схема или DTD как содержащий строку, а не XML), то ваш анализатор XML будет выдавать жалобу:
<?xml version="1.0" encoding="UTF-8" ?>
<outer>
<inner><normally> this looks <like/> & xml </normally></inner>
</outer>
поэтому вы используете CDATA или экранирующую сущность для защиты специальных символов от анализатора XML, чтобы клиент XML-данных мог получить значение inner
, которое содержит символы разметки XML.
Примечание. Для ясности приведенный выше пример представляет собой правильно сформированный XML, но если в схеме или DTD указано, что элемент inner
содержит xsd: string или эквивалентный, то это неверный XML-документ.
И нет, сущности HTML или XHTML, которые не определены как часть самого XML, не являются допустимыми XML, если они не определены. Ваш анализатор XML вернет ошибку.