что на самом деле PCDATA и CDATA? - PullRequest
28 голосов
/ 13 мая 2009

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

  1. PCDATA - это символьные данные, но - это для анализа.
  2. CDATA - это символьные данные, а не является для анализа.

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

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

Ответы [ 6 ]

23 голосов
/ 13 мая 2009

Из Вики:

PCDATA

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

CDATA

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

9 голосов
/ 14 мая 2009

PCDATA и CDATA анализируются. Они оба символ данные.

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

OTOH в PCDATA litteral

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

6 голосов
/ 13 мая 2009

PCDATA - проанализированные символьные данные

CDATA - (без разбора) символьные данные

http://www.w3schools.com/XML/xml_cdata.asp

3 голосов
/ 24 июля 2012
  • 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) просто по историческим причинам.

0 голосов
/ 12 марта 2013

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

0 голосов
/ 13 мая 2009

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

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

...