Учебное пособие (1075724), страница 17
Текст из файла (страница 17)
Дляэлемента xsd:attribute атрибут use может принимать следующие значения: use="required" – обязательный атрибут. use="optional" – необязательный атрибут. use="default" задает значение по умолчанию, если атрибут будетотсутствовать в документе. use="fixed" задает только одно фиксированное значение для атрибута.<xsd:simpleType name="Example_AttrType"><xsd:restriction base="xsd:string">155<xsd:enumeration value='A'/><xsd:enumeration value='B'/><xsd:enumeration value='C'/></xsd:restriction></xsd:simpleType>Определяется простой тип для использования в качестве значения атрибута.<xsd:complexType name="Example_Element_Type"><xsd:simpleContent><xsd:extension base="xsd:string"><xsd:attributeGroup ref="Example_AttributeGroup"/>Ссылка на группу атрибутов.
Атрибуты, определенные в группе, будутдобавлены в тип.<xsd:attribute name="id" type="xsd:ID" use="required"/>В дополнение к группе атрибутов можно отдельно определять атрибуты.</xsd:extension></xsd:simpleContent></xsd:complexType><xsd:group name="Example_group"><xsd:sequence><xsd:element name="name" type="Example_Element_Type"/><xsd:element name="year" type="Example_AttrType"/></xsd:sequence></xsd:group>Объявление группы элементов.<!-- Может повторяться вся последовательность --><xsd:complexType name="languageType"><xsd:choice><!-- Группа может встречаться один и более раз -->156<xsd:group ref="Example_group" minOccurs="1"maxOccurs="unbounded"/>Ссылка на группу элементов.
Элементы, определенные в группе, будутдобавлены в тип.<xsd:element name="howold" type="Example_Element_Type"/></xsd:choice></xsd:complexType><xsd:element name="languages"><xsd:complexType><xsd:sequence><xsd:element name="language" type="languageType"maxOccurs="unbounded"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>3.2.8 Использование смешанной модели содержимого элементаСмешанная модель содержимого элемента предполагает, что в элемент могутбыть вложены и текст, и другие элементы. Пример:<language>Текст<y>01.01.1986</y>Текст<n>SGML</n></language>Дляопределениясмешанноймоделивэлементеxsd:complexTypeнеобходимо указать атрибут mixed="true".Пример 3.13.Файл XML:157<?xml version="1.0" encoding="Windows-1251"?><!-- Языки разметки --><languages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_content_mix.xsd"><language_sequence>текст<name>HTML</name>текст<year>01.01.1990</year>текст<howold>14</howold>текст</language_sequence><language_choice>текст<name>XML</name>текст</language_choice><language_all>текст<year>01.01.1986</year>текст<howold>10</howold>текст<name>SGML</name>текст</language_all></languages>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><!-- Последовательность элементов --><xsd:complexType name="languageType_sequence" mixed="true"><xsd:sequence><xsd:element name="name" type="xsd:string"/><xsd:element name="year" type="xsd:string"/><xsd:element name="howold" type="xsd:integer"/></xsd:sequence></xsd:complexType>В элементе xsd:complexType атрибут mixed="true" определяет смешаннуюмодель.<!-- Выбор элементов --><xsd:complexType name="languageType_choice" mixed="true"><xsd:choice>158<xsd:element name="name" type="xsd:string"/><xsd:element name="year" type="xsd:string"/><xsd:element name="howold" type="xsd:integer"/></xsd:choice></xsd:complexType><xsd:complexType name="languageType_all" mixed="true"><xsd:all><xsd:element name="name" type="xsd:string"minOccurs="1" maxOccurs="1"/><xsd:element name="year" type="xsd:string"/><xsd:element name="howold" type="xsd:integer"/></xsd:all></xsd:complexType><xsd:element name="languages"><xsd:complexType><xsd:sequence><xsd:element name="language_sequence"type="languageType_sequence"/><xsd:element name="language_choice"type="languageType_choice"/><xsd:element name="language_all"type="languageType_all"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>3.2.9 Использование «nil» для пустых элементовАтрибут xsi:nil позволяет определять пустое значение элементов в XMLдокументе.
В XML-схеме для того, чтобы указать, что элемент может иметьпустые значения, используется nillable="true" при объявлении элемента.Пример 3.14.159Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Языки разметки --><languages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_content_nill.xsd"><language><name>HTML</name><name>HTML</name><name xsi:nil="true"/>Элемент name не имеет содержимого. Атрибут xsi:nil="true" указывает, чтоэлемент имеет пустое значение.Обратите внимание, что атрибут xsi:nil (префикс xsi) относится кпространству имен, через которое к XML-документу подключается XML-схема.<year>01.01.1986</year><year>01.01.1986</year><year xsi:nil="true"/><howold>10</howold><howold>10</howold><howold xsi:nil="true"></howold></language></languages>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:complexType name="languageType"><xsd:choice minOccurs="1" maxOccurs="unbounded"><xsd:element name="name" type="xsd:string" nillable="true"/>Атрибут nillable="true" указывает, что элемент name может быть пустым.160<xsd:element name="year" type="xsd:string" nillable="true"/><xsd:element name="howold" type="xsd:integer" nillable="true"/></xsd:choice></xsd:complexType><xsd:element name="languages"><xsd:complexType><xsd:sequence><xsd:element name="language" type="languageType"maxOccurs="unbounded"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>3.2.10 Указание типа элемента в XML-документеАтрибут xsi:type позволяет элементу в документе XML ссылаться на типданных в схеме.
При этом схема состоит только из типов, которые не связаны сэлементами.Пример 3.15.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Языки разметки --><languages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_content_type.xsd"><language xsi:type="languageType">Тип элемента указывается явно с помощью атрибута xsi:type.Обратите внимание, что атрибут xsi:type (префикс xsi) относится кпространству имен, через которое к XML-документу подключается XML-схема.<name>HTML</name><name xsi:nil="true"/><year>01.01.1986</year>161<howold>10</howold></language></languages>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:complexType name="languageType"><xsd:choice minOccurs="1" maxOccurs="unbounded"><xsd:element name="name" type="xsd:string" nillable="true"/><xsd:element name="year" type="xsd:string" nillable="true"/><xsd:element name="howold" type="xsd:integer" nillable="true"/></xsd:choice></xsd:complexType>Объявленный тип не связан ни с одним из элементов.
Привязкаосуществляется в XML-документе.<xsd:element name="languages" type="xsd:anyType"/></xsd:schema>Элемент languages может быть произвольного типа (xsd:anyType), то есть егосодержимое никак не контролируется.3.2.11 Использование аннотацийАннотации (xsd:annotation) позволяют документировать XML-схему. Вэлемент xsd:annotation могут быть вложены два элемента: Элемент xsd:documentation, который позволяет добавлять комментариив XML-схему. Элемент xsd:appinfo, который позволяет добавлять информацию дляпрограмм, обрабатывающих XML-схемы.162В качестве примера такой программы можно назвать «Schematron». Этонадстройка над XML-схемой, которая позволяет осуществлять дополнительныепроверки зависимостей между элементами.Аннотация может быть вложена практически в любой элемент схемы,например в xsd:schema, xsd:complexType, xsd:element.Пример 3.16.Файл XSD с аннотациями:<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:annotation><xsd:documentation xml:lang="ru">Комментарий</xsd:documentation><xsd:appinfo>Информация для программы, которая работает саннотациями</xsd:appinfo></xsd:annotation><xsd:complexType name="languageType"><xsd:annotation><xsd:documentation xml:lang="ru"> Комментарий</xsd:documentation></xsd:annotation><xsd:sequence><xsd:annotation><xsd:documentation xml:lang="ru"> Комментарий</xsd:documentation></xsd:annotation><xsd:element name="name" type="xsd:string"/><xsd:element name="year" type="xsd:string"><xsd:annotation><xsd:documentation xml:lang="ru"> Комментарий</xsd:documentation></xsd:annotation></xsd:element><xsd:element name="howold" type="xsd:integer"/>163</xsd:sequence><xsd:attribute name="id" use="required" type="xsd:string"><xsd:annotation><xsd:documentation xml:lang="ru"> Комментарий</xsd:documentation></xsd:annotation></xsd:attribute></xsd:complexType><xsd:element name="languages"><xsd:complexType><xsd:sequence><xsd:element name="language" type="languageType"maxOccurs="unbounded"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>3.2.12 Задание ключей и уникальностиВ XML-схемах существует способ проверки связей между элементами ипроверки уникальности, который похож на первичные, вторичные ключи иуникальные индексы в реляционных базах данных.Элементы, используемые для задания ключей и уникальности: xsd:key – «первичный ключ». xsd:keyref – «вторичный ключ». xsd:unique – уникальная комбинация значений.














