500 likes | 586 Views
Publicando Dados Relacionais e O-R como XML. Vânia Vidal vvidal@lia.ufc.br. Introdução. XML tornou-se um padrão para troca e integração de dados na WEB. A maioria dos dados corporativos estão armazenados em banco de dados relacionais.
E N D
Publicando Dados Relacionais e O-R como XML Vânia Vidal vvidal@lia.ufc.br
Introdução • XML tornou-se um padrão para troca e integração de dados na WEB. • A maioria dos dados corporativos estão armazenados em banco de dados relacionais. • Isto cria a necessidade de publicar dados armazenados em bases convencionais, no formato XML. • Vendedores de sistemas de BD Objeto-Relacional estão estendendo seus produtos para suportar o armazenamento e recuperação de dados XML
Enfoques para armazenar documentos XML em BDOR • Usa visões XML como uma camada intermediária entre a aplicação e o banco de dados. • Apropriado para documentos “data-centric” (dados estruturados). • Armazena XML nativo em uma coluna de tabela relacional • Apropriado para documentos “document-centric” (dados sem estrutura bem definida)
Aula de hoje • Como criar visões XML de BDOR Oracle através do XSQL Pages Publishing Framework
O que é XSQL Pages ? • XSQL Pages Publishing Framework é uma plataforma extensível que possibilita a publicação de visões XML de dados objeto-relacionais • Combina o poder de SQL, XML e XSLT para publicar conteúdo Web dinâmico baseado nos dados armazenados num BD • Gera XML a partir de consultas SQL • Usando XSLT é possível transformar o documento XML gerado no formato desejado
O que é XSQL Pages? • Também pode ser usado para carregar dados de um documento XML no BD • Inserção, atualização e remoção • Possibilidade de utilização com outros SGBDs que não o Oracle • Padrão JDBC • Multi-plataforma • Java
Visão Geral de XSQL Passo1: A página XSQL é requisitada... http://...... Passo2: O documento XML é montado a partir do resultado de uma ou mais consultas SQL. • Gera documento XML no formato canônico Passo3: Retorna o documento montado • Opcionalmente transforma o documento XML montado num formato desejado usando XSLT • HTML • WML • XML com formato arbitrário
Exemplo • Publicar os dados da Tabela Livros usando o XSQL Pages Framework Tabela Livros
Exemplo XSQL Page que retorna o isbn e o titulo de todos os livros <?xml version=“1.0”?> <xsql:query connection=“bd” xmlns:xsql=“urn:oracle-xsql”>Select isbn, titulo From Livros </xsql:query> exemplo.xsql
Exemplo • Usando XSLT é possível transformar o resultado num formato desejado <?xml version=“1.0”?> <?xml-stylesheet type=“text/xsl” href=“livrohtml.xsl”?> <xsql:query connection=“bd” xmlns:xsql=“urn:oracle-xsql”>Select isbn, titulo From Livros </xsql:query> exemplo2.xsql
Exemplo <HTML xmlns:xsl=“http://www.w3c.org/1999/XSL/Transform” xsl:version=“1.0”> <BODY><TABLE BORDER=“1”> <xsl:for-each select=“ROWSET/ROW”> <TR> <TD><xsl:value-of select=“ISBN”/></TD> <TD><xsl:value-of select=“TITULO”/></TD> </TR> </xsl:for-each></TABLE> </BODY> </HTML> livrohtml.xsl
XSQL Pages - Características • Uma XSQL Page é um documento XML (.xsql) que contém • Elementos estáticos • Elementos de ação • Consultas SQL embutidas <?xml version=“1.0”?> <xsql:query connection=“bd” xmlns:xsql=“urn:oracle-xsql”>Select col1, col2 , col3 From Tabela </xsql:query>
XSQL Pages - Características • Arquivos .xsql devem iniciar com <?xml version=“1.0”?> • O elemento raiz deve conter os seguintes atributos: • connection : nome de uma conexão pré-definida no arquivo de configuração do Processador XSQL • xmls:xsql=“urn:oracle-xsql” : declaração do namespace xsql
Processador XSQL • O processador XSQL interpreta, faz o caching e processa o conteúdo de páginas XSQL do servidor • Pooling de conexões para BDs • Caching de páginas “.xsql” • Caching e pooling de folhas de estilo “.xsl”
Processador XSQL • O processador XSQL pode ser acionado de 4 formas: • A partir da linha de comando • XSQL Command Line Utility • Através da Web • XSQL Servlet instalado no web server de uso • Como parte de uma aplicação JSP • Utilizando <jsp:include> para inclusão de um template “.xsql” • Através de programação • Utilizando o objeto XSQLRequest (API Java)
Processador XSQL Arquitetura
Passos do Processador XSQL • Recebe uma requisição para processar uma XSQL Page • Monta um documento XML usando o resultado de uma ou mais consultas SQL. • XML com formato canônico • Retorna o documento montado • Opcionalmente transforma o documento XML montado num formato desejado usando XSLT • HTML • WML • XML com formato arbitrário
Configuração Básica do XSQL • Os pacotes necessários • oraclexsql.jar XSQL page processor • xmlparserv2.jar XML Parser for Java v2 • xsu12.jar Oracle XML SQL utility • classes12.zip Oracle JDBC driver • O servlet • oracle.xml.xsql.XSQLServlet servlet interface • Associar extensão “.XSQL” ao servlet • Interface de programação • oracle.xml.xsql.XSQLRequest interface de programação
Configuração Básica • O arquivo XSQLConfig.xml <connectiondefs> <connection name="demo"> <username>scott</username> <password>tiger</password> <dburl>jdbc:oracle:thin:@localhost:1521:testDB</dburl> <driver>oracle.jdbc.driver.OracleDriver</driver> <autocommit>true</autocommit> </connection> <connection name="lite"> <username>system</username> <password>manager</password> <dburl>jdbc:Polite:POlite</dburl> <driver>oracle.lite.poljdbc.POLJDBCDriver</driver> </connection> </connectiondefs> Adicionar esse arquivo ao CLASSPATH Exemplo de configuração de XSQLConfig.xml
Mapeamento Canônico • O resultado da consulta é delimitado pelo elemento raiz <ROWSET> .... </ROWSET>. • Cada tupla do resultado é colocada em <ROW NUM=“xx“> .... </ROW>. , onde o atributo NUM é um identificador da tupla • Valores de Atributos (relacional) são mapeados em <Name> valor_do_atributo </Name>, onde Name é o nome do atributo (coluna)
Mapeamento Canônico • Exemplo : Select nome,idade From Pessoas <?xml version=“1.0”?> <ROWSET> <ROW NUM=“1”> <NOME>Lineu Lima</NOME> <IDADE>24</IDADE> </ROW> </ROWSET>
Mapeamento Canônico • Mapeamento de atributos cujo tipo é um TAD: • Exemplo: Select Nome, Endereco From Pessoas <?xml version=“1.0”?> <ROWSET> <ROW NUM=“1”> <NOME>Lineu Lima</NOME> <ENDERECO> <RUA>St. Dumont </RUA> <NUM>6997</NUM> </ENDERECO> </ROW></ROWSET>
Mapeamento Canônico • Mapeamento de atributos do tipo coleção (Varray or Nested Table: • Exemplo: Select nome, fones From Pessoas <?xml version=“1.0”?> <ROWSET> <ROW NUM=“1”> <NOME>Lineu Lima</NOME> <FONES> <FONES_ITEM>2346349</FONES_ITEM> <FONES_ITEM>88057324</FONES_ITEM> </FONES> </ROW></ROWSET>
Usando o operador CURSOR para “rowsets” aninhadas • O operador CURSOR permite selecionar uma “rowset” aninhada como uma coluna numa consulta SQL • O operador CAST-MULTISET possui a mesma função, mas só é utilizado quando o tipo do “rowset” é previamente definido no banco de dados
Usando o operador CURSOR para “rowsets” aninhadas Select Nome , CAST(MULTISET (Select ddd,num From Telefones t Where t.pessoa=p.codigo) as fones_ty ) as Fones From Pessoas p
Usando o operador CURSOR para “rowsets” aninhadas Select Nome , Cursor (Select ddd,num From Telefones t Where t.pessoa=p.codigo) as Fones From Pessoas p
Usando o operador CURSOR para “rowsets” aninhadas Alias obrigatório Select Nome ,Cursor (Select ddd,num From Telefones t Where t.pessoa=p.codigo) as Fones From Pessoas p <?xml version=“1.0”?> <ROWSET> <ROW NUM=“1”> <NOME>Lineu Lima</NOME> <FONES> <FONES_ROW NUM=“1”> <DDD>85</DDD><NUM>2346349</NUM> </FONES_ROW> <FONES_ROW NUM=“2”>...</FONES_ROW> </FONES> </ROW></ROWSET>
XSQL Pages com Parâmetros • Possibilita flexibilidade e resposta diferentes de acordo com parâmetros de entrada para a página XSQL • Incluir sinal ? em qualquer local onde for legal o uso de variáveis de ligação no SQL • Toda vez que for acionada a página, os valores de parâmetro são ligados às variáveis de ligação. A ligação é feita de forma posicional. • Utilizar o atributo bind-params=“par1 par2 ...”
XSQL Pages com Parâmetros • Criar página XSQL para obter o nome e fone de uma pessoa dado o seu CPF. Tabela Pessoas
XSQL Pages com Parâmetros • XSQL Page que retorna o nome e fones de uma pessoa cujo CPF é passado como parâmetro. <?xml version="1.0"?> <xsql:query connection="teste“ bind-params=“cpf” xmlns:xsql="urn:oracle-xsql"> SELECT nome, fones FROM pessoas WHERE cpf = ? </xsql:query>
XSQL Pages com Parâmetros • Substituição léxica • Substituição léxica de parâmetros utiliza a seguinte sintaxe: • {@ParameterName} • Ex.:teste2.xsql <?xml version="1.0"?> <xsql:query connection="teste“ cpf=“79221068315” xmlns:xsql="urn:oracle-xsql"> SELECT * FROM pessoas WHERE cpf = ‘{@cpf} ‘ </xsql:query> Valor default
Ação <xsql:query> • Executa declarações SELECT do SQL • Inclui o resultado XML canônico em uma página • Requer conexão com o BD alvo • Atributo connection="connname"
Ação <xsql:query> <?xml version=“1.0”?> <PESSOASconnection="teste“ xmlns:xsql="urn:oracle-xsql"> <xsql:query rowset-element=“” row-element=“PESSOA”> SELECT cpf,nome FROM pessoas </xsql:query> </PESSOAS> pessoas.xsql
Ação <xsql:query> • Se a consulta SQL não retorna tuplas, o documento XML retornado será: <?xml version=“1.0”?> <ROWSET/>
Mapeamento Canônico Inverso • O Documento XML que gera uma atualização no Banco de Dados deve seguir o formato canônico apresentado anteriormente • Possui algumas restrições • Atributos XML são ignorados • Possui um único objeto alvo • Tabela Relacional • Tabela de Objeto • Visões • Elementos de ROW não necessitam aparecer na mesma ordem das colunas do objeto alvo
Mapeamento Canônico Inverso • Dado o XML Canônico para atualizar o estado do banco de dados, o processador XSQL procede da seguinte forma : • Recupera os metadados da tabela ou visão alvo para gerar o comando de atualização apropriado • Extrai os dados do documento XML atribuindo-os às colunas/condições apropriadas • Executa a operação de atualização • Retorna um documento XML contendo o “STATUS” da execução da atualização
Exemplo – Tabela Pessoas Tabela Pessoas
Mapeamento Canônico Inverso • Operações de DELETE ou UPDATE podem afetar mais que uma linha num objeto do banco de dados • Essas operações precisam de um lista de colunas chave para XSQL poder construir uma cláusula WHERE no UPDATE/DELETE para identificar que objetos modificar/remover
Exemplo – Modifica Pessoa • Modificar o nome da pessoa de CPF 98765432109para Vania Vidal condição
Exemplo – Modifica Pessoa • Modificar os telefones da pessoa de CPF 98765432109 condição
Exemplo – Remove Pessoa • Remover a pessoa de nome Vania Vidal eCPF 98765432109
Mapeamento Canônico InversoLimitações • Não possibilita atualizações em Nested Table • Só permite condições que envolvem comparações de igualdade em operações UPDATE e DELETE • Somente um único objeto pode ser atualizado
Principais Ações - Atualização • <xsql:dml> • Executa qualquer operação DML ou DDL • <xsql:insert-request>,<xsql:insert-param> • Insere dados numa tabela ou visão a partir de um documento XML Canônico • <xsql:update-request> • Atualiza dados numa tabela ou visão a partir de um documento XML Canônico • <xsql:delete-request> • Remove dados numa tabela ou visão a partir de um documento XML Canônico