Более сложные модели содержания
Базовые типы содержания элементов, можно использовать для описания более сложных моделей содержания.
Для элементов с элементным и смешанным содержанием в скобках перечисляются элементы, которые могут вложены в определяемый. Интерпретация зависит от служебных символов, включенных в описание модели.
Например, можно определить, где и сколько раз может появиться тот или иной элемент. Для этого используется специальная система обозначений.
<!ELEMENT chapter (title,summary?,paragraphs+)>
Символ |
Имя символа |
Описание |
Операторы порядка |
||
| |
вертикальная черта |
играет роль связки "или" |
, |
запятая |
указывает, что элемент, расположенный перед запятой, должен появляться первым, а за ним следовать элемент, записанный после запятой (определяет обязательный порядок элементов) |
( ) |
круглые скобки |
служат для группировки элементов с указанием порядка их появления; все элементы, расположенные в скобках, должны быть предварительно определены |
Операторы множественности (кардинальности) |
||
? |
знак вопроса |
указывает, что перечисленные элементы являются необязательными, но если элемент указан, то он может использоваться только один раз (0 – 1) |
* |
звездочка |
указывает, что элемент может перечисляться любое количество раз или ни разу (ноль или больше, 0 – ) |
+ |
плюс |
по крайней мере, должен присутствовать один элемент, и этот элемент может использоваться более чем один раз (один или больше, (1 – ) |
|
отсутствие символов |
указывает на то, что может использоваться один и только один из элементов (1) |
(cardinal number переводится как "количественное существительное").
Совместно с группировкой моделей элементов или содержания множители позволяют формировать очень сложные структуры. Например,
<!ELEMENT FromBasket (Cherry+, (Apple|Orange)*)>
Атрибуты
Атрибуты обеспечивают дополнительную информацию об элементах XML и их содержании. Если элемент — пустой, то атрибуты могут взять на себя его информационную нагрузку. Если же в элементе есть содержание, то атрибуты, как правило, описывают или дополняют это содержание. Элемент может иметь любое количество связанных с ним атрибутов.
В проверку документа с помощью DTD на состоятельность проводится контроль атрибутов.
Для объявления списка атрибутов элемента в определениях DTD используется инструкция <!ATTLIST>. Декларация ATTLIST состоит из:
а) ключевого слова ATTLIST,
б) имени элемента, для которого определяется список атрибутов,
в) ноля или более определений атрибутов.
Для простоты чтения определение каждого атрибута располагают в отдельной строке. Определение атрибута состоит из трех частей:
1. имени атрибута, которое выбирается по тем же правилам, что и имена элементов,
2. типа принимаемых атрибутом значений,
3. наличия значения по умолчанию и, если оно есть, и декларации его типа.
Атрибут может быть приписан к одному из следующих четырех типов, выбор которых влияет на использование значения по умолчанию.
Параметры атрибута по умолчанию |
Значение |
#REQUIRED |
Атрибут обязательный, он должен быть включен в каждый экземпляр элемента, поэтому значение по умолчанию не требуется |
#IMPLIED |
Значение по умолчанию не предполагается |
#FIXED +значение |
Атрибут всегда должен принимать указанное значение. |
Значение в кавычках |
Задается значение атрибута по умолчанию |
Примером атрибута с фиксированным значением является html-атрибут checked. Если он имеется, то всегда имеет одно и то же значение: checked="checked".
Если задается значение по умолчанию, то оно указывается в кавычках в конце описания атрибута.
<!ELEMENT myElement EMPTY>
<!ATTLIST myElement
name ID #IMPLIED
att2 CDATA #FIXED "A"
att3 CDATA #REQUIRED
is_printable (yes|no) "yes"
>
