Value 属性のバインディング サポート
このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.
.NET Framework では、value 属性のバインディングが一部サポートされています。
Xsd.exe は、列挙型制限が文字列ベースの型に適用されている場合、<enumeration> ファセットの value 属性を .NET Framework の enum メンバーに変換します。その他の場合には、XML スキーマのファセットと .NET Framework のクラス定義の間にバインディングはありません。
説明
XML スキーマ定義言語には、基本の単純型の値を制限することで新しい単純型を派生させるための各種の機構が用意されています。これらの制約を "ファセット" といいます。ファセットは、XPath simpleType/restriction/facetName
(facetName
は特定のファセット) にある <simpleType> (または <simpleContent>) 定義内の <restriction> 要素の子として指定されます。ファセット要素の value 属性は、そのファセットに適切な値を指定します。
文字列ベースの列挙型の値属性
Xsd.exe は、列挙型制限が文字列ベースのデータ型に適用されている場合、<enumeration> ファセットの value 属性を .NET Framework の enum メンバーに変換します。データ型は、<restriction> 要素の base 属性によって指定されます。Xsd.exe ツールで文字列型と解釈される組み込み XML スキーマ データ型の一覧については、<enumeration> 要素を参照してください。
列挙値は、有効な定数名として認定されるか、Xsd.exe によって定数名に変換される必要があります。列挙値の例を次に示します。
<xsd:enumeration value="IRISH CREAM" />
この値は、次の enum メンバーに変換されます。
[System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
IRISHCREAM,
有効な定数名を生成するために空白文字が 1 つ削除され、XmlEnumAttribute 属性が enum メンバーに適用されます。この属性パラメーターによって、enum 値に使用される XML スキーマ列挙値が変更されます。既定は、enum 値自身 (この場合は、IRISHCREAM
) です。有効な定数名として既に認定されている XML スキーマ列挙値の場合には、XmlEnum 属性は省略されます。
.NET Framework では、数値の XSD 列挙値は enum 定義に変換されませんが、文字列の XSD 列挙値の値がたまたま数字であった場合には enum 定義に変換されます。base="xsd:string"
が指定されているため、次の単純な型定義は enum 型にバインドされます。
<xsd:simpleType name="Primes">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="5" />
<xsd:enumeration value="7" />
<xsd:enumeration value="11" />
<xsd:enumeration value="13" />
<xsd:enumeration value="17" />
</xsd:restriction>
</xsd:simpleType>
次の enum 型が作成されます。
public enum Primes {
[System.Xml.Serialization.XmlEnumAttribute("2")]
Item2,
[System.Xml.Serialization.XmlEnumAttribute("3")]
Item3,
[System.Xml.Serialization.XmlEnumAttribute("5")]
Item5,
[System.Xml.Serialization.XmlEnumAttribute("7")]
Item7,
[System.Xml.Serialization.XmlEnumAttribute("11")]
Item11,
[System.Xml.Serialization.XmlEnumAttribute("13")]
Item13,
[System.Xml.Serialization.XmlEnumAttribute("17")]
Item17,
}
ここでも、XmlEnum 属性を使用して、XML スキーマ列挙値に対する既定のバインディングである xsd:enumeration の値がオーバーライドされます。
value 属性のその他の用途
文字列ベースのデータ型に基づいた列挙値を除き、XML スキーマのファセットを使用した単純型の制限と .NET Framework のクラス定義の間にバインディングはありません。これは次のことを意味します (文字列ベースの列挙型は除きます)。
XML スキーマ ドキュメントからソース コードを生成するとき、Xsd.exe は単純型の制限を無視し、基本の単純型に対応する .NET Framework 型の生成のみを行います。
オブジェクトの XML へのシリアル化や XML からの逆シリアル化を行うとき、XmlSerializer クラスはこれらの制限を無視します。
スキーマ オブジェクト モデルに関しては、System.Xml.Schema 名前空間に Value プロパティを持つ抽象 XmlSchemaFacet クラスがあります。各制限ファセットに対応する XmlSchemaFacet からの派生型を使用すると、ファセットによる制限を適用するスキーマ オブジェクト モデルをプログラムで作成できます。
使用可能なコンテナー要素 : すべての制限ファセット