在 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