Электронный магазин на Java и XML

       

Спецификация содержимого


В объявлении элемента вы указываете, что может появиться в качестве содержимого этого элемента Если вам нужно объявить элемент, который не должен содержать никаких данных, вы можете использовать тип EMPTY (например, <!ELMENT img EMPTY>).

Хороший пример пустого элемента — элемент HTML img Чтобы этот элемент не нарушал принципа допустимости документа XML, нужно использовать синтаксис, определенный для пустого элемента XML:

<img src="mycar.jpg" />

Если вам нужно, чтобы в элементе были только данные PCDATA, используется следующее объявление:

<!ELEMENT mymemoirs #PCDATA>

Вы можете также указать, какие типы элементов могут появиться в элементе, в каком порядке и в каком количестве, как показано в следующем примере [My memoires — мои воспоминания, title — название, author — автор, philosophizing — философствования, sad_story — грустная история, funny_story — смешная история, lesson — наставление, conclusion — вывод — Примеч nepee ]:

<!ELEMENT mymemoires (

title, author, philosophizing, sad_story,

funny_story, lesson, conclusion)>

В данном примере каждый из приведенных типов элементов должен появиться один раз (и только раз) внутри элемента mymemories в том порядке, в котором они перечислены в объявлении.

ПРИМЕЧАНИЕ

Элементы, которые появляются в элементе mymemoires, называются его дочерними элементами, а сам элемент mymemoires называется родительским. Каждый элемент может быть дочерним по отношению к любому количеству других элементов в документе. Элементы, разделенные более чем одним уровнем в иерархической системе, называются внуками, правнуками и т. д. (или соответственно дедами, прадедами — в другом направлении). Также можно при описании взаимоотношений между элементами использовать термины «предок» и «потомок».



Вы можете создать более гибкие правила, используя операторы повторяемости. Ниже показаны три оператора:

? — элемент должен встретиться один раз или не встретиться ни разу;

+ — элемент должен встретиться один или более раз;


* — элемент может встретиться любое количество раз или не встретиться вовсе.

Ниже снова приведено объявление элемента mymemoirs, переписанное с использованием операторов повторяемости:

<!ELEMENT mymemoires (title, author, philosophizing+,

sad_story*, funny_story*,

lesson*, conclusion)>

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

<!ELEMENT mymemoires (title, author, philosophizing+,

sad_story*, funny_story*,

lesson+| conclusion)>

В этом объявлении элемент mymemoirs может содержать один или более элементов lesson или conclusion, но не оба одновременно. Еще более сложные правила можно создавать с использованием вложенных скобок. В листинге 1.4 показано, как может выглядеть определение mymeroirs.dtd [Paragraph - абзац, letter — письмо. — Примеч. перев. ].



Листинг 1.4. Полная версия определения mymeroirs.dtd

<!ELEMENT mymemoirs (title, author, philosophizing*,

sad_story*, funny_story*,

(lesson+ | conclusion)*)>

<!ELEHENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT philosophizing (paragraph)*>

<!ELEMENT sad_story (paragraph*, letter*, (lesson | conclusion)*)>

<!ELEMENT funny_story (paragraph*, letter*.

(lesson | conclusion)*)>

<!ELEMENT letter (paragraph)*>

<!ELEMENT lesson (paragraph)*>

<!ELEMENT conclusion (paragraph)*>

<!ELEMENT paragraph (#PCDATA)>

Наименее строгим является правило, которое можно выразить словами: «подходит что угодно». Если вы хотите указать, что в данном элементе могут появиться любые проверенные символьные данные или элементы, вы должны использовать ключевое слово ANY (любой), как показано в следующем примере:

<!ELEMENT mymemoirs ANY>



ПРИМЕЧАНИЕ


Такое широкое правило, как элемент типа ANY, не вполне вписывается в строгую структуру XML. Вообще говоря, если вы создаете определение DTD, в котором используется ключевое слово ANY, вы, вероятно, делаете ошибку и вам следует поискать лучший способ определения.




Содержание раздела