Bindungsunterstützung für das form-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 Bindungsunterstützung für das form-Attribut bereit.
Das Tool Xsd.exe setzt das form-XML-Attribut mit der Form-Eigenschaft des XmlAttribute-Attributs oder des XmlElement-Attributs gleich, obwohl der .NET Framework XML-Serialisierungscode einen anderen Standardwert für Elemente erkennt, nämlich qualified
.
Erklärung
Das XML-Schema erfordert, dass alle Elemente und Attribute, die (als untergeordnete Elemente des <schema>-Elements) global deklariert sind, in einem Instanzendokument als durch einen Namespace gekennzeichnet erscheinen. Für lokal deklarierte Elemente und Attribute (innerhalb einer <complexType>-Definition), ist die Kennzeichnung durch einen Namespace optional.
Um anzugeben, ob ein bestimmtes lokales Element oder Attribut durch einen Namespace gekennzeichnet werden soll, wird das form-Attribut einer lokalen <element>-Deklaration oder <attribute>-Deklaration hinzugefügt. Die möglichen Werte sind qualified
und unqualified
.
Der Standardwert des form-Attributs wird entweder vom elementFormDefault-Attribut oder vom attributeFormDefault-Attribut des <schema>-Stammelements geerbt. Für beide Attribute lautet der Standardwert unqualified
.
.NET Framework kennt keine Möglichkeit, form auf globaler oder schemaweiter Ebene innerhalb einer Klassendefinition festzulegen. Stattdessen erzeugt Xsd.exe beim Generieren eines XML-Schemadokuments aus einem Satz an Klassen ein XML-Schema, das die folgenden Merkmale aufweist:
Gibt keinen attributeFormDefault an und stellt den Standard
unqualified
wieder her.Gibt
elementFormDefault="qualified"
an und verwendet so einen anderen Standardwert als das XML-Schema.
Xsd.exe reagiert auf alternative Werte für den attributeFormDefault="qualified"
-Standardwert und den elementFormDefault="unqualified"
-Standardwert mit dem Festlegen von form für jedes einzelne Feld.
Gemäß diesen Einschränkungen generiert Xsd.exe Quellcode aus dem form-Attribut wie in folgender Tabelle dargestellt.
form-Attribut |
form="qualified" |
form="unqualified" |
<attribute> |
Der XmlAttribute-Attributdeklaration wird ein |
Der XmlAttribute-Attributdeklaration für das <attribute>-Feld wird kein form-Parameter übergeben. |
<element> |
Kein XmlElement-Attribut wird angewendet, es sei denn, um einen nicht verwandten Parameter zu übergeben. |
Der XmlElement-Attributdeklaration für das <element>-Feld wird ein Parameter, nämlich |
Der Parameter, der der XmlAttribute-Deklaration oder der XmlElement-Deklaration übergeben wird, legt die Form-Eigenschaft fest, deren mögliche Werte der XmlSchemaForm-Enumeration entstammen.
XmlSchemaForm.Qualified
XmlSchemaForm.Unqualified
XmlSchemaForm.None: der Standard
Form wird nur dann im Quellcode angegeben, wenn es auf den Nicht-Standardwert im ursprünglichen XML-Schemadokument festgelegt wird, entsprechend den .NET Framework-Standards im Gegensatz zu den XML-Schemastandards. Da das form-Attribut das attributeFormDefault-Attribut und das elementFormDefault-Attribut überschreibt, erzeugt ein Schema, das auf <schema>-Ebene form auf den Nicht-Standardwert festlegt und dann auf <attribute>-Ebene oder <element>-Ebene form auf den Standardwert festlegt, einen Quellcode, der form nicht angibt. Im Hinblick auf übereinstimmende Instanzendokumente ändert sich die Bedeutung nicht.
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:element name="ComplexInstance" type="MyComplexType"/>
<xsd:complexType name="MyComplexType">
<xsd:sequence>
<xsd:element name="elementQ" type="xsd:decimal" form="qualified" />
<xsd:element name="elementU" type="xsd:Date" form="unqualified" />
</xsd:sequence>
<xsd:attribute name="attributeQ" type="xsd:string" use="required" form="qualified"/>
<xsd:attribute name="attributeU" type="xsd:boolean" use="required" form="unqualified"/>
</xsd:complexType>
</xsd:schema>
Aus dem vorhergehenden XML-Schemadokument generierte C#-Klasse:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("ComplexInstance", Namespace="http://example.org/", IsNullable=false)]
public class MyComplexType {
public System.Decimal elementQ;
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string elementU;
[System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
public string attributeQ;
[System.Xml.Serialization.XmlAttributeAttribute()]
public bool attributeU;
}
Ein XML-Schemadokument, das aus einer Assembly generiert wurde, die ihrerseits aus dem vorhergehenden C#-Quellcode kompiliert wurde.
<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ComplexInstance" type="tns:MyComplexType" />
<xs:complexType name="MyComplexType">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="elementQ" type="xs:decimal" />
<xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="elementU" type="xs:string" />
</xs:sequence>
<xs:attribute form="qualified" name="attributeQ" type="xs:string" />
<xs:attribute name="attributeU" type="xs:boolean" use="required" />
</xs:complexType>
</xs:schema>
Mögliche übergeordnete Elemente: <attribute>, <element>
Siehe auch
Verweis
System.Xml.Schema.XmlSchemaAttribute.Form
System.Xml.Schema.XmlSchemaElement.Form