
- •Лекция 4-02
- •4.1.5. Объявление типа документа
- •4.1.6. Определение элемента
- •4.1.7. Определение атрибутов элемента
- •4.1.7.1. Строковые атрибуты
- •4.1.7.2. Маркированные атрибуты
- •4.1.7.3. Атрибуты перечислимого типа
- •4.1.7.4. Обработка пробелов и определение языка содержимого элемента
- •Xml:space (default|preserve) 'default'
- •4.1.8. Определение сущности
- •4.1.8.1. Анализируемые сущности
- •30 Тыс. Студентов.
- •4.1.8.2. Неанализируемые сущности
- •4.1.8.3. Параметрические сущности
- •4.1.9. Определение нотации
- •Image entity #required
- •4.1.10. Условные разделы
4.1.6. Определение элемента
Определение элемента задает имя и тип содержимого элемента в следующем виде:
<!ELEMENTимя тип-содержимого>
Параметр имязадает имя элемента. В качестветипа-содержимогоэлемента может быть указано:
EMPTY, в случае, когда элемент обязан быть пустым (без содержимого);
ANY, в случае, когда элемент может содержать что угодно;
список, определяющий элементы-потомки и порядок их следования;
смешанное содержимое.
Пример:
Использование значений ANYиEMPTYв содержимом элемента:
<?xml version="1.0" encoding="Windows-1251"?>
<!DOCTYPE message [
<!ELEMENT message ANY>
<!ELEMENT text ANY>
<!ELEMENT empty-line EMPTY>
]>
определяет документ с корневым элементом message, в котором могут встречаться также элементtextиempty-line, причем элементыmessageиtextмогут содержать любые данные и любые из объявленных элементов, а элементempty-lineвсегда должен быть пустым.
Пример документа, построенного в соответствии с этим объявлением:
<message>
<empty-line/>
<text>
Поздравляю с днем рождения!
</text>
</message>
В третьем случае содержимое элемента определяется при помощи формальных правил, которые очень похожи на шаблоны, используемые в регулярных выражениях. Эти формальные правила используются для описания содержимого элемента – последовательности элементов-потомков описываемого элемента.
Количество, с которым элемент может появляться в этой последовательности, формально записывается с использованием символов-модификаторов "*", "?" и "+", которые имеют следующие значения:
a?означает, что элементa может быть пропущен в последовательности;
aозначает, что элементaдолжен присутствовать в последовательности на этом месте ровно один раз;
a*задает последовательность из нуля или более элементовa;
a+задает последовательность из одного или более элементовa.
Кроме того, содержимое может моделироваться как перечисление и выбор элементов.
Элементы перечисляются через запятую в круглых скобках, например (a, b, с)означает последовательность, состоящую из элементовa,bиc. Такая запись означает, что первым должен идти элементa, затем сразу же за ним элементbи элементc.
Выбор элемента задается аналогично перечислению, но в качестве разделителя используется символ "|". Например,(a | b | c)задает выбор одного из трех элементовa,bилиc.
При записи выбора и перечисления элементы могут также указываться с использованием модификаторов количества, например, выражение
(a* | b? | c | d+)
определяет содержимое, как последовательность, состоящую из нуля или более элементов aили одного элементаb, который может быть пропущен, или ровно одного элементаc, или последовательностью, состоящей из одного или более элементовd.
Помимо этого, формальные правила могут использовать при записи другие формальные правила, например, выражение
((a|b), (c|d))
задает содержимое, первым элементом которого является aилиb, вторым — элементcилиd.
Содержимое элементов может быть смешанным, т.е. включать только символьные данные, которые обозначаются при помощи ключевого слова #PCDATA(parsablecharacterdata– анализируемые символьные данные), либо символьные данные или элементы-потомки. Например, определение:
<!ELEMENT product (#PCDATA)>
означает, что элемент productдолжен содержать только символьные данные, а определение
<!ELEMENT format (#PCDATA|bold|italic)>
означает, что элемент formatможет содержать в качестве дочернего элемента либо символьные данные, либо элементbold, либо элементitalic.
Пример определения элементов:
<?xml version="1.0" encoding="Windows-1251"?>
<!DOCTYPE message [
<!ELEMENT message (from, to+,
(subject?, empty-line*, text)+)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT empty-line EMPTY>
<!ELEMENT text (#PCDATA)>
]>
Данное DTDопределяет, что корневой элементmessageсодержит следующие элементы:fromиto, после которых идет последовательность элементовsubject,empty-lineиtext. Элементыfromдолжен быть обязательно заданы один раз, элементtoодин раз и более, а последовательность элементовsubject,empty-lineиtextможет задаваться один или более раз. Элементsubjectможет быть задан один раз или пропущен, элементempty-lineможет быть задан один или более раз, или пропущен, а элементtextдолжен быть обязательно задан один раз.
Пример документа XML, созданного в соответствии с описанным выше DTD:
<message>
<from>me@myAddress.com</from>
<to>you@yourAddress.com</to>
<subject>Поздравление</subject>
<empty-line/>
<text>
Поздравляю с днем рождения!
</text>
<empty-line/>
<empty-line/>
<text>
Желаю здоровья и счастья!
</text>
</message>