Post on 22-Jan-2018
Tecnologias XML e XML no SQL Server
Rogério Moraes de CarvalhoConsultor e instrutor de TI
rogeriom.wordpress.com | @rogeriomc
Agenda
Noções de XMLO que é XML?
Estrutura de um documento XML
XML bem formado
Algumas tecnologias XMLEndereç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 SchemaO que é XML Schema?
Estrutura de um documento XSD
Suporte a XML no SQL ServerTipo 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
Noções de XML
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 umaresistê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>
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
NamespaceMarcador de abertura
Marcador de fechamento
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 <
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áginasEditora
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 NutshellJoseph Albahari
Ben Albahari1138 O’Reilly 04/11/2015
Laboratório 1: Criando um documento XML (10 min)
Montar um documento XML para representar os seguintes dadosAgenda de contatos
IDPrimeiro
nomeSobrenome Sexo
Data de
nascimentoTelefones 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/1995Celular: (11) 98222-2222
Residencial: (11) 2333-3333
Pessoal:
pedromb@hotmail.com
3 Bárbara Albuquerque F 20/03/2000Residencial: (21) 3444-4444
Trabalho: (21) 3777-7777
Pessoal:
barbara25@gmail.com
Trabalho:
barbaraa@brb.com.br
Algumas tecnologias XML
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)
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/@Idreturn $opcao
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
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/
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/
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/
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áginasEditora
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 NutshellJoseph Albahari
Ben Albahari1138 O’Reilly 04/11/2015
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
IDPrimeiro
nomeSobrenome Sexo
Data de
nascimentoTelefones 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/1995Celular: (11) 98222-2222
Residencial: (11) 2333-3333
Pessoal:
pedromb@hotmail.com
3 Bárbara Albuquerque F 20/03/2000Residencial: (21) 3444-4444
Trabalho: (21) 3777-7777
Pessoal:
barbara25@gmail.com
Trabalho:
barbaraa@brb.com.br
Noções de XML Schema
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
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
Suporte a XML no SQL Server
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);
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 ASN'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ... > ... </xsd:schema>';
Métodos do tipo de dado xml
Há cinco métodos do tipo de dado xmlvalue('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)
Declaração de XML namespaces
Declaração de XML namespace na instrução XQuerydeclare namespace prefixo = "namespace";
Sintaxe da instrução Transact-SQL WITH XMLNAMESPACESWITH XMLNAMESPACES (
prefixo1 = "namespace1"
, prefixo2 = "namespace2"
, ...
, prefixoN = "namespaceN"
, DEFAULT "namespaceDefault"
)
...
Documentação
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: StructuresW3C Recommendation 5 April 2012: https://www.w3.org/TR/xmlschema11-1/
W3C XML Schema Definition Language (XSD) 1.1 Part 2: DatatypesW3C Recommendation 5 April 2012: https://www.w3.org/TR/xmlschema11-2/
XML Path Language (XPath) 3.0W3C 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/
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 LanguageW3C Recommendation 08 April 2014: https://www.w3.org/TR/xquery-30/
XSL Transformations (XSLT) Version 3.0W3C 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 EditionW3C Recommendation 10 April 2014: https://www.w3.org/TR/MathML3/