共用方式為


在伺服器上使用 XML 結構描述集合的指導方針與限制

更新: 2006 年 4 月 14 日

XML 結構描述定義語言 (XSD) 驗證對於使用 SQL Server 2005 xml 資料類型的 SQL 資料行具有某些相關限制。本主題將提供這些限制的詳細資料以及修改 XSD 結構描述以便讓它可以使用 SQL Server 的指導方針。下表將列出這些限制。本表後面的各節將詳細說明每項限制並提供使用這些限制的指引。

項目 限制

anyType

XQuery 規格建議對 anyType 類型的元素進行 lax 驗證。因為 SQL Server 不支援 lax 驗證,因此會對 anyType 元素套用 strict 驗證。

minOccursmaxOccurs

SQL Server 會限制這些屬性值的大小。

sqltypes:datetimesqltypes:smalldatetime

SQL Server 不接受 sqltypes:datetimesql:smalldatetime 的值。

<xsd:include><xsd:key><xsd:keyref><xsd:redefine> 以及 <xsd:unique>

SQL Server 不支援這些項目。

<xsd:choice>

SQL Server 會拒絕沒有子系的 <xsd:choice> 物件之結構描述,除非以零的 minOccurs 屬性值定義該物件。

<xsd:simpleType>

SQL Server 只支援具有第二個元件的簡單類型毫秒有效位數,並對所有辨識的 XSD 簡單類型列舉設置限制。

SQL Server 不支援在 <xsd:simpleType> 宣告中使用 "NaN" 值。

xsi:schemaLocationxsi:noNamespaceSchemaLocation

如果這些屬性出現在插入 xml 資料類型之資料行或變數的 XML 執行個體資料中,SQL Server 將會忽略這些屬性。

xs:QName

SQL Server 不支援使用 XML 結構描述限制元素且從 xs:QName 衍生的類型。

SQL Server 不支援 xs:QName 為成員元素的聯集類型。

將成員加入現有替代群組

SQL Server 不支援在 XML 結構描述集合中將成員加入現有替代群組。

標準格式

值的標準表示法不能違反其類型的模式限制。

列舉 Facet

SQL Server 不支援類型含有模式 Facet 或列舉違反這些 Facet 的 XML 結構描述。

Facet 長度

SQL Server 會限制 Facet 長度可接受值的範圍。

ID 屬性

XML 結構描述元件有 ID 屬性,但是 SQL Server 不會儲存這些值。

ID 類型

SQL Server 不支援 xs:IDxs:IDREF 類型的元素。

Lax 驗證

SQL Server 不支援上載到 SQL Server 之結構描述的 lax 驗證。

清單類型與聯集類型

SQL Server 不支援使用聯集類型做為清單項目的清單類型。

區域命名空間

SQL Server 會拒絕使用空白字串 ("") 做為命名空間屬性值的結構描述。

混合的類型與簡單的內容

SQL Server 不支援將混合類型限制為簡單內容。

NOTATION 類型

SQL Server 不支援 NOTATION 類型。

記憶體不足的情況

在處理大型的 XML 結構描述集合時,有可能發生記憶體不足的情況。提供解決方案。

重複值

SQL Server 會拒絕 block 或 final 屬性有重複值的結構描述。

結構描述元件識別碼

SQL Server 會將結構描述元件識別碼的最大長度限制為 1000 個 Unicode 字元。另外,不支援在識別碼中的 Surrogate 字元組。

時區資訊

時區資訊永遠都會正規化為國際標準時間 (格林威治標準時間)。

聯集類型

SQL Server 不支援聯集類型的限制。

可變的有效位數小數

SQL Server 不支援可變的有效位數小數。

xsi:schemaLocation 與 xsi:noNamespaceSchemaLocation

如果下列屬性存在插入 xml 資料類型之資料行或變數的 XML 執行個體資料中,SQL Server 將會忽略這些屬性。

  • xsi:schemaLocation
  • xsi:noNamespaceSchemaLocation

&lt;xsd:include&gt;

