非确定性内容模型

在 SQL Server 2005 Service Pack 1(SP1)之前,SQL Server 拒绝了具有非确定性内容模型的 XML 架构。

从 SQL Server 2005 SP1 开始,如果出现约束为 0,1 或未绑定,则接受非确定性内容模型。

示例:非确定性内容模型被拒绝

以下示例尝试使用非确定性内容模型创建 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 SP1 之前的 SQL Server 版本中会拒绝以下架构。

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 架构集合的要求和限制