Partilhar via


Coleções de esquemas XML (SQL Server)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Como descrito no artigo xml (Transact-SQL), o SQL Server fornece armazenamento nativo de dados XML através do tipo de dado xml . Pode, opcionalmente, associar esquemas XSD a uma variável ou a uma coluna do tipo xml através de uma coleção de esquemas XML. A coleção de esquemas XML armazena os esquemas XML importados e é depois usada para fazer o seguinte:

  • Validar instâncias XML

  • Digite os dados XML tal como estão armazenados na base de dados

A coleção de esquemas XML é uma entidade de metadados como uma tabela na base de dados. Podes criá-los, modificá-los e descartá-los. Os esquemas especificados numa instrução CREATE XML SCHEMA COLLECTION (Transact-SQL) são automaticamente importados para o recém-criado objeto XML schema collection. Pode importar esquemas ou componentes de esquema adicionais para um objeto de coleção existente na base de dados usando a instrução ALTER XML SCHEMA COLLECTION (Transact-SQL).

Como descrito no artigo, Tiped vs. Untyped XML, o XML armazenado numa coluna ou variável associada a um esquema é referido como XML tipado , porque o esquema fornece a informação necessária sobre o tipo de dados para os dados da instância. O SQL Server utiliza este tipo de informação para otimizar o armazenamento de dados.

O motor de processamento de consultas também utiliza o esquema para verificação de tipos e para otimizar consultas e modificação de dados.

Além disso, o SQL Server utiliza a coleção de esquemas XML associada, com xml tipado, para validar a instância XML. Se a instância XML cumprir o esquema, a base de dados permite que a instância seja armazenada no sistema com a sua informação de tipo. Caso contrário, rejeita a instância.

Pode usar a função intrínseca XML_SCHEMA_NAMESPACE para recuperar a coleção de esquemas que está armazenada na base de dados. Para mais informações, consulte Ver uma Coleção de Esquemas XML Armazenados.

Também pode usar a coleção de esquemas XML para digitar variáveis, parâmetros e colunas XML.

DDL para gerir coleções de esquemas

Pode criar coleções de esquemas XML na base de dados e associá-las a variáveis e colunas do tipo xml . Para gerir coleções de esquemas na base de dados, o SQL Server fornece as seguintes instruções DDL:

Para usar uma coleção de esquemas XML e os esquemas que ela contém, deve primeiro criar a coleção e os esquemas usando a instrução CREATE XML SCHEMA COLLECTION. Depois de criada a coleção de esquemas, pode então criar variáveis e colunas do tipo xml e associar a coleção de esquemas a elas. Após a criação de uma coleção de esquemas, vários componentes do esquema são armazenados nos metadados. Também pode usar a ALTER XML SCHEMA COLLECTION para adicionar mais componentes aos esquemas existentes ou adicionar novos esquemas a uma coleção existente.

Para eliminar a coleção de esquemas, use a instrução DROP XML SCHEMA COLLECTION. Isto elimina todos os esquemas contidos na coleção e remove o objeto da coleção. Antes de poder eliminar uma coleção de esquemas, as condições descritas na DROP XML SCHEMA COLLECTION (Transact-SQL) devem ser cumpridas.

Compreender os componentes do esquema

Quando utiliza a instrução CREATE XML SCHEMA COLLECTION, vários componentes do esquema são importados para a base de dados. Os componentes do esquema incluem elementos do esquema, atributos e definições de tipos. Quando usa a instrução DROP XML SCHEMA COLLECTION, remove a coleção completa.

CRIAR COLEÇÃO DE ESQUEMAS XML Guarda 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 na base de dados. Estas incluem SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate e ShippedDate.

Categorias componentes

Os componentes do Esquema armazenados na base de dados enquadram-se nas seguintes categorias:

  • ELEMENTO

  • ATRIBUTO

  • TYPE (para tipos simples ou complexos)

  • GRUPO DE ATRIBUTOS

  • GRUPO DE MODELOS

Por exemplo:

  • SomeAttribute é um componente de atributo.

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

  • Customer é um componente ELEMENT.

Quando importas um esquema para a base de dados, o SQL Server não armazena o esquema em si. Em vez disso, o SQL Server armazena os vários componentes individuais. Ou seja, a <etiqueta Schema> não é armazenada, apenas os componentes definidos nela são preservados. Todos os elementos do esquema não são preservados. Se a <etiqueta Schema> contiver atributos que especificam o comportamento padrão dos seus componentes, esses atributos são movidos para os componentes do esquema dentro dela durante o processo de importação, conforme mostrado na tabela seguinte.

Nome do atributo Comportamento
attributeFormDefault O atributo form aplica-se a todas as declarações de atributos no esquema onde ainda não está presente e o valor é definido para o valor do atributo FormDefault .
elementFormDefault O atributo form aplica-se a todas as declarações de elementos no esquema onde ainda não está presente e o valor é definido para o valor do atributo elementFormDefault .
blockDefault O atributo block aplica-se a todas as declarações de elementos e definições de tipo nas quais ainda não está presente, sendo o seu valor estabelecido como o do atributo blockDefault.
finalDefault O atributo final aplica-se a todas as declarações de elementos e definições de tipo onde ainda não está presente e o valor é definido para o valor do atributo finalDefault .
targetNamespace A informação sobre os componentes que pertencem ao namespace de destino é armazenada nos metadados.

