Usando Visões SQL/XML para publicação de Dados

Propaganda
Usando Visões SQL/XML para publicação de Dados Relacionais
Luiz Aires de Souza Neto, Vânia Maria Ponte Vidal,
Bernadette Farias Lóscio, Fernando Cordeiro Lemos
Departamento de Computação - UFC
{luiz_aires, vvidal, bernafarias, fernandocl}@lia.ufc.br
Resumo
Atualmente, muitas aplicações usam o formato XML
para troca de dados na Web. Entretanto, a maioria dos
dados está armazenada em bancos de dados relacionais.
Assim, necessita-se definir mecanismos para publicá-los
no formato XML. Nesse trabalho, apresentamos a visão
geral de um processo de criação de visões XML de dados
relacionais. Uma visão XML é definida por um esquema
XML e um conjunto de mapeamentos que especificam
relacionamentos entre o esquema da visão XML e o
esquema da base relacional. Mostraremos um exemplo de
criação de uma visão XML seguindo os passos descritos
pelo processo proposto.
Nesse trabalho, apresentamos uma visão geral sobre
o processo de criação e consulta de visões XML sobre
qualquer banco de dados que suporte o padrão
SQL/XML. Neste trabalho, uma visão é definida através
de um esquema XML e de um conjunto de mapeamentos
entre o esquema da visão XML e o esquema da base
relacional. Assim, baseado nos mapeamentos da visão, é
possível traduzir consultas definidas sobre o esquema da
visão XML em consultas SQL/XML correspondentes
sobre a base de dados relacional.
Esse artigo está organizado como se segue. A Seção
2 discute o padrão SQL/XML. A Seção 3 apresenta uma
visão geral sobre o processo de criação de visões XML de
dados relacionais. A Seção 4 apresenta alguns trabalhos
relacionados. A Seção 5 apresenta as conclusões.
1. Introdução
2. SQL/XML
XML tem se tornado o formato padrão para troca de
informações entre aplicações na Web. Entretanto, como a
maioria dos dados está armazenada em bancos de dados
relacionais ou objetos-relacionais, surgiu a necessidade de
definir mecanismos para publicá-los no formato XML.
Uma maneira de publicar dados relacionais no
formato XML consiste em criar visões XML sobre os
dados relacionais. Uma visão pode ser materializada ou
virtual. Visões materializadas melhoram o desempenho
das consultas e a disponibilidade de dados, mas devem ser
atualizadas para refletir mudanças nos dados da fonte
subjacente [7]. No caso de visões virtuais, os dados ainda
persistem em bases relacionais, enquanto as aplicações
acessam os dados no formato de XML através da visão
[1]. Entretanto, criar visões XML de dados relacionais
levanta o problema de como definir a visão e de como
avaliar uma consulta XQuery [8] sobre a visão. Neste
caso, a consulta XQuery deve ser traduzida em SQL
através da composição desta com a definição da visão.
Com o surgimento do padrão SQL/XML [4] como
parte do SQL:2003 [4], usuários podem recorrer à funções
SQL/XML para publicar dados relacionais no formato
XML. As vantagens dessa abordagem estão no fato de se
usar um padrão para publicar dados relacionais e na
capacidade de processar funções de publicação
SQL/XML junto com cláusulas SQL, o que representa um
ganho de desempenho.
Várias aplicações Web usam banco de dados relacionais
para armazenar seus dados e utilizam XML para troca de
dados com outras aplicações. Diversos SGBDs
implementam extensões que permitem manipular dados
relacionais no formato XML, mas, geralmente, estes
sistemas adotam abordagens muito diferentes entre si,
dificultando uma interoperabilidade entre eles. Entretanto,
desenvolvedores precisam construir aplicações que
funcionem independentemente do SGBD que será usado.
Assim, a existência de um padrão que unifique o processo
de obtenção de dados XML a partir de dados relacionais é
muito importante.
Nesse contexto, XQuery e SQL/XML são dois
padrões que adotam consultas declarativas para obter
dados XML. XQuery é a linguagem padrão para a
realização de consultas sobre dados XML. Já o padrão
SQL/XML é capaz de gerar dados no formato XML a
partir de dados relacionais.
A linguagem SQL/XML foi criada com a
participação de grandes empresas tais como: Oracle, IBM,
Microsoft, Sybase. SQL/XML é parte do padrão
ANSI/ISO SQL 2003. As extensões do SQL:2003 que
compõem o SQL/XML são:
•
Funções de Publicação: permitem obter dados
XML a partir de dados relacionais.
O tipo de dados XMLTYPE: esse novo tipo de
dados
foi
adicionado
para
permitir
armazenamento de valores XML.
• Regras de Mapeamento: definem como os
valores relacionais serão convertidos em valores
XML.
Como o SQL é um padrão já maduro, existem várias
ferramentas e infra-estrutura para suportá-lo. Assim, para
um programador SQL aprender SQL/XML torna-se muito
simples, pois são poucas as novas funções de publicação
adicionadas ao SQL.
Nesta restante dessa seção, discutimos as extensões
relacionadas às funções de publicação.
•
2.1. Funções de publicação
As funções de publicação XML permitem a construção de
consultas SQL para a geração de documentos XML a
partir de dados relacionais. Como estas funções são parte
do padrão SQL 2003, podem ser usadas em conjunto com
expressões SQL comuns. Algumas das funções de
publicação do SQL/XML são descritas a seguir:
• XMLElement: Transforma valores relacionais em
elementos XML.
• XMLAttributes: Define os atributos de um elemento
XML.
• XMLForest: Transforma uma lista de valores
relacionais em uma lista de elementos XML
• XMLConcat: Concatena dois ou mais elementos XML.
• XMLAGG: Trata relacionamentos 1:n, ou seja, trata
coleções.
• XMLRoot: Cria o nó raiz de um documento XML.
Para ilustrar o uso de SQL/XML, considere, por
exemplo, o esquema de banco de dados relacional
PEDIDOS_DB apresentado na Figura 1.
PEDIDOS_REL
CLIENTES_REL
FK1
CLIENTE (FK)
DATA_PEDIDO
DATA_ENTREG
DEST_RUA
DEST_CIDADE
DEST_ESTADO
DEST_CEP
FK2
PRODUTOS_REL
ITENS_REL
CODIGO
NOME
PRECO
TAXA
Para obtermos o mesmo resultado da consulta Q1 no
formato XML, poderíamos aplicar a consulta Q2,
apresentada na Figura 5, sobre o mesmo banco de dados
relacional citado. O resultado da consulta Q2 é mostrado
na Figura 6. Note que, para cada tupla da tabela
CLIENTES_REL, foi gerado um elemento XML
<Cliente> estruturado com dois sub-elementos: um para o
atributo CLI_ID e outro para o atributo CLI_NOME.
CLIENTES_REL
COD NOME
RUA CIDADE EST FONE1
FONE2
1
Lucas S. José
Itu
SP 3466234 34721232
4
Marcelo D. Luís Cedro
CE 32813281 32435555
6
Marta
Vila I
Santos SP 9954320
NULL
PRODUTOS_REL
COD NOME PRECO TAXA
2
Teclado
30
0.1
3
Mouse
12
0.05
5 DVD RW
2
0.01
ITENS_REL
PEDIDO NUMERO PRODUTO QUANTIDADE DESCONTO
203
3203
5
5
0.05
204
3204
2
2
0.03
204
3205
3
2
0.01
PEDIDOS_REL
COD CLIENTE DT_PED DT_ENT RUA CIDADE
203
1
9/8/2007 9/9/2007 S. José
Itu
204
4
3/2/2008 6/3/2008 D. Luís
Cedro
Figura 2. Uma Instância de PEDIDOS_DB.
CODIGO
CODIGO
NOME
RUA
CIDADE
ESTADO
CEP
FONE1
FONE2
Figura 2 apresenta uma instância do banco de dados
relacional PEDIDOS_DB. Figura 3 apresenta a consulta
SQL Q1 sobre o banco de dados PEDIDOS_DB. Q1
retorna os atributos CLI_ID e CLI_NOME dos clientes da
tabela CLIENTES_REL. O resultado da consulta Q1
sobre a instância da Figura 2 é mostrado na Figura 4.
FK3
PEDIDO (FK)
NUMERO
PRODUTO (FK)
QUANTIDADE
DESCONTO
Figura 1. Esquema Relacional PEDIDOS_DB.
SELECT C.CODIGO, C.NOME
FROM CLIENTES_REL C
Figura 3: Consulta Q1
CODIGO
1
4
6
NOME
Lucas
Marcelo
Marta
Figura 4: Resultado da consulta SQL Q1.
EST
SP
CE
relacionamento entre os elementos e atributos do esquema
da visão XML e os atributos ou caminhos da tabela pivô.
SELECT XMLELEMENT("Cliente",
XMLFOREST(
C.CODIGO as " ClienteId",
C.NOME as "CliNome"))
FROM CLIENTES_REL C
Passo 4 – Geração da consulta que define a visão:
Neste passo, o projetista deve gerar a consulta SQL/XML
que define a visão sobre o esquema relacional. Essa
consulta é gerada com base no esquema XML do Passo 1
e nos mapeamentos obtidos no Passo 3.
Figura 5: Consulta Q2
<Cliente>
<ClienteId>1</ClienteId>
<CliNome>Lucas</CliNome>
</Cliente>
<Cliente>
<ClienteId>4</ClienteId>
<CliNome>Marcelo</CliNome>
</Cliente>
<Cliente>
<ClienteId>6</ClienteId>
<CliNome>Marta</CliNome>
</Cliente>
3.2. Exemplo de criação de visões XML de dados
relacionais
Figura 6: Resultado da consulta SQL/XML
3. Criação
relacionais
de
visões XML
de dados
A seguir mostraremos a visão geral de um processo para a
construção de uma visão XML a partir de um banco de
dados relacional e, em seguida, mostraremos um exemplo
seguindo os passos apresentados.
3.1. Processo de criação de visões XML
O processo apresentado para criação de uma visão XML é
composto dos seguintes passos.
Passo 1 - Definição do esquema da visão: Neste passo,
deve ser definida a estrutura da visão XML levando-se em
consideração os requisitos dos usuários da visão. Essa
estrutura pode ser definida usando qualquer linguagem de
definição de esquema XML (por exemplo, XML Schema
e DTD). O esquema da visão deve definir um único
elemento raiz cuja estrutura descreve a estrutura dos
elementos da visão.
Passo 2 - Escolha da tabela pivô: A tabela pivô é uma
tabela/visão relacional tal que existe um mapeamento 1-1
entre suas tuplas e os elementos da visão a ser construída.
A tabela pivô é selecionada a partir de uma lista de tabelas
e visões existentes no esquema do banco de dados
relacional.
Passo 3 - Especificação dos mapeamentos: O projetista
deve especificar os mapeamentos que definem o
Nesta Seção apresentamos um exemplo para ilustrar o
processo de criação da visão Pedidos_XML sobre o
esquema relacional PEDIDOS_DB da Figura 1.
A construção do esquema da visão corresponde ao
primeiro passo do processo. A Figura 7 mostra o esquema
da visão Pedidos_XML, o qual foi gerado pelo projetista
da visão. Como vemos, o elemento raiz da visão é
composto pelo atributo ID, o elemento de tipo simples
DataPedido, e por dois elementos de tipo complexo:
Cliente (que é do tipo Cliente_Type) e Itens (que é do tipo
Itens_Type).
A escolha da tabela pivô corresponde ao segundo
passo do processo. Dentre as tabelas do esquema
relacional PEDIDOS_DB, aquela que apresenta um
mapeamento 1-1 para com os elementos da visão
Pedidos_XML é a tabela PEDIDOS_REL.
A especificação dos mapeamentos corresponde ao
terceiro passo do processo. Na Figura 8, ilustramos os
mapeamentos entre o esquema da visão XML e o esquema
relacional. Por exemplo, existe um mapeamento entre o
elemento DataPedido da visão XML e o atributo
DATA_PEDIDO
do
esquema
relacional.
Este
mapeamento especifica que existe uma correspondência
entre eles.
Pedido
@ID (integer)
DataPedido (date)
Cliente (Cliente_Type)
Nome (string)
Endereco (End_Type)
Rua (string)
Cidade (string)
Estado (string)
Fone* (string)
Item* (Item_Type)
Numero (integer)
Produto (string)
Quantidade (integer)
Figura 7. Esquema da Visão Pedidos_XML.
Pedido
@ID
DataPedido
Cliente
Nome
Endereco
Rua
Cidade
Estado
Fone*
Item*
Numero
Produto
Quantidade
PEDIDOS_REL
CODIGO
CLIENTE
DATA_PEDIDO
FK1 (CLIENTES_REL)
CODIGO
NOME
RUA
CIDADE
ESTADO
CEP
FONE1
FONE2
FK2-1 (ITENS_REL)
PEDIDO
NUMERO
PRODUTO
QUANTIDADE
DESCONTO
FK3 (PRODUTOS_ REL)
CODIGO
NOME
PRECO
TAXA
Figura 8. Mapeamentos entre o esquema da visão
Pedidos_XML e o esquema relacional PEDIDOS_DB.
A geração da consulta SQL/XML que define a visão
corresponde ao quarto passo. Figura 9 mostra a consulta
SQL/XML que define a visão Pedidos_XML. A figura
também mostra que elemento ou atributo da visão é obtido
por cada chamada de função de publicação. Por exemplo,
na linha 3, a cláusula XMLFOREST(P.DATA_PEDIDO AS
"DataPedido") gera o elemento XML <DataPedido> a partir
do atributo P.DATA_PEDIDO.
4. Trabalhos Relacionados
A publicação de dados relacionais através de visões XML
foi abordada em diversos trabalhos. Entre eles estão:
Oracle [1], XPeranto [3], Silkroute [5], DB2
XMLExtender [2] e SQL Server [6].
Em XPeranto [3] e SilkRoute [5], a visão XML é
definida através de uma consulta XQuery [19] sobre uma
visão canônica XML que representa as tabelas do banco
de dados relacional. Essa consulta define o esquema da
visão e seus mapementos com o esquema da visão
canônica. Em ambos os sistemas, a realização de uma
consulta XQuery sobre uma visão XML é feita usando um
middleware sobre o banco relacional. O middleware
traduz a consulta XQuery em uma ou mais consultas SQL
equivalentes. Então, o resultado SQL é convertido no
documento XML resultante.
No DB2 XMLExtender [2] e no SQL Server [6], os
mapeamentos são armazenados através de esquemas
anotados [6]. Em ambos os casos, a definição dos
mapeamentos é muito complexa.
1. SELECT XMLELEMENT("Pedido",
2.
XMLATTRIBUTES(P.CODIGO AS "ID"),
3.
XMLFOREST(P.DATA_PEDIDO AS "DataPedido"),
4.
(SELECT XMLELEMENT("Cliente",
5.
XMLFOREST(C.CCODIGO AS "Nome"),
6.
XMLELEMENT("Endereco",
7.
XMLFOREST(C.RUA AS "Rua"),
8.
XMLFOREST(C.CDADE AS "Cidade"),
9.
XMLFOREST(C.ESTADO AS "Estado"),
10.
XMLFOREST(C.CEP AS "CEP") ),
11.
XMLFOREST(C.FONE1 AS "Fone"),
12.
XMLFOREST(C.FONE2 AS "Fone") )
13.
FROM CLIENTES_REL C WHERE C.CODIGO = P.CODIGO),
14.
(SELECT XMLAGG( XMLELEMENT("Item",
15.
XMLFOREST(I.NUMERO AS "Numero"),
16.
XMLFOREST( (SELECT R.NOME FROM PRODUTOS_REL
17.
WHERE R.CODIGO = I.PRODUTO), "Produto" ),
18.
XMLFOREST(I.QUANTIDADE AS "Quantidade") ) )
19.
FROM ITEMS_REL I WHERE I.PEDIDO = P.CODIGO ) )
20. FROM PEDIDOS_REL P;
Pedido/ID
Pedido/DataPedido
Pedido/Cliente
Pedido/Item
Figura 9. Consulta SQL/XML que define a visão.
Além disso, o SQL Server provê a cláusula FOR
XML que permite gerar dados XML de dados relacionais.
Neste caso, o mapeamento é definido no momento da
consulta e não é armazenado.
Oracle [1] foi o primeiro SGBD a suportar a criação
de visões XML como consultas SQL/XML sobre dados
relacionais. Tais visões podem ser consultadas usando a
linguagem XQuery.
O processo apresentado neste trabalho pode ser
facilmente adaptado a esses outros sistemas. Para tanto,
basta gerarmos no Passo 4 as definições correspondentes
para cada sistema, ao invés de gerar a consulta
SQL.XML.
5. Conclusão
Neste trabalho discutimos um processo de criação de
visões XML de dados relacionais, que consiste em quatro
passos: (1) O projetista define o esquema da visão XML;
(2) O projetista seleciona a tabela pivô a partir de uma
lista de tabelas do esquema do banco de dados relacional;
(3) O projetista define um conjunto de mapeamentos que
identificam correspondências entre o esquema da visão
XML e o esquema do banco de dados relacional; (4)
Baseado nos mapeamentos, é gerada a consulta
SQL/XML que define a visão XML.
Uma vantagem do nosso processo está no fato de
poder ser aplicado sobre qualquer banco que implementa
o padrão SQL/XML. Além disso, a manutenção de
mapeamentos torna-se menos complexa, uma vez que
alterações no esquema do banco de dados precisam ser
propagadas apenas nos elementos da visão que têm
correspondência com os campos das tabelas relacionais
que foram alterados. Como vimos, o nosso processo pode
ser adaptado a outros tipos de sistemas que publicam
visões XML sobre dados relacionais.
Referências
[1] Adams, D., Oracle® XML DB 10g Release 2
Developer's
Guide.
http://www.oracle.com/technology/documentation/da
tabase10gR2.html, 2005.
[2] Benham,
S.E.,
IBM
XML-Enabled
Data
Management Product Architecture and Technology.
In: XML Data Management, Native XML and XMLEnable Database Systems, Chaudhri, A.B., Rashid,
A., and Zicari, R. (eds.), Addison Wesley, 2003.
[3] Carey, M. J., Kiernan, J., Shanmugasundaram, J.,
Shekita, E. J., Subramanian, S. N., XPERANTO:
Middleware for Publishing Object-Relational Data
as XML Documents. In: VLDB, pp. 646–648, 2000.
[4] Eisenberg, A., Melton, J., Kulkarni, K., Michels, J.E.
and Zemke, F., SQL:2003 has been published. In:
ACM SIGMOD, pp. 119–126, 2004.
[5] Fernández, M., Kadiyska, Y., Suciu, D., Morishima,
A., Tan, W., SilkRoute: A framework for publishing
relational data in XML. In: TODS, pp. 438–493,
2002.
[6] Rys, M., XML Support in Microsoft SQL Server
2000. In: XML Data Management, Native XML and
XML-Enable Database Systems, Addison Wesley,
2003.
[7] Vidal, V. M. P., Araujo, V. S., Casanova, M. A.,
Towards Automatic Generation of Rules for the
Incremental Maintenance of XML Views over
Relational Data. In: WISE 2005, pp. 189-202, 2005.
[8] World Wide Web Consortium, XQuery 1.0: An XML
Query Language. W3C Working Draft, 2004,
Disponível em: http://www.w3.org/TR/xquery/.
Download