DTD — Элементы
В DTD элементы объявляются с помощью объявления ELEMENT.
Объявление элементов
В DTD элементы XML объявляются со следующим синтаксисом:
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
Пустые элементы
Пустые элементы объявляются с помощью ключевого слова категории EMPTY:
<!ELEMENT element-name EMPTY>
Example:
<!ELEMENT br EMPTY>
XML example:
<br />
Элементы с проанализированными символьными данными
Элементы, содержащие только проанализированные символьные данные, объявляются с #PCDATA в круглых скобках:
<!ELEMENT element-name (#PCDATA)>
Example:
<!ELEMENT from (#PCDATA)>
Элементы с любым содержанием
Элементы, объявленные с ключевым словом категории ANY, могут содержать любую комбинацию анализируемых данных:
<!ELEMENT element-name ANY>
Example:
<!ELEMENT note ANY>
Элементы с детьми (последовательности)
Элементы с одним или несколькими дочерними элементами объявляются с именами дочерних элементов в скобках:
<!ELEMENT element-name (child1)>
or
<!ELEMENT element-name (child1,child2,...)>
Example:
<!ELEMENT note (to,from,heading,body)>
Когда дочерние элементы объявляются в последовательности, разделенной запятыми, дочерние элементы должны появляться в документе в той же последовательности. В полной декларации также должны быть объявлены дети, и дети также могут иметь детей. Полное объявление элемента «заметка»:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Объявление только одного вхождения элемента
<!ELEMENT element-name (child-name)>
Example:
<!ELEMENT note (message)>
В приведенном выше примере объявляется, что дочерний элемент «сообщение» должен встречаться один раз и только один раз внутри элемента «заметка».
Объявление минимум одного вхождения элемента
<!ELEMENT element-name (child-name+)>
Example:
<!ELEMENT note (message+)>
Знак + в приведенном выше примере объявляет, что дочерний элемент «сообщение» должен встречаться один или несколько раз внутри элемента «заметка».
Объявление нуля или более вхождений элемента
<!ELEMENT element-name (child-name*)>
Example:
<!ELEMENT note (message*)>
Знак * в приведенном выше примере объявляет, что дочерний элемент «сообщение» может встречаться ноль или более раз внутри элемента «заметка».
Объявление нуля или одного вхождения элемента
<!ELEMENT element-name (child-name?)>
Example:
<!ELEMENT note (message?)>
? sign в приведенном выше примере объявляет, что дочерний элемент «message» может встречаться ноль или один раз внутри элемента «note».
Объявление либо/или контента
<!ELEMENT note (to,from,header,(message|body))>
В приведенном выше примере объявляется, что элемент «заметка» должен содержать элемент «кому», элемент «от», элемент «заголовок» и либо элемент «сообщение», либо элемент «тело».
Объявление смешанного содержимого
<!ELEMENT note (#PCDATA|to|from|header|message)*>
В приведенном выше примере объявляется, что элемент «заметка» может содержать ноль или более вхождений проанализированных символьных данных, элементов «кому», «от», «заголовка» или «сообщения».