ѕредположим, мы хотим
обеспечить больше информации о каждом продукте в заказе на покупку. Ќапример,
вес каждого продукта и предпочтительный метод отгрузки. ћы можем достигнуть
этого, добав뤤 объ¤влени¤ атрибутов 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. ќтметим, что группа атрибутов может содержать другие группы атрибутов. ак объ¤влени¤ атрибутов, так и ссылки на группы атрибутов должны по¤вл¤тьс¤ в конце определений сложных типов.