- •Основной критерий для валидного документа
- •Требования корректности формирования и валидности
- •Преимущества использования валидных xml-документов
- •Добавление dtd
- •Форма записи dtd
- •Создание dtd
- •Объявление типов элементов
- •Форма записи объявления типа элемента
- •Описание содержимого элемента
- •Задание содержимого элемента
- •Символ Значение
- •Задание смешанного содержимого
- •Объявление атрибутов
- •Форма записи объявления списка атрибутов
- •Тип атрибута
- •Задание маркерного типа
- •Задание нумерованных типов
- •Объявление значения по умолчанию
- •Использование внешних подмножеств dtd
- •Использование только внешнего подмножества dtd
- •Использование и внешних, и внутренних подмножеств dtd
- •Условия игнорирование разделов внешнего подмножества dtd
- •Преобразование корректно сформированного документа в валидный
- •Сделаем документ валидным
Объявление типов элементов
В валидном XML-документе вы должны полностью объявить тип каждого элемента, который вы используете в документе, в объявлении типа элемента внутри DTD. Объявление типа элемента указывает на имя типа элемента и допустимое содержимое элемента (часто описывающее порядок размещения дочерних элементов). Как единое целое, объявление типа элемента в DTD – подобно построению базы данных – задает полную логическую структуру документа. Таким образом, объявление типа элемента указывает на типы элементов, которые содержит документ, порядок следования элементов, а также описание содержимого элементов.
Форма записи объявления типа элемента
Объявление типа элемента имеет следующую обобщенную форму:
<!ELEMENT Имя опись_содержимого>
Здесь Имя есть имя объявляемого типа элемента. (Свод правил по правильному заданию имен элементов приведен в разделе "Анатомия элемента" в лекции 3.) Опись_содержимого – это описание содержимого, которое определяет, что может содержать элемент. В следующем разделе приведены различные типы описаний содержимого, которые вы можете использовать.
Ниже приведено объявление типа элемента с именем TITLE, для содержимого которого могут использоваться только символьные данные (дочерние элементы не допускаются):
<!ELEMENT TITLE (#PCDATA)>
А вот объявление для типа элемента с именем GENERAL, содержимое которого может быть любым:
<!ELEMENT GENERAL ANY>
В качестве последнего примера рассмотрим законченный XML-документ с двумя типами элементов. Объявление типа элемента COLLECTION указывает, что он может содержать один или несколько элементов CD, а объявление типа элемента CD указывает, что он может содержать только символьные данные. Заметим, что документ соответствует этим объявлениям, и, следовательно, является валидным:
<?xml version="1.0"?>
<!DOCTYPE COLLECTION
[
<!ELEMENT COLLECTION (CD)+>
<!ELEMENT CD (#PCDATA)>
<!-- Вы также можете включать комментарии в DTD. -->
]
>
<COLLECTION>
<CD>Mozart Violin Concertos 1, 2, and 3</CD>
<CD>Telemann Trumpet Concertos</CD>
<CD>Handel Concerti Grossi Op. 3</CD>
</COLLECTION>
Примечание. Вы можете объявить определенный тип элемента в данном документе только один раз.
Описание содержимого элемента
Вы можете описать содержимое элемента – т.е. заполнить часть опись_содержимого в объявлении типа элемента – четырьмя различными способами.
Пустое содержимое (EMPTY). Ключевое слово EMPTY указывает, что элемент должен быть пустым – т.е. не может иметь содержимого. Например:
<!ELEMENT IMAGE EMPTY>
Ниже приведены валидные элементы IMAGE, которые вы можете поместить в документ:
<IMAGE></IMAGE>
<IMAGE />
Любое содержимое (ANY). Ключевое слово ANY указывает, что элемент может иметь любое допустимое для этого типа содержимое. То есть элемент этого типа может содержать или не содержать дочерние элементы в любом порядке и с любым количеством вхождений, иметь или не иметь чередующиеся символьные данные. Это наиболее неопределенный тип описания содержимого и дает возможность создавать типы элементов без ограничений на их содержимое. Вот пример соответствующего объявления:
<!ELEMENT MISC ANY>
Содержимое элемента (также называемое дочернее содержимое). При таком описании типа содержимого элемент может содержать дочерние элементы, но не может непосредственно содержать символьные данные. Об этой возможности будет говориться в следующем разделе.
Смешанное содержимое. При этом описании типа содержимого элемент может содержать любое количество смешанных данных, в том числе и чередующихся с дочерними элементами определенных типов. Эта возможность будет описана далее в данной лекции.