Подтвердить что ты не робот

Что на самом деле является PCDATA и CDATA?

кажется, что свободное определение PCDATA и CDATA заключается в том, что

  • PCDATA - это символьные данные, но их следует анализировать.
  • CDATA - это символьные данные и не обрабатывается.

но потом кто-то сказал мне, что CDATA фактически разбирается или PCDATA на самом деле не разбирается... так что это немного путаница. Кто-нибудь знает, что такое реальная сделка?

Обновление. Я фактически добавил определение PCDATA в Википедии... поэтому не принимайте этот ответ слишком серьезно, так как это только мое грубое понимание этого.

4b9b3361

Ответ 1

Из WIKI:

PCDATA

Проще говоря, PCDATA означает Parsed Character Data. Это означает, что символы должны анализироваться синтаксическим анализатором XML, XHTML или HTML. (&lt; будет изменено на <, <p> будет считаться абзацем абзаца и т.д.). Сравните это с CDATA, где символы не обрабатываются с помощью анализатора XML, XHTML или HTML.

CDATA

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

Ответ 2

Анализируются как PCDATA, так и CDATA. Они являются символьными данными.

Оба они должны включать только допустимые символы. Например, если ваша кодировка документа - UTF-8, содержимое разделов CDATA должно оставаться действительным символом UTF-8. Поэтому случайные двоичные данные, вероятно, будут препятствовать правильному оформлению документа. Также разделы CDATA все еще разобраны, если только найти тег в конце раздела. Но другие подобные разметке символы, такие как <, > и и игнорируются и передаются как есть с помощью синтаксического анализатора.

OTOH в PCDATA litteral < и (и "или" в значениях атрибутов) должны быть экранированы, или они будут интерпретироваться как разметка. Объекты также будут расширены.

Итак, да, секции CDATA действительно разбираются. Я не уверен, почему вам сказали, что PCDATA не анализируется.

Ответ 4

  • PCDATA - это текст, который будет проанализирован парсером. Теги внутри текстабудет рассматриваться как разметка, а сущности будут расширены.
  • CDATA - это текст, который не будет анализироваться парсером. Теги внутри текста будут не будут рассматриваться как разметка, и объекты не будут расширены.

По умолчанию все PCDATA. В следующем примере, игнорируя корень, будет проанализирован <bar>, и у него не будет содержимого, кроме одного дочернего.

<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>

Когда мы хотим указать, что элемент будет содержать только текст, а не дочерние элементы, мы используем ключевое слово PCDATA, потому что это ключевое слово указывает, что элемент должен содержать анализируемые символьные данные, то есть любой текст, кроме символов меньше. чем (& lt;), больше чем (>), амперсанд (& amp;), кавычка (') и двойная кавычка (").

В следующем примере bar - это CDATA, он не анализируется и содержит содержимое "<test>content!</test>".

<?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 все символы являются допустимыми (включая символы & lt;,>, & и '), кроме конечного тега']]>.

#PCDATA не подходит для типа атрибута. Используется для типа "листового" текста.

#PCDATA предваряется хешем (также известным как "хэштег" или octothorp) просто по историческим причинам.

Ответ 5

Ваше первое определение правильное.

PCDATA анализируется, что означает, что сущности расширяются и этот текст рассматривается как разметка. CDATA не анализируется парсером XML.

Ответ 6

Если по умолчанию в XDTML DTD были установлены только элементы CDATA, это сэкономит много уродливых ручных переопределений... Почему блоки script содержат другие элементы? Если есть такие элементы, они обрабатываются JS-интерпретатором в действиях манипуляции с DOM, и в этом случае они должны быть полностью игнорированы парсером XML до вставки и рендеринга документа. Я полагаю, что это могло быть спроектировано для принудительного использования внешних файлов ресурсов script, что в конечном итоге хорошо.