Form 属性のバインディング サポート

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

.NET Framework では、form 属性のバインディングをサポートしています。

Xsd.exe ツールは、form XML 属性を XmlAttribute 属性または XmlElement 属性の Form プロパティと同等と見なします。ただし、.NET Framework の XML シリアル化コードでは、要素の既定値を異なる値 qualified として識別します。

説明

XML スキーマでは、(<schema> 要素の子として) グローバルに宣言されたすべての要素と属性がインスタンス ドキュメントに限定された名前空間を指定するように要求されます。ローカルで (<complexType> の定義内で) 宣言された要素および属性の場合、名前空間の限定は省略可能です。

特定のローカル要素または属性を名前空間によって修飾するかどうかを指定するために、form 属性をローカルの <element> 宣言または <attribute> 宣言に追加します。使用可能な値は qualified および unqualified です。

form 属性の既定値は、ルート <schema> 要素の elementFormDefault 属性または attributeFormDefault 属性から継承されます。これら両方の属性の既定値は unqualified です。

.NET Framework では、クラス定義内でグローバルまたはスキーマ全体レベルのフォームを指定する方法が用意されていません。その代わり、一連のクラスから XML スキーマ ドキュメントを生成するとき、Xsd.exe は常に次の特性を備えた XML スキーマを生成します。

  • attributeFormDefault を指定しないで、既定の unqualified に逆変換します。

  • elementFormDefault="qualified" を指定して、XML スキーマとは異なる既定値を効果的に使用します。

Xsd.exe は、フィールド単位でフォームを設定することで、attributeFormDefault="qualified" および elementFormDefault="unqualified" の各既定値の代替値に応答します。

これらの制約を受けて、Xsd.exe では、次の表に示すように、form 属性からソース コードを生成します。

form 属性

form="qualified"

form="unqualified"

<attribute> element

XmlAttribute 属性宣言は Form=XmlSchemaForm.Qualified パラメーターに渡されます。

<attribute> フィールドの XmlAttribute 属性宣言は、フォーム パラメーターに渡されません。

<element> element

無関係のパラメーターに渡されない限り、XmlElement 属性が適用されます。

<element> フィールドの XmlElement 属性宣言は、パラメーター Form=XmlSchemaForm.Unqualified に渡されます。

XmlAttribute 宣言または XmlElement 宣言に渡されるパラメーターにより、Form プロパティが設定されます。このプロパティに使用できる値は、XmlSchemaForm 列挙に基づきます。

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: 既定

Form は、元の XML スキーマ ドキュメントで既定ではなかった値に設定される場合は、ソース コード内でだけ指定しますが、XML スキーマの既定とは違い、.NET Framework の既定に従います。form 属性は、attributeFormDefault 属性および elementFormDefault 属性をオーバーライドします。そのため、フォームを <schema> レベルの既定以外に設定してから、<attribute> レベルまたは <element> レベルの既定に設定する、というようなスキーマによって、フォームを指定しないソースが生成されます。インスタンス ドキュメントに従うという点では、意味するところは依然として同じです。

Example

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

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

上記の 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 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;
}

上記の 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="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>

使用可能なコンテナー要素 : <attribute><element>

参照

リファレンス

System.Xml.Schema.XmlSchemaAttribute.Form
System.Xml.Schema.XmlSchemaElement.Form