Bindungsunterstützung für das list-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 teilweise Bindungsunterstützung für das <list>-Element bereit.
.NET Framework stellt exakte Bindungen für XML-Attributdeklarationen mit Listentypen, jedoch nicht für Elementdeklarationen bereit.
Erklärung
Das <list>-Konstrukt wird zum Definieren eines einfachen Typs verwendet, dessen mögliche Werte eine durch Leerzeichen gegliederte Wertefolge von einem anderen einfachen Typ sind. Die als Bausteine dienenden Typen werden als unteilbare Typen bezeichnet, da sie in keine Bedeutungseinheiten untergliedert werden können. Jeder einfache Typ ist unteilbar, mit Ausnahme eines Listentyps oder Union-Typs.
Im folgenden Beispiel ist die Erstellung eines Listentyps dargestellt, der durch Leerzeichen gegliederte Dezimalwerte enthalten kann:
<xsd:simpleType name="numbersList">
<xsd:list itemType="xsd:Decimal"/>
</xsd:simpleType>
.NET Framework stellt Bindungen für das <list>-Element zum Definieren von Attributtypen, jedoch nicht von Elementtypen bereit.
Wenn Xsd.exe beim Generieren von Quellcode aus einem XML-Schemadokument ein Element mit einem Listentyp findet, wird ein Feld erstellt, dessen .NET Framework-Typ dem konstituierenden Typ der Liste entspricht, der wiederum der Wert des itemTypeXmlAttributeAttribute-Attributs ist. Bei zeichenfolgenbasierten Typen ist diese Übersetzung technisch korrekt, da eine Zeichenfolge von Zeichenfolgen weiterhin eine Zeichenfolge ist. Bei auf anderen einfachen Typen beruhenden Listentypen, z. B. bei dem Typ mit Dezimalwerten im vorigen Beispiel, treten bei der Übersetzung Fehler auf.
Wenn Xsd.exe ein Attribut mit einem Listentyp findet, wird ein Feld erstellt, dessen Typ ein Array des .NET Framework-Typs ist, der dem Wert des itemType-Attributs entspricht. Das Feld wird mit dem Attribut angezeigt. Es folgt ein Beispiel für ein generiertes Feld:
[System.Xml.Serialization.XmlAttributeAttribute()]
public System.Decimal[] numbers;
Beim Generieren eines XML-Schemadokuments aus einer Reihe von Klassen prüft Xsd.exe für die Erstellung eines Listentyps zudem, ob einFeld oder eine Eigenschaft die folgenden Bedingungen erfüllt:
Der Typ des Felds oder der Eigenschaft ist ein Array eines Typs, der einem einfachen Typ zugeordnet werden kann.
Das Feld oder die Eigenschaft wird mit dem XmlAttribute-Attribut angegeben.
Diese Kombination kann nur als <list>-Typ ausgedrückt werden, da ein XML-Attribut über einen einfachen Typ verfügen muss und ein Array andernfalls an einen komplexen Typ gebunden ist (dabei ist das maxOccurs-Attribut auf unbounded
festgelegt).
Beispiel
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="alphabet" type="AlphabetType"/>
<xsd:complexType name="AlphabetType">
<xsd:sequence>
<xsd:element name="language" type="xsd:string"/>
<xsd:element name="count" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="letters">
<xsd:simpleType>
<xsd:list itemType="Character"/>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
<xsd:simpleType name="Character">
<xsd:restriction base="xsd:string">
<xsd:length value="1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Aus dem vorherigen XML-Schemadokument generierte C#-Klasse:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("alphabet", Namespace="http://example.org/", IsNullable=false)]
public class AlphabetType {
public string language;
public System.Decimal count;
[System.Xml.Serialization.XmlAttributeAttribute()]
public string[] letters;
}
Komplexer XML-Schematyp, der aus einer Assembly generiert wurde, deren Kompilierung von der vorhergehenden C#-Quelle ausgeführt wurde
<xs:complexType name="AlphabetType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="language" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="count" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="letters">
<xs:simpleType>
<xs:list itemType="xs:string" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
Mögliche Attribute | Bindungsunterstützung |
---|---|
id |
Das Hilfsprogramm Xsd.exe ignoriert das id-Attribut, mit dem ein eindeutiger Bezeichner bereitgestellt werden soll. |
itemType |
Wenn ein Listentyp als XML-Attribut (jedoch nicht als Element) verwendet wird, erstellt das Tool Xsd.exe ein Feld, das ein Array des .NET Framework-Typs ist, der dem Wert des itemType-Attributs entspricht. |
Mögliche übergeordnete Elemente: <simpleType>
Mögliche untergeordnete Elemente: <annotation>, <simpleType>