11.4.1 什么是XML架构集合
在一个特定的XML应用中,往往需要用到不止一个XML架构信息来定义多个XML数据的格式。如何管理好这些XML架构就是非常现实的问题。
通常这些XML架构都是可以分类管理的,以用于不同的应用目的。令人高兴的是SQL Server 2005针对这种情况,提供了XML架构集合对象来管理不同类的XML架构数据。
在SQL Server 2005内部架构集合是一个类似于数据表的实体。因此可以创建、修改、删除XML架构集合。既管理XML架构集合。
下面将详细介绍如何实现对XML架构集合的管理。
11.4.2 创建XML架构集合
创建一个XML架构集合可以使用T-SQL语句。语法是
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier AS Expression
语法中relational_schema是一个可有可无的关系架构限定标识符。关于这个标识符的详细信息请参看本书前面的相关章节。sql_identifier要求一个合法的SQL Server标识符,用于表示新创建的架构集合的名称。Expression部分就需要一个比较完整的XML架构数据了。
下面看一个实际创建XML架构集合的例子。
CREATE XML SCHEMA COLLECTION MyXMLSchema
AS
'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="book" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
'
11.4.3 修改XML架构集合
通常一个XML架构集合,在使用一段时间后都需要进行添加新的XML架构数据,以适应快速变化的商务需求。这就要求能够修改已创建的XML架构集合的数据。
具体的修改一个架构集合的语法如下所示:
ALTER XML SCHEMA COLLECTION [<relational_schema>.]sql_identifier ADD 'Schema Component'
语法中的元素要求与创建XML架构中的类似。需要注意的是此处sql_identifier所代表的XML架构集合是必须已存在的XML架构集合的名称。
下面的例子展示了如何向一个已存在的XML架构集合中添加一个新的XML架构数据。
ALTER XML SCHEMA COLLECTION MyXMLSchema
ADD
'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Journals">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Journal" type="xsd:string" maxOccurs="100"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
'
到这里如何修改一个XML架构集合就介绍完了。这里需要特别注意的是,不像其他对象的T-SQL语句,比如修改表的语句那样,XML架构集合修改语句是不存在Delete、或子Alter语句的。这说明只能向已存在的XML架构集合中添加新的XML架构数据,而无法删除或修改其中任何一个XML架构数据。
11.4.4 删除XML架构集合
最后来看看如何删除一个已存在的XML架构集合。删除XML架构集合的语法如下:
DROP XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier
语法中的元素含义已明确不再赘述。
下面的例子展示了如何删除一个XML架构集合。
DROP XML SCHEMA COLLECTION MyXMLSchema
11.4.5 类型化与非类型化XML
知道了如何定义XML架构,以及XML架构集合,那么类型化和非类型化XML就好理解了。
所谓的类型化XML数据,就是指在定义时绑定了某一已定义的XML架构集合的XML数据。比如类型化的XML变量、类型化的XML列、类型化的XML参数等。下面的例子详细的展示了如何使用类型化的XML数据。
--定义一个XML架构集合
Create XML Schema Collection MyXMLSchema
As
'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="book" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
'
go
--定义一个绑定到架构MyXMLSchema架构集合的XML变量
Declare @MyXML AS XML(MyXMLSchema)
--赋予结构正确的XML数据
Set @MyXML =
'
<books>
<book>电话号码大全</book>
</books>
'
--赋予不是MyXMLSchema指定格式的XML数据,
--虽然XML数据是正确的,但因为不符合定义,此时SQL Server会报错
Set @MyXML =
'
<Works>
<Work>张三</Work>
</Works>
'
在上面的例子中XML类型在定义时后面跟了一个括号,括号中指定了要绑定到的XML架构的名字。这就是类型化XML数据的使用方法。可以继续使用这一方法去定义类型化的XML列以及类型化的XML参数等。此处不在一一举例,读者可以自己新建查询进行验证。
11.4.6 查看库中的XML架构集合以及架构集合的详细内容
在SQL Server 2005中提供了可以查看XML架构集合的方法。下面的查询可以用来查看当前数据库中有多少个已定义的XML架构集合。
Select * from sys.xml_schema_collections
这个查询会返回当前库中所有XML架构集合在内的一个完整结果。其中包括系统预定义的XML架构集合。
如果要查看某个XML架构集合的详细定义,可以使用下面的系统函数。
SELECT xml_schema_namespace(N'',N'MyXMLType')
说明:此函数中第一个参数是XML架构集合所属的SQL Server架构的名称。没有指定时只需传递空字符串。第二参数就是想要查看的XML架构集合的名称。
本文介绍了SQL Server 2005中XML架构集合的管理方法,包括创建、修改和删除XML架构集合。此外,还讨论了如何在数据库中使用XML架构集合来定义不同类型化的XML数据,并提供了查看库中XML架构集合及其内容的方法。
395

被折叠的 条评论
为什么被折叠?



