Freigeben über


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> element

Der XmlAttribute-Attributdeklaration wird ein Form=XmlSchemaForm.Qualified-Parameter übergeben.

Der XmlAttribute-Attributdeklaration für das <attribute>-Feld wird kein form-Parameter übergeben.

<element> 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 Form=XmlSchemaForm.Unqualified, übergeben.

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