Publicando Dados Relacionais e
O-R como XML
Vânia Vidal
[email protected]
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
2
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 “documentcentric” (dados sem estrutura bem definida)
3
Aula de hoje

Como criar visões XML de BDOR Oracle
através do XSQL Pages Publishing
Framework
4
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
5
O que é XSQL Pages?

Também pode ser usado para carregar dados
de um documento XML no BD


Possibilidade de utilização com outros SGBDs
que não o Oracle


Inserção, atualização e remoção
Padrão JDBC
Multi-plataforma

Java
6
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
7
Visão Geral do XSQL Pages
Framework
8
Exemplo
 Publicar os dados da Tabela Livros usando o
XSQL Pages Framework
Tabela Livros
9
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
10
Resultado no
Formato
Canônico
11
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
12
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
13
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


Através da Web


XSQL Servlet instalado no web server de uso
Como parte de uma aplicação JSP


XSQL Command Line Utility
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>
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
Select Nome ,Cursor (Select ddd,num From Telefones t
Where t.pessoa=p.codigo) as Fones
From Pessoas p
Alias
obrigatório
<?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}
Valor default
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>
35
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"
36
Ação <xsql:query>
<?xml version=“1.0”?>
<PESSOAS connection="teste“
xmlns:xsql="urn:oracle-xsql">
<xsql:query rowset-element=“”
row-element=“PESSOA”>
SELECT cpf,nome FROM pessoas
</xsql:query>
</PESSOAS>
pessoas.xsql
37
38
Ação <xsql:query>

Se a consulta SQL não retorna tuplas, o
documento XML retornado será:
<?xml version=“1.0”?>
<ROWSET/>
39
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
40
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
41
Exemplo – Tabela Pessoas
Tabela Pessoas
42
Exemplo – Inserir Pessoa
43
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
44
Exemplo – Modifica Pessoa

Modificar o nome da pessoa de CPF 98765432109
para Vania Vidal
condição
45
Exemplo – Modifica Pessoa

Modificar os telefones da pessoa de CPF 98765432109
condição
46
Exemplo – Remove Pessoa

Remover a pessoa de nome Vania Vidal e CPF 98765432109
47
Mapeamento Canônico Inverso
Limitaçõ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
48
Principais Ações - Atualização


<xsql:dml>
 Executa qualquer operação DML ou DDL
<xsql:insert-request>,<xsql:insert-param>


<xsql:update-request>


Insere dados numa tabela ou visão a partir de um
documento XML Canônico
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
49
PERGUNTAS ?
50
Download

XSQL Pages Publishing Framework