Часть 2 (1075658), страница 4
Текст из файла (страница 4)
Значения в списке разделяются пробелами. Пример списка:<Example_List>1 2 3 4 5 11 12 13 14 15</Example_List>Объединение позволяет хранить в элементе значение одного или другоготипа. Пример объединения, позволяющего хранить в элементе действительноечисло или список целых:<Example_Union>1 2 3 4 5</Example_Union>28<Example_Union>123.123</Example_Union>Списки и объединения относятся к простым типам. К спискам иобъединениям можно применять ограничения.Пример 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"><xsd:list itemType='xsd:integer'/>29</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"/></xsd:simpleType>30Элемент может быть целым числом или действительным числом.<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, который позволяет объявлять элементыпроизвольного типа с произвольным содержимым.Пример 9.Файл XML:31<?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"). Элемент содержит описание атрибутов.32<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.33 xsd:all – определяет следование всех элементов в любом порядке.Каждый элемент может содержаться ноль или один раз. xsd:allиспользуется редко.Эти конструкции формируют «модель содержимого» элемента XMLдокумента.Элементы xsd:sequence и xsd:choice могут быть вложены друг в друга, чтосоответствует комбинации « , » и « | » в DTD.Аналогом символов «?», «*» и «+» из DTD в схемах XML являются атрибутыminOccurs и maxOccurs, которые определяют минимальное и максимальноеколичество вхождений элемента.Каждый из атрибутов может содержать непосредственное число вхождений("0", "1" и т.д.) или значение "unbounded" (неограниченное количествовхождений).Пример 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>34<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"/>35<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>36<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>37</xsd:element></xsd:schema>Более сложный пример, в котором используются атрибуты minOccurs иmaxOccurs.Пример 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>38<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>39<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>40<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"/>41</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>42</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">43<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-схемах существуют различные варианты совместногоиспользования составных типов и элементов, то появилось понятие «шаблон(паттерн) проектирования схем».Существует четыре наиболее распространенных шаблона проектированиясхем: Venetian Blind (венецианская штора). Russian Doll (матрешка). Salami Slice (ломтики салями). Garden of Eden (Райский Сад, идеальный шаблон).44Некоторыесредстваразработки(вчастностиNetBeans)умеютпреобразовывать схемы из одного шаблона в другой.Рассмотрим шаблоны более подробно.В шаблоне Venetian Blind (венецианская штора) определен один глобальныйэлемент.