Разница между PCDATA и CDATA в DTD

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

6 ответов


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

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

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

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

символы, такие как "


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

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

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

когда мы хотим указать, что элемент будет содержать только текст, а не дочерние элементы, мы используем ключевое слово PCDATA, потому что это ключевое слово указывает , что элемент должен содержать анализируемые символьные данные – то есть любой текст , кроме символов less-than ( ), ampersand ( & ), quote(') и double quote (").

в следующем примере, <bar> содержит CDATA. Его содержание не будет проанализировано и таким образом <test>content!</test>.

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

в SGML есть несколько моделей контента. Модель содержимого #PCDATA говорит, что элемент может содержать простой текст. "Проанализированная" часть означает, что разметка (включая PiS, комментарии и директивы SGML) в ней анализируется вместо отображения в виде необработанного текста. Это также означает, что ссылки на сущности заменяется.

другой тип модели контента, позволяющий содержание обычного текста является CDATA. В XML модель содержимого элемента не может быть неявно установлена в CDATA, но в SGML это означает, что разметка и ссылки на сущности игнорируются в содержимом элемента. Однако в атрибутах типа CDATA ссылки на сущности заменяются.

в XML #PCDATA является единственной моделью содержимого обычного текста. Вы используете его, если вы вообще хотите разрешить текстовое содержимое в элементе. Модель содержимого CDATA может использоваться явно через разметку блока CDATA в #PCDATA, но содержимое элемента не может быть определено как CDATA по умолчанию.

в DTD, тип атрибута, содержащего текст, должен быть CDATA. Ключевое слово CDATA в объявлении атрибута имеет другое значение, чем раздел CDATA в XML-документе. В разделе CDATA все символы являются законными (включая символы ,&,’ и"), за исключением тега "]]>" end.

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

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


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

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

потенциально действительно запутанная проблема это там другое " CDATA," также упоминается как отмеченные разделы. Ля маркированный участок-это часть элемента (#PCDATA) содержимое, разделенное специальные строки: закрыть его. Если вы помните, что PCDATA " анализируется характер данные, " раздел CDATA буквально то же самое, без "проанализированный."Парсеры передают контент в отмеченном разделе течению применения без икать каждое время, когда они сталкиваются со специальными персонажами

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


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

пример:

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

здесь элемент family содержит еще 2 элементы "мать" и "отец". Поэтому он разбирает дальше, чтобы получить текст матери и отца, чтобы дать значение семьи как "мама папа"

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

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

здесь ценность семьи будет <mother>mom</mother><father>dad</father>.


самое главное различие между PCDATA и CDATA является

PCDATA-в основном используется для элементов в то время как

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


CDATA (Character данные): это аналогично комментарию, но это часть документа. т. е. CDATA-это данные, это часть документа, но данные не могут быть проанализированы в XML.
Примечание: XML-комментарий опускается при анализе XML, но CDATA показывает, как это есть.

PCDATA (Pлень Character данные) :по умолчанию, все PCDATA. PCDATA-это данные, они могут быть проанализированы в XML.