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


Поддержка привязки фиксированного атрибута

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

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

Объяснение

Атрибут fixed может появляться в объявлении <element> или <attribute>, чтобы установить постоянное значение, которое элемент или атрибут должен иметь в XML-документе, соответствующем стандарту. Этот атрибут также может использоваться с любым элементом аспекта ограничения, кроме <enumeration> и <pattern>. В этом случае значение true исключает изменение сопутствующего значения аспекта при наследовании.

Платформа .NET Framework не содержит аспектов ограничения для привязок или сериализации типа данных (за исключением строкового перечисления), поэтому атрибут fixed пропускается вместе с аспектом, в котором он используется. Объектная модель схемы (SOM) предоставляет базовый класс XmlSchemaFacet со свойством IsFixed.

Если атрибут неизменности содержится в элементе <element> или <attribute>, то Xsd.exe статически инициализирует это поле со значением по умолчанию, как в приведенном ниже примере:

public int age = -1;

В соответствии со схемой XML, значение атрибута fixed должно быть простым типом схемы XML. Подробные сведения о том, как инструмент Xsd.exe преобразует фиксированные значения/значения по умолчанию, см. в описании атрибута default.

Для элементов и атрибутов объектная модель схемы содержит атрибут fixed со свойством FixedValue классов XmlSchemaAttribute и XmlSchemaElement.

Example

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

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

    <xsd:complexType name="FamilyDogType">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string" fixed="Spot"/>
            <xsd:element name="birthdate" type="xsd:date" />
        </xsd:sequence>
        <xsd:attribute name="gender" type="GenderType" fixed="UNKNOWN"/>
        <xsd:attribute name="fixed" type="xsd:boolean" fixed="false"/>
        <xsd:attribute name="breed" type="xsd:string" fixed="Swedish Vallhund"/>
    </xsd:complexType>
    
    <xsd:simpleType name="GenderType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="FEMALE" />
            <xsd:enumeration value="MALE" />
            <xsd:enumeration value="UNKNOWN" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

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

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("FamilyDog", Namespace="http://example.org/", IsNullable=false)]
 public class FamilyDogType {
        
     public string name = "Spot";
        
    [System.Xml.Serialization.XmlElementAttribute(DataType="date")]
    public System.DateTime birthdate;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public GenderType gender = GenderType.UNKNOWN;
        
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool genderSpecified;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool @fixed = false;
        
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool fixedSpecified;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string breed = "Swedish Vallhund";
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public enum GenderType {        
    FEMALE,    
    MALE,
    UNKNOWN,
}

Документ схемы 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="FamilyDog" type="tns:FamilyDogType" />
  <xs:complexType name="FamilyDogType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="name" type="xs:string" fixed="Spot"/>
      <xs:element minOccurs="1" maxOccurs="1" name="birthdate" type="xs:date" />
    </xs:sequence>
    <xs:attribute name="gender" type="tns:GenderType" />
    <xs:attribute name="fixed" type="xs:boolean" />
    <xs:attribute name="breed" type="xs:string" />
  </xs:complexType>
  <xs:simpleType name="GenderType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="FEMALE" />
      <xs:enumeration value="MALE" />
      <xs:enumeration value="UNKNOWN" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

Возможные содержащие элементы: <attribute>, <element>, различные аспекты ограничения

См. также

Справочник

System.Xml.Schema.XmlSchemaAttribute.FixedValue
System.Xml.Schema.XmlSchemaElement.FixedValue
System.Xml.Schema.XmlSchemaFacet.IsFixed