Первые два случая определения элемента довольно просты. Их использование может быть продемонстрировано на следующем примере:
>Декларация
>
>
>
>
>]>
определяет документ с корневым элементом >advert
, в котором могут встречаться также элементы >product
и >classified
, причем элементы >advert
и >product
могут содержать любые данные и любые из объявленных элементов, а элемент >classified
всегда должен быть пустым.
Приведем пример документа, построенного в соответствии с этой декларацией.
Листинг 1.3. Документ с декларацией типа
>
>
>
>
>
>]>
>
>
> Покупайте наших слонов!
>
>
>
В третьем случае содержимое элемента определяется при помощи формальных правил, которые очень похожи на те, которые используются в расширенных формах Бэкуса-Наура. Подобно тому, как в EBNF формальные правила используются для того, чтобы стандартизировать последовательность символов, составляющую конструкции некоторого языка, в определениях элементов они используются для описания содержимого элемента — последовательности из символьных данных и дочерних элементов.
Количество, с которым элемент может появляться в этой последовательности, формально записывается с использованием символов-модификаторов ">*
", ">?
", ">+
", которые имеют следующие значения:
□ >а?
— означает, что элемент >а
может быть пропущен в последовательности;
□ >а
— означает, что элемент >а
должен присутствовать в последовательности на этом месте ровно один раз;
□ >а*
— задает последовательность из нуля или более элементов >а
;
□ >a+
— задает последовательность из одного или более элементов >а
.
Кроме того, содержимое может моделироваться как перечисление и выбор элементов.
Элементы перечисляются через запятую в круглых скобках, например >(a, b, c)
— это последовательность, состоящая из элементов >a
, >b
, >c
. Такая запись означает, что первым должен идти элемент >a
, затем сразу же за ним элемент >b
и элемент >c
.
Выбор элемента задается аналогично перечислению, только разделительным символом является не запятая, а знак '>|
'. Например, (>a | b | c
) задает выбор одного из трех элементов >a
, >b
или >c
.
При записи выбора и перечисления элементы могут также указываться с использованием модификаторов количества.
Пример
>(a* | b? | с | d+)
определяет содержимое, как последовательность, состоящую из нуля или более элементов >a
или одного элемента >b
, который может быть пропущен,