全球資訊網協會 (W3C) XSD include 元素會提供結構描述模組化的支援,在模組化中可以將 XML 結構描述分割成一個以上的實體檔案。目前,SQL Server 不支援這個元素。伺服器將會拒絕包含此元素的 XML 結構描述。

可預先處理做為方案且包含 <xsd:include> 指示詞的 XML 結構描述,以便將任何包含結構描述的內容複製和合併成單一結構描述,以利上載至伺服器。如需詳細資訊,請參閱<XML 結構描述的前置處理器工具>。

&lt;xsd:unique&gt;、&lt;xsd:key&gt; 以及 &lt;xsd:keyref&gt;

目前,SQL Server 不支援下列以 XSD 為基礎的條件約束,以強制唯一性或建立索引鍵及索引鍵參考:

  • <xsd:unique>
  • <xsd:key>
  • <xsd:keyref>

無法註冊包含這些元素的 XML 結構描述。

標準格式與模式限制

XSD 模式 Facet 允許簡單類型的語彙空間限制。當在有一個以上的可能語彙表示法之類型上設置模式限制時,有些值可能會在驗證時造成非預期的行為。因為這些值的語彙表示法並未儲存在資料庫中,就會發生此行為。因此,當序列化為輸出時,這些值會轉換成其標準的表示法。當文件包含一個值,而值的標準格式不符合其類型的模式限制時,如果使用者嘗試重新插入它,將會拒絕該文件。

為了避免此情形,SQL Server 2005 將會拒絕包含無法重新插入的值之 XML 文件,因為違反了其標準格式的模式限制。例如,值 "33.000" 將不會針對具有 "33\.0+" 模式限制之 xs:decimal 所衍生的類型驗證。雖然 "33.000" 符合此模式,但是標準格式 "33" 卻不符合。

因此,當您將模式 Facet 套用至衍生自下列基本類型的類型時應特別小心:booleandecimalfloatdoubledateTimetimedatehexBinarybase64Binary。當您將任何這類元件加入至結構描述集合時,SQL Server 就會發出警告。

不精確的浮點值序列化具有類似的問題。由於 SQL Server 2005 使用浮點序列化演算法,類似的值有可以共用相同的標準格式。當序列化和重新插入浮點值時,它有可能變更其值。在極少數的情況下,這可能會產生一個值,在重新插入時該值的類型違反下列任一 Facet:enumerationminInclusiveminExclusivemaxInclusivemaxExclusive。為了避免此情形,SQL Server 2005 會拒絕從無法序列化和重新插入的 xs:floatxs:double 所衍生的類型值。

萬用字元和內容違反

萬用字元可用以增加可出現在內容模型中的內容彈性。在 XSD 語言中以下列方式支援這些字元:

  • 元素萬用字元。這些是以 <xsd:any> 元素表示。
  • 屬性萬用字元。這些是以 <xsd:anyAttribute> 元素表示。

<xsd:any><xsd:anyAttribute> 這兩個萬用字元元素都支援使用 processContents 屬性。這可讓您指定一個值,以指出 XML 應用程式如何處理與這些萬用字元元素關聯的文件內容驗證。以下是不同的值所產生的效果:

  • strict 值指定完整驗證內容。
  • skip 值指定不驗證內容。
  • lax 值指定只會驗證可以使用結構描述定義的元素與屬性。

Lax 驗證

若為上載至 SQL Server 的結構描述,則不支援 lax 驗證。因此,如果萬用字元元素指定 processContents 屬性,必須將它設為 skipstrict。如果指定了 processContents="lax",伺服器將會拒絕該結構描述。

由於此行為的關係,任何具 xsd:anyType 類型的元素都會使用嚴格的處理來驗證。因此,其子元素與屬性必須定義在針對要驗證的執行個體文件之結構描述集合中。

anyType 元素

XQuery 規格建議對 anyType 類型的元素做 lax 驗證。因為 SQL Server 不支援 lax 驗證,因此會對 anyType 元素套用 strict 驗證。

