
- •Лекция 4-04
- •4.2.7. Объявление атрибутов в схеме xml
- •4.2.7.1. Формат элементаattribute
- •4.2.7.2. Встроенные объявления атрибутов
- •4.2.8. Объявление элементов в схемеXml
- •4.2.8.1. Формат объявления элементаelement
- •4.2.8.2. Элементыunique,selectorиfield
- •4.2.8.3. Элементыkeyиkeyref
- •4.2.9. Определение комплексного типа в схемеXml
- •4.2.9.1. Формат определения элементаcomplexType
- •4.2.9.2. Элементы sequence, any, choice, all и group
- •4.2.9.3. ЭлементыattributeGroupиanyAttribute
- •4.2.9.4. ЭлементsimpleContent
- •4.2.9.5. ЭлементcomplexContent
- •4.2.10. Объявление нотации в схемеXml
- •4.2.11. Структура схемы
- •4.2.11.1. Элементschema
- •4.2.11.2. Включение внешних фрагментов в схему
- •4.2.11.3. Включение схемы в документXml
4.2.9.3. ЭлементыattributeGroupиanyAttribute
Элемент attributeGroupиспользуется для создания группы объявлений атрибутов, используемых в определениях комплексного типа.
<префикс:attributeGroup
id = ID
name = NCName
ref = QName
>
(annotation?),((attribute | attributeGroup)*,anyAttribute?))
</префикс:attributeGroup>
Необязательный атрибут idзадает уникальный идентификатор элемента. Атрибутыname иrefимеют тот же смысл, что и для элементаgroup.
Пример использования элемента attributeGroup:
<xs:attributeGroup name="personAttrs">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="age" type="xs:positiveInteger"/>
</xs:attributeGroup>
…
<xs:complexType name="person">
<xs:attributeGroup ref="personAttrs"/>
</xs:complexType>
В этом примере в комплексном типе (personличность) используется определенная ранее группа атрибутовpersonAttrsдля имени и возраста.
Элемент anyAttributeпозволяет расширить документXMLатрибутами, которые не определены в схеме, и имеет следующий формат:
<префикс:anyAttribute
id = ID
namespace = ((##any | ##other) | List (anyURI |
(##targetNamespace | ##local))) : ##any
processContents = (strict | lax | skip) : strict
>
(annotation?)
</префикс:anyAttribute>
Атрибуты id,namespaceиprocessContentsв этом элементе имеют тот же смысл, что и в элементеany.
Пример использования элемента anyAttribute:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:anyAttribute>
</xs:complexType>
</xs:element>
С помощью элемента anyAttribute можно добавить любое число атрибутов в элементеperson.
4.2.9.4. ЭлементsimpleContent
Элемент simpleContentсодержит расширения и ограничения для комплексного типа, содержащего только текст или для простого типа, не содержащего элементов, в качестве содержимого.
Элемент simpleContent имеет следующий формат:
<префикс:simpleContent
id = ID
>
(annotation?, (restriction | extension))
</префикс:simpleContent>
Необязательный атрибут idопределяет уникальный идентификатор элемента.
В свою очередь, элемент simpleContent может содержать аннотацию и должен содержать один из элементовrestrictionилиextension.
Как и в элементе simpleType, элементrestrictionопределяет ограничения, но для элементаsimpleContentон имеет следующий формат:
<префикс:restriction
base = QName
id = ID
>
(annotation?, (simpleType?, (minExclusive | minInclusive |
maxExclusive | maxInclusive | totalDigits | fractionDigits |
length | minLength | maxLength |
enumeration | whiteSpace | pattern)*)?,
((attribute | attributeGroup)*, anyAttribute?))
</префикс:restriction>
Атрибуты id и base имеют тот же смысл, что и для элемента restriction в simpleType.
Пример использования элемента restriction:
<xs:element name="shoeSize">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="xs:integer">
<xs:minInclusive value="5"/>
<xs:maxInclusive value="47"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
В этом примере объявляется элемент комплексного типа shoeSize(размер обуви) и задаются ограничения на допустимый диапазон размеров обуви.
Элемент extensionопределяет расширения для элементовsimpleContentиcomplexContentи имеет следующий формат:
<префикс:extension
base = QName
id = ID
>
(annotation?, ((attribute | attributeGroup)*, anyAttribute?))
</префикс:extension>
Атрибуты idиbaseимеют тот же смысл, что и для элементаrestrictionвsimpleContent.
Пример использования элемента extension:
<xs:element name="shoeSize">
<xs:complexType>
<xs:simpleContent>
<xsd:extension base="xs:positiveInteger">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
В этом примере объявляется элемент комплексного типа shoeSize (размер обуви), содержимое которого имеет целый положительный тип данных и, кроме того, для элемента определен атрибутcountry(страна) с текстовым содержимым.