Suporte XML nativo no SQL Server 2014/2016

15
SQLServerDF Suporte XML nativo no SQL Server 2014/2016 Rogério Moraes de Carvalho Consultor e instrutor de TI rogeriom.wordpress.com | @ rogeriomc

Transcript of Suporte XML nativo no SQL Server 2014/2016

Page 1: Suporte XML nativo no SQL Server 2014/2016

SQLServerDF

Suporte XML nativo noSQL Server 2014/2016

Rogério Moraes de CarvalhoConsultor e instrutor de TI

rogeriom.wordpress.com | @rogeriomc

Page 2: Suporte XML nativo no SQL Server 2014/2016

AgendaSuporte XML nativo no SQL Server 2014/2016

Debate inicial

Suas experiências: XML e SQL Server

XML e tecnologias relacionadas

O que é XML?

XML bem-formado

XML Schema e XML válido

XPath e XQuery

Algumas aplicações de XML

Suporte XML no SQL Server

Tipo de dado XML nativo

XML Schema Collections

Métodos do tipo de dados XML

Cláusula FOR XML

Debate final

Minhas experiências: XML e SQL Server

Page 3: Suporte XML nativo no SQL Server 2014/2016

Suas experiências: XML e SQL ServerDebate inicial

XML sem SQL Server

Suas opiniões

O que você entende por XML?

Quando você usaria XML?

Você acha XML obsoleto?

Que desvantagens você destacaria?

Que vantagens você destacaria?

Casos de uso

Você tem casos de sucesso?

Você tem casos de fracasso?

XML no SQL Server

Suas opiniões

Você acha uma mistura possível?

Quando você usaria XML no SQL Server?

Você acha XML no SQL Server obsoleto?

Que desvantagens você destacaria?

Que vantagens você destacaria?

Casos de uso

Você tem casos de fracasso?

Você tem casos de sucesso?

Page 4: Suporte XML nativo no SQL Server 2014/2016

O que é XML?XML e tecnologias relacionadas

Linguagem de marcação

XML: Extensible Markup Language

Formato texto simples e flexível

Derivado do SGML

Criação e manutenção

W3C: World Wide Web Consortium

Comunidade internacional responsável

pelo desenvolvimento de padrões Web

Responsável pela especificação XML

Exemplo de documento XML

<?xml version="1.0" enconding="ISO-8859-1"?><Contato Id="1" Sexo="Feminino"

DataNascimento="1980-10-29"><PrimeiroNome>Beatrice</PrimeiroNome><Sobrenome>Dias Lima</Sobrenome><Empresa Funcao="Gerente de Marketing">

Grupo Capivara</Empresa><Endereco Tipo="Residencial"

CEP="08830-170" UF="SP"><Logradouro Numero="1507">

Rua João Fernandes</Logradouro><Cidade>Mogi das Cruzes</Cidade>

</Endereco></Contato>

Page 5: Suporte XML nativo no SQL Server 2014/2016

XML bem formadoXML e tecnologias relacionadas

Todo documento XML com uma sintaxe correta

Principais regras para um documento bem formado

Deve ter um elemento raiz, que deve ser único

Todo elemento XML deve ter um marcador de abertura e outro de fechamento

Os marcadores de um elemento diferenciam letras maiúsculas de minúsculas

Elementos XML devem ser aninhados corretamente

Atributos de um elemento não podem ser repetidos

Valores de atributos devem ser delimitados por aspas ou apóstrofos

Page 6: Suporte XML nativo no SQL Server 2014/2016

XML Schema e XML válidoXML e tecnologias relacionadas

XSD: XML Schema Definition

Linguagem baseada em XML para expressar as restrições de documentos XML

Define uma gramática para um conjunto de documentos XML

Um documento XML que satisfaz um XML Schema é denominado XML válido

Page 7: Suporte XML nativo no SQL Server 2014/2016

XPath e XQueryXML e tecnologias relacionadas

XPath

É uma sintaxe para definir partes de um documento XML

Usa expressões de caminho para navegar por documentos XML

Contém uma biblioteca padrão de funções

Recomendação do W3C: XML Path Language (XPath) 2.0 (Second Edition)

XQuery

É a linguagem padrão para consulta de dados XML

XQuery é para XML o que SQL é para bancos de dados relacionais

É construída com base em expressões XPath

Recomendação do W3C: XQuery 1.0: An XML Query Language (Second Edition)

Page 8: Suporte XML nativo no SQL Server 2014/2016

Algumas aplicações de XMLXML e tecnologias relacionadas

Arquivos de configuração

Web.config (aplicações web ASP.NET)

Documentos de software para escritório

Microsoft Office 2007 ou superior (compactados no formato .zip)

OpenDocument - OpenOffice/LibreOffice (compactados no formato .zip)

