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

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

XML スキーマ ドキュメントからソース コードを生成するとき、Xsd.exe は、<any> 要素を、XmlAnyElementAttribute 属性を持つ XmlElement 型のフィールドに変換します。

説明

<any> ワイルドカードを使用すると、一部制約がありますが、任意の要素 (任意の名前または型の要素) を XML インスタンス ドキュメント内の指定した位置で使用できます。

XML スキーマ ドキュメントからソース コードを生成するとき、Xsd.exe は、<any> 要素を、XmlAnyElementAttribute 属性を持つ XmlElement 型のフィールドに変換します。この属性を使用すると、クラスの他の使用可能なフィールドまたはプロパティで識別される非 XML 型に、任意の XML 要素をバインドしなくても、クラスがその XML 要素を表すことができます。

<any> 要素が、1 よりも大きいか unbounded である maxOccurs 属性と共に出現する場合、Xsd.exe は、XmlAnyElement 属性を持つ XmlElement 配列を生成します。maxOccurs 属性の値が 1 (既定) または 0 のときは、単一の XmlElement が生成されます。この動作の説明については、maxOccurs 属性を参照してください。

アセンブリ内の一連のクラスから XML スキーマ ドキュメントを生成するとき、Xsd.exe は、逆変換を実行します。つまり、XmlAnyElementAttribute 属性を持つ System.Xml.XmlElement 型のフィールドまたはプロパティは、<any> 要素に変換されます。

namespace 属性と processContents 属性

XML スキーマ定義またはクラスを生成しているとき、namespace 属性および processContents 属性は無視されます。つまり、これらの属性値が元の XML スキーマ定義内にある場合、Xsd.exe がその定義からクラスを生成し、次にそのクラスから別の XML スキーマを生成すると、生成された XML スキーマの <any> 要素には、これらの属性がなくなります。そのため、後者のスキーマでは、次の既定値に逆変換されます。

  • namespace="##any" : namespace 属性は、要素が定義されている必要のある名前空間を指定します。##any の値は、任意の名前空間です。

  • processContents="strict" : インスタンスの XML ドキュメントがその指定された XML スキーマに適合するかどうかが検証されるときは、指定された名前空間に応じて、すべての要素型が検証されることを確認してください。認識されない要素型がある場合、検証は失敗します。

同様に、XML ドキュメントからオブジェクトに逆シリアル化しているとき、namespace 属性および processContents 属性は無視されます。それに代わって、XmlSerializer クラスは、これら 2 つの属性が次の値に固定されているかのように動作します。

  • namespace="##any" : この値は既定値です。

  • processContents="lax" : インスタンスの XML ドキュメントがその指定された XML スキーマに適合するかどうかが検証されるときは、その名前空間を取得できる場合だけ要素が検証されます。それ以外の場合、認識できない要素は、整形式 XML で構成されていることを確認してください。

Noteメモ :

実行時は .NET Framework では processContents="lax" が想定されていますが、配置時は既定の processContents="strict" が暗黙的に指定されているとして、XML スキーマ定義が生成されます。

Xsd.exe および XmlSerializer クラスには、namespace 属性および processContents 属性が <anyAttribute> 要素に現れるときは同じバインディングがこれらの属性用に用意されています。

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

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="complexInstance" type="MyComplexType"/>

    <xsd:complexType name="MyComplexType">
        <xsd:sequence>
            <xsd:element name="field1" type="xsd:string"/>
            <xsd:any namespace="##local" processContents="strict"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

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

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("complexInstance", Namespace="http://example.org/", IsNullable=false)]
public class MyComplexType {
        
    public string field1;
        
    [System.Xml.Serialization.XmlAnyElementAttribute()]
    public System.Xml.XmlElement Any;
}

上記の C# ソースからコンパイルされたアセンブリから生成される XML スキーマ複合型 :

<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="0" maxOccurs="1" name="field1" type="xs:string" />
      <xs:any minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>
使用可能な属性 バインディング サポート

id

Xsd.exe ユーティリティでは、一意な識別子を提供するための id 属性は無視されます。

maxOccurs

このトピックの「説明」セクションを参照してください。MaxOccurs 属性のバインディング サポート 属性も参照してください。

minOccurs

XML スキーマ ドキュメントからソース コードを生成する場合で、<any> 要素が適用されるときは、Xsd.exe ツールは、minOccurs 属性を無視します。

クラスから XSD ドキュメントを生成するときは、<any> 要素の minOccurs 属性を値 0 で生成します。

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

namespace

このトピックの「namespace 属性と processContents 属性」セクションを参照してください。

processContents

このトピックの「namespace 属性と processContents 属性」セクションを参照してください。

使用可能な親要素 : <choice><sequence>

使用可能な子要素 : <annotation>****

関連項目

参照

XmlSchemaAny

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.