Учебное пособие (1075724), страница 16
Текст из файла (страница 16)
Ограничения числовых типов данных.maxInclusiveБольше или равноmaxExclusive БольшеminExclusive МеньшеminInclusiveМеньше или равноtotalDigitsКоличество цифр в числеfractionDigits Количество цифр в дробной частиПример использования ограничений.Пример 3.7.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Примеры ограничений для простых типов --><Root_Element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="facets.xsd"><Example_Length>1234</Example_Length><Example_Length_MinMax>12345</Example_Length_MinMax><Example_Length_MinMax>1234567</Example_Length_MinMax><Example_Pattern>aaaaabbbbbcccccbbbbbaaaaaa</Example_Pattern><domain>gov</domain>135<domain>edu</domain><Example_Inclusive>1</Example_Inclusive><Example_Inclusive>5</Example_Inclusive><Example_Inclusive>10</Example_Inclusive><Example_Exclusive>2</Example_Exclusive><Example_Exclusive>9</Example_Exclusive><Example_Digits>123.45</Example_Digits></Root_Element>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:simpleType name="Example_Length_Type"><xsd:restriction base="xsd:string"><xsd:length value='4'/></xsd:restriction></xsd:simpleType>Простой тип с названием Example_Length_Type создается как ограничение(xsd:restriction), накладываемое на базовый строковый тип (xsd:string).
В элементxsd:restriction вкладываются элементы ограничений, в данном случае ограничениена общую длину строки.<xsd:simpleType name="Example_Length_MinMax_Type"><xsd:restriction base="xsd:string"><xsd:minLength value='5'/><xsd:maxLength value='7'/></xsd:restriction></xsd:simpleType>136<xsd:simpleType name="Example_Pattern_Type"><xsd:restriction base="xsd:string"><xsd:pattern value='(a|b|c)*'/></xsd:restriction></xsd:simpleType><xsd:simpleType name="Example_enumeration_Type"><xsd:restriction base="xsd:string"><xsd:enumeration value='gov'/><xsd:enumeration value='edu'/><xsd:enumeration value='com'/></xsd:restriction></xsd:simpleType><xsd:simpleType name="Example_Inclusive_Type"><xsd:restriction base="xsd:integer"><xsd:minInclusive value='1'/><xsd:maxInclusive value='10'/></xsd:restriction></xsd:simpleType><xsd:simpleType name="Example_Exclusive_Type"><xsd:restriction base="xsd:integer"><xsd:minExclusive value='1'/><xsd:maxExclusive value='10'/></xsd:restriction></xsd:simpleType><xsd:simpleType name="Example_Digits_Type"><xsd:restriction base="xsd:decimal"><xsd:totalDigits value='5'/><xsd:fractionDigits value='2'/></xsd:restriction></xsd:simpleType><xsd:complexType name="Root_Element_Type">137<xsd:sequence><xsd:element name="Example_Length"type="Example_Length_Type" maxOccurs="unbounded"/><xsd:element name="Example_Length_MinMax"type="Example_Length_MinMax_Type" maxOccurs="unbounded"/><xsd:element name="Example_Pattern"type="Example_Pattern_Type"/><xsd:element name="domain"type="Example_enumeration_Type" maxOccurs="unbounded"/><xsd:element name="Example_Inclusive"type="Example_Inclusive_Type" maxOccurs="unbounded"/><xsd:element name="Example_Exclusive"type="Example_Exclusive_Type" maxOccurs="unbounded"/><xsd:element name="Example_Digits"type="Example_Digits_Type" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType>Составной тип, в котором определяются элементы для тестированияограничений.<xsd:element name="Root_Element" type="Root_Element_Type"/></xsd:schema>Определение корневого элемента документа.3.2.4 Списки и объединенияПод списком в XML понимается возможность хранения списка значений водном элементе XML.
Значения в списке разделяются пробелами. Пример списка:<Example_List>1 2 3 4 5 11 12 13 14 15</Example_List>Объединение позволяет хранить в элементе значение одного или другоготипа. Пример объединения, позволяющего хранить в элементе действительноечисло или список целых:138<Example_Union>1 2 3 4 5</Example_Union><Example_Union>123.123</Example_Union>Списки и объединения относятся к простым типам. К спискам иобъединениям можно применять ограничения.Пример 3.8.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Примеры списков и объединений --><Root_Element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="list_union.xsd"><Example_List_Integer>1 2 3 4 5 11 12 13 1415</Example_List_Integer><Example_List_Integer_Length>1 2 3</Example_List_Integer_Length><Example_List_String>строка1 строка2строка3</Example_List_String><Example_List_String_Enum>AAA BBB CCC</Example_List_String_Enum><Example_Union>1 2 3 4 5</Example_Union><Example_Union>123</Example_Union><Example_Union2>333</Example_Union2><Example_Union2>3.333</Example_Union2></Root_Element>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:simpleType name="Example_List_Integer_Type">139<xsd:list itemType='xsd:integer'/></xsd:simpleType>Элемент xsd:list определяет список, в атрибуте itemType указывается типэлемента списка.<xsd:simpleType name="Example_List_Integer_Length_Type"><xsd:restriction base="Example_List_Integer_Type"><xsd:length value='5'/></xsd:restriction></xsd:simpleType>Применяется ограничение на количество элементов в списке.<xsd:simpleType name="Example_List_String_Type"><xsd:list itemType='xsd:string'/></xsd:simpleType><xsd:simpleType name="Example_List_String_Enum_Type"><xsd:restriction base="Example_List_String_Type"><xsd:enumeration value='AAA BBB CCC'/><xsd:enumeration value='BBB'/><xsd:enumeration value='CCC'/></xsd:restriction></xsd:simpleType><xsd:simpleType name="Example_Union1_Type"><xsd:union memberTypes="xsd:integerExample_List_Integer_Type"/></xsd:simpleType>Элемент xsd:union определяет объединение.
В атрибуте memberTypesуказывается список типов, которые могут входить в объединение. В этом примерев объединение могут входить целое число или список целых.<xsd:simpleType name="Example_Union2_Type"><xsd:union memberTypes="xsd:integer xsd:double"/>140</xsd:simpleType>Элемент может быть целым числом или действительным числом.<xsd:complexType name="Root_Element_Type"><xsd:sequence><xsd:element name="Example_List_Integer"type="Example_List_Integer_Type"/><xsd:element name="Example_List_Integer_Length"type="Example_List_Integer_Length_Type"/><xsd:element name="Example_List_String"type="Example_List_String_Type"/><xsd:element name="Example_List_String_Enum"type="Example_List_String_Enum_Type"/><xsd:element name="Example_Union"type="Example_Union1_Type" maxOccurs="unbounded"/><xsd:element name="Example_Union2"type="Example_Union2_Type" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType>Составной тип, в котором определяются элементы для создания списков иобъединений.<xsd:element name="Root_Element" type="Root_Element_Type"/></xsd:schema>Определение корневого элемента документа.3.2.5 Простые элементы с атрибутамиВ следующем примере создаются элемент с простым содержимым,содержащий атрибуты, и пустой элемент, содержащий атрибуты.
Также показаноиспользование типа xsd:anyType, который позволяет объявлять элементыпроизвольного типа с произвольным содержимым.Пример 3.9.141Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Примеры сложных типов --><Root_Element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_attrib.xsd"><Example_IntegerElement attr1="333"attr2="string">333</Example_IntegerElement><Example_EmptyElement attr1="333" attr2="string"/><Example_anyType1 NotDefinedAttribute="NotDefinedAttribute">123текст</Example_anyType1><Example_anyType2 NotDefinedAttribute="NotDefinedAttribute">123текст <child>123</child></Example_anyType2></Root_Element>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:complexType name="Example_IntegerElement_Type"><xsd:simpleContent><xsd:extension base="xsd:integer"><xsd:attribute name="attr1" type="xsd:integer"/><xsd:attribute name="attr2" type="xsd:string"/></xsd:extension></xsd:simpleContent></xsd:complexType>Объявление типа элемента с двумя атрибутами, который содержит целоечисло.
Этот тип объявляется как составной (xsd:complexType), но у него простоесодержимое (xsd:simpleContent). Содержимое элемента базируется на целом числе(xsd:extension base="xsd:integer"). Элемент содержит описание атрибутов.142<xsd:complexType name="Example_EmptyElement_Type"><xsd:attribute name="attr1" type="xsd:integer"/><xsd:attribute name="attr2" type="xsd:string"/></xsd:complexType>Объявление типа, соответствующего пустому элементу с двумя атрибутами.<xsd:complexType name="Root_Element_Type"><xsd:sequence><xsd:element name="Example_IntegerElement"type="Example_IntegerElement_Type"/><xsd:element name="Example_EmptyElement"type="Example_EmptyElement_Type"/><xsd:element name="Example_anyType1" type="xsd:anyType"/><xsd:element name="Example_anyType2"/>Использованиетипаxsd:anyTypeпозволяетобъявлятьэлементыпроизвольного типа с произвольным содержимым.
Если тип не указан, то поумолчанию это также xsd:anyType.</xsd:sequence></xsd:complexType><xsd:element name="Root_Element" type="Root_Element_Type"/></xsd:schema>3.2.6 Использование сложных (составных) типовСложные(составные)типыформируютсяспомощьюследующихконструкций: xsd:sequence – определяет последовательность вложенных элементов.Соответствует символу « , » в DTD. xsd:choice – определяет выбор элементов. Соответствует символу « | » вDTD.143 xsd:all – определяет следование всех элементов в любом порядке.Каждый элемент может содержаться ноль или один раз. xsd:allиспользуется редко.Эти конструкции формируют «модель содержимого» элемента XMLдокумента.Элементы xsd:sequence и xsd:choice могут быть вложены друг в друга, чтосоответствует комбинации « , » и « | » в DTD.Аналогом символов «?», «*» и «+» из DTD в схемах XML являются атрибутыminOccurs и maxOccurs, которые определяют минимальное и максимальноеколичество вхождений элемента.Каждый из атрибутов может содержать непосредственное число вхождений("0", "1" и т.д.) или значение "unbounded" (неограниченное количествовхождений).Пример 3.10.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Языки разметки --><languages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_content_sc1.xsd"><language1><name>HTML</name><name1>HTML</name1></language1><language1><year>01.01.1990</year><howold1>14</howold1></language1><!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --><language2><name>SGML</name><year>01.01.1986</year>144<howold>18</howold></language2><language2><name1>SGML</name1><year1>01.01.1986</year1><howold1>18</howold1></language2><!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --><language3><NAME>SGML</NAME><year>01.01.1986</year><NAME1>SGML</NAME1><year1>01.01.1986</year1></language3><language3><name>SGML</name><howold>18</howold><name1>SGML</name1><howold1>18</howold1></language3></languages>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><!-- Последовательность выборов --><xsd:complexType name="languageType_1"><xsd:sequence><xsd:choice><xsd:element name="name" type="xsd:string"/><xsd:element name="year" type="xsd:string"/>145<xsd:element name="howold" type="xsd:integer"/></xsd:choice><xsd:choice><xsd:element name="name1" type="xsd:string"/><xsd:element name="year1" type="xsd:string"/><xsd:element name="howold1" type="xsd:integer"/></xsd:choice></xsd:sequence></xsd:complexType><!-- Выбор последовательностей --><xsd:complexType name="languageType_2"><xsd:choice><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:sequence><xsd:element name="name1" type="xsd:string"/><xsd:element name="year1" type="xsd:string"/><xsd:element name="howold1" type="xsd:integer"/></xsd:sequence></xsd:choice></xsd:complexType><!-- Последовательность выборов последовательностей --><!-- Возможно определить также выбор последовательностей выборов --><xsd:complexType name="languageType_3"><xsd:sequence><xsd:choice>146<xsd:sequence><xsd:element name="NAME" type="xsd:string"/><xsd:element name="year" type="xsd:string"/></xsd:sequence><xsd:sequence><xsd:element name="name" type="xsd:string"/><xsd:element name="howold" type="xsd:integer"/></xsd:sequence></xsd:choice><xsd:choice><xsd:sequence><xsd:element name="NAME1" type="xsd:string"/><xsd:element name="year1" type="xsd:string"/></xsd:sequence><xsd:sequence><xsd:element name="name1" type="xsd:string"/><xsd:element name="howold1" type="xsd:integer"/></xsd:sequence></xsd:choice></xsd:sequence></xsd:complexType><xsd:element name="languages"><xsd:complexType><xsd:sequence><xsd:element name="language1"type="languageType_1" maxOccurs="unbounded"/><xsd:element name="language2"type="languageType_2" maxOccurs="unbounded"/><xsd:element name="language3"type="languageType_3" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType>147</xsd:element></xsd:schema>Более сложный пример, в котором используются атрибуты minOccurs иmaxOccurs.Пример 3.11.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Языки разметки --><languages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_content_sc2.xsd"><language_1_1><name>HTML</name><year>01.01.1986</year><howold>18</howold><name>HTML</name><year>01.01.1986</year><howold>18</howold></language_1_1><language_1_2><name>HTML</name><name>HTML</name><year>01.01.1986</year><year>01.01.1986</year><howold>10</howold><howold>10</howold></language_1_2><language_1_3><name>HTML</name><name>HTML</name><year>01.01.1986</year><year>01.01.1986</year>148<howold>10</howold><howold>10</howold><name>HTML</name><name>HTML</name></language_1_3><!-- ++++++++++++++++++++++++++++++++++++++++ --><language_2_1><name1>HTML</name1><name>HTML</name><year>01.01.1986</year><year>01.01.1986</year><howold>10</howold><howold>10</howold><name>HTML</name><year>01.01.1986</year><howold>10</howold><year>01.01.1986</year><howold>10</howold><name>HTML</name></language_2_1><language_2_2><name>HTML</name><name>HTML</name></language_2_2><language_2_3><name>HTML</name><name>HTML</name><year>01.01.1986</year><year>01.01.1986</year>149<howold>10</howold><howold>10</howold><name>HTML</name><year>01.01.1986</year><howold>10</howold><year>01.01.1986</year><howold>10</howold><name>HTML</name></language_2_3><!-- ++++++++++++++++++++++++++++++++++++++++ --><language_3_1><name1>HTML</name1><name>HTML</name><year>01.01.1986</year><year>01.01.1986</year><howold>10</howold><howold>10</howold><name>HTML</name><year>01.01.1986</year><howold>10</howold><year>01.01.1986</year><howold>10</howold><name>HTML</name></language_3_1><language_3_2><name1>HTML</name1><name>HTML</name><year>01.01.1986</year><year>01.01.1986</year>150<howold>10</howold><howold>10</howold><name>HTML</name><year>01.01.1986</year><howold>10</howold><year>01.01.1986</year><howold>10</howold><name>HTML</name></language_3_2></languages>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><!-- Может повторяться вся последовательность --><xsd:complexType name="languageType_1_1"><xsd:sequence minOccurs="1" maxOccurs="unbounded"><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 name="languageType_1_2"><xsd:sequence><xsd:element name="name" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="year" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="howold" type="xsd:integer"minOccurs="1" maxOccurs="unbounded"/>151</xsd:sequence></xsd:complexType><!-- Может повторяться вся последовательность и элемент впоследовательности --><xsd:complexType name="languageType_1_3"><xsd:sequence minOccurs="1" maxOccurs="unbounded"><xsd:element name="name" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="year" type="xsd:string"minOccurs="0" maxOccurs="unbounded"/><xsd:element name="howold" type="xsd:integer"minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><!-- ++++++++++++++++++++++++++++++++++++++++++++++++++ --><!-- Любой элемент может повторяться произвольное количество раз --><xsd:complexType name="languageType_2_1"><xsd:choice minOccurs="1" maxOccurs="unbounded"><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_2_2"><xsd:choice><xsd:element name="name" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="year" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="howold" type="xsd:integer"minOccurs="1" maxOccurs="unbounded"/></xsd:choice>152</xsd:complexType><!-- Любой элемент может повторяться произвольное количество раз --><xsd:complexType name="languageType_2_3"><xsd:choice minOccurs="1" maxOccurs="unbounded"><xsd:element name="name" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="year" type="xsd:string"minOccurs="1" maxOccurs="unbounded"/><xsd:element name="howold" type="xsd:integer"minOccurs="1" maxOccurs="unbounded"/></xsd:choice></xsd:complexType><!-- ++++++++++++++++++++++++++++++++++++++++++++++ --><!-- Избыточное описание --><xsd:complexType name="languageType_3_1"><xsd:sequence minOccurs="1" maxOccurs="unbounded"><xsd:choice><xsd:element name="name" type="xsd:string"/><xsd:element name="year" type="xsd:string"/><xsd:element name="howold" type="xsd:integer"/></xsd:choice></xsd:sequence></xsd:complexType><xsd:complexType name="languageType_3_2"><xsd:sequence><xsd:choice minOccurs="1" maxOccurs="unbounded"><xsd:element name="name" type="xsd:string"/><xsd:element name="year" type="xsd:string"/><xsd:element name="howold" type="xsd:integer"/></xsd:choice></xsd:sequence></xsd:complexType><xsd:element name="languages">153<xsd:complexType><xsd:sequence><xsd:element name="language_1_1" type="languageType_1_1"maxOccurs="unbounded"/><xsd:element name="language_1_2" type="languageType_1_2"maxOccurs="unbounded"/><xsd:element name="language_1_3" type="languageType_1_3"maxOccurs="unbounded"/><xsd:element name="language_2_1" type="languageType_2_1"maxOccurs="unbounded"/><xsd:element name="language_2_2" type="languageType_2_2"maxOccurs="unbounded"/><xsd:element name="language_2_3" type="languageType_2_3"maxOccurs="unbounded"/><xsd:element name="language_3_1" type="languageType_3_1"maxOccurs="unbounded"/><xsd:element name="language_3_2" type="languageType_3_2"maxOccurs="unbounded"/></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>3.2.7 Использование групп элементов и атрибутовВ XML-схемах существует возможность задания групп элементов иатрибутов и их многократного использования.Пример 3.12.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><!-- Языки разметки --><languages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="compl_content_group.xsd">154<language><name attr2="FIX" attr3="C" id="id1">HTML</name><year>B</year></language><language><howold attr3="C" attr1="123" id="id2"attr2="string">10</howold></language></languages>Файл XSD:<?xml version="1.0" encoding="Windows-1251"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><!-- Группа атрибутов --><xsd:attributeGroup name="Example_AttributeGroup"><xsd:attribute name="attr1" type="xsd:integer" use="optional"default="333"/><xsd:attribute name="attr2" type="xsd:string" use="required"fixed="FIX"/><xsd:attribute name="attr3" type="Example_AttrType"use="required"/></xsd:attributeGroup>С помощью элемента xsd:attributeGroup определяется группа атрибутов.














