Вопрос

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

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

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

Обновлять:На самом деле я добавил определение 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 < и & (и ' или " в значениях атрибутов) должны быть экранированы, иначе они будут интерпретированы как разметка.Сущности также будут расширены.

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

PCDATA — анализируемые символьные данные

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

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

  • 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 предваряется хешем (также известным как «хэштег» или октоторп) просто по историческим причинам.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top