- PCDATA - это текст, который будет проанализирован парсером. Теги внутри текста
будет рассматриваться как разметка, а сущности будут расширены.
- CDATA - это текст, который не будет проанализирован парсером. Теги внутри текста будут
не будет рассматриваться как разметка, и объекты не будут расширены.
По умолчанию все является PCDATA. В следующем примере, игнорируя корень, будет проанализирован, и у него не будет никакого контента, кроме одного дочернего.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
Когда мы хотим указать, что элемент будет содержать только текст, а не дочерние элементы, мы используем ключевое слово PCDATA, потому что это ключевое слово указывает, что элемент должен содержать анализируемые символьные данные, то есть любой текст, кроме символов меньше чем (<), больше чем (>), амперсанд (&), кавычка (') и двойная кавычка (").
В следующем примере bar - это CDATA, он не анализируется и содержит контент «content!».
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
В SGML есть несколько моделей контента. Модель содержимого #PCDATA говорит, что элемент может содержать простой текст. «Разобранная» часть означает, что разметка (включая PI, комментарии и директивы SGML) в ней анализируется, а не отображается как необработанный текст. Это также означает, что ссылки на сущности заменяются.
Другим типом контентной модели, допускающей текстовое содержимое, является CDATA. В XML модель содержимого элемента не может быть неявно установлена на CDATA, но в SGML это означает, что разметка и ссылки на сущности игнорируются в содержимом элемента. Однако в атрибутах типа CDATA ссылки на сущности заменяются.
В XML #PCDATA - единственная модель содержимого в виде простого текста. Вы используете его, если вы вообще хотите разрешить текстовое содержимое в элементе. Модель содержимого CDATA может использоваться явно через разметку блока CDATA в #PCDATA, но содержимое элемента может не определяться как CDATA по умолчанию.
В DTD тип атрибута, который содержит текст, должен быть CDATA. Ключевое слово CDATA в объявлении атрибута имеет другое значение, чем раздел CDATA в документе XML. В разделе CDATA все символы допустимы (включая <,>, &, ’и« символы », кроме конечного тега«]]>.
# PCDATA не подходит для типа атрибута. Используется для типа «листового» текста.
# PCDATA предваряется хешем (также известным как «хэштег» или octothorp) просто по историческим причинам.