Freigeben über


Bindungsunterstützung für das fixed-Attribut

Dieses Thema bezieht sich auf eine veraltete Technologie. XML-Webdienste und XML-Webdienstclients sollten nun mithilfe der folgenden Technologie erstellt werden: Windows Communication Foundation.

.NET Framework stellt Bindungsunterstützung für das fixed-Attribut bereit.

Erklärung

Das fixed-Attribut kann in einer <element>-Deklaration oder einer <attribute>-Deklaration verwendet werden, um einen konstanten Wert zu definieren, den das Element oder Attribut in einem entsprechenden XML-Dokument haben muss. Das Attribut ist auch in Verbindung mit jedem Einschränkungsfacetelement zulässig, außer mit <enumeration> oder <pattern>. In diesem Fall wird durch den Wert true verhindert, dass in einer Ableitung der zugehörige Facetwert geändert wird.

.NET Framework beinhaltet keine Einschränkungsfacets für Datentypbindung oder Serialisierung (mit Ausnahme der zeichenfolgenbasierten Enumeration), sodass das fixed-Attribut zusammen mit dem Facet, in dem es auftritt, umgangen wird. Das Schemaobjektmodell stellt eine XmlSchemaFacet-Basisklasse mit einer IsFixed-Eigenschaft bereit.

Wenn das fixed-Attribut in einem **<element><-Element oder einem >**attribute-Element vorhanden ist, initialisiert Xsd.exe das Feld statisch mit dem Standardwert, wie im folgenden Beispiel dargestellt:

public int age = -1;

Gemäß XML-Schema muss der Wert des fixed-Attributs ein einfacher Typ des XML-Schemas sein. Nähere Informationen dazu, wie Xsd.exe feste Werte und Standardwerte für einfache Typen übersetzt, finden Sie in den Ausführungen zum default-Attribut.

Für Elemente und Attribute gilt, dass das Schemaobjektmodell das fixed-Attribut mithilfe der FixedValue-Eigenschaft der XmlSchemaAttribute-Klasse und der XmlSchemaElement-Klasse darstellt.

Example

XML-Schema-Eingabedokument:

<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>

Aus dem vorhergehenden XML-Schemadokument generierte C#-Klassen:

[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,
}

Von einer Assembly, die aus der vorherigen C#-Quelle kompiliert wurde, generiertes XML-Schemadokument:

<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>

Mögliche übergeordnete Elemente: <attribute>, <element>, verschiedene Einschränkungsfacets.

Siehe auch

Verweis

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