что на самом деле такое PCDATA и CDATA?

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

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

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

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

6 ответов


из Вики:

PCDATA

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

CDATA

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


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

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

OTOH в pcdata litteral

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


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

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

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


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

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

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

когда мы хотим указать, что элемент будет содержать только текст, а не дочерние элементы, мы используем ключевое слово PCDATA, потому что это ключевое слово указывает , что элемент должен содержать анализируемые символьные данные – то есть любой текст , кроме символов less-than ( ), ampersand ( & ), quote(') и double quote (").

в следующем примере bar является CDATA, и не анализируется, и имеет содержимое " content!".

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

есть несколько моделей контента в SGML. Модель содержимого #PCDATA говорит, что элемент может содержать простой текст. "Проанализированная" часть означает, что разметка (включая PiS, комментарии и директивы SGML) в ней анализируется вместо отображения в виде необработанного текста. Это также означает, что ссылки на сущности заменяется.

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

в XML #PCDATA является единственной моделью содержимого обычного текста. Вы используете его, если вы вообще хотите разрешить текстовое содержимое в элементе. Модель содержимого CDATA может использоваться явно через разметку блока CDATA в #PCDATA, но содержимое элемента не может быть определено как CDATA по умолчанию.

в DTD типом атрибута, содержащего текст, должен быть Разделы CDATA. Ключевое слово CDATA в объявлении атрибута имеет другое значение, чем раздел CDATA в XML-документе. В разделе CDATA все символы являются законными (включая символы ,&,’ и"), кроме тега "]]>" end.

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

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


ваше первое определение является правильным.

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


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