В чем разница между #PCDATA
и #CDATA
в DTD ?
#PCDATA
и CDATA
. Ключевого PCDATA
слова нет и нет #CDATA
.
В чем разница между #PCDATA
и #CDATA
в DTD ?
#PCDATA
и CDATA
. Ключевого PCDATA
слова нет и нет #CDATA
.
Ответы:
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
(что было бы совершенно законно).
#
это не хэштег. Только тег, которому предшествует этот символ, является хэштегом. У самого символа есть много названий , включая «знак числа», «знак фунта» (в основном, Канада и США) или просто «хэш» (отсюда и название «хэштег»).
#PCDATA
знаком стоит по историческим причинам. Это происходит потому, что в DTD элемент может также содержать элемент с именем PCDATA
, который должен быть возможен и который будет выглядеть так <!ELEMENT foo (PCDATA)>
.
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>
.
Отсюда ( Google - ваш друг ):
В DTD PCDATA и CDATA используются, чтобы утверждать что-то о допустимом содержании элементов и атрибутов соответственно. В модели содержимого элемента #PCDATA говорит, что элемент содержит (может содержать) «любой старый текст». (За исключениями, как указано ниже.) В объявлении атрибута CDATA - это один из видов ограничений, которые вы можете наложить на допустимые значения атрибута (другие виды, все взаимоисключающие, включая ID, IDREF и NMTOKEN). Атрибут, допустимые значения которого равны CDATA, может (например, PCDATA в элементе) содержать «любой старый текст».
Потенциально действительно сбивающая с толку проблема заключается в том, что есть еще один «CDATA», также называемый отмеченными разделами. Отмеченный раздел - это часть содержимого элемента (#PCDATA), разделенная специальными строками: закрыть. Если вы помните, что PCDATA - это «проанализированные символьные данные», раздел CDATA - это буквально то же самое, без «проанализированных». Синтаксические анализаторы передают содержимое помеченного раздела нижестоящим приложениям без сбоев каждый раз, когда они сталкиваются со специальными символами, такими как <и &. Это полезно, когда вы кодируете документ, содержащий множество этих специальных символов (например, скрипты и фрагменты кода); это легче вводить данные и легче читать, чем соответствующая ссылка на сущность.
Таким образом, вы можете сделать вывод, что исключением из правила «любой старый текст» является то, что PCDATA не может включать ни один из этих неэкранированных специальных символов, ЕСЛИ они не попадают в область помеченного раздела CDATA.
CDATA ( C haracter DATA ): похож на комментарий, но является частью документа. т.е. CDATA - это данные, это часть документа, но данные не могут быть проанализированы в XML.
Примечание: комментарий XML пропускается при разборе XML, но CDATA отображается как есть.
PCDATA ( P arsed C haracter DATA ): По умолчанию, все PCDATA. PCDATA - это данные, их можно разобрать в XML.