用于管理数据库中的 XML 架构集合的 DDL
如管理服务器上的 XML 架构集合主题中所述,可以在数据库中创建 XML 架构集合,并将其与 xml 类型的变量和列关联起来。为了管理数据库中的架构集合,SQL Server 提供了下列 DDL 语句:
CREATE XML SCHEMA COLLECTION (Transact-SQL) 将架构组件导入数据库。
ALTER XML SCHEMA COLLECTION (Transact-SQL) 修改现有 XML 架构集合中的架构组件。
DROP XML SCHEMA COLLECTION (Transact-SQL) 删除整个 XML 架构集合及其所有组件。
若要使用 XML 架构集合及其包含的架构,必须首先使用 CREATE XML SCHEMA COLLECTION 语句创建架构集合及其包含的架构。创建架构集合之后,您可以创建 xml 类型的变量和列,并将其与架构集合进行关联。注意,创建架构集合之后,各种架构组件存储在元数据中。还可以使用 ALTER XML SCHEMA COLLECTION 向现有架构添加更多组件或向现有集合添加新架构。
若要删除架构集合,请使用 DROP XML SCHEMA COLLECTION 语句。它将删除包含在集合中的所有架构并删除集合对象。请注意,只有在满足 DROP XML SCHEMA COLLECTION (Transact-SQL) 中所述的条件时,才能删除架构集合。
了解架构组件
使用 CREATE XML SCHEMA COLLECTION 语句时,将把各种架构组件导入数据库中。架构组件包括架构元素、属性和类型定义。使用 DROP XML SCHEMA COLLECTION 语句时,将删除整个集合。
CREATE XML SCHEMA COLLECTION 将把架构组件保存到各种系统表中。
例如,请看下面的架构:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="uri:Cust_Orders2"
xmlns="uri:Cust_Orders2" >
<xsd:attribute name="SomeAttribute" type="xsd:int" />
<xsd:complexType name="SomeType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="OrderDate" type="xsd:date" />
<xsd:element name="RequiredDate" type="xsd:date" />
<xsd:element name="ShippedDate" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" />
<xsd:attribute name="CustomerID" />
<xsd:attribute name="EmployeeID" />
</xsd:complexType>
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order" type="OrderType"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:element name="Customer" type="CustomerType" />
</xsd:schema>
以上架构显示了可以存储在数据库中的不同类型的组件。其中包括 SomeAttribute、SomeType、OrderType、CustomerType、Customer、Order、CustomerID、OrderID、OrderDate、RequiredDate 以及 ShippedDate。
组件类别
数据库中存储的架构组件分为下列类别:
ELEMENT
ATTRIBUTE
TYPE(用于简单或复杂类型)
ATTRIBUTEGROUP
MODELGROUP
例如:
SomeAttribute 是 ATTRIBUTE 组件。
SomeType、OrderType 和 CustomerType 是 TYPE 组件。
Customer 是 ELEMENT 组件。
将架构导入数据库时,SQL Server 不会存储架构本身。相反,SQL Server 会存储各种不同的组件。也就是说,不存储 <Schema> 标记,仅存储在其中定义的组件。不存储所有的架构元素。如果 <Schema> 标记包含指定其组件默认行为的属性,则在导入过程中,将把这些属性移动到其中的架构组件,如下表所示。
属性名称 |
行为 |
---|---|
attributeFormDefault |
应用于架构中所有属性声明的 form 属性,此架构中不存在此属性并且将值设置为 attributeFormDefault 属性的值。 |
elementFormDefault |
应用于架构中所有元素声明的 form 属性,此架构中不存在此属性并且将值设置为 elementFormDefault 属性的值。 |
blockDefault |
应用于所有元素声明和类型定义的 block 属性,这些声明和定义中不存在此属性并且将值设置为 blockDefault 属性的值。 |
finalDefault |
应用于所有元素声明和类型定义的 final 属性,这些声明和定义中不存在此属性并且将值设置为 finalDefault 属性的值。 |
targetNamespace |
有关属于目标命名空间的组件的信息存储在元数据中。 |