Поддержка привязки атрибута Value

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

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

Программа Xsd.exe преобразует атрибут value аспекта <enumeration> в член enum платформы .NET Framework, если ограничение перечисления применяется к строковому типу. В противном случае привязки между аспектами схемы XML и определениями классов в платформе .NET Framework отсутствуют.

Объяснение

Язык определения схемы XML предоставляет различные механизмы для получения новых простых типов путем ограничения значений базовых простых типов. Эти ограничения называются аспектами и задаются как дочерние элементы элемента <restriction> в определении <simpleType> (или <simpleContent>), которое можно найти с помощью элемента XPath simpleType/restriction/facetName, где facetName — конкретный аспект. Атрибут value элемента аспекта задает значение, соответствующее аспекту.

Атрибут value в перечислениях, основанных на строках

Программа Xsd.exe преобразует атрибут value аспекта <enumeration> в член enum платформы .NET Framework, если ограничение перечисления применяется к строковому типу данных. Тип данных задается с помощью атрибута base элемента <restriction>. Список встроенных типов данных схемы XML, интерпретируемых программой Xsd.exe как строки, см. в описании элемента <enumeration>.

Значение перечисления должно либо квалифицироваться как допустимое постоянное имя, либо преобразовываться программой Xsd.exe в постоянное имя. Примером может служить следующее значение перечисления:

<xsd:enumeration value="IRISH CREAM" />

Это значение преобразуется в следующий член enum:

[System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
IRISHCREAM,

Одиночный пробел удаляется для получения допустимого постоянного имени, и атрибут XmlEnumAttribute применяется к члену enum. Параметр атрибута изменяет значение перечисления схемы XML, используемое для этого значения enum. Значением по умолчанию является само значение enum, в данном случае IRISHCREAM. Для значения перечисления схемы XML, уже квалифицированного как допустимое постоянное имя, атрибут XmlEnum опускается.

Хотя платформа .NET Framework не преобразует численное перечисление XSD в определение enum, она преобразует строковое перечисление XSD, значения которого являются числами. Следующее определение простого типа привязывается к типу enum, так как оно задает base="xsd:string":

<xsd:simpleType name="Primes">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="2" />
        <xsd:enumeration value="3" />
        <xsd:enumeration value="5" />
        <xsd:enumeration value="7" />
        <xsd:enumeration value="11" />
        <xsd:enumeration value="13" />
        <xsd:enumeration value="17" />
    </xsd:restriction>
</xsd:simpleType>

Создается следующий тип enum:

public enum Primes { 
    [System.Xml.Serialization.XmlEnumAttribute("2")]
    Item2,
    [System.Xml.Serialization.XmlEnumAttribute("3")]
    Item3,
    [System.Xml.Serialization.XmlEnumAttribute("5")]
    Item5,
    [System.Xml.Serialization.XmlEnumAttribute("7")]
    Item7,
    [System.Xml.Serialization.XmlEnumAttribute("11")]
    Item11,
    [System.Xml.Serialization.XmlEnumAttribute("13")]
    Item13,
    [System.Xml.Serialization.XmlEnumAttribute("17")]
    Item17,
}

Вновь атрибут XmlEnum используется для переопределения привязки по умолчанию значения xsd:enumeration к значению перечисления схемы XML.

Другие применения атрибута Value

Помимо перечислений, основанных на типах данных, привязанных к строкам, не существует привязок между ограничениями на простые типы, использующими аспекты схемы XML, и определениями классов в платформе .NET Framework. Это означает следующее (за исключением перечислений, основанных на строках):

  • При создании исходного кода из документа схемы XML программа Xsd.exe игнорирует ограничения, накладываемые на простые типы; она просто создает тип .NET Framework, соответствующий базовому простому типу.

  • Класс XmlSerializer игнорирует эти ограничения при сериализации объектов в XML и десериализации из XML.

Что касается объектной модели схемы, пространство имен System.Xml.Schema содержит абстрактный класс XmlSchemaFacet со свойством Value. Типы, наследуемые от XmlSchemaFacet для каждого из возможных аспектов ограничения, можно использовать для программного создания объектной модели схемы, которая обеспечивает ограничения с помощью аспектов.

Возможные содержащие элементы: все аспекты ограничения

См. также

Справочник

Value