ѕредположим, что мы хотим
обеспечить больше информации о каждом продукте в заказе на покупку, например,
вес каждого продукта и предпочтительный метод отгрузки. ћы можем достигнуть
этого, добав뤤 объ¤влени¤ атрибутов weightKg и shipBy к
(анонимному) определению типа элемента item
:
<xsd:element name=ФItemФ minOccurs=Ф0Ф maxOccurs=ФunboundedФ> <xsd:complexType> <xsd:sequence> <xsd:element name=ФproductNameФ type=Фxsd:stringФ/> <xsd:element name=ФquantityФ> <xsd:simpleType> <xsd:restriction base=Фxsd:positiveIntegerФ> <xsd:maxExclusive value=Ф100Ф/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name=ФUSPriceФ type=Фxsd:decimalФ/> <xsd:element ref=ФcommentФ minOccurs=Ф0Ф/> <xsd:element name=ФshipDateФ type=Фxsd:dateФ minOccurs=Ф0Ф/> </xsd:sequence> <xsd:attribute name=ФpartNumФ type=ФSKUФ use=ФrequiredФ/> <!-- add weightKg and shipBy attributes --> <xsd:attribute name=ФweightKgФ type=Фxsd:decimalФ/> <xsd:attribute name=ФshipByФ> <xsd:simpleType> <xsd:restriction base=Фxsd:stringФ> <xsd:enumeration value=ФairФ/> <xsd:enumeration value=ФlandФ/> <xsd:enumeration value=ФanyФ/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> </xsd:element>
јльтернативно,
мы можем создать именованную группу атрибутов, содержащую все необходимые
атрибуты элемента item
, и
ссылатьс¤ на эту группы по имени в объ¤вление элемента item
:
<xsd:element name=ФitemФ minOccurs="0" maxOccurs=ФunboundedФ> <xsd:complexType> <xsd:sequence> <xsd:element name=ФproductNameФ type=Фxsd:stringФ/> <xsd:element name=ФquantityФ> <xsd:simpleType> <xsd:restriction base=Фxsd:positiveIntegerФ> <xsd:maxExclusive value=Ф100Ф/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name=ФUSPriceФ type=Фxsd:decimalФ/> <xsd:element ref=ФcommentФ minOccurs=Ф0Ф/> <xsd:element name=ФshipDateФ type=Фxsd:dateФ minOccurs=Ф0Ф/> </xsd:sequence> <!-- attributeGroup replaces individual declarations --> <xsd:attributeGroup ref=ФItemDeliveryФ/> </xsd:complexType> </xsd:element> <xsd:attributeGroup name=ФItemDeliveryФ> <xsd:attribute name=ФpartNumФ type=ФSKUФ use=ФrequiredФ/> <xsd:attribute name=ФweightKgФ type=Фxsd:decimalФ/> <xsd:attribute name=ФshipByФ> <xsd:simpleType> <xsd:restriction base=Фxsd:stringФ> <xsd:enumeration value=ФairФ/> <xsd:enumeration value=ФlandФ/> <xsd:enumeration value=ФanyФ/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:attributeGroup>
»спользу¤,
таким образом, группу атрибутов можно улучшить читаемость схем, и облегчить
изменени¤ схемы, потому что группа атрибутов может быть определена и
отредактирована в одном месте, и на нее могут ссылатьс¤ в нескольких
определени¤х и объ¤влени¤х. Ёти характеристики групп атрибутов делают их
подобными параметрическим объектам в XML 1.0. ќтметим, что группа атрибутов может содержать другие группы
атрибутов. ак объ¤влени¤ атрибутов, так и ссылки группы атрибутов должны
по¤вл¤тьс¤ в конце определений сложных типов.