下列範例說明 strict 驗證並建立 XML 結構描述集合。其中一個結構描述元素是 anyType 類型。它接著會建立具類型的 xml 變數,並說明 anyType 類型元素的 strict 驗證。

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://ns">
   <element name="e" type="anyType"/>
   <element name="a" type="byte"/>
   <element name="b" type="string"/>
 </schema>'
GO

下列範例會成功,因為 <e> 的 strict 驗證是成功的:

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>'
GO

下列範例會失敗。執行個體遭到拒絕,因為元素 <e> 的 strict 驗證並未找到結構描述中所定義的元素 <c>

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>'
GO

在下列範例中,XML 執行個體再次遭到拒絕,因為命名空間 http://whatever 中沒有元素 <c> 的宣告。換句話說,命名空間並不存在。

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c xmlns="http://whatever">Wrong</c><b>data</b></e>'
SELECT @var
GO

&lt;xsd:redefine&gt;

W3C XSD redefine 元素提供重新定義結構描述元件的支援。不過,此指示詞的支援可能會使效能大幅降低,而且 SQL Server 也需要重新驗證與重新定義之結構描述關聯的所有 xml 資料類型執行個體。因此,SQL Server 不支援此元素。伺服器將會拒絕包含 <xsd:redefine> 元素的 XML 結構描述。

若要更新結構描述或是其元件,您可以改執行下列動作。

  1. 使用結構描述集合更新任何 xml 資料類型 (XML DT) 資料行。
  2. 對於受影響的命名空間卸除現有的 XML 結構描述集合。
  3. 針對含有修改過的結構描述元件之命名空間,建立新的 XML 結構描述集合。
  4. 當 XML DT 使用新集合時,在步驟 1 重新設定所有不具類型資料行的類型。

xs:QName

SQL Server 不支援使用 XML 結構描述限制元素且從 xs:QName 衍生的類型。

SQL Server 目前不支援 QName 為成員類型的聯集類型。下列 CREATE XML SCHEMA COLLECTION 陳述式無法載入 XML 結構描述,因為它們將 xs:QName 類型指定為聯集的成員類型:

CREATE XML SCHEMA COLLECTION QNameLimitation1 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:int xs:QName"/>
    </xs:simpleType>
</xs:schema>'
GO

CREATE XML SCHEMA COLLECTION QNameLimitation2 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:integer">
   <xs:simpleType>
    <xs:list itemType="xs:QName"/>
   </xs:simpleType>
  </xs:union>
    </xs:simpleType>
</xs:schema>'
GO

這兩個陳述式會因錯誤而導致失敗。

做為清單項目的聯集類型

目前,SQL Server 不支援包含清單類型與聯集類型項目的結構描述。下列範例的結構描述說明嘗試在清單項目類型中支援聯集類型的使用:

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <simpleType name="unionType">
      <union memberTypes="string byte"/>
   </simpleType>
   <simpleType name="listType">
      <list itemType="ns:unionType"/>
   </simpleType>
</schema>'
GO

伺服器將拒絕結構描述並產生下列錯誤:

「清單類型 'http://ns:listType' 的項目類型無效。清單的項目類型本身不得為清單,而且這個版本不支援聯集項目類型。」

&lt;xsd:simpleType&gt; 的值

SQL Server 只支援具有第二個元件的簡單類型毫秒有效位數。此外,在伺服器上將會拒絕 dateTime 值不包含時區的 XML 執行個體。下表根據所有可辨識的 XSD 簡單類型列舉,簡述套用的限制。

此外,SQL Server 不支援 <xsd:simpleType> 宣告中的 "NaN" 值。伺服器將會拒絕包含 "NaN" 值的結構描述。

簡單類型 限制

duration

年的部分必須在 -2^31 到 2^31-1 的範圍內。月、日、時、分、秒都必須在 0 到 9999 的範圍內。秒的部分在小數點右邊具有額外三位數的有效位數。

dateTime

