Поддержка привязки элемента 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>