schema 元素绑定支持

.NET Framework 为 <schema> 元素提供绑定支持。

<schema> 元素是 XML 架构文档的根元素。

说明

<schema> 元素是 XML 架构文档的根元素。

<schema> 元素的属性中,blockDefaultfinalDefaultidversion 属性不绑定到 .NET Framework 代码实体。 系统能够识别 targetNamespace 属性,但只能部分识别 attributeFormDefaultelementFormDefault 属性。 请参见下表。 有关详细信息,请参阅各个属性主题。

targetNamespace 属性

根元素 <schema>targetNamespace 属性将架构的命名空间指定为统一资源标识符 (URI)。 Xsd.exe 工具将 <schema> 元素的 targetNamespace 属性 (Attribute) 与各个 XML 相关属性 (Attribute) 的 Namespace 属性 (Property) 关联。

当从 XML 架构文档生成源代码时,Xsd.exe 按如下方式使用 targetNamespace 值:

  • 对于所生成的、与架构中的数据类型对应的每个类型,Xsd.exe 都将 System.Xml.Serialization.XmlTypeAttribute.Namespace 属性设置为 targetNamespace 值。

  • 对于所生成的、与可能显示为符合架构的 XML 文档的根的数据类型对应的每个类型,Xsd.exe 都将 System.Xml.Serialization.XmlRootAttribute.Namespace 属性设置为 targetNamespace 值。 如果某个数据类型由全局声明为根元素 <schema> 的子级的 <element> 元素使用,则该数据类型可能会显示为文档的根。

当基于程序集中的一组类生成 XML 架构文档时,Xsd.exe 会创建一个 XML 架构文档,对于它在某些 XML 相关属性 (Attribute) 类的 Namespace 属性 (Property) 中找到的每个唯一值,该文档都具有一个唯一的 targetNamespace 属性 (Attribute)。 该属性如下所示:

attributeFormDefault 属性

Xsd.exe 实用工具生成将全局 attributeFormDefault 属性保留为未指定的 XML 架构。 当它在现有的架构中遇到该属性 (Attribute) 时,会相应地设置每个非重写字段的 XmlAttributeAttributeForm 属性 (Property)。

说明:attributeFormDefault 属性

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

若要为 XML 架构文档中声明的所有局部元素和属性控制命名空间限定,应分别使用根元素 <schema>elementFormDefaultattributeFormDefault 属性。 对于两者而言,可能的值均为 qualifiedunqualified,默认值为 unqualified

此外,form 属性还可以用在局部的 <element><attribute> 声明中,以重写该特定元素或属性的架构默认值。

下表描述了 Xsd.exe 如何处理 attributeFormDefault 的三个可能选项:qualifiedunqualified 和未指定。 (请记住,当从 XML 架构文档生成源代码时,Xsd.exe 会为每个 XML 属性创建一个公共字段,并为该字段应用一个 .NET Framework 属性 XmlAttributeAttribute。)

可能的 attributeFormDefault 值

Xsd.exe 从 XSD 生成的源代码

Xsd.exe 基于通过相同的源代码编译得到的程序集生成的 XSD

attributeFormDefault="unqualified"

显示与属性对应的类和字段,但不指定表单。

未指定,恢复为默认的 attributeFormDefault="unqualified"

Unspecified

显示与属性对应的类和字段,但不指定表单。

未指定,恢复为默认的 attributeFormDefault="unqualified"

attributeFormDefault="qualified"

显示与局部声明的属性和引用的全局声明属性相对应的字段,并向 XmlAttribute 属性传递 Form=XmlSchemaForm.Qualified

未指定,恢复为默认的 attributeFormDefault="unqualified"

另外,每个属性声明都指定 form="qualified"。 这包括引用的全局声明属性。

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

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None:默认值

使用 XmlAttribute 参数的一个结果是,在原始 XSD 文档中曾经是全局设置的内容现在将基于源代码和所生成的 XSD 中的每个 XML 属性进行指定。 始终假定未指定全局 attributeFormDefault 属性,而恢复为默认值 unqualified

示例:attributeFormDefault 属性

输入 XML 架构文档,其中 attributeFormDefault="qualified"

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:attribute name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
    <xsd:attribute ref="version" />
    <xsd:attribute name="public" type="xsd:boolean" use="required"/>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

基于前面的 XML 架构文档生成的 C# 类:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string version;
        
    System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public bool @public;
}

XML 架构的根元素 <schema>,该元素是基于通过前面的 C# 源代码编译得到的程序集生成的(出现的属性声明同样没有 form 属性):

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   ...
</xs:schema>

elementFormDefault 属性

