Опубликован: 24.01.2007 | Доступ: свободный | Студентов: 9066 / 1431 | Оценка: 4.28 / 4.09 | Длительность: 20:51:00
Лекция 5:

Создание валидных XML-документов

Форма записи DTD

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

<!DOCTYPE Имя DTD>

Здесь Имя указывает на имя элемента Документ. Имя действительного элемента Документ должно в точности соответствовать имени, записанному в объявлении. (Правила, в соответствии с которыми следует выбирать имена элементов, приведены в разделе "Анатомия элемента" в "Создание корректно сформированных XML-документов" .) Например, если вы создаете объявление типа документа для документа, рассмотренного в предыдущем разделе, вам следует использовать имя INVENTORY:

<!DOCTYPE INVENTORY DTD>

(Это еще не законченное объявление типа документа. DTD следует заменить реальным содержимым.)

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

Примечание. Подобно всем ключевым словам XML, DOCTYPE должно быть набрано прописными буквами.

Создание DTD

DTD состоит из символа левой квадратной скобки ([), после которой следует ряд объявлений разметки, заканчивающихся правой квадратной скобкой (]). Объявления разметки описывают логическую структуру документа; т.е. задают элементы документа, атрибуты и другие компоненты. На рисунке 5.2 приведен законченный валидный XML-документ, содержащий DTD с единственным объявлением разметки, которое определяет один тип элемента в документе, SIMPLE.


Рис. 5.2.

DTD в этом примере документа указывает, что документ может содержать только элементы типа SIMPLE (это единственный заданный тип элемента), и что элемент SIMPLE может иметь любое допустимое для данного типа содержимое (ключевое слово ANY ).

DTD может содержать следующие типы объявлений разметки.

  • Объявления типов элементов. Они определяют типы элементов, которые может содержать документ, а также содержимое и порядок следования элементов. Об объявлениях типов элементов пойдет речь в следующем разделе.
  • Объявления списков атрибутов. Каждое объявление списков атрибутов задает имена атрибутов, которые могут быть использованы с определенным типом элемента, а также типы данных и устанавливаемые по умолчанию значения этих атрибутов. Об этих объявлениях будет рассказано далее в этой лекции.
  • Объявления примитивов. Вы можете использовать примитивы для хранения часто используемых фрагментов текста или для встраивания не относящихся к XML данных в ваш документ. Об объявлениях примитивов будет рассказано в "Определение и использование примитивов" .
  • Объявления нотаций. Нотация описывает формат данных или идентифицирует программу, используемую для обработки определенного формата. Об объявлениях нотаций пойдет речь в "Определение и использование примитивов" .
  • Инструкции по обработке. Эта тема затрагивалась в разделе "Использование инструкций по обработке" в "Добавление комментариев, инструкций по обработке и разделов CDATA" .
  • Комментарии. О них говорилось в разделе "Добавление комментариев" в "Добавление комментариев, инструкций по обработке и разделов CDATA" .
  • Ссылки на параметрические примитивы. Любой из приведенных выше компонентов может содержаться внутри параметрического примитива и добавляться путем ссылки на параметрический примитив. Смысл этого оператора станет вам понятен, когда вы познакомитесь с материалом из "Определение и использование примитивов" . Данный пункт приведен здесь для полноты картины.

Примечание. Типы DTD, обсуждаемые в этом разделе (и используемые в примерах в последующих разделах) относятся к внутреннему подмножеству DTD, поскольку полностью включаются в объявление типа данного документа. В конце этой лекции вы узнаете, как использовать DTD, размещенные в отдельном файле, и относящиеся к внешнему подмножеству DTD.

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

В валидном XML-документе вы должны полностью объявить тип каждого элемента, который вы используете в документе, в объявлении типа элемента внутри DTD. Объявление типа элемента указывает на имя типа элемента и допустимое содержимое элемента (часто описывающее порядок размещения дочерних элементов). Как единое целое, объявление типов элементов в DTD – подобно построению базы данных – задает полную логическую структуру документа. Таким образом, объявление типа элемента описывает содержимое данного типа элемента, в частности, указывает типы и порядок следования элементов, которые данный тип элемента может содержать.

Форма записи объявления типа элемента

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

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

Здесь Имя есть имя объявляемого типа элемента. (Свод правил по правильному заданию имен элементов приведен в разделе "Анатомия элемента" в "Создание корректно сформированных XML-документов" .) опись_содержимого – это описание содержимого, которое определяет, что может содержать элемент. В следующем разделе приведены различные типы описаний содержимого, которые вы можете использовать.

Ниже приведено объявление типа элемента с именем TITLE, для содержимого которого могут использоваться только символьные данные (дочерние элементы не допускаются):

<!ELEMENT TITLE (#PCDATA)>

А вот объявление для типа элемента с именем GENERAL, содержимое которого может быть любым:

<!ELEMENT GENERAL ANY>

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

<?xml version="1.0" encoding="windows-1251" ?>
<!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>
  • Дочернее содержимое элемента. При таком описании типа содержимого элемент может содержать дочерние элементы, но не может непосредственно содержать символьные данные. Об этой возможности будет говориться в следующем разделе.
  • Смешанное содержимое. При этом описании типа содержимого элемент может содержать любое количество смешанных данных, в том числе и чередующихся с дочерними элементами определенных типов. Эта возможность будет описана далее в данной лекции.
Максим Попов
Максим Попов

Почему при использовании скриптов, приведенных в курсе Основы XML

лекция Лекция 8: 

Отображение XML-документов с использованием связывания данных

не происходит связывания XLM документа с HTML?

Отображаются пустые поля. Браузер IE11

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Владислав Лычагин
Владислав Лычагин
Украина, Донецк, Донецкий Политехнический Институт, 1987