Разница между PCDATA и CDATA в DTD
В чем разница между #PCDATA
а также #CDATA
в DTD?
7 ответов
PCDATA - проанализированные символьные данные
Анализаторы XML обычно анализируют весь текст в документе XML.
CDATA - (неразобранные) символьные данные
Термин CDATA используется для текстовых данных, которые не должны анализироваться анализатором XML.
Символы типа "<" и "&" недопустимы в элементах XML.
- 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 добавляется к хешу просто по историческим причинам.
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>
,
В DTD PCDATA и CDATA используются, чтобы утверждать что-то о допустимом содержании элементов и атрибутов, соответственно. В модели содержимого элемента #PCDATA говорит, что элемент содержит (может содержать) "любой старый текст". (За исключением исключений, как указано ниже.) В объявлении атрибута CDATA является одним из видов ограничений, которые вы можете наложить на допустимые значения атрибута (другие виды, все взаимоисключающие, включают ID, IDREF и NMTOKEN). Атрибут, допустимые значения которого - CDATA, может (как PCDATA в элементе) содержать "любой старый текст".
Потенциально действительно запутанная проблема заключается в том, что есть еще один "CDATA", также называемый отмеченными разделами. Помеченный раздел - это часть содержимого элемента (#PCDATA), ограниченная специальными строками: чтобы закрыть его. Если вы помните, что PCDATA - это "проанализированные символьные данные", раздел CDATA - это буквально то же самое, без "проанализированного". Синтаксические анализаторы передают содержимое отмеченного раздела в последующие приложения без икоты, каждый раз, когда они сталкиваются со специальными символами, такими как<и &. Это полезно, когда вы кодируете документ, который содержит много этих специальных символов (например, скрипты и фрагменты кода); это проще при вводе данных и легче при чтении, чем соответствующая ссылка на сущность.
Таким образом, вы можете сделать вывод, что исключение из правила "любой старый текст" состоит в том, что PCDATA не может содержать ни один из этих неэкранированных специальных символов, ЕСЛИ они не попадают в область, отмеченную разделом CDATA.
Самое главное различие между PCDATA и CDATA заключается в
PCDATA - в основном используется для элементов, в то время как
CDATA - используется для атрибутов XML, т.е. ATTLIST
CDATA (C haracter DATA): аналогично комментарию, но является частью документа. то есть CDATA - это данные, это часть документа, но данные не могут быть проанализированы в XML.
Примечание: XML-комментарий пропускается при разборе XML, но CDATA показывает, как есть.
PCDATA (Parased C haracter DATA): по умолчанию все является PCDATA. PCDATA - это данные, которые можно анализировать в XML.
PCDATA
PCDATA: (проанализированные символьные данные): анализаторы XML используются для анализа всего текста в документе XML. PCDATA означает данные анализируемого символа. PCDATA - это текст, который будет проанализирован парсером. Теги внутри PCDATA будут рассматриваться как разметка, а объекты будут расширены.
Другими словами, вы можете сказать, что проанализированные символьные данные означают, что синтаксический анализатор XML проверяет данные и гарантирует, что они не содержат сущность, если она содержит, которая будет заменена.
Возьмем пример:
<?xml version="1.0"?>
<!DOCTYPE employee SYSTEM "employee.dtd">
<employee>
<firstname>vimal</firstname>
<lastname>jaiswal</lastname>
<email>vimal@javatpoint.com</email>
</employee>
В приведенном выше примере элемент сотрудника содержит еще 3 элемента «имя», «фамилия» и «электронная почта», поэтому он анализирует дальше, чтобы получить данные / текст имени, фамилии и электронной почты, чтобы получить значение сотрудника как:
vimal jaiswal vimal@javatpoint.com
CDATA
CDATA: (неанализируемые символьные данные): CDATA содержит текст, который не анализируется далее в XML-документе. Теги внутри текста CDATA не обрабатываются как разметка, и объекты не будут разворачиваться.
Возьмем пример для CDATA:
<?xml version="1.0"?>
<!DOCTYPE employee SYSTEM "employee.dtd">
<employee>
<![CDATA[
<firstname>vimal</firstname>
<lastname>jaiswal</lastname>
<email>vimal@javatpoint.com</email>
]]>
</employee>
В приведенном выше примере CDATA CDATA используется сразу после элемента employee, чтобы данные / текст не анализировались, поэтому он даст значение employee:
<firstname>vimal</firstname><lastname>jaiswal</lastname><email>vimal@javatpoint.com</email>