Freigeben über


Bindungsunterstützung für das complexType-Element

.NET Framework stellt Bindungsunterstützung für das <complexType>-Element bereit.

Das Tool Xsd.exe setzt komplexe XML-Schematypen mit .NET Framework-Typen gleich, deren öffentliche Felder oder Eigenschaften den Inhalt des komplexen Typs darstellen.

Erklärung

Das Tool Xsd.exe setzt komplexe XML-Schematypen mit .NET Framework-Typen gleich, deren öffentliche Felder den Inhalt des komplexen Typs darstellen.

Abstract-Attribut

Ein komplexer Typ wird als abstrakt (abstract="true") deklariert, um sicherzustellen, dass in einem konformen XML-Dokument nur Instanzen abgeleiteter Typen und keine Instanzen des abstrakten Basistyps vorkommen.

Xsd.exe setzt einen abstrakten komplexen Typ mit einer abstrakten Klasse gleich. Die Konvertierung funktioniert in beide Richtungen zwischen Code und XSD-Dokumenten.

Abgesehen von der Verwendung des Schlüsselworts abstract wird die abstrakte Klasse wie eine nicht abstrakte Basisklasse behandelt. Untergeordnete Klassen erweitern die Basisklasse. Xsd.exe wendet ein System.Xml.Serialization.XmlIncludeAttribute für jede abgeleitete Klasse auf die abstrakte Klasse an. Jedes XmlInclude-Attribut gibt den Typ der entsprechenden untergeordneten Klasse an.

Beispiel: Abstract-Attribut

Im folgenden Codebeispiel wird die Verwendung des abstract-Attributs mit dem <complexType>-Element veranschaulicht.

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="FamilyNode" type="FamilyNodeType" />
  <xsd:complexType name="FamilyNodeType">
    <xsd:sequence>
      <xsd:element name="Code" type="xsd:string" />
      <xsd:element name="Parent" type="Parent" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="Daughter">
    <xsd:complexContent>
      <xsd:extension base="Parent">
        <xsd:sequence>
          <xsd:element name="Date" type="xsd:dateTime" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Son">
    <xsd:complexContent>
      <xsd:extension base="Parent">
        <xsd:sequence>
          <xsd:element name="Info" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Parent" abstract="true">
    <xsd:sequence>
      <xsd:element name="Text" type="xsd:normalizedString" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="Grandchild">
    <xsd:complexContent>
      <xsd:extension base="Daughter">
        <xsd:attribute name="Parent" type="xsd:normalizedString" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>

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

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("FamilyNode", Namespace="http://example.org/", IsNullable=false)]
public class FamilyNodeType {
        
    public string Code;
        
    public Parent Parent;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Son))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Daughter))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Grandchild))]
public abstract class Parent {
    [System.Xml.Serialization.XmlElementAttribute(DataType="normalizedString")]
    public string Text;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public class Son : Parent {        
    public string Info;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Grandchild))]
public class Daughter : Parent {
        
    public System.DateTime Date;
        
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool DateSpecified;
}
    
 [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public class Grandchild : Daughter {        
    [System.Xml.Serialization.XmlAttributeAttribute("Parent", DataType="normalizedString")]
    public string Parent1;
}

Das XML-Schema, das aus den aus dem vorhergehenden C#-Quellcode kompilierten Klassen generiert wurde, entspricht dem ursprünglichen XML-Schema.

Mögliche Attribute Bindungsunterstützung

abstract

Das Dienstprogramm Xsd.exe setzt einen abstrakten komplexen Typ, der durch abstract="true" gekennzeichnet ist, mit einer abstrakten Klasse gleich. Für jede Klasse, die von der abstrakten Klasse erbt, übernimmt Xsd.exe ein System.Xml.Serialization.XmlIncludeAttribute in die abstrakte Klasse, mit dem der Typ der untergeordneten Klasse angegeben wird.

Siehe den vorangehenden Abschnitt, Abstract Attribute.

block

Das block-Attribut kann auf einen Datentyp angewendet werden, um zu verhindern, dass abgeleitete Datentypen anstelle des ursprünglichen Datentyps verwendet werden, wenn der ursprüngliche Datentyp angegeben wurde.

Das Tool Xsd.exe ignoriert das block-Attribut sowie das blockDefault-Attribut des Bindungsunterstützung für das schema-Element-Elements.

final

Das final-Attribut kann auf einen Datentyp angewendet werden, um zu verhindern, dass von diesem Datentyp andere Datentypen abgeleitet werden.

Xsd.exe ignoriert das final-Attribut sowie das finalDefault-Attribut des <schema>-Elements.

id

Das Dienstprogramm Xsd.exe ignoriert das id-Attribut, mit dem ein eindeutiger Bezeichner bereitgestellt werden soll. Stattdessen erkennt Xsd.exe das name-Attribut.

mixed

Weitere Informationen finden Sie in der Beschreibung des mixed-Attributs.

name

Der Wert des name-Attributs wird zum Namen des .NET Framework-Typs, der von Xsd.exe aus dem komplexen Typ generiert wird.

Es wird nicht versucht, die Groß-/Kleinschreibung zu ändern, um die Codierungskonventionen zu befolgen. Wenn das name-Attribut eines <complexType>-Elements beispielsweise über den Wert testInfo verfügt, trägt die entsprechende Klasse den Namen testInfo und nicht TestInfo beginnend mit einem Großbuchstaben. Wenn ein Name mit einem reservierten Schlüsselwort in Konflikt steht, ist dem sich ergebenden Namen das Symbol @ vorangestellt.

Wenn Xsd.exe eine <complexType>-Definition aus einer Klasse generiert, wird als Wert des name-Attributs der Klassenname verwendet. Ein alternativer Name (der Wert des name-Attributs) kann über die TypeName-Eigenschaft angegeben werden.

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

Mögliche übergeordnete Elemente: <element>, <redefine>, <schema>

Mögliche untergeordnete Elemente: <all>, <annotation>, <anyAttribute>, <attribute>, <attributeGroup>, <choice>, <complexContent>, <group>, <sequence>, <simpleContent>

Siehe auch

Referenz

XmlSchemaComplexType

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.