Form 屬性繫結支援
.NET Framework 會提供 form 屬性 (Attribute) 的繫結支援。
雖然 .NET Framework 的 XML 序列化 (Serialization) 程式碼會根據項目辨識不同的預設值 qualified
,但是 Xsd.exe 工具等同於具有 XmlAttribute 或 XmlElement 屬性 (Attribute) 之 Form 屬性 (Property) 的 form XML 屬性 (Attribute)。
說明
XML 結構描述要求所有全域宣告的項目和屬性 (做為 <schema> 項目的子系),在執行個體文件中都必須符合命名空間。對於區域宣告的項目和屬性 (在 <complexType> 定義內),命名空間限定性條件為選擇性做法。
若要指定特定區域項目或屬性是否要符合命名空間,請將 form 屬性加入至區域 <element> 或 <attribute> 宣告。可能值為 qualified
和 unqualified
。
form 屬性的預設值是繼承自根 <schema> 項目的 elementFormDefault 或 attributeFormDefault 屬性。那兩個屬性的預設值為 unqualified
。
.NET Framework 無法在類別定義中指定全域或結構描述層級的表單。相反地,從一組類別產生 XML 結構描述文件時,Xsd.exe 永遠會產生具有下列特性的 XML 結構描述:
不會指定 attributeFormDefault,改為還原至預設值
unqualified
。有效地使用不同於 XML 結構描述的預設值,以指定
elementFormDefault="qualified"
。
Xsd.exe 會以每個欄位為基礎來設定表單,以回應 attributeFormDefault="qualified"
和 elementFormDefault="unqualified"
預設值的替代值
Xsd.exe 會根據這些條件約束,從 form 屬性產生原始程式碼,如下表所示。
form 屬性 |
form="qualified" |
form="unqualified" |
<attribute> |
XmlAttribute 屬性宣告會傳遞 |
<attribute> 欄位的 XmlAttribute 屬性宣告不會傳遞表單參數。 |
<element> |
除非傳遞不相關的參數,否則不會套用 XmlElement 屬性。 |
<element> 欄位的 XmlElement 屬性宣告會傳遞參數 |
傳遞至 XmlAttribute 或 XmlElement 宣告的參數會設定 Form 屬性,而此屬性的可能值來自 XmlSchemaForm 列舉型別 (Enumeration):
XmlSchemaForm.Qualified
XmlSchemaForm.Unqualified
XmlSchemaForm.None:預設
如果在原本的 XML 結構描述文件中表單是設定為非預設值,則只會在原始程式碼中根據 .NET Framework 預設值 (而非 XML 結構描述預設值) 指定表單。由於 form 屬性會覆寫 attributeFormDefault 和 elementFormDefault 屬性,因此,如果結構描述將表單設定為 <schema> 層級的非預設值,然後又設定為 <attribute> 或 <element> 層級的預設值,便會產生未指定表單的原始檔。對於遵循執行個體文件方面,也具有相同的意義。
範例
輸入 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
Copyright © 2007 by Microsoft Corporation. All rights reserved.