通配符组件和内容验证

通配符组件用于增强在内容模型中允许出现的灵活性。 以下组件在 XSD 语言中以以下方式得到支持:

  • 元素通配符组件。 这些元素由 <xsd:any> 元素表示。

  • 属性通配符组件。 这些由 <xsd:anyAttribute> 元素表示。

通配符元素 <xsd:any><xsd:anyAttribute> 都支持使用 processContents 属性。 这允许你指定一个值,该值指示 XML 应用程序如何处理与这些通配符字符元素关联的文档内容的验证。 以下是不同的值及其效果:

  • 严格值指定内容已完全验证。

  • skip 值指定不验证内容。

  • 宽松值指定只对那些存在架构定义的元素和属性进行验证。

宽松验证和 xs:anyType 元素

XML 架构规范对 anyType 类型的元素采用宽松验证。 由于 SQL Server 2005 不支持宽松验证,因此对 anyType 的元素应用严格的验证。 从 SQL Server 2008 开始,支持宽松的验证策略。 anyType 类型的元素内容将使用宽松验证进行验证。

下面的示例演示了松散的验证。 架构元素 eanyType 类型。 该示例创建类型化的 xml 变量并说明 anyType 类型的元素的宽松验证。

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> 成功:

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

以下示例成功。 即使架构中未定义任何元素 <c> ,也接受该实例:

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

下面的示例中的 XML 实例被拒绝,因为元素的定义 <a> 不允许字符串值。

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

另请参阅

服务器上的 XML 架构集合的要求和限制