Xsd.exe 实用工具生成将全局 elementFormDefault 属性保留为 "qualified" 的 XML 架构。 当它在现有的架构中遇到该属性 (Attribute) 时,会相应地设置每个非重写字段的 XmlElementAttributeForm 属性 (Property)。

说明:elementFormDefault 属性

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

若要为 XML 架构文档中声明的所有局部元素和属性控制命名空间限定,应分别使用根元素 <schema>elementFormDefaultattributeFormDefault 属性。 对于两者而言,可能的值均为 qualifiedunqualified,默认值为 unqualified

此外,form 属性还可以用在局部的 <element><attribute> 声明中,以重写该特定元素或属性的架构默认值。

尽管 elementFormDefault 的默认值为 unqualified,但是 .NET Framework 实际上将该默认值视为 qualified,同时仍然允许使用 unqualified。 下表描述了 Xsd.exe 如何处理 elementFormDefault 的三个可能选项:qualifiedunqualified 和未指定。 (请记住,当从 XML 架构文档生成源代码时,Xsd.exe 会为每个 XML 元素创建一个公共字段。)

可能的 elementFormDefault 值

Xsd.exe 从 XSD 生成的源代码

Xsd.exe 基于通过相同的源代码编译得到的程序集生成的 XSD

elementFormDefault="qualified"

显示与元素对应的类和字段,但不指定表单。

elementFormDefault="qualified"

Unspecified

显示与元素对应的类和字段,但不指定表单。

elementFormDefault="qualified"

elementFormDefault="unqualified"

显示与局部声明的元素对应的字段,并向 XmlElement 属性传递 Form=XmlSchemaForm.Unqualified。 显示与引用的全局声明元素对应的字段,但不指定表单。

elementFormDefault="qualified"

另外,最初为局部声明的每个元素都使用 form="unqualified"。 最初为全局声明的元素在局部显示时不带 form 属性。

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

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None:默认值

使用 XmlElement 参数的一个结果是,在原始 XSD 文档中曾经是全局设置的内容在源代码和所生成的 XSD 中将基于每个 XML 元素进行指定。 始终假定全局 elementFormDefault 属性具有值 qualified

示例:elementFormDefault 属性

输入 XML 架构文档,其中 elementFormDefault="unqualified"

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="unqualified">
  <xsd:element name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
      <xsd:sequence>
      <xsd:element ref="version" />
      <xsd:element name="public" type="xsd:boolean" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

基于前面的 XML 架构文档生成的 C# 类:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
 public class keyInfo {
        
     public string version;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public bool @public;
}

基于通过前面的 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="key" type="tns:keyInfo" />
  <xs:complexType name="keyInfo">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="public" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>
可能的属性 绑定支持

attributeFormDefault

.NET Framework 能够识别默认值 unqualified。 Xsd.exe 工具基于每个字段转换 qualified 值,方法是相应地设置每个非重写字段的 XmlAttributeAttributeForm 属性。

请参见前面的“AttributeFormDefault 属性”部分。

blockDefault

<schema> 元素的 blockDefault 属性为 <complexType><element> 元素的 block 属性提供默认值。

Xsd.exe 工具忽略 <schema> 元素的 blockDefault 属性及其各个元素的 block 属性。

elementFormDefault

.NET Framework 实际上使用另一个默认值 qualified。 Xsd.exe 工具始终生成具有 elementFormDefault="qualified"<schema> 元素。 该工具基于每个字段转换 unqualified 值,方法是相应地设置每个非重写字段的 XmlElementAttributeForm 属性。

请参见前面的“ElementFormDefault 属性”部分。

finalDefault

<schema> 元素的 finalDefault 属性为某些元素的 final 属性提供默认值。

Xsd.exe 工具忽略 <schema> 元素的 finalDefault 属性及其各个元素的 final 属性。

id

Xsd.exe 实用工具会忽略旨在提供唯一标识符的 id 属性。

xml:lang

当命名空间 http://www.w3.org/XML/1198 中的 lang 属性用在根元素 <schema> 中时,Xsd.exe 会忽略该属性。

targetNamespace

Xsd.exe 工具将 <schema> 元素的 targetNamespace 属性 (Attribute) 与各个 XML 相关属性 (Attribute) 的 Namespace 属性 (Property) 关联。 具体使用哪些属性取决于转换的方向。

请参见前面的“TargetNamespace 属性”部分。

version

version 属性可用于文档。 Xsd.exe 工具忽略该属性。

**可能的父元素:**无(根元素)

可能的子元素:<annotation><attribute><attributeGroup><complexType><element><group><import><include><notation><redefine><simpleType>

请参见

参考

XmlSchema

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。