用于管理数据库中的 XML 架构集合的 DDL

管理服务器上的 XML 架构集合主题中所述,可以在数据库中创建 XML 架构集合,并将其与 xml 类型的变量和列关联起来。为了管理数据库中的架构集合,SQL Server 提供了下列 DDL 语句:

若要使用 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 组件。

  • SomeTypeOrderTypeCustomerType 是 TYPE 组件。

  • Customer 是 ELEMENT 组件。

将架构导入数据库时,SQL Server 不会存储架构本身。相反,SQL Server 会存储各种不同的组件。也就是说,不存储 <Schema> 标记,仅存储在其中定义的组件。不存储所有的架构元素。如果 <Schema> 标记包含指定其组件默认行为的属性,则在导入过程中,将把这些属性移动到其中的架构组件,如下表所示。

属性名称

行为

attributeFormDefault

应用于架构中所有属性声明的 form 属性,此架构中不存在此属性并且将值设置为 attributeFormDefault 属性的值。

elementFormDefault

应用于架构中所有元素声明的 form 属性,此架构中不存在此属性并且将值设置为 elementFormDefault 属性的值。

blockDefault

应用于所有元素声明和类型定义的 block 属性,这些声明和定义中不存在此属性并且将值设置为 blockDefault 属性的值。

finalDefault

应用于所有元素声明和类型定义的 final 属性,这些声明和定义中不存在此属性并且将值设置为 finalDefault 属性的值。

targetNamespace

有关属于目标命名空间的组件的信息存储在元数据中。