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


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

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

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

Платформа .NET Framework обеспечивает точные привязки для объявлений атрибутов XML со списочными типами, но не для объявлений элементов.

Объяснение

Конструкция <list> используется для определения простого типа, возможные значения которого — ряд разделяемых пробелами значений другого простого типа. Типы, выступающие в качестве стандартных блоков, называются атомарными типами, так как их невозможно разделить ни на какие значащие элементы. Любой простой тип, кроме списочного типа или типа объединения, является атомарным.

В следующем примере кода показано создание списочного типа, где значениями могут быть десятичные числа, разделенные пробелами.

<xsd:simpleType name="numbersList">
  <xsd:list itemType="xsd:Decimal"/>
</xsd:simpleType>

Платформа .NET Framework обеспечивает привязки для элемента <list>, когда он определяет типы атрибутов, но не типы элементов.

Если при создании исходного кода из документа схемы XML программа Xsd.exe встречает элемент списочного типа, она создает поле типа .NET Framework, соответствующего составляющему типу списка, представляемому значением атрибута itemTypeXmlAttributeAttribute. Для строковых типов это преобразование с технической точки зрения правильно, так как строка строк по-прежнему является строкой. Для списочных типов, основанных на других простых типах, например десятичном типе в предыдущем примере, такое преобразование ошибочно.

Если программа Xsd.exe встречает атрибут списочного типа, она создает поле, тип которого — массив типа .NET Framework, соответствующего значению атрибута itemType. Это поле отображается с атрибутом. Ниже приведен пример созданного поля.

[System.Xml.Serialization.XmlAttributeAttribute()]
public System.Decimal[] numbers;

Аналогично, при создании документа схемы XML из ряда классов, программа Xsd.exe ищет в поле или свойстве следующие условия для создания списочного типа:

  • тип поля или свойства — массив, тип которого можно сопоставить с простым типом;

  • поле или свойство отображается с атрибутом XmlAttribute.

Это сочетание может быть выражено только как тип <list>, поскольку атрибут XML должен иметь простой тип, иначе массив будет связан со сложным типом (с атрибутом maxOccurs, имеющим значение unbounded).

Пример

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

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="alphabet" type="AlphabetType"/>

    <xsd:complexType name="AlphabetType">
        <xsd:sequence>
            <xsd:element name="language" type="xsd:string"/>
            <xsd:element name="count" type="xsd:decimal"/>
        </xsd:sequence>
        <xsd:attribute name="letters">
            <xsd:simpleType>
                <xsd:list itemType="Character"/>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>

    <xsd:simpleType name="Character">
        <xsd:restriction base="xsd:string">
            <xsd:length value="1"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

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

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("alphabet", Namespace="http://example.org/", IsNullable=false)]
public class AlphabetType {
        
    public string language;
        
    public System.Decimal count;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string[] letters;
}

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

<xs:complexType name="AlphabetType">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" name="language" type="xs:string" />
    <xs:element minOccurs="1" maxOccurs="1" name="count" type="xs:decimal" />
  </xs:sequence>
  <xs:attribute name="letters">
    <xs:simpleType>
      <xs:list itemType="xs:string" />
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

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

id

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

itemType

Когда списочный тип используется в качестве атрибута XML (но не в качестве элемента), программа Xsd.exe создает поле, являющееся массивом типа .NET Framework, соответствующего значению атрибута itemType.

Возможные родительские элементы: <simpleType>

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

См. также

Справочник

XmlSchemaSimpleTypeList