Таблицы определения данных DTD | Определение элементов

Определение элементов


Взглянем на что-нибудь такое, что хорошо всем известно — например, на газету. Если бы мы создавали интерактивную газету, то нам бы понадобилось обеспечить доступ к информации в онлайновом поисковом архиве. Мы могли бы также посылать газеты подписчикам по электронной почте. И отправлять ту же информацию в другие агентства новостей. Какие-то компании, возможно, захотят приобрести фотографии или рисунки.

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

<NEWSPAPER> ("ГАЗЕТА") — это корневой элемент. Рассматриваея для примера лишь один раздел в газете, мы должны помнить, что раздел — это лишь одна часть большой сущности.

<SECTION> ("РАЗДЕЛ") — это элемент второго уровня. В каждой газете должен быть по меньшей мере один раздел, и каждый раздел будет состоять из многочисленных частей, таких как статьи или графическая информация. У этого раздела могут быть такие атрибуты, как имя, расположение, схема нумерации страниц и т. д.

<headLINE> ("КОЛОНТИТУЛ") — колонтитул. Как правило, представляет собой единственное предложение, которое определяет содержание последующей статьи. Элемент <headLINE> должен всегда предшествовать элементу <STORY> и может включать другие элементы, например, подзаголовки.

<BYLINE> ("СТРОКА С ИМЕНЕМ АВТОРА") — этот элемент представляет собой имя автора статьи. Он всегда располагается перед элементом <STORY>, но после элемента <headLINE> или <SUBhead>.

<LEDE> ("ПРЕАМБУЛА") — преамбула (развернутый подзаголовок) статьи. Представляет собой отдельный элемент, который, в основном, состоит из первого абзаца элемента <STORY>. Цель преамбулы — привлечь внимание читателя к рассказу. Элемент <LEDE> следует за элементом <BYLINE>, однако расположен перед элементом <STORY>.

<STORY> ("РАССКАЗ") — это основное содержание документа. Элемент <STORY> содержит несколько атрибутов, например, имена всех авторов и редакторов рассказа, издание, в котором появился этот рассказ и дата.

<PULLQUOTES> ("ЦИТАТЫ") — это цитаты из рассказов, которые могут быть помещены рядом со статьей.

Мы не можем рассмотреть здесь все необходимые элементы газеты, однако представление о некоторых наиболее важных элементах вы получили.

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

Создадим объявление элемента, которое затем поместим в DTD. Это будет еще не DTD, а просто список элементов, поскольку мы еще не определили и даже не описали, какие атрибуты должны быть созданы. Может показаться, что мы опережаем события, ведь нам нужно определить эти элементы и их структуры прежде, чем определим атрибуты или сущности.

Мы объявляем элементы следующим образом:

<!ELEMENT имя содержание>

Поскольку известно, какие элементы содержат другие элементы, начнем с первого корневого элемента <NEWSPAPER>:

<!ELEMENT NEWSPAPER (SECTION+)>

Эта строка кода определяет элемент <NEWSPAPER>, который может содержать элемент <SECTION>. Мы добавили знак плюс (+) после имени SECTION, чтобы указать процессору XML, что действительные XML-документы могут содержать более одной секции.

Вспомнив, что нам уже известно об объявлении элементов, продолжим оформление списка элементов. На основании созданной ранее структуры:

<NEWSPAPER>
<SECTION>
<ARTICLE>
  <headLINE>
  <BYLINE>
  <LEDE>
  <STORY>
    <PULLQUOTE>

мы получим следующий список элементов:

<!ELEMENT NEWSPAPER (SECTION+)>
<!ELEMENT SECTION (ARTICLE+)>
<!ELEMENT ARTICLE (headLINE, BYLINE, LEDE, STORY)>
<!ELEMENT headLINE (CONTENT, SUBhead?)>
<!ELEMENT STORY STORYCONTENT, PULLQUOTES+)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEDE (#PCDATA)>
<!ELEMENT CONTENT (#PCDATA)>
<!ELEMENT SUBhead (#PCDATA)>
<!ELEMENT STORYCONTENT (#PCDATA)>
<!ELEMENT PULLQUOTES (#PCDATA)>

Прежде чем приступить к созданию атрибутов, которые детализируют возможности элементов, рассмотрим, что конкретно означает приведенный фрагмент кода. Во-первых, как нам уже известно, элемент <NEWSPAPER> содержит элемент <SECTION>, и количество разделов (sections), описываемых этим элементом, может быть больше одного. Во-вторых, элемент <SECTION> содержит элемент <ARTICLE>, который, в свою очередь, может включать более одной статьи (article).

Далее, в элементе <ARTICLE> первым размещается <headLINE>, за ним <BYLINE>, <LEDE> и, наконец, <STORY>. Из описания элемента <CONTENT> следует, что в элементе <headLINE> могут размещаться символьные данные, которые может обработать анализатор. Кроме того, в <headLINE> может располагаться элемент <SUBhead>, который, в свою очередь, также содержит символьные данные, которые могут обрабатываться анализатором. В описание элемента <SUBhead> включен знак вопроса (?), что означает необязательное данного элемента.

<< назад | содержание | вперед >>