Imagens vetoriais

SVG (Scalable Vector Graphics)

XML Web Services

Mensagens SOAP

...

Page 9: Suporte XML nativo no SQL Server 2014/2016

Tipo de dado XML nativoSuporte XML no SQL Server

Tipo de dado do SQL Server para armazenar dados XML

Instâncias de dados XML podem ser armazenados em:

Uma coluna do tipo XML

Uma variável do tipo XML

Exemplos

DECLARE @telefone xml = '<Telefone DDD="61">3222-2222</Telefone>';

CREATE TABLE Seguranca.Auditoria (IdAuditoria int PRIMARY KEY, Registro xml);

Sintaxe

xml ( [ CONTENT | DOCUMENT ] xml_schema_collection )

Page 10: Suporte XML nativo no SQL Server 2014/2016

XML Schema CollectionsSuporte XML no SQL Server

O SQL Server fornece armazenamento nativo para dados XML

Através do tipo de dado XML

Com uso de XML Schema Collection é possível associar esquemas XSD

Com uma coluna do tipo xml

Com uma variável do tipo xml

XML Schema Collections

Armazenam XML Schemas importados para o banco de dados

Objetivo dos XML Schema Collections

Validar instâncias XML

Definir tipo para os dados XML armazenados no banco de dados (XML tipado)

Page 11: Suporte XML nativo no SQL Server 2014/2016

Métodos do tipo de dados XMLSuporte XML no SQL Server

Objetivos dos métodosPara consultar uma instância XML armazenada em uma variável ou uma coluna do tipo XML

Cinco métodos do tipo XMLquery()

value()

exist()

modify()

nodes()

Método query() do tipo XMLDescrição

Consulta XQuery em uma instância XML

Retorna um XML não tipado

Sintaxequery('Xquery')

Método value() do tipo XMLDescrição

Consulta XQuery em uma instância XML

Retorna um valor escalar do tipo SQL

Sintaxevalue('Xquery', 'TipoSQL')

Page 12: Suporte XML nativo no SQL Server 2014/2016

Métodos do tipo de dados xmlSuporte XML no SQL Server

Método exist() do tipo xml

Descrição

Consulta XQuery em uma instância XML

Retorna um bit

1: representa true (resultado não vazio)

0: representa false (resultado vazio)

NULL: instância XML nula (valor NULL)

Sintaxe

exist('Xquery')

Método modify() do tipo xml

Descrição

Modifica o conteúdo de uma instância XML

Utiliza XML Data Manipulation Language

XML DML: extensão da Microsoft ao XQuery

Sintaxe

modify('XML DML')

XML DML: insert

Sintaxe

insert

Expressao1

[ as first | as last ] into | after | before

Expressao2

Page 13: Suporte XML nativo no SQL Server 2014/2016

Métodos do tipo de dados xmlSuporte XML no SQL Server

Método modify() do tipo xml

Sintaxe

modify('XML DML')

XML DML: delete

Sintaxe

delete Expressao

XML DML: replace value of

Sintaxe

replace value of

Expressao1

with

Expressao2

Método nodes() do tipo xml

Descrição

Útil para separar conteúdo de uma

instância XML em dados relacionais

Sintaxe

nodes('XQuery') as Tabela(Coluna)

Page 14: Suporte XML nativo no SQL Server 2014/2016

Cláusula FOR XMLSuporte XML no SQL Server

Uma consulta SELECT retorna o resultado como um conjunto de linhas

Opcionalmente, é possível retornar o resultado como XML

Pela especificação da cláusula FOR XML

A cláusula FOR XML pode ser usada em consultas ou subconsultas

Em subconsultas, pode ser usado em instruções INSERT, UPDATE e DELETE

Modos da cláusula FOR XML

RAW: gera um elemento <row> por linha no conjunto de linhas

AUTO: gera um resultado aninhado baseado na instrução SELECT

EXPLICIT: permite maior controle do XML gerado

PATH: permite maior controle do XML gerado, porém mais simples que EXPLICIT

Page 15: Suporte XML nativo no SQL Server 2014/2016

Minhas experiências: XML e SQL ServerDebate final

XML sem SQL Server

Minhas opiniões

O que eu entendo por XML?

Quando eu usaria XML?

Eu acho XML obsoleto?

Que desvantagens eu destacaria?

Que vantagens eu destacaria?

Casos de uso

Eu tenho casos de sucesso?

Eu tenho casos de fracasso?

XML no SQL Server

Minhas opiniões

Eu acho uma mistura possível?

Quando eu usaria XML no SQL Server?

Eu acho XML no SQL Server obsoleto?

Que desvantagens eu destacaria?

Que vantagens eu destacaria?

Casos de uso

Eu tenho casos de fracasso?

Eu tenho casos de sucesso?