本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.
.NET Framework 为 <schema> 元素提供绑定支持。
<schema> 元素是 XML 架构文档的根元素。
说明
<schema> 元素是 XML 架构文档的根元素。
在 <schema> 元素的特性中,blockDefault、finalDefault、id 和 version 特性不绑定到 .NET Framework 代码实体。系统能够识别 targetNamespace 特性,但只能部分识别 attributeFormDefault 和 elementFormDefault 特性。请参见下表。有关详细信息,请参阅各个特性主题。
targetNamespace 特性
根元素 <schema> 的 targetNamespace 特性将架构的命名空间指定为统一资源标识符 (URI)。Xsd.exe 工具将 <schema> 元素的 targetNamespace 特性与各个 XML 相关特性的 Namespace 属性关联。
当从 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 相关特性类的 Namespace 属性中找到的每个唯一值,该文档都具有一个唯一的 targetNamespace 特性。该属性如下所示:
System.Xml.Serialization.XmlRootAttribute.Namespace
System.Xml.Serialization.XmlTypeAttribute.Namespace
attributeFormDefault 特性
Xsd.exe 实用工具生成将全局 attributeFormDefault 特性保留为未指定的 XML 架构。当它在现有的架构中遇到该特性时,会相应地设置每个非重写字段的 XmlAttributeAttribute 的 Form 属性。
说明:attributeFormDefault 特性
XML 架构要求全局声明为 <schema> 元素子级的所有元素和特性在实例文档中都显示已限定了命名空间。对于在 <complexType> 定义中局部声明的元素和特性,命名空间限定是可选的。
若要为 XML 架构文档中声明的所有局部元素和特性控制命名空间限定,应分别使用根元素 <schema> 的 elementFormDefault 和 attributeFormDefault 特性。对于两者而言,可能的值均为 qualified
和 unqualified
,默认值为 unqualified
。
此外,form 特性还可以用在局部的 <element> 或 <attribute> 声明中,以重写该特定元素或特性的架构默认值。
下表描述了 Xsd.exe 如何处理 attributeFormDefault 的三个可能选项:qualified
、unqualified
和未指定。(请记住,当从 XML 架构文档生成源代码时,Xsd.exe 会为每个 XML 特性创建一个公共字段,并为该字段应用一个 .NET Framework 特性 XmlAttributeAttribute。)
可能的 attributeFormDefault 值 |
Xsd.exe 从 XSD 生成的源代码 |
Xsd.exe 基于通过相同的源代码编译得到的程序集生成的 XSD |
|
显示与特性对应的类和字段,但不指定表单。 |
未指定,恢复为默认的 |
|
显示与特性对应的类和字段,但不指定表单。 |
未指定,恢复为默认的 |
|
显示与局部声明的特性和引用的全局声明特性相对应的字段,并向 XmlAttribute 特性传递 |
未指定,恢复为默认的 另外,每个特性声明都指定 |
传递到 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 架构。当它在现有的架构中遇到该特性时,会相应地设置每个非重写字段的 XmlElementAttribute 的 Form 属性。
说明:elementFormDefault 特性
XML 架构要求全局声明为 <schema> 元素子级的所有元素和特性在实例文档中都显示已限定了命名空间。对于在 <complexType> 定义中局部声明的元素和特性,命名空间限定是可选的。
若要为 XML 架构文档中声明的所有局部元素和特性控制命名空间限定,应分别使用根元素 <schema> 的 elementFormDefault 和 attributeFormDefault 特性。对于两者而言,可能的值均为 qualified
和 unqualified
,默认值为 unqualified
。
此外,form 特性还可以用在局部的 <element> 或 <attribute> 声明中,以重写该特定元素或特性的架构默认值。
尽管 elementFormDefault 的默认值为 unqualified
,但是 .NET Framework 实际上将该默认值视为 qualified
,同时仍然允许使用 unqualified
。下表描述了 Xsd.exe 如何处理 elementFormDefault 的三个可能选项:qualified
、unqualified
和未指定。(请记住,当从 XML 架构文档生成源代码时,Xsd.exe 会为每个 XML 元素创建一个公共字段。)
可能的 elementFormDefault 值 |
Xsd.exe 从 XSD 生成的源代码 |
Xsd.exe 基于通过相同的源代码编译得到的程序集生成的 XSD |
|
显示与元素对应的类和字段,但不指定表单。 |
|
|
显示与元素对应的类和字段,但不指定表单。 |
|
|
显示与局部声明的元素对应的字段,并向 XmlElement 特性传递 |
另外,最初为局部声明的每个元素都使用 |
传递到 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 能够识别默认值 请参见前面的“AttributeFormDefault 特性”部分。 |
blockDefault |
<schema> 元素的 blockDefault 特性为 <complexType> 和 <element> 元素的 block 特性提供默认值。 Xsd.exe 工具忽略 <schema> 元素的 blockDefault 特性及其各个元素的 block 特性。 |
elementFormDefault |
.NET Framework 实际上使用另一个默认值 请参见前面的“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 特性与各个 XML 相关特性的 Namespace 属性关联。具体使用哪些特性取决于转换的方向。 请参见前面的“TargetNamespace 特性”部分。 |
version |
version 特性可用于文档。Xsd.exe 工具忽略该特性。 |
**可能的父元素:**无(根元素)
可能的子元素:<annotation>、<attribute>、<attributeGroup>、<complexType>、<element>、<group>、<import>、<include>、<notation>、<redefine>、<simpleType>