Freigeben über


Bindungsunterstützung für das schema-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 <schema>-Element bereit.

Das <schema>-Element ist das Stammelement eines XML-Schemadokuments.

Erklärung

Das <schema>-Element ist das Stammelement eines XML-Schemadokuments.

Von den Attributen des <schema>-Elements verfügen die Attribute blockDefault, finalDefault, id und version über keine Bindungen an .NET Framework-Codeentitäten. Das targetNamespace-Attribut wird erkannt, das attributeFormDefault-Attribut und das elementFormDefault-Attribut werden teilweise erkannt. Siehe folgende Tabelle. Nähere Informationen finden Sie in den Themen zu den einzelnen Attributen.

TargetNamespace-Attribut

Das targetNamespace-Attribut des <schema>-Stammelements gibt den Namespace des Schemas als Uniform Resource Identifier (URI) an. Das Tool Xsd.exe ordnet das targetNamespace-Attribut des <schema>-Elements den Namespace-Eigenschaften verschiedener XML-verwandter Attribute zu.

Beim Generieren von Quellcode aus einem XML-Schemadokument verwendet Xsd.exe den targetNamespace-Wert wie folgt:

  • Für jeden generierten Typ, der einem Datentyp in dem Schema entspricht, legt Xsd.exe die System.Xml.Serialization.XmlTypeAttribute.Namespace-Eigenschaft auf den targetNamespace-Wert fest.

  • Für jeden generierten Typ, der einem Datentyp entspricht, der als Stamm eines schemakonformen XML-Dokuments auftreten kann, legt Xsd.exe die System.Xml.Serialization.XmlRootAttribute.Namespace-Eigenschaft auf den targetNamespace-Wert fest. Ein Datentyp kann als ein Dokumentstamm auftreten, wenn er von einem <element>-Element verwendet wird, das global deklariert ist (als untergeordnetes Element des <schema>-Stammelements).

Beim Generieren eines XML-Schemadokuments aus einem Satz an Klassen in einer Assembly erzeugt Xsd.exe ein XML-Schemadokument mit einem eindeutigen targetNamespace-Attribut für jeden eindeutigen Wert, den es in der Namespace-Eigenschaft bestimmter XML-Attributklassen vorfindet. Die Eigenschaft wird folgendermaßen dargestellt:

AttributeFormDefault-Attribut

Das Hilfsprogramm Xsd.exe generiert XML-Schemas, die das globale attributeFormDefault-Attribut nicht angegeben. Wenn es das Attribut in einem vorhandenen Schema findet, legt es die Form-Eigenschaft des XmlAttributeAttribute bei jedem nicht überschriebenen Feld entsprechend fest.

Erklärung: AttributeFormDefault-Attribut

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.

Zur Steuerung der Kennzeichnung durch einen Namespace für alle lokalen Elemente und Attribute, die in einem XML-Schemadokument deklariert sind, verwenden Sie das elementFormDefault-Attribut bzw. das attributeFormDefault-Attribut des <schema>-Stammelements. Bei beiden Attributen sind die Werte qualified oder unqualified möglich, wobei der Standard unqualified ist.

Zusätzlich kann das form-Attribut bei einer lokalen <element>-Deklaration oder <attribute>-Deklaration zum Überschreiben des Schemastandards für dieses bestimmte Element oder Attribut verwendet werden.

Die folgende Tabelle beschreibt, wie Xsd.exe die drei Auswahlmöglichkeiten für attributeFormDefault verarbeitet: qualified, unqualified, nicht angegeben. (Bedenken Sie, dass Xsd.exe beim Generieren von Quellcode aus einem XML-Schemadokument für jedes XML-Attribut ein öffentliches Feld erzeugt und darauf das .NET Framework-XmlAttributeAttribute-Attribut anwendet.)

Mögliche attributeFormDefault-Werte

Von Xsd.exe aus XSD generierter Quellcode

Von Xsd.exe generiertes XSD aus der Assembly, die aus gleicher Quelle kompiliert wurde

attributeFormDefault="unqualified"

Klassen und jene Felder, die Attributen entsprechen, erscheinen ohne angegebenes form

Nicht angegeben, stellt den Standard attributeFormDefault="unqualified" wieder her.