在時區子欄位中的小時部分必須在 -14 到 +14 的可接受範圍。年的部分必須在 -9999 到 9999 的範圍內。月的部分必須在 1 到 12 的範圍內。日的部分必須在 1 到 31 的範圍內,而且必須為有效的日曆日期。例如,SQL Server 會對無效的日期偵測及傳回錯誤,例如 1974-02-31,因為二月沒有 31 天。

date

年的部分必須在 -9999 到 9999 的範圍內。月的部分必須在 1 到 12 的範圍內。日的部分必須在 1 到 31 的範圍內,而且必須為有效的日曆日期。例如,SQL Server 會對無效的日期偵測及傳回錯誤,例如 1974-02-31,因為二月沒有 31 天。

gYearMonth

年的部分必須在 -9999 到 9999 的範圍內。

gYear

年的部分必須在 -9999 到 9999 的範圍內。

gMonthDay

月的部分必須在 1 到 12 的範圍內。日的部分必須在 1 到 31 的範圍內。

gDay

日的部分必須在 1 到 31 的範圍內。

gMonth

月的部分必須在 1 到 12 的範圍內。

decimal

此類型的值必須符合 SQL 數值類型的格式。此格式在內部總共可支援 38 位數,其中有 10 位數是保留給分數有效位數使用。

float

此類型的值必須符合 SQL real 類型的格式。

double

此類型的值必須符合 SQL float 類型的格式。

string

此類型的值必須符合 SQL nvarchar(max) 類型的格式。

anyURI

此類型的值其長度不能超過 4000 個 Unicode 字元。

可變的有效位數小數

xs:decimal 類型表示任意有效位數的十進位數字。符合 XML 處理器的最低限度必須支援十進位數字以及 totalDigits=18 的最小值。SQL Server 支援 totalDigits=38,,但是將小數位數限制為 10。SQL Server 不支援可變的有效位數小數。伺服器對於所有的 xs:decimal 執行個體值在內部是使用 SQL 類型數值 (38, 10) 表示。

時區資訊

若為 datetimedateTime 簡單類型,時區資訊永遠都會正規化為國際標準時間,也稱為格林威治標準時間 (GMT)。

例如,下列結構描述會宣告名為 <e>dateTime 類型元素:

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <element name="e" type="dateTime"/>
</schema>'
GO

若為 dateTime 類型的元素,伺服器就會使用位移值 ("-05:00") 和傳回對應的 GMT 時間,藉以將提供的時間轉換為 GMT。

DECLARE @var XML(MySampleCollection)
SET @var = '<e xmlns="http://ns">1999-05-31T13:20:00-05:00</e>'
SELECT @var
-- time zone is specified. Value is converted to Zulu before being stored
-- will come back as <e xmlns="http://ns">1999-05-31T18:20:00Z</e>
GO

Facet 長度

lengthminLength 以及 maxLength Facet 將會儲存為 long 類型。此類型是 32 位元的類型。因此,這些值的可接受值範圍為 2^31。

minOccurs 與 maxOccurs

minOccursmaxOccurs 屬性值必須符合 4 位元組的整數。伺服器將會拒絕不符合的結構描述。

結構描述元件識別碼

SQL Server 會將結構描述元件識別碼的最大長度限制為 1000 個 Unicode 字元,並且拒絕識別碼超過最大長度的結構描述。另外,不支援在識別碼中的 Surrogate 字元組。

列舉 Facet

SQL Server 會拒絕類型含有模式 Facet 或列舉違反這些 Facet 的 XML 結構描述。例如,下列結構描述將遭到拒絕,因為有功能的列舉值包含大小字母混合的值。它也將遭到拒絕,因為此值違反值只能是小寫字母的模式值。

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
    <simpleType name="MyST">
       <restriction base="string">
          <pattern value="[a-z]*"/>
       </restriction>
    </simpleType>

    <simpleType name="MyST2">
       <restriction base="ns:MyST">
           <enumeration value="mYstring"/>
       </restriction>
    </simpleType>
</schema>'
GO

&lt;xsd:choice&gt;

SQL Server 會拒絕沒有子系的 <xsd:choice> 物件之結構描述,除非以零的 minOccurs 屬性值定義該物件。

