Объявления типов элементов

В валидном XML-документе нужно полностью объявить тип каждого элемента, который используется в документе, в объявлении типа элемента. Оно должно содержать имя типа элемента и допустимое содержание

Объявление типа элемента имеет следующую обобщенную форму записи:

<!ELEMENT Имя опись_содержимого>

Имя - имя объявляемого типа элемента.

опись_содержимого- определяет, что может содержать элемент и его модель можно задать четырьмя способами:

1. Пустое содержимое (EMPTY).

Элемент должен быть пустым.

2. Любое содержимое (ANY).

Любое допустимое для этого типа содержимое.

3. Содержимое элемента (также называемое дочернее содержимое).

Элемент может содержать дочерние элементы, но не может содержать непосредственно символьные данные. Его модель может иметь одну из следующих форм:

Любую из этих моделей можно изменить, используя следующие знаки:
? Ни одного или один из предшествующих элементов
+ Один или несколько из предшествующих элементов
* Ни одного или несколько из предшествующих элементов

Примеры:

 <!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.

4. Смешанное содержимое.

Может содержать любое количество смешанных данных. Если в объявлении заданы дочерние элементы, элемент может содержать любые из них в любом порядке и количестве.

Формы модели содержимого:

В примере элемент SONG может содержать символьные данные плюс ни одного или несколько дочерних элементов ISPOLNITEL.