技术开发 频道

SQL Server 2005中的新XML功能


    例如,为创建名为CustomerSchema的架构,可使用以下命令:
Create xml schema collection CustomerSchema as 
N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:company="http://www.wrox.com/books"
targetNamespace="http://www.wrox.com/books"
elementFormDefault="qualified">
<xs:element name="customer">
<xs:complexType>
<xs:all>
<xs:element name="name" type="xs:string" />
</xs:all>
<xs:attribute name="id" type="xs:int" />
</xs:complexType>
</xs:element>
</xs:schema>'
    除了使用XML架构集合实现类型化XML列之外,还可以将其用于类型化XML变量和参数。
    一旦创建CustomerSchema,那么就可以轻松的将其与Customer表的XmlData列关联起来,语法如下:
CREATE TABLE Customer(ID int primary key, 
XmlData XML(CustomerSchema))
    当将值插入Customer表中,XmlData列中的XML数据将根据CustomerSchema进行验证:
Insert into Customer values(1, '<customer id=”1” 
xmlns="http://www.wrox.com/books"><name>Joe</name></customer>')
GO
Insert into Customer values(2, '<customer id="2"
xmlns="http://www.wrox.com/books"><name>Fred</name></customer>')
    在将架构与XML列关联时,开发人员可以使用DOCUMENT或者CONTENT标志来设置是否能够在类型化列中存储XML树或者片段。对于DOCUMENT而言,每个XML实例都会根据用来对其进行验证和类型化的命名控件,设置实例中优异元素的目标命名空间。另一方面,对于CONTENT而言,每个优异元素都能够在架构集合中设置任一目标命名空间。在生成实例过程中,将根据目标命名空间验证XML实例。例如,开发人员可执行以下包括无效命名空间声明的SQL语句:

Insert into Customer values(3, '<customer id="3" 
xmlns="http://invalidnamespace/books"><name>InvalidData</name></customer>')
GO
    由于Insert语句中包括无效的命名空间,所以应该看到类似如下的错误消息:
Msg 6913, Level 16, State 1, Line 1
XML Validation: Declaration not found for element
'http://invalidnamespace/books:customer'. Location: /*:customer[1]
0
相关文章