SQL Server 2008中有关XML的新功能(5)
对通配符的验证取决于在schema定义中的通配符的processContents 属性。在SQL Server 2005中,schema可以使用用于any和anyAttribute声明的skip和strict 的processContents值。在前面的示例中,这个通配符元素的processContents属性被设置为skip,所以不会对这个元素的内容进行验证。即使这个schema集合包含一个对shp:Delivery元素的声明(例如,定义一组有效的发送方法对Order元素中的通配符),这个元素也不会被验证,除非在Order元素中对通配符的声明将它的processContents属性设置为strict。
SQL Server 2008增加了对第三方验证的支持。通过将一个通配符的processContents属性设置为lax ,你可以对具有相应的schema 声明的任何元素进行验证,但忽略没有在schema 中定义的所有元素。继续前面的示例,如果你将schema中对通配符元素的声明中的processContents属性设置为lax 并增加一个对shp:Delivery元素的声明,那么在XML文档中的shp:Delivery 元素会被进行验证。然而,如果不是shp:Delivery 元素,而是该文档包含了一个没有在schema中声明的元素,那么这个元素会被忽略掉。
此外,XML Schema 规格定义anyType声明具有对它的内容模型的lax处理方式。SQL Server 2005不支持lax处理,所以会严格的对内容进行验证。SQL Server 2008支持anyType 内容的lax处理,因此内容会被正确的进行验证。
3.2 对 xs:dateTime 的完全支持
你可以在一个XML schema 中使用dateTime数据类型来定义日期和时间数据。日期和时间数据以2007-08-01T09:30:00:000Z的格式来显示,这表示的是通用协调时(UTC)2007年8月1日早上9:30,这用Z表示。其它的时区显示的时间与通用协调时间不同,因此例如你能使用太平洋标准时间2007-12-25T06:00:00:000-8:00来显示2007年12月25日的早上6:00(它比UTC时间滞后8小时)。
XML Schema 规格定义了可选择的dateTime、date和time 数据类型的时区组件。然而,在SQL Server 2005中你必须提供一个用于dateTime、date和time数据的时区。此外,SQL Server 2005不保存你的dateTime或time数据的时区信息,但是会将它规格化为UTC时间(所以例如,如果你的XML有个2007-12-25T06:00:00:000-8:00的值,SQL Server 2005会将它规格化为2007-12-25T14:00:00:000Z。)在SQL Server 2008中没有这些限制,所以当你存储dateTime、date或time数据时你可以省略时区信息,并且你提供的任何时区信息都会被保存下来。
3.3 Union和List类型
你可以使用XML schema 将你的XML数据的数据类型定义为允许将一个有限集合的值赋给具有多个值的元素和属性。例如,你可能定义一个sizeListType类型,它使产品定义中的一个AvaliableSizes元素的赋值限制为S、M和L。SQL Server 2005支持XML schema包含这些简单的类型定义和限制。例如,你可以使用一个list类型来定义一个产品的有效的型号,如下面的示例所示: