Tipo de dados xml – Parte 1

Veja tipos de dados xml.

Até pouco tempo atrás, os bancos de dados relacionais não suportavam a manipulação de dados XML. Em 2003, o International Organization for Standardization (ISO) e o American National Standards Institute (ANSI) liberaram a parte 14 do SQL Standard XML-Related Specifications (SQLXML), que trata da especificação de como bancos de dados relacionais podem trabalhar de forma nativa com dados XML. No SQL Server 2005 essa especificação foi implementada, dando aos administradores e desenvolvedores de banco de dados uma maior flexibilidade em trabalhar com diferentes tipos de dados. Assim, o SQL Server 2005 tem o tipo de dados xml, que permite o armazenamento de documentos XML em tabela, variável ou parâmetro. O tipo de dados xml tem algumas vantagens importantes sobre o armazenamento de dados em campos text ou varchar, incluindo a possibilidade de trabalhar com o Extensible Query Language (XQuery) para modificar ou retornar elementos ou atributos em dados XML. Nesse artigo, descreveremos o tipo de dados xml, suas vantagens e uso. Na segunda parte do artigo, descreveremos os vários métodos do tipo xml, e também como usar XQuery para consultar dados XML.

O que é o tipo de dado xml?

O tipo de dados xml é um tipo de dados nativo para o armazenamento de documentos ou fragmentos XML, com tamanho máximo de até 2 gigabytes (GB). Você pode usá-lo como qualquer outro tipo de dados nativo do SQL Server: definição de colunas em tabelas, parâmetros para funções e stored procedures e na criação de variáveis. Como demonstra o código de exemplo abaixo, a coluna de tipo de dados xml aceita tanto documentos como fragmentos XML.

 
CREATE TABLE ExecutionLog(recordID int, description XML)

INSERT ExecutionLog(recordID, description)

VALUES(1, 'SalesThe connection timed out.')

INSERT ExecutionLog(recordID, description)

VALUES(1, 'database unavailable')
            

Você também pode usar o tipo de dados xml para definir parâmetros e variáveis, como o código exemplo abaixo demonstra.

 
CREATE PROCEDURE AddRecordToLog (@record AS XML)

AS

--corpo da procedure

GO

DECLARE @logRecord AS XML

SET @logRecord = 'SalesThe connection timed out.'

EXEC AddRecordToLog @logRecord
            

O SQL Server converte automaticamente os tipos de dados (n)char, (n)varchar, (n)text, varbinary, e image para xml quando esses valores estiverem sendo passados para um parâmetro, coluna ou variável do tipo xml.

Os benefícios em armazenar dados XML usando um tipo de dados xml no SQL Server 2005 são os seguintes:

Entre as limitações em usar um tipo xml para armazenamento de dados XML estão:

Validando dados xml com esquemas xml

O SQL Server 2005 suporta dois tipos de dados XML: untyped e typed. Relacionando uma variável, coluna ou parâmetro do tipo xml a um esquema xml, o SQL Server tem a possibilidade de validar a corretude da instância XML. Um esquema xml descreve a estrutura de um documento XML, assim como provê informações de tipos que descrevem a natureza dos dados nos elementos e atributos. Se um documento XML estiver de acordo como o que está declarado no esquema xml, esse documento é considerado válido. Um documento inválido é quando esse documento não está em conformidade com o que está declarado no esquema xml.

Esquemas xml são declarados em nível de banco de dados, e são de grande importância, pois fornecem ao SQL Server metadados que definem o limite e a natureza dos dados xml. Após criar um esquema xml como mostra o código baixo, você pode validar qualquer coluna, variável ou parâmetro do tipo xml de acordo com esse esquema.

CREATE XML SCHEMA COLLECTION LogRecordSchema AS 

No exemplo a seguir, o SQL Server valida o conteúdo da variável @varXML com as regras especificadas em todos os esquemas xml que compõem a coleção de esquema LogRecordSchema.

Nesse exemplo, a atribuição da variável falha, pois a instância XML não está em conformidade com a estrutura declarada pelo esquema xml.

Em muitos casos, é mais fácil armazenar o esquema xml em um arquivo externo de extensão .xsd e carregar esse esquema xml para uma variável xml com o comando OPENROWSET, como mostra o código exemplo a seguir.


            DECLARE @schema XML

            SELECT @schema = c FROM OPENROWSET (
            
            BULK 'MyXMLSchema.xsd', SINGLE_BLOB) AS TEMP(c)
            
            CREATE XML SCHEMA COLLECTION MySchema AS @schema 

No próximo artigo, veremos os métodos do tipo xml que permitem consultar ou modificar dados xml. Também veremos a sintaxe e uso do XQuery, que possibilita a construção de consultas complexas sobre dados xml.

Artigos relacionados