Bindungsunterstützung für das complexType-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 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 Hilfsprogramm Xsd.exe setzt einen abstrakten komplexen Typ, der durch 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 Hilfsprogramm 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 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>