Какая польза от PCDATA в XML?

По умолчанию все в XML - это проанализированные символьные данные (#PCDATA), тогда зачем нам нужно указывать #PCDATA в DTD. Кто-нибудь, пожалуйста, объясните. Благодарю.

1 ответ

Я не уверен, какой из следующих вопросов вы задаете.

Вопрос 1: Какой смысл иметь #PCDATA ключевое слово в моделях контента?

Как уже отмечал @mzjin, #PCDATA ключевое слово используется при объявлении смешанного контента; оно (или что-то логически эквивалентное ему) необходимо для того, чтобы объявления могли различать элементы, которые могут содержать символьные данные, например

<!ELEMENT a (#PCDATA) >
<!ELEMENT p (#PCDATA | emph | term | list)* >

и элементы, которые содержат другие элементы, необязательно разделенные незначительным пробелом, но не символьные данные, такие как

<!ELEMENT text (front?, body, back?) >
<!ELEMENT a (x | y | z)* >

Когда вы говорите "по умолчанию все в XML - это проанализированные символьные данные", что вы имеете в виду? Для элементов, не объявленных в DTD, не определено объявление по умолчанию, определенное в XML. Некоторые процессоры могут предполагать объявление этой формы для необъявленных элементов, чтобы попытаться продолжить работу при чтении недействительного документа, и это может быть полезно. Но это не правило, определенное XML.

Вопрос 2: почему они называются "проанализированными" символьными данными, когда все символьные данные в XML-документе проходят через анализатор и, таким образом, обязательно "анализируются"?

Ключевое слово PCDATA Унаследованный от ISO 8879 (который определяет SGML), действительно означает "проанализированные символьные данные", но его обозначение уже, чем вы думаете. Это означает символьные данные, в которых будут распознаваться все потенциальные разделители, включая

  • <! для комментариев и разделов CDATA (и, в SGML, также для условных разделов)
  • < для стартовых меток и подошвенных меток
  • </ для конечных меток
  • &# для числовых ссылок
  • & для ссылок на сущности

Это свойство отличает проанализированные символьные данные (в техническом смысле) от двух других типов символьных данных, обозначаемых ключевыми словами. RCDATA (заменяемые символьные данные) и CDATA (только символьные данные), в котором распознаются различные наборы разделителей. (RCDATA является частью SGML, но не XML.)

Например, в разделе, отмеченном CDATA, единственным распознаваемым разделителем является конец отмеченного раздела, ]]>,

В атрибуте, объявленном CDATA, единственными распознанными разделителями являются: &, &# и закрывающая кавычка спецификации значения атрибута (либо " или же ').

В документе SGML отмеченные разделы могут встречаться с ключевым словом RCDATA; в них ссылки на сущности (&, числовые ссылки на символы (&#) и конечный разделитель отмеченного раздела (]]>) будут распознаваться, но не будут открывать разделители начального и конечного тегов (и, если я правильно читаю 8879, также не будут отмечены открытые разделители разделов) <![).

Вы можете утверждать, что терминология, выбранная в 8879, возможно, не так ясна, как могла бы быть, и что более ясная терминология могла бы быть возможной и полезной. Если это так, вы не будете первым, кто скажет это.

Другие вопросы по тегам