Bindungsunterstützung für das value-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 partielle Bindungsunterstützung für das value-Attribut bereit.
Das Tool Xsd.exe übersetzt das value-Attribut eines <enumeration>-Facets in einen enum-Member von .NET Framework, wenn die Enumerationsbeschränkung auf einen zeichenfolgenbasierten Typ angewendet wird. Andernfalls werden zwischen den Facets des XML-Schemas und den Klassendefinitionen in .NET Framework keine Bindungen erstellt.
Erklärung
Die XML-Schemadefinitionssprache bietet verschiedene Mechanismen für das Ableiten neuer einfacher Typen durch Einschränkung der Werte der einfachen Basistypen. Diese Einschränkungen werden als Facets bezeichnet und als untergeordnete Elemente des <restriction>-Elements in einer <simpleType>-Definition (oder einer <simpleContent>-Definition) angegeben, die über den XPath-simpleType/restriction/facetName
gefunden wird, wobei facetName
das jeweilige Facet ist. Das value-Attribut des Facetelements gibt einen dem Facet entsprechenden Wert an.
Das value-Attribut in zeichenfolgenbasierten Enumerationen
Das Tool Xsd.exe übersetzt das value-Attribut eines <enumeration>-Facets in einen enum-Member von .NET Framework, wenn die Enumerationsbeschränkung auf einen zeichenfolgenbasierten Datentyp angewendet wird. Der Datentyp wird über das base-Attribut des <restriction>-Elements angegeben. In den Ausführungen zum <enumeration>-Element ist eine Liste der integrierten XML-Schemadatentypen aufgeführt, die vom Tool Xsd.exe als Zeichenfolgen interpretiert werden.
Ein Enumerationswert muss entweder als gültiger Konstantenname qualifiziert oder mit Xsd.exe in einen Konstantennamen konvertiert werden. Ein Beispiel ist der folgende Enumerationswert:
<xsd:enumeration value="IRISH CREAM" />
Dieser Wert wird in den folgenden enum-Member konvertiert:
[System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
IRISHCREAM,
Das einzelne Leerzeichen wird entfernt, um einen gültigen Konstantennamen zu erstellen. Zudem wird ein XmlEnumAttribute-Attribut auf den enum-Member angewendet. Der Attributparameter ändert den Enumerationswert für XML-Schema, der für den enum-Wert verwendet wird. Der Standardwert ist der enum-Wert selbst, in diesem Fall IRISHCREAM
. Bei einem Enumerationswert für XML-Schema, der bereits als gültiger Konstantenname qualifiziert ist, entfällt das XmlEnum-Attribut.
.NET Framework übersetzt eine numerische XSD-Enumeration nicht in eine enumDefinition, jedoch eine XSD-Enumeration mit Zeichenfolgen, deren Werte Ziffern sind. Über die folgende einfache Typdefinition wird eine Bindung mit einem enum-Typ erstellt, da base="xsd:string"
angegeben wird:
<xsd:simpleType name="Primes">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="5" />
<xsd:enumeration value="7" />
<xsd:enumeration value="11" />
<xsd:enumeration value="13" />
<xsd:enumeration value="17" />
</xsd:restriction>
</xsd:simpleType>
Der folgende enum-Typ wird erstellt:
public enum Primes {
[System.Xml.Serialization.XmlEnumAttribute("2")]
Item2,
[System.Xml.Serialization.XmlEnumAttribute("3")]
Item3,
[System.Xml.Serialization.XmlEnumAttribute("5")]
Item5,
[System.Xml.Serialization.XmlEnumAttribute("7")]
Item7,
[System.Xml.Serialization.XmlEnumAttribute("11")]
Item11,
[System.Xml.Serialization.XmlEnumAttribute("13")]
Item13,
[System.Xml.Serialization.XmlEnumAttribute("17")]
Item17,
}
Das XmlEnum-Attribut wird zum Überschreiben der Standardbindung des xsd:enumeration-Werts in einen Enumerationswert für XML Schema verwendet.
Andere Verwendungen des Wertattributs
Neben den Enumerationen mit zeichenfolgenbasierten Datentypen liegen keine Bindungen zwischen einfachen Typeinschränkungen, die die Facets des XML-Schemas verwenden, und den Klassendefinitionen in .NET Framework vor. Dies bedeutet Folgendes (mit Ausnahme der zeichenfolgenbasierten Enumerationen):
Beim Generieren von Quellcode aus einem XML-Schemadokument ignoriert Xsd.exe Einschränkungen bei einfachen Typen. Es wird einfach der .NET Framework-Typ erzeugt, der dem einfachen Basistyp entspricht.
Die XmlSerializer-Klasse ignoriert diese Einschränkungen, wenn sie Objekte nach XML serialisiert und aus XML deserialisiert.
In Bezug auf das Schemaobjektmodell verfügt der System.Xml.Schema-Namespace über eine abstrakte XmlSchemaFacet-Klasse mit einer Value-Eigenschaft. Die von XmlSchemaFacet für jedes der möglichen Einschränkungsfacets abgeleiteten Typen können für die programmgesteuerte Erstellung eines Schemaobjektmodells verwendet werden, bei dem Einschränkungen über Facets erfolgen.
Mögliche enthaltende Elemente: alle Einschränkungsfacets