Unspecified

Klassen und jene Felder, die Attributen entsprechen, erscheinen ohne angegebenes form

Nicht angegeben, stellt den Standard attributeFormDefault="unqualified" wieder her.

attributeFormDefault="qualified"

Felder, die sowohl lokal deklarierten Attributen als auch global deklarierten Attributen entsprechen, auf die verwiesen wird, erscheinen mit einem XmlAttribute-Attribut, dem Form=XmlSchemaForm.Qualified übergeben wird.

Nicht angegeben, stellt den Standard attributeFormDefault="unqualified" wieder her.

Außerdem gibt jede Attributdeklaration form="qualified" an. Dies schließt global deklarierte Attribute ein, auf die verwiesen wird.

Der Parameter, der der XmlAttribute-Deklaration übergeben wird, legt die Form-Eigenschaft fest, deren mögliche Werte aus der XmlSchemaForm-Enumeration stammen.

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: der Standard

Eine Folge der Verwendung eines XmlAttribute-Parameters ist, dass das, was im ursprünglichen XSD-Dokument eine globale Einstellung gewesen ist, nun bei jedem einzelnen XML-Attribut im Quellcode und im generierten XDS angegeben wird. Das globale attributeFormDefault-Attribut wird stets als nicht angegeben betrachtet und stellt den Standardwert von unqualified wieder her.

Beispiel: AttributeFormDefault-Attribut

XML-Schema-Eingabedokument mit attributeFormDefault="qualified":

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:attribute name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
    <xsd:attribute ref="version" />
    <xsd:attribute name="public" type="xsd:boolean" use="required"/>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Aus dem vorherigen XML-Schemadokument generierte C#-Klasse:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string version;
        
    System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public bool @public;
}

XML-<schema>-Stammelement generiert aus einer Assembly, die aus dem vorhergehenden C#-Quellcode kompiliert wurde (Attributdeklarationen erscheinen auch ohne form-Attribut):

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   ...
</xs:schema>

ElementFormDefault-Attribut

Das Hilfsprogramm Xsd.exe generiert XML-Schemas, die das globale elementFormDefault-Attribut auf "qualified" festgelegt belassen. Wenn es das Attribut in einem vorhandenen Schema findet, legt es die Form-Eigenschaft des XmlElementAttribute bei jedem nicht überschriebenen Feld entsprechend fest.

Erklärung: ElementFormDefault-Attribut

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.

Zur Steuerung der Kennzeichnung durch einen Namespace für alle lokalen Elemente und Attribute, die in einem XML-Schemadokument deklariert sind, verwenden Sie das elementFormDefault-Attribut bzw. das attributeFormDefault-Attribut des <schema>-Stammelements. Bei beiden Attributen sind die Werte qualified oder unqualified möglich, wobei der Standard unqualified ist.

Zusätzlich kann das form-Attribut bei einer lokalen <element>-Deklaration oder <attribute>-Deklaration zum Überschreiben des Schemastandards für dieses bestimmte Element oder Attribut verwendet werden.

Zwar ist der Standardwert von elementFormDefault unqualified, aber .NET Framework behandelt den Standard tatsächlich als qualified; dennoch wird die Verwendung von unqualified akzeptiert. Die folgende Tabelle beschreibt, wie Xsd.exe die drei Auswahlmöglichkeiten für elementFormDefault verarbeitet: qualified, unqualified, nicht angegeben. (Bedenken Sie, dass Xsd.exe beim Generieren von Quellcode aus einem XML-Schemadokument für jedes XML-Element ein öffentliches Feld erzeugt.)

Mögliche elementFormDefault-Werte

Von Xsd.exe aus XSD generierter Quellcode

Von Xsd.exe generiertes XSD aus der Assembly, die aus gleicher Quelle kompiliert wurde

elementFormDefault="qualified"

Klassen und jene Felder, die Elementen entsprechen, erscheinen ohne angegebenes form.

elementFormDefault="qualified"

Unspecified

Klassen und jene Felder, die Elementen entsprechen, erscheinen ohne angegebenes form.

elementFormDefault="qualified"

elementFormDefault="unqualified"

