1. O documento discute tecnologias relacionadas a XML e seu uso no SQL Server, incluindo noções básicas de XML, XPath, XQuery, XSLT, SVG, MathML e XML Schema.
2. É apresentado o suporte nativo do SQL Server para armazenamento e processamento de dados XML, incluindo o tipo de dado xml e XML Schema Collections.
3. São demonstrados exemplos de uso de XQuery para consultar dados XML armazenados e métodos do tipo xml no SQL Server.
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
Tecnologias XML eXML no SQL Server 2016
1. Tecnologias XML e XML no SQL Server
Rogério Moraes de Carvalho
Consultor e instrutor de TI
rogeriom.wordpress.com | @rogeriomc
2. Agenda
Noções de XML
O que é XML?
Estrutura de um documento XML
XML bem formado
Algumas tecnologias XML
Endereçamento de XML com XPath
Consulta de XML com XQuery
Funções de XPath e XQuery
Transformação de XML com XSLT
Imagens vetoriais no formato SVG
Equações matemáticas com MathML
Noções de XML Schema
O que é XML Schema?
Estrutura de um documento XSD
Suporte a XML no SQL Server
Tipo de dado xml
XML Schema Collections
Métodos do tipo de dado xml
Declaração de XML namespaces
Extensões XML DML do Xquery
Documentação
Documentação no W3C
4. O que é XML?
XML: Extensible Markup Language
Formato baseado em texto simples
Representa informações estruturadas
Derivado do formato padrão SGML
Standard Generalized Markup Language
Alguns usos de XML
Formatos de softwares de escritório
OOXML: Office Open XML / OpenDocument
Arquivos de configuração
Armazenamento de dados estruturados
<ConteudoItem>
<SituacaoEstimulo>
Uma máquina de 9 V tem uma
resistência de 0,2 &#8486;.
</SituacaoEstimulo>
<Comando>
Qual é a corrente elétrica?
</Comando>
<Opcoes IdGabarito="e">
<Opcao Id="a">1,8 A.</Opcao>
<Opcao Id="b">22,2 mA.</Opcao>
<Opcao Id="c">22,2 A.</Opcao>
<Opcao Id="d">45 A.</Opcao>
<Opcao Id="e">45 mA.</Opcao>
</Opcoes>
</ConteudoItem>
5. Estrutura de um documento XML
<?xml version="1.0" encoding="iso-8859-1"?>
<ConteudoItem xmlns="http://www.cebraspe.org.br/TesteEletronico/ConteudoItem">
<SituacaoEstimulo>
Uma máquina de 9 V tem uma resistência de 0,2 &#8486;.
</SituacaoEstimulo>
<Comando>Qual é a corrente elétrica?</Comando>
<!-- O gabarito precisa ser revisado. -->
<Opcoes IdGabarito="e">
<Opcao Id="a">1,8 A.</Opcao>
<Opcao Id="b">22,2 mA.</Opcao>
<Opcao Id="c">22,2 A.</Opcao>
<Opcao Id="d">45 A.</Opcao>
<Opcao Id="e">45 mA.</Opcao>
</Opcoes>
</ConteudoItem>
Instrução de processamento
Atributo
Elemento
Comentário
Texto
Namespace
Marcador de abertura
Marcador de fechamento
6. XML bem formado
Principais regras de um documento bem formado
Elementos
Deve haver um único elemento raiz que contém todos os outros elementos
Todo elemento deve ter mesmos nomes nos marcadores de abertura e fechamento
XML faz distinção entre letras maiúsculas e minúsculas
Elementos devem estar aninhados corretamente, sem estarem intercalados
Atributos
Nomes de atributos não podem se repetir num mesmo marcador de abertura ou elemento vazio
Todos os atributos devem ter um valor
O valor de todo atributo deve estar delimitado por aspas ou por apóstrofos
Valores de atributos não podem ter o caractere <
7. Demonstração 1: Criando um documento XML
Montar um documento XML para representar os seguintes dados
Livros
ID Titulo Autor(es)
Número
de páginas
Editora
Data de
publicação
1 Clean Code Robert C. Martin 464 Prentice Hall 01/08/2008
2 T-SQL Querying
Itzik Ben-Gan
Adam Machanic
Dejan Sarka
Kevin Farlee
861 Microsoft Press 17/02/2015
3 C# 6.0 in a Nutshell
Joseph Albahari
Ben Albahari
1138 O’Reilly 04/11/2015
8. Laboratório 1: Criando um documento XML (10 min)
Montar um documento XML para representar os seguintes dados
Agenda de contatos
ID
Primeiro
nome
Sobrenome Sexo
Data de
nascimento
Telefones E-mails
1 Camila da Silva Pereira F 15/02/1987
Celular: (61) 98888-8888
Residencial: (61) 3222-2222
Trabalho: (61) 2111-1111
Pessoal:
camilas@gmail.com
Trabalho:
camila.silva@bb.com.br
2 Pedro Marques Brito M 01/12/1995
Celular: (11) 98222-2222
Residencial: (11) 2333-3333
Pessoal:
pedromb@hotmail.com
3 Bárbara Albuquerque F 20/03/2000
Residencial: (21) 3444-4444
Trabalho: (21) 3777-7777
Pessoal:
barbara25@gmail.com
Trabalho:
barbaraa@brb.com.br
10. Endereçamento de XML com XPath
ele – seleciona o elemento filho ele
* – seleciona todos os elementos filhos
text() – seleciona todos nós textos
@atr – seleciona o atributo atr
@* – seleciona todos atributos filhos
ele[1] – seleciona o primeiro filho ele
ele[last()] – seleciona o último filho ele
. – seleciona o nó contexto
.. – seleciona o pai do nó contexto
ele1/ele2 – seleciona os elementos ele2 descendentes
diretos do elemento ele1
ele1//ele2 – seleciona os elementos ele2
descendentes do elemento ele1
ele/@atr –seleciona o atributo atr do elemento ele
ele[@atr="val"] – seleciona os elementos ele com
atributo atr com valor val
ele[@atr="val"][3] – seleciona o terceiro elemento
filho ele com atributo atr com
valor val
O que é XML Path Language (XPath)?
É uma linguagem de expressão que permite o processamento de valores
Sintaxe abreviada de caminhos para localização (relativa ao nó contexto)
11. Consulta de XML com XQuery
O que é XQuery?
É uma linguagem padronizada para combinar dados de documentos, bancos de
dados, páginas web e outros dados
Expressões FLWOR do Xquery
for – seleciona uma sequência de nós
let – vincula uma sequência a uma variável
where – filtra os nós
order by – ordena os nós
return – define o que retornar
(avaliado uma vez para cada nó)
for $opcao in doc("ConteudoItem.xml")
/ConteudoItem/Opcoes/Opcao
where $opcao/Id > 'b'
order by $opcao/@Id
return $opcao
12. Funções de XPath e XQuery
Funções de agregação
count($arg) – número de itens de $arg
sum($arg) – soma dos valores de $arg
avg($arg) – média dos valores de $arg
max($arg) – maior valor de $arg
min($arg) – menor valor de $arg
Funções numéricas
round($arg) – arredonda o valor de $arg
abs($arg) – valor absoluto de $arg
Funções de extensão da Microsoft
sql:column($col) – Valor da coluna $col
sql:variable($var) – Valor da variável
$var
Funções em valores string
concat($arg1, $arg2, ...) – concatena os strings
contains($arg1, $arg2) – $arg1 contém $arg2
starts-with($arg1, $arg2) – $arg1 começa com $arg2
ends-with($arg1, $arg2) – $arg1 termina com $arg2
substring($str, $inicio, $comprimento)
substring($str, $inicio) – retorna parte do string
substring-before($arg1, $arg2) – substring antes
substring-after($arg1, $arg2) – substring depois
concat($arg1, $arg2, ...) – concatena os strings
string-length($arg) – comprimento do string
upper-case($arg) – converte para letras maiúsculas
lower-case($arg) – converte para letras minúsculas
Funções por categoria
13. Transformação de XML com XSLT
O que é XSLT?
É uma linguagem projetada para transformar documentos XML em outros
documentos XML
Especificação mais recente no W3C
XSL Transformations (XSLT) Version 3.0
W3C Candidate Recommendation 19 November 2015: https://www.w3.org/TR/xslt-30/
14. Imagens vetoriais no formato SVG
O que é SVG?
É uma linguagem para descrever gráficos bidimensionais em XML
Permite três tipos de objetos gráficos:
Formas gráficas vetoriais (linhas e curvas)
Imagens
Texto
Especificação no W3C
Scalable Vector Graphics (SVG) 1.1 (Second Edition)
W3C Recommendation 16 August 2011: https://www.w3.org/TR/SVG11/
15. Equações matemáticas com MathML
O que é MathML?
É uma linguagem de marcação para descrever elementos matemáticos
Especificação no W3C
Mathematical Markup Language (MathML) Version 3.0 2nd Edition
W3C Recommendation 10 April 2014: https://www.w3.org/TR/MathML3/
16. Demonstração 2: Usando XQuery para consultar XML
Livros com mais de 500 páginas?
Total de páginas dos livros
Livro com menos páginas
Livros publicados em fevereiro
Títulos dos livros com mais de um autor
Autores com Ben no nome
Autores de todos livros em ordem alfabética
Autores com último sobrenome Albahari
ID Titulo Autor(es)
Número
de páginas
Editora
Data de
publicação
1 Clean Code Robert C. Martin 464 Prentice Hall 01/08/2008
2 T-SQL Querying
Itzik Ben-Gan
Adam Machanic
Dejan Sarka
Kevin Farlee
861 Microsoft Press 17/02/2015
3 C# 6.0 in a Nutshell
Joseph Albahari
Ben Albahari
1138 O’Reilly 04/11/2015
17. Laboratório 1: Usando XQuery para consultar XML
Contato de ID igual a 2
Contatos com mais de um e-mail
Todos os e-mails do Gmail
Nomes completos ordenados alfabeticamente
ID
Primeiro
nome
Sobrenome Sexo
Data de
nascimento
Telefones E-mails
1 Camila da Silva Pereira F 15/02/1987
Celular: (61) 98888-8888
Residencial: (61) 3222-2222
Trabalho: (61) 2111-1111
Pessoal:
marias@gmail.com
Trabalho:
maria.silva@bb.com.br
2 Pedro Marques Brito M 01/12/1995
Celular: (11) 98222-2222
Residencial: (11) 2333-3333
Pessoal:
pedromb@hotmail.com
3 Bárbara Albuquerque F 20/03/2000
Residencial: (21) 3444-4444
Trabalho: (21) 3777-7777
Pessoal:
barbara25@gmail.com
Trabalho:
barbaraa@brb.com.br
19. O que é XML Schema?
XML Schema (Esquema XML)
É uma linguagem para expressar restrições em documentos XML
Esquemas de validação XML definidos pelo W3C
Document Type Definition (DTD)
XML Schema Definition (XSD)
Usos de esquemas XML
Fornecer um vocabulário de elementos e atributos e onde podem aparecer
Associar tipos de dados com os valores encontrados num documento XML
Para fornecer uma descrição formal de um conjunto de documentos XML
20. Estrutura de um documento XSD
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.cebraspe.org.br/TesteEletronico/ConteudoItem"
targetNamespace="http://www.cebraspe.org.br/TesteEletronico/ConteudoItem"
elementFormDefault="qualified">
<xs:element name="ConteudoItem">
<xs:complexType>
<xs:sequence>
<xs:element name="SituacaoEstimulo" type="xs:string" />
<xs:element name="Comando" type="xs:string" />
...
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
Um documento XML que
satisfaz uma gramática XSD é
considerado um documento
XML válido
22. Tipo de dado xml
O que é o tipo de dado xml no SQL Server?
Tipo de dado para armazenar dados XML
Permite armazenar documentos ou fragmentos XML num banco de dados
É possível criar colunas e variáveis do tipo xml para armazenar instâncias XML
A representação do tipo de dado xml não pode ultrapassar o limite de 2 GB
XML tipado
Tipos de dado xml associado com um XML Schema Collection
Os esquemas na coleção são usados para validar e tipificar as instâncias XML
DECLARE @conteudoItem xml (TesteEletronico.ConteudoItemSchemaCollection);
23. XML Schema Collections
O que são XML Schema Collections no SQL Server?
Armazenam XML Schemas importados e são usados para:
Validar instâncias de XML
Tipificar dados XML quando armazenados no banco de dados
DDL para gerenciar coleções de esquemas XML
CREATE XML SCHEMA COLLECTION
ALTER XML SCHEMA COLLECTION
DROP XML SCHEMA COLLECTION
CREATE XML SCHEMA COLLECTION TesteEletronico.ConteudoItemSchemaCollection AS
N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ... > ... </xsd:schema>';
24. Métodos do tipo de dado xml
Há cinco métodos do tipo de dado xml
value('XQuery', 'Tipo de dado do SQL Server')
Método para consultar uma instância XML e retornar um valor escalar do tipo do SQL Server
query('XQuery')
Método para consultar uma instância XML e retornar uma instância de XML não tipado
exist('XQuery')
Método para consultar uma instância XML e retornar um valor do tipo bit
1 (resultado não vazio), 0 (resultado vazio), NULL (instância nula do XML)
nodes('XQuery') AS Tabela(Coluna)
Método para consultar uma instância XML e transformas nós XML em dados relacionais
modify('XML_DML')
Método para modificar o conteúdo de uma instância XML (incluir, excluir e atualizar nós XML)
25. Declaração de XML namespaces
Declaração de XML namespace na instrução XQuery
declare namespace prefixo = "namespace";
Sintaxe da instrução Transact-SQL WITH XMLNAMESPACES
WITH XMLNAMESPACES (
prefixo1 = "namespace1"
, prefixo2 = "namespace2"
, ...
, prefixoN = "namespaceN"
, DEFAULT "namespaceDefault"
)
...
27. Documentação no W3C
Extensible Markup Language (XML) 1.0 (Fifth Edition)
W3C Recommendation 26 November 2008: https://www.w3.org/TR/xml/
W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures
W3C Recommendation 5 April 2012: https://www.w3.org/TR/xmlschema11-1/
W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes
W3C Recommendation 5 April 2012: https://www.w3.org/TR/xmlschema11-2/
XML Path Language (XPath) 3.0
W3C Recommendation 08 April 2014: https://www.w3.org/TR/xpath-30/
XQuery 1.0: An XML Query Language (Second Edition)
W3C Recommendation 14 December 2010: https://www.w3.org/TR/xquery/
28. Documentação no W3C
XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition)
W3C Recommendation 14 December 2010: https://www.w3.org/TR/xquery-operators/
XQuery 3.0: An XML Query Language
W3C Recommendation 08 April 2014: https://www.w3.org/TR/xquery-30/
XSL Transformations (XSLT) Version 3.0
W3C Candidate Recommendation 19 November 2015: https://www.w3.org/TR/xslt-30/
Scalable Vector Graphics (SVG) 1.1 (Second Edition)
W3C Recommendation 16 August 2011: https://www.w3.org/TR/SVG11/
Mathematical Markup Language (MathML) Version 3.0 2nd Edition
W3C Recommendation 10 April 2014: https://www.w3.org/TR/MathML3/