sábado, 24 de julho de 2010

Introdução ao tipo de Dados XML - Parte 2

Utilizando SCHEMA COLLECTIONS para validar um campo XML
De acordo com o texto anterior, existem 2 formas de armazenar conteúdo XML em um banco de dados. O primeiro permite armazenar qualquer conteúdo XML desde que possua a sintaxe correta, é o XML não-tipado. Assim, para campos deste tipo, a única validação realizada é a da sintaxe do conteúdo inserido.

Em bancos de dados corporativos, a consistência e a integridade das informações armazenadas é fundamental. Dessa forma, permitir que o banco armazene qualquer tipo de conteúdo em um campo XML pode não ser viável, principalmente quando existem campos obrigatórios a serem armazenados em tal campo.

Para isso, o SQL Server permite que um campo ou variável do tipo XML seja tipado, isto é, tenha sua estrutura definida através de um SCHEMA COLLECTION.

Criando um SCHEMA COLLECTION
A sintaxe básica para criar um Schema Collection está descrita abaixo:

CREATE XML SCHEMA COLLECTION SchemaName AS  'conteúdo XML'

O exemplo a seguir ilustra o uso deste comando:

CREATE XML SCHEMA COLLECTION ContactSchema AS
'<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name = "Contato">
        <complexType>
            <sequence>
                <element name = "nome" type="string"/>
                <element name = "email" type="string" />
            </sequence>
        </complexType>
    </element>
</schema>'

No exemplo, foi definido um Schema Collection chamado ContactSchema com uma estrutura Contato cujos atributos são nome e e-mail, ambos do tipo string.

Os Schema Collections de um banco de dados podem ser acessados através do caminho nome_do_banco->Programmability -> Types -> XML Schema Collections, através da caixa de ferramentas "Object Explorer". A Figura abaixo mostra o Schema Collection criado no exemplo anterior:


Aplicando o Schema Collection
Depois de criar o Schema Collection, pode-se aplicá-lo aos campos XML das tabelas do banco ou mesmo às variáveis XML utilizadas.

No exemplo abaixo, aplicamos o Schema Collection ContactSchema à variável @contactInfo

DECLARE @contactInfo XML (ContactSchema)

Nas linhas a seguir, um conteúdo XML é associado à variável criada.

SET @contactInfo =
'<Contato>
<nome> Evandro </nome>
<email> evdjramos@gmail.com </email>
</Contato>'


A figura abaixo mostra o resultado da execução do scripta (foi adicionado um comando SELECT na variável @contactInfo para exibir o conteúdo armazenado.


Ao associar o conteúdo à variável com Schema Collection, o SQL Server valida o XML, verificando, além de sua sintaxe, sua estrutura. 

Caso um valor inválido seja atribuído à variável, um erro será disparado, como mostra a figura abaixo


Neste exemplo, o atributo obrigatório email do elemento Contato não foi definido, causando o erro mostrado.

Aguarde!
Na continuação deste artigo, teremos veremos consultas em XML e dicas de implementação de stored procedures e funções com utilização de parâmetros XML.

sábado, 17 de julho de 2010

Introdução ao tipo de Dados XML - Parte 1

Definição
O tipo de dado XML permite que o conteúdo de um arquivo estruturado com formato XML seja armazenado em uma variável ou coluna do banco de dados.
Versões do SQL Server
O tipo de dados XML foi umas das novidades introduzidas no SQL Server 2005. Até a versão 2000 do SQL Server, era possível armazenar o conteúdo de um arquivo XML em uma tabela através de colunas do tipo text e ntext, porém não era possível utilizar os benefícios da estrutura hierárquica do arquivo, uma vez que este era armazenada como texto puro.
Vantagens
Este tipo especial de dados permite que o conteúdo de um arquivo XML seja armazenado de forma que sua estrutura hierárquica seja padronizada através de um Schema e consultada através de XQuery. Assim, em uma tabela com colunas deste tipo, pode-se criar queries onde o filtro (cláusula WHERE) realize comparações com nós da árvore XML.
XML Tipado e XML Não-tipado
O SQL Server possibilita a definição de Schemas para controlar os campos XML, isto é, ao definir um schema para um campo, cria-se uma regra para a estrutura do XML a ser armazenado por ele. Sendo assim, apenas os arquivos ou trechos de arquivos que obedeçam a estrutura definida poderão ser inseridos na tabela.
Variáveis XML
Assim como os tipos comuns de dados do SQL Server, o tipo XML possibilita a criação de variáveis deste tipo. O comando abaixo mostra como criar uma variável deste tipo:

DECLARE @varXML XML
A cláusula FOR XML
Caso seja necessário retornar os dados de uma consulta ou mesmo trabalhá-los utilizando o formato XML, pode-se facilmente convertê-lo para esta estrutura através a cláusula FOR XML.
Pode-se aplicar o FOR XML ao resultado de uma consulta da seguinte forma:

SELECT campo1, campo2
FROM Tabela
WHERE campo2 = const
FOR XML {AUTO | RAW('NomeDoElemento')}

Exemplo básico utilizando variável XML e comando FOR XML

-- Criando e populando tabela temporária com dados de pessoas
CREATE TABLE #Pessoa (id int identity(1,1), nome varchar(100), sexo VARCHAR(1))
INSERT INTO #Pessoa VALUES ('Evandro','M'),('Ricardo','M'),('Márcio','M'),('Mariana','F'),('Patrícia','F'),('José','M')

-- Definindo variável do tipo XML
DECLARE @varXML XML

-- Utilizando o comando FOR XML para converter o resultado da consulta em um XML
SELECT  @varXML =
    (SELECT
        id,nome,sexo
    FROM
        #Pessoa
    ORDER BY
        nome
    FOR XML RAW('Pessoa'))

-- Exibindo o conteúdo da variável XML
select @varXML as XML

-- Apagando a tabela temporária
DROP TABLE #Pessoa

Ao executar o script, obtém-se o seguinte resultado:


Ao clicar no link do resultado da consulta, pode-se acessar o conteúdo XML retornado:


O XML gerado pode ser utilizado nos processamentos subsequentes ou utilizado para retornar dados a uma aplicação.

Aguarde! Nos próximos artigos falaremos sobre Schemas em XML estruturados e teremos dicas sobre o uso de variáveis e parâmetros XML.