Объявления типов элементов
В валидном XML-документе нужно полностью объявить тип каждого элемента, который используется в документе, в объявлении типа элемента. Оно должно содержать имя типа элемента и допустимое содержание
Объявление типа элемента имеет следующую обобщенную форму записи:
<!ELEMENT Имя опись_содержимого>
Имя - имя объявляемого типа элемента.
опись_содержимого- определяет, что может содержать элемент и его модель можно задать четырьмя способами:
<!DOCTYPE SONG [ <!ELEMENT SONG (TITLE, ISPOLNITEL, LONG)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT ISPOLNITEL (#PCDATA)> <!ELEMENT LONG (#PCDATA)> ]>
Это объявление означает, что элемент SONG должен иметь один элемент TITLE, один элемент ISPOLNITEL и один элемент LONG, причем только в этом порядке. Пропуск дочернего элемента или использование одного и того же типа дочернего элемента более одного раза не допускается.
<!DOCTYPE SONG [ <!ELEMENT SONG (TITLE | ISPOLNITEL | LONG)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT ISPOLNITEL (#PCDATA)> <!ELEMENT LONG (#PCDATA)> ]>
Это объявление означает, что элемент SONG должен иметь либо один элемент TITLE, либо один элемент ISPOLNITEL и либо один элемент LONG, но ни какие два одновременно.
Любую из этих моделей можно изменить, используя следующие знаки:
? | Ни одного или один из предшествующих элементов |
+ | Один или несколько из предшествующих элементов |
* | Ни одного или несколько из предшествующих элементов |
Примеры:
<!DOCTYPE SONG [ <!ELEMENT SONG (TITLE+, ISPOLNITEL?, LONG)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT ISPOLNITEL (#PCDATA)> <!ELEMENT LONG (#PCDATA)> ]>
Это объявление означает, что элемент SONG должен иметь один или более элементов TITLE, после него можно включить, а можно и не включать один элемент ISPOLNITEL и затем нужно включить обязательно один элемент LONG.
Другой пример:
<!DOCTYPE SONG [ <!ELEMENT SONG (TITLE*| ISPOLNITEL | LONG)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT ISPOLNITEL (#PCDATA)> <!ELEMENT LONG (#PCDATA)> ]>
Это объявление означает, что элемент SONG должен иметь несколько или ни одного элемента TITLE, либо один дочерний элемент ISPOLNITEL, либо один дочерний элемент LONG.
Можно используя эти знаки модифицировать все содержимое модели, помещая знак после скобки.
Пример:
<!DOCTYPE SONG [ <!ELEMENT SONG (TITLE | ISPOLNITEL | LONG)+> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT ISPOLNITEL (#PCDATA)> <!ELEMENT LONG (#PCDATA)> ]>
Такое объявление дает возможность включить один или несколько дочерних элементов любого из этих трех типов в любом порядке.
Можно формировать сложные модели содержимого путем вложения выборочной модели содержимого внутрь последовательной модели, либо последовательной модели в выборочную.
Пример:
<!DOCTYPE SONG [ <!ELEMENT SONG(STIL, (TITLE | ISPOLNITEL | LONG))> <!ELEMENT STIL (#PCDATA)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT ISPOLNITEL (#PCDATA)> <!ELEMENT LONG (#PCDATA)> ]>
Элемент SONG должен иметь один элемент STIL, после него должен идти один элемент TITLE или один элемент ISPOLNITEL или один элемент LONG.
Формы модели содержимого:
Пример:
<!DOCTYPE SONG [ <!ELEMENT SONG(#PCDATA | ISPOLNITEL)*> <!ELEMENT ISPOLNITEL (#PCDATA)> ]>
В примере элемент SONG может содержать символьные данные плюс ни одного или несколько дочерних элементов ISPOLNITEL.