2.8 √руппы атрибутов

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

Сайт создан в системе uCoz