Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
xml.docx
Скачиваний:
49
Добавлен:
16.04.2015
Размер:
115.97 Кб
Скачать

5. Конструкции dtd: объявление типа элемента, объявление атрибутов

Описание схемы документа XML, сделанное на языке определения типа документа DTD состоит из объявлений разметки, начинающихся с пары символов <!. За этими символами идет одно из слов ELEMENT, ATTLIST, ENTITY, NOTATION, указывающих, что именно объявляется: элемент, список атрибутов, сущность или обозначение. Объявление разметки заканчивается символом ">". Каждый элемент или атрибут объявляется отдельно.

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

Каждый элемент документа XML должен быть описан в объявлении типа элемента. Объявление типа элемента начинается с символов <!ELEMENT, после которых через пробел идет имя элемента и объявляется его содержимое.

Проще всего объявляется пустой элемент. Его содержимое, точнее, отсутствие содержимого, отмечается одним словом EMPTY. Например: <!ELEMENT br EMPTY>

После такого объявления в документе XML будет верна запись пустого элемента Ьг в виде <bг /> или в виде <br> </br>

Следующее объявление можно считать полной противоположностью объявлению пустого элемента: <!ELEMENT something ANY>

Оно означает, что элемент с именем something может содержать что угодно. Такое объявление не несет никакой информации об элементе и поэтому встречается очень редко.

Элемент с обычным текстовым содержимым и без вложенных элементов объявляется так: <!ELEMENT name (#PCDATA)>

Слово # PCDATA (Parsed Character DATA) означает строку символов, просматриваемую программой-анализатором документа XML.

Если объявляемый элемент содержит вложенные элементы, то объявление должно содержать список их имен, перечисленных через запятую, в скобках. Вложенные элементы должны следовать в документе XML в том порядке, в каком они перечислены в объявлении. Например, объявление элемента sp:suppi-prod может выглядеть так:

<!ELEMENT sp:suppl-prod (sp:snum, sp:sname, sp:loc, sp:pname, sp:qty)>

Объявляется только один уровень вложенности. Следующий уровень будет объявлен при объявлении вложенного элемента.

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

<!ELEMENT someelement (#PCDATA, inelem, anoelem)>

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

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

* — элемент или список может встретиться нуль или несколько раз;

+ — элемент или список может встретиться один или несколько раз.

Например, объявление элемента bk: chapter может выглядеть так:

<!ELEMENT bk:chapter (bk:title, (bk:section+, bk:listing*, bk:picture*)*, bk:conclusion?)>

Это объявление показывает, что в элемент bk:chapter сначала вкладывается один элемент bk:title, потом один или несколько элементов bk:section. Между элементами bk:section могут встречаться элементы bk:listing и bk:picture. Последним вложенным элементом может оказаться элемент bk:conclusion.

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

<!ELEMENT edition (author+, title, name, (publ-house, publ-place) | issue)) >

Объявление атрибутов

Атрибуты элемента объявляются уже после объявления самого элемента. Все атрибуты одного элемента объявляются сразу, одним списком. Список начинается с символов <!ATTLIST, после них через пробел следует имя элемента, к которому относятся атрибуты. Затем идут объявления атрибутов. Список, как всегда, заканчивается символом ">".

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

Тип атрибута записывается приведенными далее обозначениями.

• CDATA — строка символов.

• ID- уникальный идентификатор, однозначно определяющий элемент, в котором встретился этот атрибут; значения такого атрибута не должны повторяться в документе.

• IDREF — идентификатор, содержащий одно из значений атрибутов типа ID, используется в качестве ссылки на другие элементы.

• IDREFS — идентификатор, содержащий набор значений атрибутов типа ID, перечисленных через пробелы; тоже используется в качестве ссылки сразу на несколько элементов.

• ENTITY — имя непроверяемой анализатором сущности.

• ENTITIES — имена непроверяемых сущностей.

• NMTOKEN — слово, содержащее только символы, применяемые в именах.

• NMTOKENS — слова, перечисленные через пробелы.

• NOTATION — обозначение.

• Список значений атрибута, перечисляемых через вертикальную черту, в скобках.

Атрибуты типа ID играют ту же роль, что и первичные ключи в таблицах баз данных. Они позволяют различать элементы и индексировать их. Это облегчает и ускоряет поиск элементов, а также позволяет ссылаться на них. Ссылки выполняются атрибутами типа IDREF ИЛИ типа IDREFS. Например, в одном месте документа могут встретиться элементы:

<name reg-num="123045">Иванов</name> <name reg-num ="123052">Петров</name>

с атрибутом reg-num типа ID, а в другом месте — элемент:

<post ref="123045">3аведующий отделом</роst>

с атрибутом ref типа IDREF Такая связь означает, что должность Иванова — "Заведующий отделом". Объявления DTD этих элементов могут выглядеть так:

<!ELEMENT name (#PCDATA)>

<!ATTLIST name

reg-num ID #REQUIRED>

<!ELEMENT post (#PCDATA)>

<!ATTLIST post

ref IDREF #IMPLIED>

Значения атрибутов типа ENTITY — это имена сущностей, объявленных в этом же описании DTD. Атрибуты типа NMTOKEN могут содержать имена других элементов или атрибутов, например, для того чтобы ссылаться на них. Значения атрибутов типа NOTATION — это обозначения, расшифрованные в описании DTD.

Объявление атрибута заканчивается признаком обязательности присутствия атрибута в элементе или подразумеваемым значением атрибута. Такое значение, называемое значением по умолчанию, будет использовано, если атрибут не записан явно в документе XML. Признак обязательности — это одно из трех слов, показывающих, всегда ли нужно записывать атрибут и что будет, если его нет в элементе:

#REQUIRED — атрибут надо обязательно записывать в элементе;

#IMPLIED — атрибут необязателен, у него нет значения по умолчанию;

#FIXED — у атрибута есть только одно значение, которое записывается тут же, через пробел.

Если в конце объявления атрибута вместо одного из этих слов стоит значение атрибута, принимаемое по умолчанию, то понятно, что такой атрибут необязателен.

Например, атрибуты first, second и surname элемента name можно объявить следующим списком:

<!ATTLIST name

first CDATA #REQUIRED

second CDATA #IMPLIED

surname CDATA #REQUIRED>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]