在 Final 或 Block 屬性中的重複值

block 屬性允許封鎖執行個體的類型和元素替代。final 屬性可防止從某類型衍生出其他複雜類型。

SQL Server 會拒絕 blockfinal 屬性有重複值的結構描述,例如 "restriction restriction" 與 "extension extension"。

區域命名空間

您必須為 <xsd:any> 元素明確指定區域命名空間。SQL Server 會拒絕使用空白字串 ("") 做為命名空間屬性值的結構描述。不過,SQL Server 會要求明確使用 "##local",將不完整的元素或屬性指示成萬用字元的執行個體。

ID 屬性

每個 XML 結構描述元件都可擁有 ID 屬性。SQL Server 會針對 ID 類型的 <xsd:attribute> 宣告強制唯一性,但不會儲存這些值。唯一性的強制範圍是 {CREATE | ALTER} XML SCHEMA COLLECTION 陳述式。

ID 類型

SQL Server 不支援 xs:IDxs:IDREFxs:IDREFS 類型的元素。結構描述不能宣告此類型的元素,或者宣告由限制此類型或從此類型延伸的元素。

NOTATION 類型

目前,SQL Server 不支援 NOTATION 類型。伺服器將會拒絕包含標記法定義的結構描述。

混合的類型與簡單的內容

在下列 XML 結構描述集合中,myComplexTypeA 是可以清空的複雜類型。也就是說,這兩個元素都將 minOccurs 設為 0。因此不支援以在 myComplexTypeB 宣告中的方式,將此限制為簡單內容。下列 XML 結構描述集合建立將會失敗:

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns"
xmlns:ns1="http://ns1">

    <complexType name="myComplexTypeA" mixed="true">
        <sequence>
            <element name="a" type="string" minOccurs="0"/>
            <element name="b" type="string" minOccurs="0" maxOccurs="23"/>
        </sequence>
    </complexType>


    <complexType name="myComplexTypeB">
        <simpleContent>
            <restriction base="ns:myComplexTypeA">
                <simpleType>
                    <restriction base="int">
                        <minExclusive value="25"/>
                    </restriction>
                </simpleType>
            </restriction>
        </simpleContent>
    </complexType>
</schema>
'
GO

sqltypes:datetime 與 sqltypes:smalldatetime

在 SQL Server 2005 中,所有從 xs:datexs:time 以及 xs:dateTime 衍生的類型都需要有時區。Sqltypes:datetimesqltypes:smalldatetime 是其中兩種類型。不過,SQL datetimesmalldatetime 類型沒有時區。這是因為 sqltypes:datetimesqltypes:smalldatetime 的模式 Facet 不允許時區。因此,SQL Server 不接受 sqltypes:datetimesql:smalldatetime 的值。

雖然您可以在使用者自訂結構描述中參考 sqltypes:datetimesqltypes:smalldatetime,但您無法驗證包含這些類型值的 XML 文件。這將使它們變成無法使用。在下列範例中,XML 結構描述集合會定義 sqltypes.datetime 類型的 <c> 元素:

CREATE XML SCHEMA COLLECTION SC_datetime AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="myNS"
xmlns:ns="myNS"
xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"
> 
      <import namespace="http://www.w3.org/XML/1998/namespace"/>
      <import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
 
      <element name="root">
            <complexType>
                  <sequence>
                        <element name="c" type="s:datetime"/>
                  </sequence>
            </complexType>
      </element>
</schema>'
GO

下列指派會失敗:

DECLARE @var xml(SC_datetime)
SET @var = '<x:root xmlns:x="myNS"><c>1953-01-01T00:00:00.000</c></x:root>'
GO

將成員加入現有替代群組

您無法在 XML 結構描述集合中將成員加入現有的替代群組。在 XML 結構描述中的替代群組是限制成標頭元素,而且所有其成員元素都必須定義在相同的 {CREATE | ALTER} XML SCHEMA COLLECTION 陳述式中。例如,您仍然可以執行下列程式碼:

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="e1"/>
    <xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'

