Поддержка привязки элемента 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, большими См. описание атрибута Поддержка привязки атрибута 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>