1 / 76

Publicando Dados XML de Banco de Dados Objeto- Relacional

Publicando Dados XML de Banco de Dados Objeto- Relacional. Wamberg Oliveira wamberg@ gmail.com. 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.

faris
Télécharger la présentation

Publicando Dados XML de Banco de Dados Objeto- Relacional

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Publicando Dados XML de Banco de Dados Objeto- Relacional Wamberg Oliveira wamberg@gmail.com

  2. 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

  3. 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)

  4. Aula de hoje • Como criar visões XML de BDOR Oracle através do XSQL Pages Publishing Framework

  5. 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

  6. 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

  7. 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

  8. Visão Geral do XSQL Pages Framework

  9. Exemplo • Publicar os dados da Tabela Livros usando o XSQL Pages Framework Tabela Livros

  10. 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

  11. Resultado no Formato Canônico

  12. 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

  13. 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

  14. 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>

  15. 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

  16. 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”

  17. 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)

  18. Processador XSQL Arquitetura

  19. 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

  20. 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

  21. 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

  22. 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)

  23. 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>

  24. 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>

  25. 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>

  26. 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

  27. 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

  28. 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

  29. 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>

  30. 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 ...”

  31. XSQL Pages com Parâmetros • Criar página XSQL para obter o nome e fone de uma pessoa dado o seu CPF. Tabela Pessoas

  32. 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>

  33. XSQL Pages com Parâmetros

  34. 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

  35. Principais Ações - Publicação • <xsql:query> • ação que executa uma consulta SQL • <xsql:no-rows-query> • Fallback query • <xsql:include-owa> • ação que executa uma stored procedure • <xsql:include-xml> • ação que inclui um documento XML no resultado • <xsql:include-xsql> • Ação que inclui o resultado de uma XSQL Page em outra XSQL Page

  36. 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"

  37. Ação <xsql:query> • Alguns atributos importantes • bind-params=“string” • row-element=“string” • rowset-element=“string” • include-schema=“yes” | “no” • null-indicator=“yes” | “no” • id-attribute = “string” • id-attribute-collumn=“string” • tag-case = “upper” | ”lower”

  38. 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

  39. Ação <xsql:query> • Se a consulta SQL não retorna tuplas, o documento XML retornado será: <?xml version=“1.0”?> <ROWSET/>

  40. Ação <xsql:no-rows-query> • Essa ação só pode aparecer dentro de uma ação <xsql:query> • Se a consulta da ação <xsql:query> correpondente não retorna tuplas, a consulta embutida em <xsql:no-rows-query> será executada • Uma ação <xsql:no-rows-query> pode ter outra ação <xsql:no-rows-query> aninhada

  41. Ação <xsql:no-rows-query> <?xml version="1.0"?> <xsql:query connection="teste“ xmlns:xsql="urn:oracle-xsql"> SELECT * FROM livros WHERE categoria = ‘{@cat}’ <xsql:no-rows-query> SELECT * FROM livros WHERE titulo = ‘%{@cat}%’ </xsql:no-rows-query> </xsql:query>

  42. Ação <xsql:include-xsql> • Essa ação agrega informações • Inclui resultados de uma página XSQL em outra • Seu uso é indicado quando uma mesma XSQL page deve ser exibida em formatos diferentes • criar uma nova XSQL para cada XSLT

  43. Ação <xsql:include-xsql> <?xml version=“1.0”?> <?xml-stylesheet type=“text/xsl” href=“PessoaHTML.xsl”?> <xsql:include-xsql href=“pessoas.xsql” xmls:xsql=“urn:oracle-xsql”> <?xml version=“1.0”?> <?xml-stylesheet type=“text/xsl” href=“PessoaWML.xsl”?> <xsql:include-xsql href=“pessoas.xsql” xmls:xsql=“urn:oracle-xsql”>

  44. 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

  45. 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

  46. Exemplo – Tabela Pessoas Tabela Pessoas

  47. Exemplo – Inserir Pessoa

  48. 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

More Related