
- •Оглавление
- •1. История появления xml и его особенности. Хорошо оформленный документ
- •2. Структура документа xml. Верный документ
- •3. Ссылки на сущности, секция cdata. Комментарии, атрибуты, имена
- •4. Пространства имён xml. Инструкции по обработке
- •5. Конструкции dtd: объявление типа элемента, объявление атрибутов
- •6. Конструкции dtd: объявление сущности, объявление обозначения
- •7. Размещение описания dtd. Программы-анализаторы xml
- •8. Описание схемы документа на языке xsd. Встроенные простые типы
- •9. Определение новых простых типов в xsd
- •10. Объявление элементов и их атрибутов в xsd
- •11. Определение сложных типов в xsd
- •12. Пространства имён языка xsd. Связь документа xml со своей схемой
- •13. Создание ссылок на языке xLink. Пространство имён языка xLink
- •14. Атрибуты, используемые при создании ссылок на языке xLink
- •15. Типы ссылок, создаваемых на языке xLink
- •16. Создание банка ссылок. Программы-обработчики атрибутов xLink
- •17. Таблицы стилей css в языке xml. Язык описания стилей xsl
- •18. Язык записи преобразований xslt бред, не стала разбираться, что из этого надо, а что нет
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>