У чому різниця між #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, оскільки це ключове слово вказує, що елемент повинен містити дані, що піддаються аналізу - тобто будь-який текст, крім символів менше ніж ( <), більші за ( >), амперсанд ( &), quote ( ') та подвійні лапки ( ").
У наступному прикладі <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.