Определение элементов в XML DTD

В 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", либо не содержать их вообще.