不過,您無法執行下列程式碼,其中標頭元素 e1 是在一個 CREATE XML SCHEMA COLLECTION 陳述式中定義而替代成員 e2 是在另一個 ALTER XML SCHEMA COLLECTION 陳述式中定義:

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
</xs:schema>'
GO

ALTER XML SCHEMA COLLECTION col add N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="e2" substitutionGroup="e1"/>

</xs:schema>'
GO

聯集類型

不支援聯集類型的限制。例如,下列 CREATE XML SCHEMA COLLECTION 陳述式會失敗:

CREATE XML SCHEMA COLLECTION particlesIk026valid AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xsdtesting" xmlns:x="http://xsdtesting" elementFormDefault="qualified">
    <xsd:simpleType name="U1">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer" />
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string" />
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
    <xsd:simpleType name="U2">
        <xsd:restriction base="x:U1" />
    </xsd:simpleType>
    <xsd:complexType name="B">
        <xsd:choice>
            <xsd:element name="c1" type="x:U1" />
            <xsd:element name="c2" />
        </xsd:choice>
    </xsd:complexType>
    <xsd:complexType name="R">
        <xsd:complexContent>
            <xsd:restriction base="x:B">
                <xsd:choice>
                    <xsd:element name="c1" type="x:U2" />
                    <xsd:element name="c2" />
                </xsd:choice>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:element name="doc">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name="elem" type="x:R" />
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>'

大型的 XML 結構描述集合與記憶體不足的情況

在大型的 XML 結構描述集合中呼叫內建 XML_SCHEMA_NAMESPACE() 函數時,或是當您嘗試卸除大型 XML 結構描述集合時,就可能會發生記憶體不足的情況。接下來是您可用來處理此情形的解決方案:

  • 當系統負載很輕時,使用 DROP_XML_SCHEMA_COLLECTION 命令。如果這個命令失敗,請使用 ALTER DATABASE 陳述式和再次嘗試 DROP XML SCHEMA COLLECTION,以便將資料庫切換到單一使用者模式中。 如果 XML 結構描述集合存在 mastermodeltempdb 中,則單一使用者模式將需要重新啟動伺服器。
  • 當您呼叫 XML_SCHEMA_NAMESPACE 時,可以嘗試擷取單一 XML 結構描述命名空間、可以嘗試在系統負載較輕時嘗試呼叫,也可以在單一使用者模式中嘗試呼叫。

不具決定性的內容模型

SQL Server 會拒絕含有不具決定性之內容模型的 XML 結構描述。

下列範例會嘗試建立具有不具決定性之內容模型的 XML 結構描述。此程式碼會失敗,因為 <root> 元素是否應該具有兩個 <a> 元素的序列,或者 <root> 元素是否應該具有兩個序列 (每個序列含有一個 <a> 元素) 並不明確。

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="1" maxOccurs="2">
                <element name="a" type="string" minOccurs="1" maxOccurs="2"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

將出現次數條件約束移動至唯一位置,即可修正結構描述。例如,可將條件約束移動至包含順序物件:

<sequence minOccurs="1" maxOccurs="4">
    <element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>

或者,可將條件約束移動至內含元素:

<sequence minOccurs="1" maxOccurs="1">
     <element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>

SQL Server 2005 Service Pack 1 的行為

如果出現次數條件約束為 0、1 或無限制,就可接受不具決定性的內容模型。

SQL Server 2005 會拒絕下列範例,不過執行 SQL Server SP1 的伺服器則會接受此範例。

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
                <element name="a" type="string" minOccurs="0" maxOccurs="1"/>
                <element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

請參閱

參考

在伺服器上使用 XML 結構描述集合的指導方針與限制
XML 結構描述集合上的權限
管理伺服器上的 XML 結構描述集合

概念

XML 資料類型
具類型與不具類型的 XML
瞭解唯一物件屬性條件約束

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

新增內容:
  • 新增描述在 SP1 中如何處理不具決定性之內容模型的章節。