Freigeben über


Bindungsunterstützung für das attributeGroup-Element

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 bietet partielle Bindungsunterstützung für das <attributeGroup>-Element.

Beim Generieren von Quellcode aus einem XML-Schemadokument erweitert Xsd.exe jeden <attributeGroup>-Verweis direkt in die Klasse, die der <complexType>-Definition entspricht, die den Verweis enthält.

Erklärung

Das <attributeGroup>-Element ermöglicht dem Schemadesigner, eine Gruppe von Attributen global zu definieren und diese Gruppe dann über Verweise in beliebig vielen komplexen Typen erneut zu verwenden.

In .NET Framework können Attributgruppen nicht direkt in Code ausgedrückt werden. Beim Generieren von Quellcode aus einem XML-Schemadokument erweitert Xsd.exe stattdessen jeden <attributeGroup>-Verweis über das ref-Attribut direkt in die Klasse, die der <complexType>-Definition entspricht, die den Verweis enthält. Für jedes Attribut wird ein öffentliches Feld erzeugt. Jedes öffentliche Feld wird mit dem XmlAttributeAttribute-Attribut angezeigt, das auch durch die Kurzform XmlAttribute ausgedrückt werden kann.

Wenn ein Entwickler nicht dieselbe Gruppe von Attributbindungsfeldern oder -eigenschaften direkt in mehreren Klassen definieren will, kann er manuell eine Basisklasse erstellen und die Klassen, die komplexen XML-Schematypen entsprechen, aus dieser Basisklasse erben lassen. Jedes öffentliche Feld und jede Eigenschaft sollte mit dem XmlAttribute-Attribut angegeben werden. Andernfalls wird es bzw. sie als Element in einem komplexen Typ interpretiert und nicht als Attribut.

Example

XML-Schema-Eingabedokument:

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

Aus dem vorherigen XML-Schemadokument generierte C#-Klasse:

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

Aus einer Assembly, die aus der vorherigen C#-Quelle kompiliert wurde, generierter komplexer XML-Schematyp:

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

Mögliche Attribute Bindungsunterstützung

id

Das Hilfsprogramm Xsd.exe ignoriert das id-Attribut, mit dem ein eindeutiger Bezeichner bereitgestellt werden soll.

name

Da das Hilfsprogramm Xsd.exe den Inhalt des <attributeGroup>-Elements anonym erweitert, wird der Gruppenname des Attributs ignoriert.

Weitere Informationen finden Sie in den Ausführungen zum Bindungsunterstützung für das name-Attribut-Attribut.

ref

In .NET Framework können Attributgruppen nicht direkt in Code ausgedrückt werden. Beim Generieren von Quellcode aus einem XML-Schemadokument erweitert Xsd.exe stattdessen den <attributeGroup>-Verweis auf eine global deklarierte Attributgruppe jedes ref-Attributs in die Klasse, die der <complexType>-Definition entspricht, die den Verweis enthält. Für jedes Attribut aus einer <attributeGroup> wird ein öffentliches Feld mit dem System.Xml.Serialization.XmlAttributeAttribute-Attribut erzeugt, das auch mit der Kurzform XmlAttribute ausgedrückt werden kann.

Mögliche übergeordnete Elemente: <attributeGroup>, <complexType>, <extension>, <redefine>, <restriction>, <schema>

Mögliche untergeordnete Elemente: <annotation>, <anyAttribute>, <attribute>, <attributeGroup>

Siehe auch

Verweis

XmlSchemaAttributeGroup
XmlSchemaAttributeGroupRef