
- •Оглавление
- •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 бред, не стала разбираться, что из этого надо, а что нет
10. Объявление элементов и их атрибутов в xsd
Элементы, из которых будет состоять документ XML, объявляются в схеме компонентом element:
<xsd:element name="имя элемента" type="Тип элемента"
minOccurs="наименьшее число появлений элемента в документе"
maxOccurs="наибольшее число появлений" />
Значение по умолчанию необязательных атрибутов minOccurs и maxOccurs равно 1. Это означает, что если эти атрибуты отсутствуют, то элемент должен появиться в документе XML ровно один раз. Например:
<xsd:element name="degree" type="xsd:nonPositiveInteger" />
Указание типа элемента в атрибуте type удобно, если это встроенный простой тип или тип, определенный заранее. Тогда в атрибуте type можно записать только имя типа.
Если же тип элемента определяется здесь же, то определение типа элемента лучше вынести в содержимое компонента element.
<xsd:element name="имя элемента" >
Определение типа элемента </xsd:element>
Объявление атрибута элемента тоже несложно:
<xsd:attribute name=" имя атрибута" type="Имя атрибута"
use="обязательность атрибута" default="Значение по умолчанию" />
Необязательный атрибут use принимает три значения:
optional — описываемый атрибут необязателен (это значение по умолчанию);
required — описываемый атрибут обязателен;
prohibited — описываемый атрибут неприменим. Это значение полезно при определении подтипа, чтобы отменить некоторые атрибуты базового типа.
Например:
<xsd:attribute name="id" type="positiveInteger" use="required" />
Если описываемый атрибут необязателен, то атрибутом default можно задать его значение по умолчанию: <xsd:attribute name="name" type="NCName" default="anonymous" />
Определение типа атрибута, — а это должен быть простой тип, — можно вынести в содержимое элемента attribute: <xsd:attribute name="имя атрибута">
Тип атрибута </xsd:attribute>
11. Определение сложных типов в xsd
Тип элемента называется сложным, если в элемент вложены другие элементы и/или в открывающем теге элемента есть атрибуты.
Сложный тип определяется компонентом complexType, имеющим вид:
<xsd:complexType name="имя типа" >
Определение типа </xsd:complexType>
Необязательный атрибут name задает имя типа, а в содержимом компонента compiexType описываются элементы, входящие в сложный тип, и/или атрибуты открывающего тега.
Определение сложного типа можно разделить на три группы.
Определение типа пустого элемента — элемента, не содержащего тела, а содержащего только атрибуты в открывающем теге. Каждый атрибут объявляется одним компонентом attribute:
<xsd:complexType name="imageType">
<xsd:attribute name="href" type="xsd:anyURL" /> </xsd:complexType>
После этого определения можно в схеме объявить элемент image типа imageType:
<xsd:element name="image" type="imageType" />
а в документе XML использовать это объявление:
<image href="http://some.com/images/myface.gif" />
Определение типа элемента с простым телом
Этот тип отличается от простого типа только наличием атрибутов и определяется компонентом simpieContent. В теле этого компонента должен быть либо компонент restriction, либо компонент extension, атрибутом base задающий тип (простой) тела описываемого элемента.
В компоненте extension указываются атрибуты открывающего тега описываемого элемента:
<xsd:complexType name="calcResultType">
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="unit" type="xsd:string" />
<xsd:attribute name="precision"
type="xsd:nonNegativelnteger" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
Эту конструкцию можно описать словами так: "Определяется тип caicResuitType элемента, тело которого содержит значения встроенного простого типа xsd: decimal. Простой тип расширяется тем, что к нему добавляются атрибуты unit И precision".
Если в схеме объявить элемент result этого типа следующим образом:
<xsd:element name="result" type="calcResultType" />
то в документе XML можно написать:
<result unit="cм" precision="2">123.25</result>
В компоненте restriction, кроме атрибутов, описывается простой тип содержимого элемента и/или фасетки, ограничивающие тип, заданный атрибутом base. Например:
<xsd:complexType name="calcResultType">
<xsd:simpleContent>
<xsd:restriction base="xsd:decimal">
<xsd:totalDigits value="8" />
<xsd:attribute name="unit" type="xsd:string" />
<xsd:attribute name="precision"
type="xsd:nonNegativelnteger" />
</xsd:restriction>
</xsd:simpleContent> </xsd:complexType>