MiniCursoGerenciaDadosXMLemBD-ERBD2006

Propaganda
II Escola Regional de Banco de Dados – II ERBD
Mini-Curso
Gerência de Dados XML
em Bancos de Dados
Ronaldo dos Santos Mello
INE/CTC/UFSC
[email protected]
http://www.inf.ufsc.br/~ronaldo
Roteiro
1. Introdução
2. Tecnologia XML
3. Gerência de Dados XML
a. em bancos de dados relacionais
b. em bancos de dados XML nativos
4. Considerações Finais
Roteiro
1. Introdução
2. Tecnologia XML
3. Gerência de Dados XML
a. em bancos de dados relacionais
b. em bancos de dados XML nativos
4. Considerações Finais
XML (eXtensible Markup Language)
 Tecnologia desenvolvida pela W3C
– W3C: World Wide Web Consortium
 definição de padrões para a Web
 consórcio formado pela academia e indústria
 Padrão para representação e transferência de dados
 Motivações para utilização crescente da XML
– aplicações sobre a Web
 extração, manipulação, integração, transferência e publicação
de dados
– aplicações que lidam com dados de natureza complexa
 exemplos: aplicações científicas, geográficas, ...
 preferência por docs XML ao invés de dados em BDs
relacionais
Protocolos XML
 Definidos em diversos domínios e tecnologias
– comércio eletrônico
 CXML, eBisXML, ...
– referências bibliográficas
 DBLP, SIGMOD, ...
– sistemas de informação geográfica
 SVG, GML, ...
– dispositivos móveis
 WAP, WML, ...
– web services
 SOAP, WSDL, ...
– ...
Uso Extensivo de Protocolos XML...
 Necessidades
– métodos de acesso a dados XML pelos
programas de aplicação
– projeto da estrutura dos dados XML
– facilidades para armazenamento e manipulação
de dados XML persistentes
– ...
 A tecnologia de Banco de Dados (BD) é útil
neste contexto
Tecnologia XML x Tecnologia BD
 Similaridades
– documentos XML mantém coleções de dados
– tecnologia XML oferece mecanismos para definição e
manipulação de dados
 DTD e XSD, XPath e XQuery, DOM, ...
 Diferenças
– dado XML não é um dado convencional
 dado semi-estruturado
– misto de texto e estrutura, instâncias heterogêneas, auto-descritivo, ...
– tecnologia XML é carente de alguns mecanismos de
gerenciamento de dados
 integridade, transações, indexação, atualização, ...
Tecnologia XML x Tecnologia BD
 Conclusão
– tecnologia XML não é totalmente equivalente à
tecnologia de BD
 Tópico de pesquisa na comunidade
científica de BD
– gerenciamento de dados XML através de BDs
– como tratar?
 extensão de SGBDs existentes?
 desenvolvimento de SGBDs específicos para XML?
Roteiro
1. Introdução
2. Tecnologia XML
3. Gerência de Dados XML
a. em bancos de dados relacionais
b. em bancos de dados XML nativos
4. Considerações Finais
O que é XML?
 XML é uma meta-linguagem de marcação
– linguagem de marcação
 semelhante à linguagem HTML
 utiliza tags para descrição os dados
– tag: indica a intenção do dado e delimita o seu conteúdo
– meta-linguagem
 XML é um padrão aberto
– cada aplicação define o protocolo (linguagem) para a
representação dos seus dados
 Dados no formato XML são descritos em
um documento XML
Exemplo de Documento XML
<?xml version =“1.0” encoding ="ISO-8859-1“>
informações do
<!–- documento XML sobre livros -->
<!DOCTYPE listaDeLivros [
documento
<!ELEMENT listaLivros(livro+) ...]>
<listaLivros>
elemento (raiz)
<livro ISBN=“112”>
atributo
<título>Tecnologia XML</título>
elemento (simples)
<autor>
elemento (complexo)
<nome>João da Silva</nome>
elemento (misto)
<eMail>[email protected]</eMail>
</autor>
...
<capítulo nome=“Introdução”>A XML foi ...
<seção>
<nome>Linguagens de Marcação</nome> ...
</seção>
</capítulo> ...
</livro> ...
</listaLivros>
dado XML: estrutura hierárquica, ordenada e complexa
Documento XML Bem Formado
 Requisitos
– contém um elemento raiz
– define elementos com tags inicial e final
– define atributos com conteúdo delimitado por
aspas simples (‘) ou aspas duplas (“)
 Parser XML
– programa que verifica se um documento XML é
bem formado
 alguns browsers Web são capazes de realizar tal
verificação
Tecnologia XML da W3C
 Principais facilidades similares a SGBDs
– definição de esquemas
 DTD e XSD
– linguagens de consulta
 XPath e XQuery
– modelo de representação e interface de acesso
 DOM
Definição de Esquemas
 Esquema XML
– define restrições para a organização hierárquica e
conteúdo dos dados em um doc XML
– documento válido
 documento cuja estrutura está de acordo com um esquema
 validação é feita por um parser
 Duas recomendações
– DTD (Document Type Definition)
– XSD (XML Schema Definition)
DTD
 Primeira recomendação da W3C
 Gramática para definição de hierarquia
– baseada em seqüências ordenadas e escolhas
 Definição de elementos
