form 特性绑定支持

本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.

.NET Framework 为 form 特性提供绑定支持。

Xsd.exe 工具将 form XML 特性等同于 XmlAttributeXmlElement 特性的 Form 属性,尽管 .NET Framework 的 XML 序列化代码识别是另一个默认值 qualified(对于元素而言)。

说明

XML 架构要求全局声明为 <schema> 元素子级的所有元素和特性在实例文档中都显示已限定了命名空间。对于在 <complexType> 定义中局部声明的元素和特性,命名空间限定是可选的。

若要指定是否限定特定局部元素或特性的命名空间,请将 form 特性添加到局部的 <element><attribute> 声明中。可能的值为 qualifiedunqualified

form 特性的默认值是从根元素 <schema>elementFormDefaultattributeFormDefault 特性继承的。对于以上两个特性,默认值均为 unqualified

.NET Framework 无法在类定义内从全局级别或架构范围级别指定 form。当基于一组类生成 XML 架构文档时,Xsd.exe 始终生成具有下列特征的 XML 架构:

  • 不指定 attributeFormDefault,恢复为默认的 unqualified

  • 指定 elementFormDefault="qualified",实际使用与 XML 架构不同的默认值。

Xsd.exe 通过在每个字段的基础上设置 form,来响应 attributeFormDefault="qualified"elementFormDefault="unqualified" 默认值的替代值。

在给定这些约束的基础上,Xsd.exe 按下表所示基于 form 特性生成源代码。

form 特性

form="qualified"

form="unqualified"

<attribute> element

XmlAttribute 特性声明传递 Form=XmlSchemaForm.Qualified 参数。

不向 <attribute> 字段的 XmlAttribute 特性声明传递 form 参数。

<element> element

不应用 XmlElement 特性,除非要传递不相关的参数。

<element> 字段的 XmlElement 特性声明传递参数 Form=XmlSchemaForm.Unqualified

传递到 XmlAttributeXmlElement 声明的参数设置 Form 属性,该属性的可能值来自 XmlSchemaForm 枚举:

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None:默认值

如果 Form 在原始 XML 架构文档中设置为非默认值,将只在源代码中根据 .NET Framework 默认值而非 XML 架构默认值指定 Form。由于 form 特性重写 attributeFormDefaultelementFormDefault 特性,因此,如果一个架构在 <schema> 级别将 form 设置为非默认值,然后在 <attribute><element> 级别将其设置为默认值,则该架构将生成未指定 form 的源代码。从符合实例文档的角度来讲,仍是如此。

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