В DTD элементы определяются при помощи декларации ELEMENT.
Декларация элементов
В DTD элементы XML определяются при помощи декларации элементов следующим образом:
<!ELEMENT имя-элемента категория>
или
<!ELEMENT имя-элемента (содержимое-элемента)>
Пустые элементы
Пустые элементы декларируются при помощи ключевого слова категории EMPTY:
<!ELEMENT имя-элемента EMPTY>
Пример:
<!ELEMENT br EMPTY>
XML пример:
<br />
Элементы с анализируемыми символьными данными
Элементы, содержащие только анализируемые символьные данные, декларируются при помощи ключевого слова #PCDATA в скобках:
<!ELEMENT имя-элемента (#PCDATA)>
Пример:
<!ELEMENT from (#PCDATA)>
Элементы с любым контентом
Элементы, декларированные с ключевым словом категории ANY, могут содержать любую комбинацию анализируемых данных:
<!ELEMENT имя-элемента ANY>
Пример:
<!ELEMENT note ANY>
Элементы с потомками (последовательности)
Элементы с одним или более потомком декларируются с именем дочернего элемента в скобках:
<!ELEMENT имя-элемента (потомок1)>
или
<!ELEMENT имя-элемента (потомок1,потомок2,...)>
Пример:
<!ELEMENT note (to,from,heading,body)>
Когда потомки декларируются в последовательности разделенные запятыми, они должны появляться в том же самом порядке. В полной декларации дочерние элементы также должны быть декларированы. Кроме этого, дочерние элементы также могут иметь потомки. Ниже представлена полная декларация элемента "note":
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Декларация единичного элемента
<!ELEMENT имя-элемента (имя-потомка)>
Пример:
<!ELEMENT note (message)>
В приведенном выше примере декларируется, что элемент "note" должен содержать только один дочерний элемент "message".
Декларация минимум одного элемента
<!ELEMENT имя-элемента (имя-потомка+)>
Пример:
<!ELEMENT note (message+)>
Знак + в приведенном выше примере декларирует, что элемент "note" должен содержать один или более дочерних элементов "message".
Декларирование от нуля и больше элементов
<!ELEMENT имя-элемента (имя-потомка*)>
Пример:
<!ELEMENT note (message*)>
Знак * в вышеприведенном примере декларирует, что элемент "note" может содержать сколько угодно дочерних элементов "message", либо не содержать их вообще.
Декларирование от нуля до одного элемента
<!ELEMENT имя-элемента (имя-потомка?)>
Пример:
<!ELEMENT note (message?)>
Знак ? в вышеприведенном примере декларирует, что элемент "note" может содержать только один дочерний элемент "message", либо не содержать его вообще.
Декларирование альтернативных элементов
<!ELEMENT note (to,from,header,(message|body))>
В вышеприведенном примере декларируется, что элемент "note" должен содержать элементы "to", "from", "header" и либо элемент "message", либо элемент "body".
Декларирование смешанного контента
<!ELEMENT note (#PCDATA|to|from|header|message)*>
В приведенном выше примере декларируется, что элемент "note" может содержать сколько угодно анализируемых символьных данных, элементов "to", "from", "header" или "message", либо не содержать их вообще.