Поделиться через


Поддержка привязки элемента AttributeGroup

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

Платформа .NET Framework обеспечивает частичную поддержку привязки для элемента <attributeGroup>.

При создании исходного кода из документа схемы XML программа Xsd.exe разворачивает каждую ссылку <attributeGroup> непосредственно в класс, соответствующий определению <complexType>, содержащему эту ссылку.

Объяснение

Элемент <attributeGroup> позволяет конструктору схемы глобально определить группу атрибутов, а затем повторно использовать эту группу в любом количестве сложных типов посредством ссылок.

В платформе .NET Framework отсутствует идиома для представления групп атрибутов в коде. Вместо этого при создании исходного кода из документа схемы XML программа Xsd.exe разворачивает каждую ссылку <attributeGroup> с помощью атрибута ref непосредственно в класс, соответствующий определению типа <complexType>, содержащему эту ссылку. Для каждого атрибута создается открытое поле. Каждое открытое поле имеет атрибут XmlAttributeAttribute, который также может быть выражен сокращенным именем XmlAttribute.

Разработчик, желающий избежать определения одной и той же группы полей или свойств привязки атрибутов в нескольких классах, может вручную создать базовый класс, чтобы классы, представляющие сложные типы схемы XML, наследовали от этого базового класса. Каждое открытое поле должно иметь атрибут XmlAttribute, в противном случае оно интерпретируется как элемент сложного типа, а не как атрибут.

Example

Входной документ схемы XML:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
    <xsd:attributeGroup name="version">
      <xsd:attribute name="changeNumber" type="xsd:int" use="required"/>
      <xsd:attribute name="instanceId" type="xsd:string" use="required"/>
    </xsd:attributeGroup>
    <xsd:complexType name="keyInfo">
      <xsd:sequence>
        <xsd:element name="key" type="xsd:string"/>
      </xsd:sequence>
      <xsd:attributeGroup ref="version" />
    </xsd:complexType>
    <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Класс C#, созданный на основе приведенного выше документа схемы XML:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
        
    public string key;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public int changeNumber;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string instanceId;
}

Сложный тип схемы XML, созданный из сборки, скомпилированной на основе предыдущего исходного кода C#:

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="key" type="tns:keyInfo" />
  <xs:complexType name="keyInfo">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="key" type="xs:string" />
    </xs:sequence>
    <xs:attribute name="changeNumber" type="xs:int" />
    <xs:attribute name="instanceId" type="xs:string" />
  </xs:complexType>
</xs:schema>

Возможные атрибуты Поддержка привязки

id

Программа Xsd.exe игнорирует атрибут id, который предназначен для обеспечения уникального идентификатора.

имя

Так как программа Xsd.exe анонимно разворачивает содержимое элемента <attributeGroup>, имя группы атрибутов не учитывается.

См. описание атрибута Поддержка привязки атрибута Name.

ref

В платформе .NET Framework отсутствует идиома для представления групп атрибутов в коде. Вместо этого при создании исходного кода из документа схемы XML программа Xsd.exe непосредственно разворачивает каждую ссылку <attributeGroup> атрибута ref на глобально объявленную группу атрибутов в класс, соответствующий определению типа <complexType>, содержащему эту ссылку. Для каждого атрибута группы <attributeGroup> создается открытое поле с атрибутом System.Xml.Serialization.XmlAttributeAttribute, который также может быть выражен сокращенным именем XmlAttribute.

Возможные родительские элементы: <attributeGroup>, <complexType>, <extension>, <redefine>, <restriction>, <schema>

Возможные дочерние элементы: <annotation>, <anyAttribute>, <attribute>, <attributeGroup>

См. также

Справочник

XmlSchemaAttributeGroup
XmlSchemaAttributeGroupRef