– complexos, textuais (#PCDATA), vazios (EMPTY),
mistos ((#PCDATA | ...)*) ou com conteúdo
aberto (ANY)
 Definição de atributos
– obrigatórios (#REQUIRED) opcionais (#IMPLIED),
fixos (#FIXED), valor default, enumeração,
referência (ID, IDREF(S))
DTD - Exemplo
<!ELEMENT listaLivros (livro+)>
<!ELEMENT livro (título, preço, autor+, capítulo+)>
<!ATTLIST livro ISBN ID #REQUIRED
edicaoAnterior IDREF #IMPLIED>
<!ELEMENT título (#PCDATA)>
<!ELEMENT autor (nome, eMail?)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT preço (#PCDATA)>
<!ELEMENT eMail (#PCDATA)>
<!ELEMENT capítulo (#PCDATA | seção)*>
<!ATTLIST capítulo nome CDATA #REQUIRED>
<!ELEMENT seção (nome, conteúdo)>
<!ELEMENT conteúdo (#PCDATA)>
XML Schema (XSD)
 Recomendação mais recente
 Sintaxe XML
 Extensão da funcionalidade de uma DTD
– definição e especialização de tipos de elementos
 semelhança com esquemas orientados a objetos
– definição de tipos de dados
 simples (string, integer, boolean, ...)
 complexos (list, union)
– facilidades adicionais para definição de restrições
 intervalos de valores permitidos, padrões de conteúdo via
expressões regulares, ...
– ...
XSD - Exemplo
<?xml version=“1.0” encoding=“UTF-8”>
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
... <!-– Declaração de Tipos -->
<xsd:simpleType name=“Tisbn”>
<xsd:restriction base=“xsd:string”>
<xsd:pattern value=“[0-9]{2}-[0-9]{3}-[0-9]{4}-[0-9]”/>
</xsd:restriction>
</xsd:simpeType>
<xsd:complexType name=“Tlivro”>
<xsd:sequence>
<xsd:element name=“titulo” type=“xsd:string”/>
<xsd:element name=“autor” type=“Tautor”
minOccurs=“1” maxOccurs=“unbounded”/>
<xsd:element name=“preço” type=“xsd:float“/>
...
</xsd:sequence>
<xsd:attribute name=“isbn” type=“Tisbn”/>
</xsd:complexType>
...
XSD – Exemplo (cont.)
...
<xsd:complexType name=“TlivroTécnico” base=“Tlivro”
derivedBy=“extension”>
<xsd:element name=”area" type=“xsd:string"
minOccurs=“1” maxOccurs=“1”/>
</complexType>
...
<!-– Declaração de Elementos -->
<xsd:element name=“listaLivros”>
<xsd:complexType>
<xsd:element name=“livro” type=“Tlivro”/>
minOccurs=“1” maxOccurs=“unbounded”/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XPath
 Primeira recomendação para consulta a dados
 Linguagem para acessar partes de um doc XML
– sintaxe: expressões de caminho
 assemelha-se à navegação em diretórios de arquivos
– exemplo
 expressão XPath: /livro/título
 resultado:
<título>Tecnologia XML</título>
<título>Sistema de Banco de Dados</título>
...
XPath - Exemplos
/
(elemento raiz – todo o doc XML)
/livro/*/eMail
(‘*’ substitui 1 elem)
/livro//seção
(qq elemento descendente seção)
/livro/capítulo[1] (primeiro capítulo de livros)
/livro/capítulo/nome |
/livro/capítulo/seção/nome (união)
/livro/@ISBN
(acesso a um atributo)
/livro[título = “XML”] (filtro)
/livro[capitulo/@nome = “XML” or
//seção/nome = “XML”]/título (filtro)
/livro//seção[last()] (função)
XQuery
 Recomendação mais recente
 Recursos adicionais em relação à XPath
– junções, definição de estruturas de resultado,
variáveis de consulta, atributos calculados, funções
de agregação, ...
 Sintaxe básica (expressão “FLWR”)
for variável in expressãoXPath
[let associação de novas variáveis]
[where condição]
return estrutura de resultado
XQuery - Exemplos
for $liv in /livro
where $liv/autor/nome = “João Silva”
return { $liv/@ISBN, $liv/titulo }
(consulta
simples)
for $liv in /livro
let $pDesc := $liv/preço - $liv/preço * 0.1
where $liv/categoria = “ficcao”
return <FiccaoDesc>{$liv/titulo, $pDesc}</FiccaoDesc>
for $liv1 in /livro[@ISBN = “562”]
for $liv2 in /livro
(nova estrutura
de resultado)
where $liv2/@ISBN != $liv1/@ISBN
and $liv2/autor/nome = $liv1/autor/nome
return $liv2/titulo
(junção)
DOM (Document Object Model)
 Modelo de dados para XML
– estrutura hierárquica (árvore)
– métodos de acesso (API DOM)
 principais classes de objetos
– document, node, nodelist e element
 execução de consultas e atualizações de dados
 Parsers DOM
– validam um doc XML
– geram um objeto document
Objetos do Modelo DOM
document
node
listaLivros
...
livro
título
“Tecnologia XML”
ISBN
preço
livro
autor
autor
79.00
nome
“João da Silva”
mail
“[email protected]”
“[email protected]”
nodelist
nome
element
“Maria Souza”
Exemplos de Métodos da API DOM
document
Método
Resultado
documentElement
Element
getElementByTagName(String)
NodeList
createElement(String)
Element
...
element
Método
Resultado
tagName
String
getAttribute(String)
String
setAttribute(String nome, String valor)
Attr
removeAttribute(String)
getElementsByTagName
...
NodeList
nodeList
Método
Resultado
Length
int
item(int)
Node
DOM – Exemplo (JavaScript)
var doc, raiz, livro1, autores, autor2;
doc = new ActiveXObject(“Microsoft.XMLDOM”);
doc.load(“livros.xml”);
if (doc.parseError != 0) ...;
else
{
raiz = doc.documentElement;
/* busca o primeiro livro (primeiro nodo filho) */
livro1 = raiz.childNodes.item(0);
/* busca a lista de autores do primeiro livro */
autores = livro1.getElementsbyTagName(“autor”);
/* busca o segundo autor */
autor2 = autores.item(1);
/* escreve o nome do autor – primeiro nodo filho */
document.write(“Nome do segundo autor: “ +
autor.childNodes.item(0).data);
}
Roteiro
1. Introdução
2. Tecnologia XML
3. Gerência de Dados XML
a. em bancos de dados relacionais
b. em bancos de dados XML nativos
4. Considerações Finais
XML em BDs Relacionais (BDRs)
 BDRs são adequados a
– docs XML fortemente estruturados
 “documentos orientados a registros”
<endereço>
<rua>Beira-Mar</rua><numero>104</numero><complemento>apto 203</complemento>
<bairro>centro</bairro><cidade>Florianópolis</cidade> <cep>88010-600</cep>
</endereço>
<endereço>
<rua>Lauro Linhares</rua><numero>761</numero><bairro>trindade</bairro>
<cidade>Florianópolis</cidade><cep>88040-900</cep>
</endereço>
– aplicações que realizam intercâmbio de dados
convencionais em XML
 dados de BD, arquivos, docs bem formatados em geral
XML em BDRs
 Vantagem
– uso de uma tecnologia madura de BD
 acesso eficiente
 escalabilidade
 linguagens de consulta declarativas
 ampla utilização no mercado
 Vários SGBDs já lidam com o formato XML
– Oracle, DB2, ...
 Questões básicas a resolver
– armazenamento dos docs XML
– acesso aos dados XML
Armazenamento de XML em BDR
 Duas abordagens
– esquemas de armazenamento que não levam em
conta o esquema XML (no schema-based)
 aresta
 rótulo
visão de grafo
 nodo
 níveis de granularidade
– esquemas de armazenamento que levam em
conta o esquema XML (schema-based)
 inlining
Abordagem no schema-based
 Nas três primeiras alternativas
– doc XML é armazenado na forma de um grafo
orientado rotulado
 ênfase na estrutura de dados genérica XML
 esquema relacional é o mesmo para qq tipo de doc
<?xml version =“1.0” encoding = ...>
<listaLivros>
<livro ISBN=“112”>
<título>XML</título>
<autor>
<nome>João Silva</nome>
<eMail>[email protected]</eMail>
</autor>
<capítulo nome=“Introdução”> ...
</capítulo> ...
</livro> ...
</listaLivros>
livros.xml
listaLivros
...
1
livro
ISBN
...
capítulo
2
...
título
nome
4
“XML”
8
autor
“112” 3
nome
6
“João Silva”
5
eMail
7
9
“Introdução”
”[email protected]"
Alternativa 1 - Aresta
listaLivros
LivrosXMLArestas
...
1
livro
ISBN
...
capítulo
2
...
título
nome
4
“XML”
8
autor
“112” 3
nome
6
“João Silva”
5
eMail
7
9
“Introdução”
”[email protected]"
origem
ordem nome
tipo
destino valor
0
1
listaLivros ref
1
1
1
livro
ref
2
2
1
ISBN
int
3
112
2
2
título
string
4
XML
2
3
autor
ref
5
2
4
capítulo
ref
8
1
nome
string
6
...
...
5
...
João
Silva
Alternativa 2 – Rótulo
Autor
...
listaLivros
...
1
livro
ISBN
8
autor
“112” 3
...
nome
nome
“XML”
5
eMail
6
“João Silva”
7
ordem
destino
100
2
3
5
Título
título
4
origem
...
...
capítulo
2
docID
9
“Introdução”
docID
origem ordem
destino valor
100
2
4
2
XML
...
”[email protected]"
eMail
Livro
docID
origem ordem destino
valor
5
[email protected]
docID
origem
ordem
destino
100
100
1
1
2
...
...
...
2
7
Alternativa 3 – Nodo
Caminhos
...
listaLivros
ID
...
1
...
livro
...
capítulo
2
ISBN
8
autor
“112” 3
...
X
listaLivros.livro.autor
Y
listaLivros.livro.autor.eMail
...
título
nome
4
nome
“XML”
5
eMail
6
“João Silva”
7
9
“Introdução”
”[email protected]"
Nodos
docID
camID
inicio
fim
ordem
100
X
5
7
3
...
Textos
docID camID nodo
valor
100
[email protected]
...
expressão
Y
7
Comparativo das Alternativas
Aresta
Rótulo
 Não há desperdício de
 Bom desempenho em espaço
buscas na hierarquia do  Bom desempenho em
doc
buscas por um certo tipo
de elemento ou atributo
Nodo
+  Tabela única
 Não há desperdício de
espaço
 Bom desempenho em
buscas por relacionamentos
ancestral-descendente
 Poucas tabelas
-  Colunas nulas
 Desempenho ruim em
buscas por um certo tipo de
elemento ou atributo
 Os conteúdos dos nodos
são mantidos em uma
tabela separada
 Várias tabelas
 Desempenho ruim em  Desempenho ruim em
buscas por um certo tipo buscas na hierarquia do
de elemento ou atributo doc (acesso a muitas
tabelas)
 Desempenho ruim na reconstrução do doc XML (muitos acessos)
 Não há distinção entre elemento e atributo
Alternativa Níveis de Granularidade
 Considera três níveis de detalhamento de
docs XML para fins de armazenamento
– granularidade grande
– granularidade pequena
– granularidade média
Granularidade Grande
DocID
Nome
1
livros.xml
Documentos
...
<?xml version =“1.0” encoding = ...>
<listaLivros>
<livro ISBN=“112”>
<título>XML</título>
<autor>
<nome>João Silva</nome>
<eMail>[email protected]</eMail>
</autor>
<capítulo nome=“Introdução”> ...
</capítulo> ...
</livro> ...
</listaLivros>
livros.xml
Conteúdo
---
Granularidade Pequena
Elementos
Atributos
elemID
tag
elemPai
1
listaLivros
2
livro
1
3
título
2
ordem
doc
atrID
tag
elem
ordem
valor
1
1
ISBN
2
1
112
1
1
...
1
1
...
<?xml version =“1.0” encoding = ...>
<listaLivros>
<livro ISBN=“112”>
<título>XML</título>
<autor>
<nome>João Silva</nome>
<eMail>[email protected]</eMail>
</autor>
<capítulo nome=“Introdução”> ...
</capítulo> ...
</livro> ...
</listaLivros>
livros.xml
Conteúdos (de elementos simples)
contID
valor
elem
1
XML
3
2
João Silva
5
...
Documentos
docID
nome
raiz
1
livros.xml
1
...
Granularidade Média
Elementos
Atributos
elemID
tag
elemPai
1
listaLivros
2
livro
1
3
título
2
ordem
doc
atrID
tag
elem
ordem
valor
1
1
ISBN
2
1
112
1
1
...
1
1
conteúdo
elem
ordem
2
3
...
<?xml version =“1.0” encoding = ...>
<listaLivros>
<livro ISBN=“112”>
<título>XML</título>
<autor>
<nome>João Silva</nome>
<eMail>[email protected]</eMail>
</autor>
<capítulo nome=“Introdução”> ...
</capítulo> ...
</livro> ...
</listaLivros>
livros.xml
Textos
contID
1
---
...
Conteúdos
contID
valor
elem
...
Documentos
docID
. ...
nome
raiz
Níveis de Granularidade - Análise
Granularidade
Grande
Granularidade
Média
Granularidade
Pequena
 aumenta a complexidade da reconstrução do doc XML
 melhora o desempenho de consultas
– granularidade grande: buscas por palavras-chave
X
– granularidade pequena: consulta e indexação de qualquer tipo de
elemento ou atributo (coluna tag) e do conteúdo (coluna valor)
 diminui o volume de armazenamento
– granularidade grande/média: tags do doc ocupam muito espaço
Abordagem schema-based
 Doc XML é armazenado em um conjunto de
tabelas baseado no seu esquema de elementos
– ênfase na estrutura dos elementos
– docs diferentes geram esquemas relacionais diferentes
 Abordagem principal
– Inlining (alinhamento)
 agrupamento do maior número possível de descendentes na
tabela do elemento ancestral
– elementos simples ou atributos que aparecem uma única vez
 tabelas são geradas para
– elementos complexos
– relacionamentos com descendentes que ocorrem mais de uma vez
no elemento ancestral
Abordagem Inlining - Exemplo
<!ELEMENT listaLivros (livro+)>
<!ELEMENT livro (título, preço, autor+, capítulo+)>
<!ATTLIST livro ISBN ID #REQUIRED
edicaoAnterior IDREF #IMPLIED>
<!ELEMENT título (#PCDATA)>
<!ELEMENT autor (nome, eMail?)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT preço (#PCDATA)>
<!ELEMENT eMail (#PCDATA)>
<!ELEMENT capítulo (#PCDATA | seção)*>
<!ATTLIST capítulo nome CDATA #REQUIRED>
<!ELEMENT seção (nome, conteúdo)>
<!ELEMENT conteúdo (#PCDATA)>
Seção (ID, nome, conteúdo, IDcapítulo)
ConteúdoCapítulo (ID, texto, IDcapítulo)
Capítulo (ID, nome, ISBN)
Autor (ID, nome, eMail, ISBN)
Livro (ISBN, titulo, preço, ediçãoAnterior, IDlistaLivros)
Esquema XML
(DTD)
Esquema
Relacional
+ : esquema relacional mais próximo da organização lógica do esquema XML
− : esquema relacional não totalmente normalizado; exige sempre docs com esquema
Projeto do Esquema Relacional
 Depende das prioridades da aplicação
– prioriza-se a reconstrução do doc XML
 granularidade grande ou média
– prioriza-se navegações por relacionamentos
hierárquicos
 aresta; nodo; inlining
– prioriza-se consultas a determinados tipos de
elementos
 rótulo; granularidade média ou pequena; inlining
– prioriza-se economia no espaço de armazenamento
 aresta; nodo; granularidade pequena
– ...
Projeto do Esquema Relacional
 Combinações de alternativas podem ser
adotadas
– exemplo: rótulo + granularidade média
 possibilidade de consulta a um tipo de elemento ou
atributo até o nível de detalhe desejado
 certa economia de espaço
 desempenho médio na reconstrução do doc XML
Análise de SGBDRs - DB2 XML Extender
 Armazenamento de doc XML
– com granularidade grande
 coluna XMLCLOB, XMLVarchar ou XMLFile
– próximo de uma abordagem inlining
 definição um DAD (Database Action Diagram)
 documento XSD estendido com anotações de
mapeamento
Exemplo 1 – DB2 XML Extender
 Armazenamento com granularidade grande
CREATE TABLE Documentos (
docID VARCHAR(10) NOT NULL
PRIMARY KEY
nome VARCHAR(40)
conteúdo XMLCLOB);
Exemplo 2 – DB2 XML Extender
 Armazenamento com definições de mapeamento
através de DAD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DAD PUBLIC "dadId" "dad.dtd">
<DAD>
<dtdid>livros.dtd</dtdid>
<Xcollection> ...
<prolog>?xml version="1.0"?</prolog> ...
<element_node name=“livro">
<RDB_node>
<table name=“Livros" key=“códLivro"/>
<table name=”Capítulos” key=“códCapto”>
...
</RDB_node>
<attribute_node nome = “titulo”>
<RDB_node>
<table name=“Livros”/>
<column name=“titulo” type=“varchar(50)”/>
</RDB_node>
</attribute_node> ...
</DAD>
elemento a mapear
tabelas relacionais
que mantêm dados
do elemento
mapeamento de
elementos simples
ou atributos para
colunas de tabelas
Exemplo 3 – DB2 XML Extender
 Armazenamento com definições de mapeamento
em um doc XSD estendido
...
<xsd:element name=“livro">
<xsd:complex_type>
<xsd:sequence>
<xsd:element name=“titulo" type=“xsd:string"
db2-xdb:rowSet=“Livros”
db2-xdb:column=“titulo”/>
<xsd:element name=“preço" type=“xsd:integer"
db2-xdb:rowSet=“Livros”
db2-xdb:column=“valor”/>
...
</xsd:sequence>
</xsd:complex_type>
</xsd:element>
...
Oracle XML DB
 Armazenamento de doc XML
– granularidade grande
 coluna CLOB
 Exemplo
create table DocsXMLEstruturados(
docID varchar(10),
nome varchar2(40),
conteúdo CLOB)
SQL Server
 Armazenamento de doc XML
– próximo de uma abordagem inlining
 forma declarativa
– função OPENXML invocada em instruções SQL
 documento XSD estendido com anotações de
mapeamento
– abordagem aresta
 função OPENXML
Exemplo 1 – SQL Server
 Armazenamento de forma declarativa
– definido de forma ad hoc
apontador do doc XML
elemento a armazenar
select * into Livros
forma de
from OPENXML(@pDoc,‘/livro’,3)
mapeamento (*)
with (codLivro varchar(11) ‘@ISBN’,
titulo varchar(50) ‘titulo’,
preco numeric(5,2) ‘preço’,
...)
(*) indica a proveniência de um dado, de acordo com o seu nome, a menos que a
cláusula WITH indique explicitamente sua localização:
1: centrada em atributo: dados vêm de atributos
2: centrada em elemento: dados vêm de sub-elementos
3: híbrido: dados vêm de atributos (tem precedência) ou de sub-elementos
Exemplo 2 – SQL Server
 Armazenamento de forma declarativa
– segundo uma abordagem aresta (“enxuta”)
 tabela única para o doc XML (ou parte dele)
 cláusula WITH não informada
 considera textos como nodos da árvore XML
select * into ArvoreXMLLivro
from OPENXML(@pDoc,‘/livro’,2)
tipoNodo:
1: elemento
2: atributo
3: texto
ÁrvoreXMLLivro
IDpai ID
conteúdo
tipoNodo
1
1
livro
1
2
3
ISBN
2
3
4
112
3
2
5
título
2
...
Exemplo 3 – SQL Server
 Armazenamento com definições de mapeamento
em um doc XSD estendido
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Cust" sql:relation="Customers">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustNo"
sql:field="CustomerId“
type="xsd:integer" />
<xsd:element name="Contact"
sql:field="ContactName"
type="xsd:string" />
. . .
</xsd:sequence>
</xsd:complexType>
. . .
</xsd:element>
. . .
</xsd:schema>
Acesso a Dados XML em BDRs
 Armazenamento dos dados XML é relacional
– SQL é o padrão para acesso!
 Esquemas relacionais mais detalhados
– exs.: granularidade pequena, rótulo ou inlining
– instruções SQL tradicionais resolvem!
 Esquemas relacionais mais compactos
– exs.: granularidade grande/média
– consultas SQL especiais sobre o conteúdo do doc
 Resultados de consultas no formato XML
SQL/XML
 Padrão ANSI ISO derivado do SQL
 Métodos para manipulação de dados XML
através da SQL
– principais funcionalidades
 consulta ao conteúdo de docs XML
 geração de estruturas XML como resultado de uma
consulta SQL
 atualização de docs XML
 Oracle e DB2 adotam grande parte do padrão
– MySQL implementa algumas funcionalidades
Acesso ao Conteúdo de Docs XML
 Exemplo1 – DB2 XML Extender
nome de coluna que
mantém o doc XML
select docID, nome
from Documentos
where extract Varchar (conteúdo,
“/livro/título”) like “%XML%”
Acesso ao Conteúdo de Docs XML
 Exemplo2 – Oracle XML DB
resultado
tabular
select extractValue
(conteúdo,'/livro/título')
from DocsXMLEstruturados
where
existsNode(conteúdo,'/livro/autor/nome')
= “João Silva”
Resultados de Consultas em XML
 Exemplo 3 – DB2 e Oracle
define atributos de um
elemento XML
define um elemento XML
SELECT XMLElement(“Livro",
XMLAttributes(l.codLivro AS “ISBN“,
l.titulo AS “titulo”),
define uma XMLAgg( XMLElement(“Capitulo",
seqüência
XMLForest (c.codCapto AS “numero”,
de elementos
c.nome AS “nome”)))
FROM livros l INNER JOIN capitulos c
ON l.codLivro = c.codLivro
GROUP BY l.codLivro;
define uma agregação de sub-elementos
com base em um agrupamento (por Livro, no caso)
Resultados de Consultas em XML
 Exemplo 3 – DB2 e Oracle
– resultado
<Livro ISBN=112 titulo=“XML">
<Capítulo>
<numero>1</numero>
<nome>Introdução</nome>
</Capítulo>
<Capítulo>
<numero>2</numero>
<nome>Sintaxe XML</nome>
</Capítulo>
...
</Livro>
<Livro ISBN=119 titulo=“XML Schema">
...
Resultados na Forma de Docs XML

Granularidade grande
–

seleção direta da coluna que mantém o doc XML
na íntegra
Geração doc XML a partir de dados de
tabelas
–
Oracle XML DB

–
métodos da API DBMS_XMLGEN geram docs XML a
partir do resultado de consultas SQL
DB2 XML Extender
1. define-se um esquema de mapeamento
relacionalXML (DADs)
2. utiliza-se métodos específicos de geração de docs
XML a partir desta DAD
Geração de Docs XML
 Exemplo – Oracle XML DB
– trecho de programa PL/SQL
 para consultas SQL/XML
– fragmento XML do resultado é transformado em um doc XML
 para consultas SQL convencionais
– uma transformação predefinida para uma estrutura XML é
aplicada (através dos métodos DBMS_XMLGEN)
DECLARE qCtx DBMS_XMLGen.ctxHandle;
result CLOB;
BEGIN
qCtx := DBMS_XMLGen.newContext('SELECT ... ');
result := DBMS_XMLGen.getXML(qCtx);
DBMS_XMLGen.closeContext(qCtx);
END;
Atualização de Conteúdo XML
 Granularidade grande
– inclusão/exclusão/substituição do doc XML
 Operadores SQL/XML de atualização (Oracle)
– insertChildXML(), insertXMLBefore(),
appendChildXML(), deleteXML(),
updateXML()
 Métodos proprietários executados na instrução
update da SQL (DB2)
 Não há padronização...
Exemplo 1 – Oracle XML DB
 Atualização via SQL/XML
esquema XML registrado no Oracle
(atualização deve respeitá-lo)
update EsquemaLivros p
objeto default do Oracle para conteúdo XML
set object_value =
updateXML(object_value,
‘/livro/preco/text()’, ‘117.50’)
variável com os dados XML a atualizar
where ref(p) =
(select extractValue(res, ‘/livro[ISBN=112]’)
from DocsXMLEstruturados
where docID = 100)
Exemplo 2 – DB2 XML Extender
 Atualização via instrução update da SQL
– com método proprietário db2xml.Update()
update Documentos
set conteudo =
db2xml.Update
(conteudo, ’/livro[ISBN=112]/preço’,
‘117.50’)
where docID = ‘100’;
Acesso XML – Outros BDRs
 SQL Server
– extensão proprietária da SQL (métodos e cláusulas)
 geração de resultados no formato XML
 escrita de dados em docs XML
– updategrams
 sintaxe XML para atualização de docs XML
 execução em APIs para acesso a BD (ADO, OLE DB)
 MySQL
– alguns recursos da SQL/XML para consulta
– extensões das cláusulas insert e update da SQL
para inserção e substituição de fragmentos de docs
XML
Roteiro
1. Introdução
2. Tecnologia XML
3. Gerência de Dados XML
a. em bancos de dados relacionais
b. em bancos de dados XML nativos
4. Considerações Finais
BD XML Nativo (ou BD XML)
 Suporta um modelo de dados proprietário para
dados XML
– definição de elementos, atributos, ordem, ...
– não há mapeamento para um esquema de dados relacional
 Adequado a
– docs XML fortemente semi-estruturados
 “documentos orientados a textos”
 mapeamento para BD relacional seria complexo!
 necessidade de consultas envolvendo padrões textuais
– aplicações que lidam apenas com dados no formato XML
 Alguns SGBDRs possuem suporte nativo a XML
– exemplos: Oracle, DB2
BD XML
 Documento Orientado a Texto
– fortemente semi-estruturado
 representação menos estruturada e homogênea
<anuncio>
<transacao>Vendo</transação>, por motivo de viagem,<produto>automóvel Gol I 97
</produto>, cor azul, em ótimo estado de conservação. Preço: R$<preco>9000,00</preco>.
Tratar com<contato><nome>Pedro</nome> fone</fone>99991111</fone></contato>
</anuncio>
<anuncio>
Atenção! Se você deseja vender o seu veículo, nós realizamos o melhor negócio.
<transacao>Compramos</transação> qq tipo de <produto>veículo</produto>. Ligue-nos:
<contato><fone>2340011</fone> ou envie um email:<eMail>[email protected]</eMail><contato>
</anuncio>
 Tópico atual de pesquisa e desenvolvimento na área de BD
– exemplos de SGBDs XML: Tamino, eXist, ...
BD XML - Características Principais







Esquemas lógicos baseados em coleções
Consultas
Atualização
Transações
Conectividade
Restrições de Integridade
Armazenamento e indexação de dados
Coleções
 Noção lógica de um conjunto de docs XML
– a decisão por quais docs XML pertencem a uma
coleção fica em geral a cargo da aplicação
 + : flexibilidade quanto ao conteúdo da coleção
 - : baixo nível de integridade dos dados
– uma coleção pode estar restrita a um ou mais
esquemas XML
 Consultas e atualizações podem ser
direcionadas a coleções
Coleções - Tamino
 1 BD – n coleções – n esquemas – n tipos de documentos
– cada tipo de documento define um elemento raiz permitido
– novo doc XML: inserido em uma coleção e válido para algum tipo doc
 Docs sem esquema mantidos em uma coleção específica
tipos de documentos
Consultas
 Suporte a pelo menos uma linguagem de
consulta para XML
– uso mais extensivo de XPath
– uso de alguns dialetos da XQuery (tendência!)
 Características desejadas para uma linguagem
de consulta para XML
– buscas textuais (por palavras-chaves, por padrões, ...)
– consultas declarativas
– resultados de consultas
 doc XML, fragmentos de docs XML ou novas estruturas
XML
Consultas
 Tamino
– consultas em XPath e XQuery estendidas
– suporta busca por padrão
 /livro[título ~= “*XML*”]/título
– geração de docs XML como resultado
 eXist
– consultas em XPath estendida
– suporta busca por padrão, por palavra-chave (em
textos) e por proximidade
 /livro[título &=‘banco XML’]/título
 /livro/capitulo[near(.,’banco XML’,50)]/@nome
Atualizações
 Capacidades de atualização são variadas
– possibilidade apenas de substituição de um doc
XML completo
– API DOM para atualização de nodos
– linguagens de atualização declarativas
 tendência1: XUpdate (consórcio XML:DB)
– XML:DB
 consórcio de empresas responsável pelo desenvolvimento
de tecnologias para BDs XML
 tendência2: XQuery com capacidades de atualização
XUpdate
 Sintaxe XML
– I / E de elementos, atributos e texto
– A do conteúdo de elementos e atributos
 Exemplo 1:
<xupdate:append select=”//autor[nome=´Maria´]/eMail” child=”last()”>
<xupdate:element name="eMail">[email protected]</xupdate:element>
</xupdate:append>
(inclusão de um novo eMail para Maria)
 Exemplo 2:
<xupdate:remove select="/listalivros/livro[1]"/>
(remoção do primeiro livro)
Atualizações - Tamino
 XQuery possui capacidades de atualização
– insert, delete, rename e replace
 Exemplos
–
update
(inserção de autor)
for $liv in input()/livro
where $liv/titulo = “XML”
do(insert (<autor><nome>João Silva</nome></autor>)
following $liv/autor[last()])
– update
(alteração de eMail de autor)
for $aut in input()/livro/autor
where $aut/nome = “Maria Souza”
do (replace $aut/eMail with
(<eMail>[email protected]</eMail>))
Gerência de Transações
 Controle convencional de concorrência e
recuperação contra falhas
 Granularidade de bloqueios
– coleção
– doc XML (bloqueio usual – baixo nível de
concorrência)
– elementos
Gerência de Transações - Tamino
 Usuários definem sessões de conexão com o BD
– várias transações podem ocorrer dentro de uma
sessão
– interrupção da sessão implica rollback de todas as
transações pendentes
 mecanismo de log e backup de dados
– deadlock
 transação mais recente tem prioridade
 Granularidade de bloqueio é sempre o doc XML
Conectividade – APIs
 Interfaces ODBC tradicionais
– conexão com o BD, execução de consultas e
atualizações e exploração de resultados
 XQuery API para Java (JQX)
– JDBC como base
 Protocolos HTTP
– acesso via browsers Web
 Consórcio XML:DB
– proposta de uma API para BDs XML
 manipulação de BDs e coleções; execução de consultas
Xpath e XUpdate; acesso a resultados de consultas;
controle de transações
APIs - Tamino
 Interface principal de acesso são browsers Web
– um servidor Tamino deve estar sempre associado a
um Web server (domínio Internet)
– define uma API que encapsula chamadas HTTP
 criação e manipulação de BDs, coleções e docs
– acesso: http://<nome_domínio>/tamino/<nome_BD>/
[<nome_coleção>]<comando_API_HTTP>
 Outras formas de acesso
– API DOM para aplicações Java, Jscript e Active X
– API XML:DB
Tamino – Conectividade HTTP
Restrições de Integridade
 RIs a nível de esquemas XML são limitadas
–
–
–
–
ordem hierárquica e restrições de cardinalidade
tipo de dado de elementos e atributos
enumeração de valores permitidos
integridade referencial intra-documento
 Carência de um mecanismo de integridade
mais robusto
– similar a SQL em BDRs (DCL)
Integridade Semântica - Tamino
 Definição de valores possíveis (fixos, defaults, enumerações, ...)
 Integridade referencial controlada por stored procedures (para
cada caso indicado no campo trigger)
controles de
integridade
Armazenamento
 Docs XML “in-natura” (campo longo)
– texto do doc preservado na íntegra (cabeçalho, comentários, ...)
– armazenamento clusterizado de fragmentos do doc
 Esquema de objetos (DOM ou esquema similar a BDOO)
DOM
BDOO
preserva ordem de elementos
não preserva ordem de elementos
qualquer esquema tem a mesma estrutura (document,
element, ...)
– intenção dos dados não fica clara
esquema de classes gerado de acordo
com os tipos de elementos complexos
– intenção dos dados mais clara
clusterização por profundidade
– bom p/ buscas na ordem da hierarquia
clusterização por largura
– bom p/ buscas por propriedades de um
elemento
clusterização geralmente por instâncias
da mesma classe
– bom para buscas por dados de
determinados tipos de elementos
Indexação
 Indexação por valor
– indexa valores de elementos simples e atributos
 ex: buscar elementos com valor “XML”
 Indexação por estrutura
– indexa a localização de elementos e atributos
 ex: buscar elementos com nome “XML”
 Indexação full-text
– indexa tokens em textos e valores de atributos
 ex: buscar elementos que contenham a palavra “XML”
Exemplo de Indexação - eXist
 Índices são IDs numéricos para nodos, com uma
numeração dada por uma busca em largura
– supondo uma árvore sempre completa (“nodos virtuais”)
– certas propriedades da árvore permitem calcular o ID de nodos
filhos, pai e irmãos
 ex.: maxFilhos = 4  filhos de n  [ID(n)*4+1, ID(n)*4+4]
livro
título
1
“XML & BD”
8
preço
2
0
autor
3
autor
4
79.00
12
...
nome
eMail
nome
eMail
15
16
19
20
XML Nativo em BDR – Oracle XML DB
 Tipo nativo XMLType
– usado para definir uma coluna, tabela (coleções de
docs XML) ou variável PL/SQL
– mantém um doc XML bem formado
– existem métodos específicos para sua manipulação
 funções SQL/XML, validação com esquema XSD, ...
 Registro de esquemas XSD
– armazenados e acessados para validar docs XML
– podem ser associados a uma coluna XMLType
 garante docs XML válidos
XML Nativo em BDR– Oracle XML DB
 Armazenamento objeto-relacional
– decomposição em objetos SQL (Oracle é BDOR!)
 aproveita facilidades de gerência OR do Oracle
 baseia-se no esquema do doc XML para a conversão de tipos
complexos de elementos em tipos SQL
 Indexação
– por valor (árvore-B)
– full-text (utilizado em CLOB ou XMLType)
– por caminho (indexa expressões XPath em CLOB ou
XMLType)
 útil para alcançar dados presentes em hierarquias específicas
XML Nativo em BDR– Oracle XML DB
 Consulta a dados XML nativos
– função XMLQuery embute XQuery em SQL
 possibilitando junções de dados relacionais e XML
– exemplo:
select XMLQuery(
coluna do tipo XMLType
‘for $liv in /livro
where $liv/autor/nome = “Maria Souza”
return $liv/titulo’
passing conteúdo returning content)
as titulo
retorno de valores no
from DocsXMLEstruturados; formato de tabela
– tradução de expressões XPath para instruções SQL3
 processamento e otimização de consultas a nível OR
 Atualização
– API específica para o tipo XMLType
 appendChildXML(), insertXLBefore(), ...
XML Nativo em BDR – DB2
 Tipo nativo XML
– pode ser associado a uma coluna de uma tabela
 Armazenamento hierárquico proprietário
– com manutenção de ordem e economia de espaço
 substitui: nomes de tags por IDs e relações pai-filho por ponteiros físicos;
índices de páginas indicam todos os fragmentos de um doc XML
árvore do doc XML é
particionada em páginas
índice
páginas
Tabela de strings
nomes de tags
substituídos
por IDs únicos
página
página
página
XML Nativo em BDR – DB2
 Formas de indexação idênticas ao Oracle XML DB
– exemplo
create index ind1 on documentos(conteudo) (índice por caminho)
using xmlpattern ‘/livro/capitulo/secao/nome as sql varchar(50)’
 Consulta
– XQuery
 permitindo integração com SQL e SQL/XML
– manipulação conjunta de dados relacionais e XML
 exemplo:
for $l in db2-fn:sqlquery(
‘select d.conteudo
from documentos d, repositorios r
where d.docID = r.docID
and r.cidade = “Florianópolis”’)/livro
where $l/preço > 100.00
return $l/titulo
– SQL com função XMLQuery()
 Atualização
– método db2xml.update() atualiza valores de elementos e atributos
– APIs (JDBC, ODBC e DOM) oferecem métodos para inserção e remoção de
conteúdo em docs XML
Roteiro
1. Introdução
2. Tecnologia XML
3. Gerência de Dados XML
a. em bancos de dados relacionais
b. em bancos de dados XML nativos
4. Considerações Finais
Considerações Finais
 Uso amplo de XML requer soluções para
gerenciamento de dados XML
– tema de pesquisa atual na comunidade de BD
 Duas frentes de pesquisa/desenvolvimento
– extensão de SGBDs relacionais
– desenvolvimento de SGBDs XML nativos
BDs XML – Crítica
 Pontos a favor
– dados XML são semi-estruturados
 overhead de gerenciamento para BDs não-XML
– aplicações com dados complexos ou com regras de negócio
pouco claras ou muito dinâmicas
 flexibilidade estrutural de docs XML modela melhor as transações e
dados (complexos) personalizados do negócio
– aplicações que lidam apenas com dados XML
 por quê adquirir um BD não-XML?
– modelo de dados diferente; recursos para o gerenciamento de dados XML
é complicado
 Tecnologia relativamente recente
– algumas funcionalidades de SGBDs não são ainda tratadas ou
não estão consolidadas
 restrições de integridade, visões, segurança, concorrência, ...
BDRs – Crítica
 SGBDs robustos
– gerenciamento “completo” e eficiente de dados
 Modelo de dados não é XML
– necessidade de um suporte de mapeamento para
importação/exportação de dados XML
 overhead de processamento
– apesar de alguns SGBDRs já possuírem recursos de
armazenamento nativo de XML
 definição de novos padrões de acesso
– como SQL/XML
Benchmark BD XML x BDR
[Chaudhri03,Lu05]
 BD XML ocupa mais espaço
– mais índices; tags também são nodos DOM
 BD XML e BDR com desempenho semelhante em consultas a
grandes massas de dados
– BD XML: boas estratégias de indexação; não há overhead de mapeamento
de modelo de dados
 alternativa de representação mais eficiente: DOM
– BDR: boas técnicas de clusterização; menor volume de dados (modelo de
dados mais simples)
 alternativa de representação mais eficiente: inlining
 BD XML é mais lento em atualizações
– inexistência de métodos DOM eficientes ou linguagens declarativas padrão
para atualização
 alterações geralmente exigem parsing do doc XML
– atualização de muitos índices
 BD XML já apresenta boa compatibilidade com APIs Java, porém
requer mais codificação
– BDRs tem mais ferramentas proprietárias para desenvolvimento de
aplicações, requerendo menos codificação
Considerações Finais
 SGBDs XML irão vingar?
– não há resposta imediata...
– provavelmente não serão “A nova geração de
SGBDs”
 BDs relacionais continuam adequados a diversas
categorias de aplicações
 BDs relacionais estão evoluindo para se tornar BDs
híbridos (relacional e XML)
Referências Relevantes
 Tecnologia XML
– http://www.w3c.org/xml
– http://www.w3schools.com
 XML & BD
– http://www.rpbourret.com/xml/XMLAndDatabases.htm
 SQL/XML
– http://sqlx.org
 XML:DB
– http://www.xmldb.org
 SGBDRs com suporte a XML (Oracle e DB2)
– http://www.oracle.com/technology/tech/xml/xmldb
– http://www-306.ibm.com/software/data/db2/extenders/xmlext/
 SGBDs XML Nativos (Tamino e eXist)
– http://www.softwareag.com/tamino
– http://exist-db.org/
II Escola Regional de Banco de Dados – II ERBD
Mini-Curso
Gerência de Dados XML
em Bancos de Dados
Ronaldo dos Santos Mello
INE/CTC/UFSC
[email protected]
http://www.inf.ufsc.br/~ronaldo
Download