Разница между PCDATA и CDATA в DTD - PullRequest
81 голосов
/ 28 мая 2009

В чем разница между #PCDATA и #CDATA в DTD ?

Ответы [ 6 ]

70 голосов
/ 28 мая 2009

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

Синтаксические анализаторы XML обычно анализируют весь текст в документе XML.

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

Термин CDATA используется для текстовых данных, которые не должны анализироваться анализатором XML.

Символы типа "<" и "&" недопустимы в элементах XML. </p>

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

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

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

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

В следующем примере <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 все символы допустимы (включая <,>, &, ’и« символы », кроме конечного тега«]]>.

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

# PCDATA предваряется хешем просто по историческим причинам.

11 голосов
/ 28 мая 2009

Отсюда ( Google - ваш друг ):

В DTD PCDATA и CDATA используются для утверждать что-то о допустимом содержание элементов и атрибутов, соответственно. В содержании элемента модель, #PCDATA говорит, что элемент содержит (может содержать) «любой старый текст». (За исключением случаев, указанных ниже.) В объявление атрибута, CDATA один вид ограничения вы можете наложить допустимые значения атрибута (другие виды, все взаимоисключающие, включают ID, IDREF и NMTOKEN). атрибут, допустимые значения которого CDATA может (как PCDATA в элементе) содержать «любой старый текст».

потенциально очень запутанная проблема является то, что есть другой"CDATA" также упоминается как отмеченные разделы. отмеченный раздел является частью элемента (#PCDATA) содержимое с разделителями специальные строки: чтобы закрыть его. если ты помните, что PCDATA "анализируется символьные данные, "раздел CDATA является буквально то же самое, без «Разобраны». Парсеры передают контент отмеченного участка вниз по течению приложения без икоты каждый раз они встречают специальные символы как <и &. Это полезно, когда вы кодируете документ, который содержит много этих специальных символов (например, скрипты и фрагменты кода); его легче вводить данные и легче чтение, чем соответствующий объект ссылка. </p>

Таким образом, вы можете сделать вывод, что исключение правило "любой старый текст" состоит в том, что PCDATA не может включать в себя ни один из этих эскейп специальные символы, если они не падают в рамках CDATA с пометкой раздел.

9 голосов
/ 26 декабря 2016

PCDATA - проанализированные символьные данные . Он анализирует все данные в XML-документе.

Пример:

<family>
    <mother>mom</mother>
    <father>dad</father>
</family>

Здесь семейный элемент содержит еще 2 элементы «мама» и «папа» . Таким образом, это еще раз, чтобы получить текст матери и отца, чтобы дать значение семьи как «мама папа»

CDATA - неразобранные данные с данными. Это данные, которые не должен анализироваться далее в документе xml.

<family>
    <![CDATA[ 
       <mother>mom</mother>
       <father>dad</father>
    ]]>
</family>

Здесь значение семьи будет <mother>mom</mother><father>dad</father>.

3 голосов
/ 02 апреля 2013

Самое основное различие между PCDATA и CDATA -

PCDATA - в основном используется для ЭЛЕМЕНТОВ, в то время как

CDATA - используется для атрибутов XML, т.е. ATTLIST

0 голосов
/ 12 июля 2017

CDATA ( C характер ДАННЫЕ ): аналогично комментарию, но является частью документа. то есть CDATA - это данные, это часть документа, но данные не могут быть проанализированы в XML.
Примечание: Комментарий XML пропускается при синтаксическом анализе XML, но CDATA показывает, как он есть.

PCDATA ( P arsed C haracter DATA ): по умолчанию все является PCDATA. PCDATA - это данные, которые можно анализировать в XML.

...