В чем разница между #PCDATA
и #CDATA
в DTD?
Разница между PCDATA и CDATA в DTD
Ответы (6)
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
(что было бы совершенно законно).
#
не является хэштегом. Только тег, которому предшествует этот символ, является хэштегом. Сам символ имеет много названий, включая числовой знак, знак фунта (в основном Канада и США). ), или просто хеш (отсюда и название «хэштег»).
- person ; 19.09.2013
#PCDATA
стоит по историческим причинам. Это связано с тем, что в DTD элемент может также содержать элемент с именем PCDATA
, что должно быть возможно, и который будет выглядеть как <!ELEMENT foo (PCDATA)>
.
- person Mathias Müller; 23.02.2016
PCDATA — проанализированные символьные данные. Он анализирует все данные в XML-документе.
Пример:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
Здесь элемент <family>
содержит еще 2 элемента: <mother>
и <father>
. Таким образом, он выполняет дальнейший синтаксический анализ, чтобы получить текст матери и отца, чтобы дать текстовое значение семьи как "мама папа"
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 DATA): похоже на комментарий, но является частью документа. то есть CDATA — это данные, это часть документа, но данные не могут быть проанализированы в XML.
Примечание. XML-комментарий опускается при анализе XML, но CDATA отображается как есть.
PCDATA (Parsed Cсимвол DATA): по умолчанию все является PCDATA. PCDATA — это данные, их можно разобрать в XML.
#PCDATA
иCDATA
. Нет ключевого словаPCDATA
и#CDATA
. - person mzjn   schedule 29.12.2016