Felder, die lokal deklarierten Elementen entsprechen, erscheinen mit einem XmlElement-Attribut, dem Form=XmlSchemaForm.Unqualified übergeben wird. Felder, die global deklarierten Elementen entsprechen, auf die verwiesen wird, erscheinen ohne angegebenes form.

elementFormDefault="qualified"

Außerdem verwendet jedes Element, das ursprünglich lokal deklariert war, form="unqualified". Elemente, die ursprünglich global deklariert waren, erscheinen lokal ohne ein form-Attribut.

Der Parameter, der 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

Eine Folge der Verwendung eines XmlElement-Parameters ist, dass das, was im ursprünglichen XSD-Dokument eine globale Einstellung gewesen ist, nun bei jedem einzelnen XML-Element im Quellcode und im generierten XDS angegeben wird. Es wird stets davon ausgegangen, dass das globale elementFormDefault-Attribut den Wert qualified hat.

Beispiel: ElementFormDefault-Attribut

XML-Schema-Eingabedokument mit elementFormDefault="unqualified":

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="unqualified">
  <xsd:element name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
      <xsd:sequence>
      <xsd:element ref="version" />
      <xsd:element name="public" type="xsd:boolean" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Aus dem vorhergehenden XML-Schemadokument generierte C#-Klasse:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
 public class keyInfo {
        
     public string version;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public bool @public;
}

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="key" type="tns:keyInfo" />
  <xs:complexType name="keyInfo">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="public" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Mögliche Attribute Bindungsunterstützung

attributeFormDefault

.NET Framework erkennt den Standardwert unqualified. Das Tool Xsd.exe übersetzt einen qualified-Wert für jedes Feld einzeln, indem die Form-Eigenschaft des XmlAttributeAttribute bei jedem nicht überschriebenen Feld entsprechend festgelegt wird.

Siehe vorhergehenden Abschnitt AttributeFormDefault-Attribut.

blockDefault

Das blockDefault-Attribut des <schema>-Elements stellt einen Standardwert für die block-Attribute des <complexType>-Elements und des <element>-Elements bereit.

Das Tool Xsd.exe ignoriert das blockDefault-Attribut des <schema>-Elements ebenso wie das block-Attribute in dessen jeweiligen Elementen.

elementFormDefault

.NET Framework verwendet tatsächlich einen anderen Standardwert, nämlich qualified. Das Tool Xsd.exe generiert stets ein <schema>-Element mit elementFormDefault="qualified". Das Tool Xsd.exe übersetzt einen unqualified-Wert für jedes Feld einzeln, indem die Form-Eigenschaft des XmlElementAttribute bei jedem nicht überschriebenen Feld entsprechend festgelegt wird.

Siehe vorhergehenden Abschnitt zum elementFormDefault-Attribut.

finalDefault

Das finalDefault-Attribut des <schema>-Elements stellt einen Standardwert für die final-Attribute bestimmter Elemente bereit.

Das Tool Xsd.exe ignoriert das finalDefault-Attribut des <schema>-Elements ebenso wie das final-Attribute in dessen jeweiligen Elementen.

id

Das Hilfsprogramm Xsd.exe ignoriert das id-Attribut, mit dem ein eindeutiger Bezeichner bereitgestellt werden soll.

xml:lang

Xsd.exe ignoriert das lang-Attribut vom Namespace http://www.w3.org/XML/1198, wenn es im <schema>-Stammelement verwendet wird.

targetNamespace

Das Tool Xsd.exe ordnet das targetNamespace-Attribut des <schema>-Elements den Namespace-Eigenschaften verschiedener XML-spezifischer Attribute zu. Welche Attribute verwendet werden, hängt von der Richtung der Übersetzung ab.

Siehe vorhergehenden Abschnitt TargetNamespace-Attribut.

version

Das version-Attribut ist für Dokumentation verfügbar. Das Tool Xsd.exe ignoriert das Attribut.

Mögliche übergeordnete Elemente: keine (Stammelement)

Mögliche untergeordnete Elemente: <annotation>, <attribute>, <attributeGroup>, <complexType>, <element>, <group>, <import>, <include>, <notation>, <redefine>, <simpleType>

Siehe auch

Verweis

XmlSchema