DDL para gerenciamento de coleções de esquema XML no banco de dados

Conforme descrito no tópico Gerenciando coleções de esquema XML no servidor, é possível criar coleções de esquema XML no banco de dados e associá-las a variáveis e colunas do tipo xml. Para gerenciar coleções de esquema no banco de dados, o SQL Server fornece as seguintes instruções DDL:

Para usar uma coleção de esquema XML e os esquemas contidos nela, você deve primeiro criar a coleção e os esquemas usando a instrução CREATE XML SCHEMA COLLECTION. Após a criação da coleção de esquema, é possível criar variáveis e colunas do tipo xml e associar a coleção de esquema a elas. Observe que depois que uma coleção de esquema é criada, são armazenados vários componentes de esquema nos metadados. Também é possível usar ALTER XML SCHEMA COLLECTION para adicionar mais componentes a esquemas existentes ou adicionar novos esquemas a uma coleção existente.

Para descartar a coleção de esquema, use a instrução DROP XML SCHEMA COLLECTION. Ela descarta todos os esquemas que estão contidos na coleção e remove o objeto da coleção. Observe que para que seja possível descartar uma coleção de esquema, as condições descritas em DROP XML SCHEMA COLLECTION (Transact-SQL) devem ser atendidas.

Compreendendo componentes de esquema

Quando a instrução CREATE XML SCHEMA COLLECTION é usada, vários componentes de esquema são importados no banco de dados. Os componentes de esquema incluem elementos, atributos e definições de tipo de esquema. Quando a instrução DROP XML SCHEMA COLLECTION é usada, a coleção completa é removida.

CREATE XML SCHEMA COLLECTION salva os componentes do esquema em várias tabelas do sistema.

Por exemplo, considere o seguinte esquema:

<?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>

O esquema anterior mostra os diferentes tipos de componentes que podem ser armazenados no banco de dados. Esses esquemas incluem SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate e ShippedDate.

Categorias de componentes

Os componentes de esquema armazenados no banco de dados se enquadram nas seguintes categorias:

  • ELEMENT

  • ATTRIBUTE

  • TYPE (para tipos simples ou complexos)

  • ATTRIBUTEGROUP

  • MODELGROUP

Por exemplo:

  • SomeAttribute é um componente de ATTRIBUTE.

  • SomeType, OrderType e CustomerType são componentes de TYPE.

  • Customer é um componente de ELEMENT.

Quando você importa um esquema no banco de dados, o SQL Server não armazena o próprio esquema. Em vez disso, o SQL Server armazena os vários componentes individuais. Isto é, a marca <Schema> não é armazenada, apenas os componentes que estão definidos dentro dela são preservados. Todos os elementos do esquema não são preservados. Se a marca <Schema> contiver atributos que especificam o comportamento padrão de seus componentes, esses atributos serão movidos para os componentes do esquema dentro dela durante o processo de importação, conforme mostrado na tabela a seguir.

Nome do atributo

Comportamento

attributeFormDefault

O atributo form aplicado a todas as declarações de atributo no esquema em que ele ainda não está presente e o valor é definido como o valor do atributo attributeFormDefault.

elementFormDefault

O atributo form aplicado a todas as declarações de elemento no esquema em que ele ainda não está presente e o valor é definido como o valor do atributo elementFormDefault.

blockDefault

O atributo block aplicado a todas as declarações de elemento e às definições de tipo em que ele ainda não está presente e o valor é definido como o valor do atributo blockDefault.

finalDefault

O atributo final aplicado a todas as declarações de elemento e às definições de tipo em que ele ainda não está presente e o valor está definido como o valor do atributo finalDefault.

targetNamespace

Informações sobre os componentes que pertencem ao namespace de destino são armazenadas nos metadados.