Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4. XML.doc
Скачиваний:
13
Добавлен:
17.02.2016
Размер:
266.24 Кб
Скачать
    1. ДобавлениеDtd

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

<!DOCTYPE Имя DTD>

Здесь Имя указывает на имя Элемента. Например, объявление типа документа, рассмотренного в предыдущем разделе, может выглядеть следующим образом:

<!DOCTYPE INVENTORY DTD>

Здесь DTD следует заменить реальным содержимым.

    1. Форма записи объявления типа элемента (dtd)

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

Здесь Имя есть имя объявляемого типа элемента. Опись_содержимого - это описание содержимого, которое определяет, что может содержать элемент.

    1. Задание содержимого элемента

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

Рассмотрим следующий пример XML-документа, описывающий одну книгу:

<?xml version="1.0"?>

<!DOCTYPE BOOK

[

<!ELEMENT BOOK (TITLE, AUTHOR)>

<!ELEMENT TITLE (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

]

>

<BOOK>

<TITLE>The Scarlet Letter</TITLE>

<AUTHOR>Nathaniel Hawthorne</AUTHOR>

</BOOK>

Модель содержимого может иметь одну из следующих форм:

  • Последовательная;

  • Выборочная.

      1. Последовательная модель содержимого элемента

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

<!ELEMENT BOOK (TITLE, AUTHOR, PAGES)>

Соответственно, следующий элемент будет валидным:

<BOOK>

<TITLE>The Adventures of Huckleberry Finn</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<PAGES>298</PAGES>

</BOOK>

А следующий не будет валидным из-за того, что порядок дочерних элементов не соответствует объявленному:

<BOOK>

<AUTHOR>Mark Twain</AUTHOR>

<TITLE>The Adventures of Huckleberry Finn</TITLE>

<PAGES>298</PAGES>

</BOOK>

      1. Выборочная модель содержимого элемента

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

<!ELEMENT FILM (STAR | NARRATOR | INSTRUCTOR) >

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

<FILM >

<STAR>Morgan Attenbury</STAR>

</FILM>

<FILM >

< NARRATOR >Bertram Wooster</ NARRATOR >

</FILM>

<FILM >

< INSTRUCTOR >Stinker Pike</ INSTRUCTOR >

</FILM>

Следующий элемент не будет валидным, поскольку может содержать только один из дочерних элементов

<FILM ><!--Неправильный элемент!-- >

<STAR>Morgan Attenbury</STAR>

< NARRATOR >Bertram Wooster</ NARRATOR >

</FILM>

Вы можете изменить любую из этих форм модели содержимого, используя знак вопроса (?), знак плюс (+), и звездочку (*), значения которых описаны в таблице 1.

Таблица 1 – Значения символов, задающих опись содержимого элемента

Символ

Значение

?

Ни одного или один из предшествующих элементов

+

Один или несколько из предшествующих элементов

*

Ни одного или несколько из предшествующих элементов

Например, следующее объявление означает, что элемент BOOK должен иметь один дочерний элемент TITLE, один или несколько элементов AUTHOR и что дочерний элемент PAGES является необязательным:

<!ELEMENT BOOK (TITLE, AUTHOR+, PAGES?)>

Соответственно, каждый из следующих элементов будет правильным:

<BOOK>

<TITLE>The Adventures of Huckleberry Finn</TITLE>

<AUTHOR>Mark Twain</AUTHOR>

<PAGES>298</PAGES>

</BOOK>

<BOOK>

<TITLE>Moby-Dick</TITLE>

<AUTHOR>Herman Melville</AUTHOR>

<AUTHOR>Nathaniel Hawthorne</AUTHOR>

</BOOK>

Можно воспользоваться символами ?, + или * для модификации всей модели содержимого, помещая символы непосредственно после закрывающихся скобок:

<!ELEMENT FILM (STAR | NARRATOR | INSTRUCTOR) +>

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

<FILM >

<STAR>Morgan Attenbury</STAR>

< NARRATOR >Bertram Wooster</ NARRATOR >

</FILM>

<FILM >

<STAR>Sean Connery</STAR>

<STAR>Meg Ryan</STAR>

</FILM>

<FILM >

< INSTRUCTOR >Stinker Pike</ INSTRUCTOR >

</FILM>

Можно формировать более сложные модели содержимого путем вложения выборочной модели внутрь последовательной, либо последовательной модели в выборочную:

<!ELEMENT FILM (TITLE, CLASS, (STAR | NARRATOR | INSTRUCTOR) )>