ComplexType 要素のバインディング サポート

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

.NET Framework では、<complexType> 要素のバインディングをサポートしています。

Xsd.exe ツールは XML スキーマ複合型を、パブリック フィールドまたはプロパティが複合型のコンテンツを表す .NET Framework 型と同等と見なします。

説明

Xsd.exe ツールは XML スキーマ複合型を、パブリック フィールドが複合型のコンテンツを表す .NET Framework 型と同等と見なします。

Abstract 属性

抽象基本型のインスタンスではなく、派生型のインスタンスのみが適合 XML ドキュメントに表示されるように、複合型は "抽象" (abstract="true") と宣言されます。

Xsd.exe は抽象複合型を抽象クラスと同等と見なします。変換はコードと XSD ドキュメント間の両方向で機能します。

abstract キーワードの使用を除き、抽象クラスは非抽象基本クラスとして処理されます。子クラスは基本クラスを拡張します。Xsd.exe は抽象クラスに、各子孫クラスに対して 1 つの System.Xml.Serialization.XmlIncludeAttribute を適用します。各 XmlInclude 属性は子孫クラスの型を指定します。

例 : Abstract 属性

<complexType> 要素を持つ abstract 属性を使用するコード例を次に示します。

入力 XML スキーマ ドキュメント :

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
         targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
  <xsd:element name="FamilyNode" type="FamilyNodeType" />
  <xsd:complexType name="FamilyNodeType">
    <xsd:sequence>
      <xsd:element name="Code" type="xsd:string" />
      <xsd:element name="Parent" type="Parent" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="Daughter">
    <xsd:complexContent>
      <xsd:extension base="Parent">
        <xsd:sequence>
          <xsd:element name="Date" type="xsd:dateTime" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Son">
    <xsd:complexContent>
      <xsd:extension base="Parent">
        <xsd:sequence>
          <xsd:element name="Info" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Parent" abstract="true">
    <xsd:sequence>
      <xsd:element name="Text" type="xsd:normalizedString" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="Grandchild">
    <xsd:complexContent>
      <xsd:extension base="Daughter">
        <xsd:attribute name="Parent" type="xsd:normalizedString" />
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>

この XML スキーマ ドキュメントから生成される C# クラス :

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("FamilyNode", Namespace="http://example.org/", IsNullable=false)]
public class FamilyNodeType {
        
    public string Code;
        
    public Parent Parent;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Son))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Daughter))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Grandchild))]
public abstract class Parent {
    [System.Xml.Serialization.XmlElementAttribute(DataType="normalizedString")]
    public string Text;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public class Son : Parent {        
    public string Info;
}
    
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(Grandchild))]
public class Daughter : Parent {
        
    public System.DateTime Date;
        
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool DateSpecified;
}
    
 [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public class Grandchild : Daughter {        
    [System.Xml.Serialization.XmlAttributeAttribute("Parent", DataType="normalizedString")]
    public string Parent1;
}

この C# ソース コードをコンパイルして生成される XML スキーマは、元の XML スキーマと実質的に同等です。

使用可能な属性 バインディング サポート

abstract

Xsd.exe ユーティリティは、abstract="true" によって識別される抽象複合型を、抽象クラスと同等と見なします。抽象クラスから継承する各クラスに対して、Xsd.exe は子孫クラスの型を指定することによって、抽象クラスに System.Xml.Serialization.XmlIncludeAttribute を適用します。

前の「Abstract Attribute」セクションを参照してください。

block

block 属性をデータ型に適用すると、元の型が指定された場所が派生型に代わることを防ぐことができます。

Xsd.exe ツールは、Schema 要素のバインディング サポート 要素の blockDefault 属性と同様に、block 属性を無視します。

final

final 属性をデータ型に適用すると、派生されなくなります。

Xsd.exe では、<schema> 要素の finalDefault 属性同様、final 属性を無視します。

id

Xsd.exe ユーティリティは、一意な識別子を提供するための id 属性を無視します。その代わり、name 属性を認識します。

mixed

mixed 属性を参照してください。

name

name 属性の値は、Xsd.exe が複合型から生成する .NET Framework 型の名前になります。

コーディング規則に準拠するために大文字と小文字の変換が行われることはありません。たとえば <complexType> 要素の name 属性に値 testInfo が設定されている場合、クラスの名前は、先頭が大文字に変更された TestInfo ではなく、testInfo になります。予約されているキーワードと名前が競合する場合は、生成される名前の先頭にアット マーク (@) が付けられます。

Xsd.exe がクラスから <complexType> 定義を生成するとき、name 属性の値にクラス名を使用します。代替名 (name 属性値) は、TypeName プロパティで指定できます。

Name 属性のバインディング サポート 属性を参照してください。

使用可能な親要素: <element><redefine><schema>

使用可能な子要素 : <all><annotation><anyAttribute><attribute><attributeGroup><choice><complexContent><group><sequence><simpleContent>

参照

リファレンス

XmlSchemaComplexType