Permissões numa coleção de esquemas XML

Deve ter as permissões necessárias para fazer o seguinte:

  • Criar/carregar a coleção de esquemas XML

  • Modificar a coleção de esquemas XML

  • Abandone a coleção de esquemas XML

  • Use a coleção de esquemas XML para escrever colunas, variáveis e parâmetros do tipo xml , ou utilize-a em restrições de tabela ou coluna

O modelo de segurança do SQL Server permite permissão CONTROL em todos os objetos. O concedente desta autorização obtém todas as outras permissões sobre o objeto. O proprietário do objeto também tem todas as permissões sobre o objeto.

O proprietário e o concessor da permissão de CONTROLO sobre um objeto podem conceder qualquer permissão nesse objeto. Um utilizador que não é o proprietário e não tem permissão CONTROL pode ainda conceder permissão num objeto quando a opção COM GRANT OPTION está especificada. Por exemplo, assuma que o Utilizador A tem permissão de REFERÊNCIAS na coleção de esquemas XML S, através da opção COM OPÇÃO DE CONCESSÃO, mas sem outras permissões na coleção de esquemas S. O Utilizador A poderia conceder permissão de REFERÊNCIAS ao Utilizador B na coleção de esquemas S.

O modelo de segurança também permite permissões para criar e usar coleções de esquemas XML ou transferir a propriedade de um utilizador para outro. Os artigos seguintes descrevem as permissões de recolha de esquemas XML.

Obtenha informações sobre esquemas XML e coleções de esquemas

As coleções de esquemas XML são enumeradas na vista de catálogo, sys.xml_schema_collections. A coleção sys de esquemas XML é definida pelo sistema. Contém os namespaces pré-definidos que podem ser usados em todas as coleções de esquemas XML definidas pelo utilizador sem necessidade de os carregar explicitamente. Esta lista contém os espaços de nomes para xml, xs, xsi, fn, e xdt. Duas outras vistas de catálogo são sys.xml_schema_namespaces, que enumera todos os espaços de nomes dentro de cada coleção de esquemas XML, e sys.xml_components, que enumera todos os componentes do esquema XML dentro de cada esquema XML.

A função XML_SCHEMA_NAMESPACE incorporada, schemaName, XmlSchemacollectionName, namespace-uri, gera uma instância de tipo de dados xml. Esta instância contém fragmentos de esquema XML para esquemas que estão contidos numa coleção de esquemas XML, exceto os esquemas XML pré-definidos.

Pode enumerar o conteúdo de uma coleção de esquemas XML das seguintes formas:

  • Escreva consultas Transact-SQL nas vistas de catálogo apropriadas para coleções de esquemas XML.

  • Use a função XML_SCHEMA_NAMESPACE()incorporada. Pode aplicar métodos do tipo de dados xml na saída desta função. No entanto, não podes modificar os esquemas XML subjacentes.

Estas são ilustradas nos exemplos seguintes.

Examples

Enumerar os namespaces XML numa coleção de esquemas XML

Use a seguinte consulta para a coleção myCollectionde esquemas XML:

SELECT XSN.name
FROM    sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
    ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE    XSC.name = 'myCollection';

Enumerar o conteúdo de uma coleção de esquemas XML

A seguinte instrução enumera o conteúdo da coleção myCollection de esquemas XML dentro do esquema relacional, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');

Esquemas XML individuais dentro da coleção podem ser obtidos como instâncias de tipo de dados xml , especificando o namespace alvo como terceiro argumento para XML_SCHEMA_NAMESPACE(). Isso é mostrado no exemplo a seguir.

Produzir um esquema especificado a partir de uma coleção de esquemas XML

A seguinte instrução gera o esquema XML com o espaço de nomes https://www.microsoft.com/was-books da coleção myCollection de esquemas XML dentro do esquema relacional, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')

Consultar esquemas XML

Pode consultar esquemas XML que carregou em coleções de esquemas XML das seguintes formas:

  • Escreva consultas Transact-SQL sobre visualizações de catálogo para namespaces dos esquemas XML.

  • Crie uma tabela que contenha uma coluna de tipos de dados xml para armazenar os seus esquemas XML e também carregá-los no sistema de tipos XML. Pode consultar a coluna XML usando os métodos de tipo de dados xml . Além disso, pode construir um índice XML nesta coluna. No entanto, com esta abordagem, a aplicação deve manter a consistência entre os esquemas XML armazenados na coluna XML e o sistema de tipos XML. Por exemplo, se retirar o espaço de nomes do esquema XML do sistema de tipos XML, também tem de o retirar da tabela para preservar a consistência.

Consulte também