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

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

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

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

Объяснение

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

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

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

Язык определения схемы XML допускает появление ссылки <group> с атрибутом maxOccurs, имеющим значение, превосходящее 1. Для правильного импорта схем с несколькими экземплярами групп используйте для программы Xsd.exe параметр командной строки /order. (По умолчанию при формировании исходного кода из такой схемы XML программа Xsd.exe неправильно создает массив для каждого элемента группы. Если включен параметр /order, для всех членов группы будет создан один массив с несколькими атрибутами XmlElementAttribute, по одному на каждого члена группы.)

Example

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

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
    <xsd:group name="version">
      <xsd:sequence>
        <xsd:element name="changeNumber" type="xsd:int"/>
        <xsd:element name="instanceId" type="xsd:string"/>
      </xsd:sequence>
    </xsd:group>
    <xsd:complexType name="keyInfo">
      <xsd:sequence>
        <xsd:element name="key" type="xsd:string"/>
        <xsd:group ref="version" />
      </xsd:sequence>
    </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;
        
    public int changeNumber;
        
    public string instanceId;
}

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

<xs:complexType name="keyInfo">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" name="key" type="xs:string" />
    <xs:element minOccurs="1" maxOccurs="1" name="changeNumber" type="xs:int" />
    <xs:element minOccurs="0" maxOccurs="1" name="instanceId" type="xs:string" />
  </xs:sequence>
</xs:complexType>

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

id

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

maxOccurs

При создании исходного кода из документа схемы XML, содержащего группы с несколькими атрибутами maxOccurs, большими 1, используйте параметр командной строки /order.

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

minOccurs

При создании исходного кода из документа схемы XML программа Xsd.exe не обрабатывает атрибут minOccurs для элемента <group>.

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

name

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

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

ref

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

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

Возможные дочерние элементы: <all>, <annotation>, <choice>, <sequence>

См. также

Справочник

XmlSchemaGroup
XmlSchemaGroupRef