共用方式為


Schema 項目繫結支援

.NET Framework 會提供 <schema> 項目的繫結支援。

<schema> 項目是 XML 結構描述文件的根項目。

說明

<schema> 項目是 XML 結構描述文件的根項目。

blockDefaultfinalDefaultidversion 屬性都是屬於 <schema> 項目的屬性,而且沒有 .NET Framework 程式碼實體的繫結。targetNamespace 屬性已辨認;而 attributeFormDefaultelementFormDefault 屬性則是部分辨認。請參閱下表。如需詳細資訊,請參考個別的屬性主題。

TargetNamespace 屬性

<schema> 項目的 targetNamespace 屬性會指定結構描述的命名空間做為統一資源識別元 (URI)。Xsd.exe 工具會讓 <schema> 項目的 targetNamespace 屬性 (Attribute) 與各種 XML 相關屬性 (Attribute) 的 Namespace 屬性 (Property) 產生關聯。

當 Xsd.exe 從 XML 結構描述文件產生原始程式碼時,會依照下列方式使用 targetNamespace 值:

  • 對於產生的每個對應到結構描述中資料型別的型別,Xsd.exe 會將 System.Xml.Serialization.XmlTypeAttribute.Namespace 屬性設定為 targetNamespace 值。

  • 對於產生的每個對應到可能顯示為 XML 文件 (與結構描述相符) 之根項目的型別,Xsd.exe 會將 System.Xml.Serialization.XmlRootAttribute.Namespace 屬性設定為 targetNamespace 值。如果資料型別由已全域宣告 (做為 <schema> 項目的根項目子系) 的 <element> 項目使用,則該資料型別會顯示為文件根項目。

當 Xsd.exe 從組件中的一組類別產生 XML 結構描述文件時,會針對在特定 XML 相關屬性類別的 Namespace 屬性 (Property) 中找到的每個唯一值,使用唯一的 targetNamespace 屬性 (Attribute) 建立 XML 結構描述文件。屬性顯示如下:

AttributeFormDefault 屬性

Xsd.exe 公用程式會產生不指定全域 attributeFormDefault 屬性的 XML 結構描述。當此公用程式在現有結構描述中遇到屬性 (Attribute) 時,會適當地設定每個非覆寫欄位的 XmlAttributeAttributeForm 屬性 (Property)。

說明:AttributeFormDefault 屬性

XML 結構描述要求所有全域宣告的項目和屬性 (做為 <schema> 項目的子系),在執行個體文件中都必須符合命名空間。對於區域宣告的項目和屬性 (在 <complexType> 定義內),命名空間限定性條件為選擇性做法。

若要針對 XML 結構描述文件中宣告的所有區域項目和屬性控制命名空間限定性條件,請分別使用根 <schema> 項目的 elementFormDefaultattributeFormDefault 屬性。這兩個屬性的可能值為 qualifiedunqualified,預設值為 unqualified

此外,還可以在區域 <element><attribute> 宣告上使用 form 屬性,覆寫特定項目或屬性的結構描述預設值。

下表描述 Xsd.exe 如何處理 attributeFormDefault 的三種可能選擇:qualifiedunqualified、未指定 (請記住,當 Xsd.exe 從 XML 結構描述文件產生原始程式碼時,會針對每個 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 列舉型別 (Enumeration):

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None:預設

使用 XmlAttribute 參數所產生的其中一種效果是,會在原始程式碼和產生的 XSD 中針對每個 XML 屬性指定原始 XSD 文件中的全域設定。全域 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;
}

由前面 C# 原始檔編譯所得組件產生的 XML 結構描述根 <schema> 項目 (也會出現缺少 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

此外,還可以在區域 <element><attribute> 宣告上使用 form 屬性,覆寫特定項目或屬性的結構描述預設值。

elementFormDefault 的預設值為 unqualified 時,.NET Framework 可以有效地將預設值視為 qualified,而且仍然承認 unqualified 的使用。下表描述 Xsd.exe 如何處理 elementFormDefault 的三種可能選擇:qualifiedunqualified、未指定 (請記住,當 Xsd.exe 從 XML 結構描述文件產生原始程式碼時,會針對每個 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 中針對每個 XML 項目指定原始 XSD 文件中的全域設定。全域 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 工具會適當地設定每個非覆寫欄位 XmlAttributeAttributeForm 屬性,以便根據每個欄位轉譯 qualified 值。

請參閱前面「AttributeFormDefault 屬性」一節。

blockDefault

<schema> 項目的 blockDefault 屬性會針對 <complexType><element> 項目的 block 屬性提供預設值。

Xsd.exe 工具會忽略 <schema> 項目的 blockDefault 屬性以及個別項目中的 block 屬性。

elementFormDefault

.NET Framework 可以有效地使用不同的預設值 qualified。Xsd.exe 工具永遠會產生 elementFormDefault="qualified"<schema> 項目。此工具會適當地設定每個非覆寫欄位的 XmlElementAttributeForm 屬性,以便根據每個欄位轉譯 unqualified 值。

請參閱前面「ElementFormDefault 屬性」一節。

finalDefault

<schema> 項目的 finalDefault 屬性會針對特定項目的 final 屬性提供預設值。

Xsd.exe 工具會忽略 <schema> 項目的 finalDefault 屬性以及其個別項目中的 final 屬性。

id

Xsd.exe 公用程式會忽略試圖提供唯一識別項的 id 屬性。

xml:lang

在根 <schema> 項目中使用 lang 屬性時,Xsd.exe 會在命名空間 http://www.w3.org/XML/1198 中忽略此屬性。

targetNamespace

Xsd.exe 工具會讓 <schema> 項目的 targetNamespace 屬性 (Attribute) 與各種 XML 相關屬性 (Attribute) 的 Namespace 屬性 (Property) 產生關聯。使用哪個屬性 (Attribute) 需視轉譯方向而定。

請參閱前面「TargetNamespace 屬性」一節。

version

文件可以使用 version 屬性。Xsd.exe 工具會忽略此屬性。

**可能的父項目:**無 (根項目)

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

請參閱

參考

XmlSchema

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.