Post on 09-Nov-2018
DESMISTIFICANDO XML: DA
PESQUISA À PRÁTICA
INDUSTRIAL
Bento Gonçalves – RS – Brasil
Mirella Moura Moro – UFMG
Vanessa Braganholo – UFRJ
1JAI no 5 - CSBC 2009
Agenda
Introdução
Básico
Pesquisa
Indústria
Considerações Finais
2
JAI no 5 - CSBC 2009
Índice lá atrás
Levante a mão se você…
JAI no 5 - CSBC 2009
4
Nunca ouviu falar de XML
Sabe escrever um documento XML
Sabe consultas em XPath/XQuery
Faz pesquisa com XML
Este JAI é para todos vocês
XML
JAI no 5 - CSBC 2009
5
A linguagem que apareceu para resolver todos os
problemas do mundo
É… tipo assim…
“XML Fever”
E. Wilde, R. J. Glushko
Communications ACM, July 2008
XML
JAI no 5 - CSBC 2009
6
A melhor linguagem para resolver
alguns problemas de
gerenciamento de dados
Sim… bem resolvido
XML
JAI no 5 - CSBC 2009
7
XML está por toda a parte
Web services (formato de feeds RSS)
Integração (e-commerce)
Padrões abertos para troca de arquivos
XML está por toda a parte…
JAI no 5 - CSBC 2009
8
Advertising: adXML place an ad onto an ad network or to a single vendor
Banking: MBA Mortgage Bankers Association of America credit report, loan file,
underwriting…
Directories: dirXML Novell’s Directory Services Markup Language
Literature: Gutenberg convert the world’s great literature into XML
Geospatial: ANZMETA distributed national directory for land information
Healthcare: HL7 DTDs for prescriptions, policies & procedures, clinical trials
Human Resources: XML-HR standardization of HR/electronic recruiting XML definitions
International Dvt: IDML improve the mgt. and exchange of info. for sustainable development
Math: MathML Mathematical Markup Language
News: NewsML creation, transfer and delivery of news
Surveys: DDI Data Documentation Initiative, “codebooks” in the social and behavioral sciences
Travel: openTravel information for airlines, hotels, and car rental places
Voice: VoxML markup language for voice applications
Wireless: WAP Wireless Application Protocol, wireless devices on the World Wide Web
Weather: OMF Weather Observation Markup Format
Web Servers: apacheXML parsers, XSL, web publishing
…
XML: o surgimento
HTML usa tags para formatação (italic)
Linguagem usa tags para semântica
Aplicável para qualquer semântica
eXtensible Markup Language
10
Criar conjunto de tags para um domínio
(ex. genoma), e traduzir dados para
documentos apropriadamente marcados
(tags)
JAI no 5 - CSBC 2009
O que XML?
É uma metalinguagem
não uma linguagem específica
Define regras de como marcar o documento – não define os nomes usados na marcação
Document Type Definition (DTD) para restringir a marcação permitida em uma classe de documentos
Todas as linguagens naturais, independente de conjunto de caracteres, orientação de escrita, …
11
JAI no 5 - CSBC 2009
O que XML?
12
Tipo de elementoElemento
<bibliografia>
<artigo ID="object-fusion">
<autores>
<autor>Y. Papakonstantinou</autor>
<autor>S. Abiteboul</autor>
<autor>H. Garcia-Molina</autor>
</autores>
<artigocompleto source="fusion"/>
<título>Object Fusion in Mediator Systems</título>
<public>VLDB 96</public>
</artigo>
</bibliografia>
Conteúdo
Elemento
Elemento
Vazio
Conteúdo,
caracteres
JAI no 5 - CSBC 2009
XML vs. HTML
13
<h1> Bibliografia </h1>
<p> <i> Foundations of DB Systems</i>, Elmasri, Navathe
<br> Addison-Wesley, 2006
<p> <i> Encyclopedia of DB Systems</i>, Ozsu, Liu, eds.
<br> 2008
<bibliografia>
<livro> <titulo> Foundations of DB Systems </titulo>
<autor> Elmasri </autor><autor> Navathe </autor>
<editora> Addison-Wesley </editora>
....
</livro>
<livro> ... <editor> Ozsu </editor>...
</livro> ...
</bibliografia>
HTML tags
apresentação,
estrutura genérica
XML tags
conteúdo, semântica,
(DTD-) específica
JAI no 5 - CSBC 2009
Neste JAI
JAI no 5 - CSBC 2009
14
BÁSICO
XML
Principais linguagens relacionadas
PESQUISA
Panorama geral
Problemas resolvidos e abertos
INDÚSTRIA
XML na prática
Básico
W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
16
JAI no 5 - CSBC 2009
Básico
W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
17
JAI no 5 - CSBC 2009
W3C – www.w3.org
Órgão responsável pela padronização de
iniciativas ligadas à Web
Ex.: HTML, XML e iniciativas relacionadas, entro outros
Especificações dessas iniciativas são classificadas
de acordo com seu nível de “maturidade”
• Working Draft
• Candidate Recommendation
• Recommendation (Padrão)
18
JAI no 5 - CSBC 2009
Básico
W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
19
JAI no 5 - CSBC 2009
XML (http://www.w3.org/TR/xml/)
Documento XML
Sequência de elementos que englobam texto ou outros
elementos
Elementos podem conter atributos
20
JAI no 5 - CSBC 2009
XML
Elemento
Delimitado por marcas (tags)
Possuem uma marca inicial e uma marca final
Tudo o que estiver delimitado por essas marcas faz parte do conteúdo do elemento
Ex: <empregado>João</empregado>
Atributo
Podem aparecer dentro da marca inicial de um elemento
Ex: <empregado cod=“E01”>João</empregado>
21
JAI no 5 - CSBC 2009
Exemplo de Documento XML
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
22
JAI no 5 - CSBC 2009
Documentos XML como árvores
Elementos, atributos e texto → nodos
Relações pai/filho → arestas
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
empregados
empregado
nome inicial-meio sobrenome
cod=“E01”
dept=“D01”
João S. Santos
empregado
nome sobrenome
cod=“E02”
dept=“D01”
Ana Ferraz
23
JAI no 5 - CSBC 2009
Documentos XML Bem-Formados
Por representar uma estrutura de árvore, algumas
restrições se aplicam a documentos XML
Raiz única
Todas as marcas são fechadas
Elementos são bem aninhados (marcas fecham na
ordem inversa à em que foram abertas)
Exemplo de elemento não bem-aninhado
<empregado><nome>João</empregado></nome>
Atributos não se repetem no mesmo elemento
24
JAI no 5 - CSBC 2009
Tipos de Elemento
Composta
Contém outros (sub)-
elementos
Textual
Contém somente texto
Mista
Contém texto e sub-
elementos
Vazia
Elemento sem conteúdo
<empregado>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
<nome>Ana</nome>
<endereco> Rua das Flores, 75 <cidade>Rio
de Janeiro</cidade></endereco>
<engenheiro></engenheiro>
<engenheiro/>
25
JAI no 5 - CSBC 2009
Outras considerações importantes
Elementos são ordenados
Atributos não são ordenados
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
</empregados>
Documentos Diferentes
26
JAI no 5 - CSBC 2009
Outras considerações importantes
Elementos são ordenados
Atributos não são ordenados
<? xml version=“1.0” ?>
<empregados>
<empregado dept=“D01” cod=“E01” >
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
Documentos Iguais
27
JAI no 5 - CSBC 2009
Interoperabilidade
Chave do sucesso de XML:
Usuários podem definir suas próprias marcas
E a interoperabilidade, como fica?
Vamos considerar um exemplo prático
28
JAI no 5 - CSBC 2009
Exemplo prático: interoperabilidade
Fornecedor
Aceita pedidos em XML
Pedidos são recebidos pelo servidor e
processados automaticamente
Cliente X
Cliente Y
XML
XML
29
JAI no 5 - CSBC 2009
Exemplo prático: interoperabilidade
Fornecedor
Cliente X
Cliente Y
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
<prod>
<nome>caderno</nome>
<q>50</q>
</prod>
30
JAI no 5 - CSBC 2009
Exemplo prático: interoperabilidade
Fornecedor
Estrutura dos documentos são diferentes
Como o fornecedor pode saber processar
arquivos tão diversos?
Cliente X
Cliente Y
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
<prod>
<nome>caderno</nome>
<q>50</q>
</prod>
31
JAI no 5 - CSBC 2009
Solução
Pode-se definir um vocabulário usando uma
linguagem de esquemas para XML (DTD ou XML
Schema)
Fornecedor define o vocabulário (estrutura, nomes das
marcas, tipos de dados)
Cliente usa o vocabulário para enviar os pedidos
32
JAI no 5 - CSBC 2009
Interoperabilidade
Fornecedor
Clientes usando o mesmo vocabulário
para enviar os pedidos
Cliente X
Cliente Y
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
<produto>
<nome>caderno</nome>
<quant>50</quant>
</produto>
33
JAI no 5 - CSBC 2009
XML e Namespaces: Núcleo
XML + Namespaces
Esquemas (DTD, XML Schema)
Transformação (XSLT)
Programação (SAX, DOM)
Consulta (XPath,
XQuery)
34
JAI no 5 - CSBC 2009
Básico
W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
35
JAI no 5 - CSBC 2009
Esquema XML
Esquema XML: um vocabulário específico
Pode ser associado a um documento XML
O documento tem que seguir as “regras” do
vocabulário/esquema associado
36
JAI no 5 - CSBC 2009
Doc. XML Bem-formado x Válido
Documento XML bem-formado: documento que
segue as regras de formação do XML (raiz única,
bem aninhado, etc.)
Documento XML válido: documento bem-formado
que segue as regras de um esquema associado
37
JAI no 5 - CSBC 2009
Como seria este esquema?
DTD - Document Type Definition
Gramática Regular
XML Schema
Esquema escrito em XML
38
JAI no 5 - CSBC 2009
Como seria este esquema?
DTD - Document Type Definition
Gramática Regular
XML Schema
Esquema escrito em XML
39
JAI no 5 - CSBC 2009
DTD (http://www.w3.org/TR/2008/REC-xml-
20081126/#dt-markupdecl)
Define as regras de formação dos elementos e
atributos
Elementos são declarados com <!ELEMENT...>
Atributos são declarados com <!ATTLIST...>
Existem outras declarações que não serão vistas neste curso
40
JAI no 5 - CSBC 2009
Declaração de Elemento
<!ELEMENT empregados (empregado+)>
Existe um elemento empregados, cujo conteúdo é constituído de um ou mais
elementos empregado
No documento XML
<empregados>
<empregado>...</empregado>
<empregado>...</empregado>
<empregado>...</empregado>
</empregados>
41
JAI no 5 - CSBC 2009
Cardinalidade
Cardinalidade: + * ?
+ um ou mais
* zero ou mais
? zero ou um
Se não houver símbolo de cardinalidade ao lado do
elemento, ele é obrigatório
42
JAI no 5 - CSBC 2009
Exemplo
<!ELEMENT empregado (nome, inicial-meio?,
sobrenome)>
O elemento empregado é composto de 3 sub-elementos: nome
(obrigatório), inicial-meio (opcional), e sobrenome (obrigatório)
No documento XML
<empregado>
<nome>João</nome>
<sobrenome>Santos</sobrenome>
</empregado>
43
JAI no 5 - CSBC 2009
Sequência e Escolha
<!ELEMENT empregado (nome, inicial-meio,
sobrenome)>
O elemento empregado é composto de 3 sub-elementos: nome, inicial-meio,
e sobrenome, nessa ordem
<!ELEMENT empregado (nome | inicial-meio |
sobrenome)>
O elemento empregado é composto de 1 sub-elemento: ou nome ou
inicial-meio ou sobrenome
44
JAI no 5 - CSBC 2009
Sequência e Escolha
<!ELEMENT empregado (nome, inicial-meio,
sobrenome)>
O elemento empregado é composto de 3 sub-elementos: nome, inicial-meio,
e sobrenome, nessa ordem
<!ELEMENT empregado (nome | inicial-meio |
sobrenome)>
O elemento empregado é composto de 1 sub-elemento: ou nome ou
inicial-meio ou sobrenome
<empregado>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado>
<nome>João</nome>
</empregado>
Doc. XML
Doc. XML
45
JAI no 5 - CSBC 2009
Elemento Textual
<!ELEMENT nome (#PCDATA)>
#PCDATA significa Parsable Character Data, ou seja, o conteúdo do
elemento será analisado pelo processador que está lendo o arquivo XML
No documento XML:
<nome>João da Silva</nome>
46
JAI no 5 - CSBC 2009
Elemento Vazio
<!ELEMENT estudante EMPTY>
O elemento estudante não possui conteúdo
No documento XML:
<estudante/>
47
JAI no 5 - CSBC 2009
Elemento Misto
<!ELEMENT endereco (#PCDATA|cidade)*>
Elemento endereço possui texto, e subelemento(s) cidade
No documento XML:
<endereco>Rua das Flores, 45
<cidade>Rio de Janeiro</cidade>
CEP 24220-260
</endereco>
48
JAI no 5 - CSBC 2009
Declaração de Atributos
Declarados em uma declaração ATTLIST
Nome do elemento que contém o atributo
Lista de atributos:
nome do atributo
tipo do atributo (CDATA, ID, IDREF, etc.)
obrigatoriedade (#REQUIRED, #IMPLIED, ou um valor
default para o atributo)
49
JAI no 5 - CSBC 2009
Exemplo
<!ATTLIST empregado
cod CDATA #REQUIRED
dept CDATA #REQUIRED
>
O elemento empregado possui dois atributos cod, e dept
O tipo de ambos é um texto (CDATA), e ambos são obrigatórios
(#REQUIRED)
50
JAI no 5 - CSBC 2009
Exemplo
<!ATTLIST empregado
cod CDATA #REQUIRED
dept CDATA #REQUIRED
>
No documento XML:
<empregado cod=“E01” dept=“D01”>...</empregado>
51
JAI no 5 - CSBC 2009
Exemplo completo
<!ELEMENT empregados (empregado+)>
<!ELEMENT empregado (nome, inicial-meio?, sobrenome)>
<!ATTLIST empregado
cod CDATA #REQUIRED
dept CDATA #REQUIRED
>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT inicial-meio (#PCDATA)>
<!ELEMENT sobrenome (#PCDATA)>
<? xml version=“1.0” ?>
<!DOCTYPE empregados SYSTEM “emp.dtd”>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
Arquivo emp.dtd
Arquivo emp.xml
52
JAI no 5 - CSBC 2009
Deficiências
Ausência de tipos para os elementos textuais
(inteiro, data, string): tudo é tratado como PCDATA
Ausência de mecanismos de extensão de tipos
(herança)
Ausência de mecanismos mais sofisticados de
cardinalidade (ex: card. mínima 5, máxima 10)
Sintaxe não-XML
Entre várias outras
53
JAI no 5 - CSBC 2009
Básico
W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
54
JAI no 5 - CSBC 2009
Linguagens de Consulta
XPath
Baseada em expressões de caminho
Sub-conjunto da XQuery
XQuery
Mais complexa e poderosa
55
JAI no 5 - CSBC 2009
Linguagens de Consulta
XPath
Baseada em expressões de caminho
Sub-conjunto da XQuery
XQuery
Mais complexa e poderosa
56
JAI no 5 - CSBC 2009
XPath
Especificação: http://www.w3.org/TR/xpath
Uma expressão XPath seleciona um conjunto de
nodos
Operadores principais:
/ para dar um “passo” na árvore XML (percorrer uma
relação pai-filho)
// para dar vários “passos” de uma vez (percorrer
uma relação ascendente-descendente)
57
JAI no 5 - CSBC 2009
Exemplo
/empregados/empregado
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
58
JAI no 5 - CSBC 2009
Contexto
Cada / muda o contexto atual da consulta:
/empregados
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
59
JAI no 5 - CSBC 2009
Contexto
Cada / muda o contexto atual da consulta:
/empregados/empregado
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
60
JAI no 5 - CSBC 2009
É como uma árvore de diretórios...
C:\Arquivo>cd ArtigosC:\Arquivo\Artigos>cd aceitosC:\Arquivo\Artigos\aceitos>cd ..C:\Arquivo\Artigos>cd \C:\>
61
Retorno da Expressão
Conjunto de nodos retornados é sempre o
especificado pelo último passo do caminho
/empregados/empregado/nome
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
62
JAI no 5 - CSBC 2009
Operador //
Retorna os descendentes a partir do contexto atual
/empregados//nome //sobrenome
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
63
JAI no 5 - CSBC 2009
Atributos
Usa-se “@” na frente do nome do atributo
/empregados/empregado/@cod
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
64
JAI no 5 - CSBC 2009
Operador .
Seleciona o elemento corrente
/empregados/.
/empregados
Útil para uso dentro
de funções
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
65
JAI no 5 - CSBC 2009
Operador ..
Seleciona o pai do contexto atual
/empregados/empregado/..
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
66
JAI no 5 - CSBC 2009
Operador *
Substitui um passo do caminho
//empregado/*
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
67
JAI no 5 - CSBC 2009
Filtros
Restringem o conjunto de nodos selecionados
Podem ser colocados em qualquer passo do
caminho
68
JAI no 5 - CSBC 2009
Filtros
Sintaxe: Expressão booleana entre colchetes
//empregado[@cod=“E01”]
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
69
JAI no 5 - CSBC 2009
Contexto do Filtro
Sempre o último passo percorrido antes do filtro
Retorno nunca é o que está no filtro, mas o último
passo do caminho da expressão
//empregado[nome=“Ana”]
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
70
JAI no 5 - CSBC 2009
Filtro de Posição
//empregado[position()=1]
//empregado[1]
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
71
JAI no 5 - CSBC 2009
AND, OR e NOT são aceitos
//empregado[@dept=’D01’ AND nome=’João’]/sobrenome
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
72
JAI no 5 - CSBC 2009
Funções
XPath possui muitas funções, para serem usadas
dentro dos filtros
Uma lista completa está disponível aqui:
http://www.w3.org/TR/xpath#corelib
73
JAI no 5 - CSBC 2009
Exemplo: Função starts-with
Retorna verdadeiro se o texto dos nodos contexto
começam com a string especificada
//empregado[starts-with(nome,’J’)]
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
74
JAI no 5 - CSBC 2009
Em resumo
Seleciona conjunto de nodos
Não reestrutura o resultado
Não constrói elementos novos
Foi concebida para ser usada em conjunto com
outras linguagens (como a XQuery)
75
JAI no 5 - CSBC 2009
Linguagens de Consulta
XPath
Baseada em expressões de caminho
Sub-conjunto da XQuery
XQuery
Mais complexa e poderosa
76
JAI no 5 - CSBC 2009
XQuery
Especificação: http://www.w3.org/TR/xquery/
Derivada de linguagens anteriores (Quilt e XPath)
Aproveita características de várias outras
linguagens
SQL: cláusulas baseadas em palavras reservadas tipos
SELECT-FROM-WHERE
OQL: noção de uma linguagem funcional, composta de
expressões que podem ser encadeadas
77
JAI no 5 - CSBC 2009
XQuery é capaz de
Gerar respostas com estrutura diferente do
documento consultado
Consultar vários documentos
Gerar texto puro ou fragmentos de documentos
XML
78
JAI no 5 - CSBC 2009
Estrutura da Linguagem
Expressões FLWOR
Expressões XPath
Expressões Condicionais (análogo ao IF-THEN-ELSE
das linguagens de programação)
Construtores de Elementos
Quantificador Existencial e Universal
Cast de Tipos
79
JAI no 5 - CSBC 2009
Exemplos
Os exemplos serão realizados sobre o documento
de empregados
Arquivo emps.xml <? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
80
JAI no 5 - CSBC 2009
Construtor de Elemento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
Constrói no resultado um elemento
emp-dept, que não existe no documento
de origem
81
JAI no 5 - CSBC 2009
Construtor de Elemento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
$e/nome também é um construtor de
elemento. Para entendê-lo, primeiro é
preciso entender como a consulta é
processada.
82
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
1. Elemento é construído na saída
<emp-dept>
83
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
2. A chave { indica que o próximo trecho
precisa ser processado
<emp-dept>
84
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(‟emps.xml‟)//empregado
return $e/nome
}
</emp-dept>
3. Expressão for liga a variável $e aos
elementos empregado do documento emps.xml.
O for itera sobre os elementos , um de cada vez,
e a cláusula return é executada em cada
iteração
85
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(‟emps.xml‟)//empregado
return $e/nome
}
</emp-dept>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
$e
4. $e é ligada ao
primeiro empregado
86
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
5. Cláusula $e/nome constrói o elemento
nome no resultado
<emp-dept>
<nome>João</nome>
87
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(‟emps.xml‟)//empregado
return $e/nome
}
</emp-dept>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
$e
6. $e é ligada ao
segundo empregado
88
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
7. Cláusula $e/nome constrói o elemento
nome no resultado
<emp-dept>
<nome>João</nome>
<nome>Ana</nome>
89
JAI no 5 - CSBC 2009
Exemplo de funcionamento
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
8. A marca emp-dept é fechada
<emp-dept>
<nome>João</nome>
<nome>Ana</nome>
</emp-dept>
90
JAI no 5 - CSBC 2009
Cláusula FOR
Faz parte de uma cláusula mais complexa FLWOR
FOR
LET
WHERE
ORDER BY
RETURN
91
JAI no 5 - CSBC 2009
Analogia com SQL
for SQL fromwhere SQL wherereturn SQL selectlet (sem equivalência SQL) para variáveis temporárias, principalmente para execução de agregações
FOR/LET associam valores às variáveis
WHERE filtra o resultado vindo das cláusulas FOR/LET
RETURN gera a saída da consulta
92
JAI no 5 - CSBC 2009
Exemplo WHERE/ORDER BY
<emp-dept>
{
for $e in doc(’emps.xml’)//empregado
where $e/@dept=’D01’
order by $e/nome
return $e/nome
}
</emp-dept>Todos os empregados são ligados a $e
(um de cada vez), mas a cláusula return
só é executada para os que satisfazem a
condição $e/@dept=“D01”
93
JAI no 5 - CSBC 2009
Exemplo WHERE/ORDER BY
<emp-dept>
{
for $e in doc(’emps.xml’)//empregado
where $e/@dept=’D01’
order by $e/nome
return $e/nome
}
</emp-dept>
Além disso, os resultados
são ordenados por
$e/nome
94
JAI no 5 - CSBC 2009
Exemplo WHERE/ORDER BY
<emp-dept>
{
for $e in doc(’emps.xml’)//empregado
where $e/@dept=’D01’
order by $e/nome
return $e/nome
}
</emp-dept>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<emp-dept>
<nome>Ana</nome>
<nome>João</nome>
</emp-dept>
Resultado
95
JAI no 5 - CSBC 2009
Exemplo CONSULTA ANINHADA
<departamentos>
{for $d in distinct-values(doc(’emps.xml’)//empregado/@dept)
return
<departamento>
<codigo>{$d}</codigo>
<empregados>
{for $e in doc(’emps.xml’)//empregado
where $e/@dept=$d
return
<empregado>
{$e/nome}
{$e/sobrenome}
</empregado>
}
</empregados>
</departamento>
}
</departamentos>
distinct-values seleciona apenas
os departamentos distintos
96
JAI no 5 - CSBC 2009
Exemplo CONSULTA ANINHADA
<departamentos>
{for $d in distinct-values(doc(’emps.xml’)//empregado/@dept)
return
<departamento>
<codigo>{$d}</codigo>
<empregados>
{for $e in doc(’emps.xml’)//empregado
where $e/@dept=$d
return
<empregado>
{$e/nome}
{$e/sobrenome}
</empregado>
}
</empregados>
</departamento>
}
</departamentos>
O for $e será executado uma
vez para cada valor em $d
(como um for aninhado em
linguagem de programação)
97
JAI no 5 - CSBC 2009
Resultado Exemplo
<departamentos>
{for $d in distinct-values(doc(’emps.xml’)//empregado/@dept)
return
<departamento>
<codigo>{$d}</codigo>
<empregados>
{for $e in doc(’emps.xml’)//empregado
where $e/@dept=$d
return
<empregado>
{$e/nome}
{$e/sobrenome}
</empregado>
}
</empregados>
</departamento>
}
</departamentos>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<departamentos>
<departamento>
<codigo>D01</codigo>
<empregados>
<empregado>
<nome>João</nome>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
</departamento>
</departamentos>
Resultado
98
JAI no 5 - CSBC 2009
Produto cartesiano
Operadores for na mesma cláusula FLWOR
funcionam como um produto cartesiano
Exemplos usando dois documentos: emps.xml e
dept.xml
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<? xml version=“1.0” ?>
<departamentos>
<departamento cod=“D01”>
<nome>Vendas</nome>
<local>3º. andar</local>
</departamento>
<departamento cod=“D02”>
<nome>Financeiro</nome>
<local>4º. andar</local>
</departamento>
</departamentos>
emps.xml dept.xml
99
Resultado
<resultado>
{for $d in doc(’dept.xml’)//departamento),
$e in doc(’emps.xml’)//empregado
return
<dep-emp>
<departamento>{$d/nome/text()}</departamento>
<empregado>{$e/nome/text()}</empregado>
</dep-emp>
}
</resultado>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<departamentos>
<departamento cod=“D01”>
<nome>Vendas</nome>
<local>3º. andar</local>
</departamento>
<departamento cod=“D02”>
<nome>Financeiro</nome>
<local>4º. andar</local>
</departamento>
</departamentos>
emps.xml
dept.xml
<resultado>
<dep-emp>
<departamento>Vendas</departamento>
<empregado>João</empregado>
</dep-emp>
<dep-emp>
<departamento>Vendas</departamento>
<empregado>Ana</empregado>
</dep-emp>
<dep-emp>
<departamento>Financeiro</departamento>
<empregado>João</empregado>
</dep-emp>
<dep-emp>
<departamento>Financeiro</departamento>
<empregado>Ana</empregado>
</dep-emp>
</resultado>
100
Junção
Um produto cartesiano se transforma em junção se
adicionarmos uma cláusula WHERE à consulta
101
JAI no 5 - CSBC 2009
Exemplo JUNÇÃO
<resultado>
{for $d in doc(’dept.xml’)//departamento,
$e in doc(’emps.xml’)//empregado
where $d/@cod=$e/@dept
return
<dep-emp>
<departamento>{$d/nome/text()}</departamento>
<empregado>{$e/nome/text()}</empregado>
</dep-emp>
}
</resultado>
102
JAI no 5 - CSBC 2009
Resultado
<resultado>
{for $d in doc(’dept.xml’)//departamento,
$e in doc(’emps.xml’)//empregado
where $d/@cod=$e/@dept
return
<dep-emp>
<departamento>{$d/nome/text()}</departamento>
<empregado>{$e/nome/text()}</empregado>
</dep-emp>
}
</resultado>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
<departamentos>
<departamento cod=“D01”>
<nome>Vendas</nome>
<local>3º. andar</local>
</departamento>
<departamento cod=“D02”>
<nome>Financeiro</nome>
<local>4º. andar</local>
</departamento>
</departamentos>
emps.xml
dept.xml
<resultado>
<dep-emp>
<departamento>Vendas</departamento>
<empregado>João</empregado>
</dep-emp>
<dep-emp>
<departamento>Vendas</departamento>
<empregado>Ana</empregado>
</dep-emp>
</resultado>
103
JAI no 5 - CSBC 2009
doc e collection
Função doc é usada para referenciar o documento
a ser consultado
Função collection é usada para consultar vários
documentos de uma só vez
Coleções (collections) são usadas em bancos de dados
XML Nativos
Funcionam como um diretório onde se colocam vários
documentos XML
104
JAI no 5 - CSBC 2009
Exemplo
Assumindo que existe uma coleção chamada
empregados
<emp-dept>
{for $e in collection(’empregados’)//empregado
return
$e/nome
}
</emp-dept>
105
JAI no 5 - CSBC 2009
Operações de Agregação
Existem 5 funções de agregação em Xquery
SUM
COUNT
AVG
MAX
MIN
Devem ser usadas com o operador LET
106
JAI no 5 - CSBC 2009
Exemplo
<num-emp>
{let $e := doc(’emps.xml’)//empregado
return
count($e)
}
</num-emp>
Ao contrário do for, o let se liga
a todos os elementos de uma só
vez
107
JAI no 5 - CSBC 2009
Exemplo
<num-emp>
{let $e := doc(’emps.xml’)//empregado
return
count($e)
}
</num-emp>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
$e
108
JAI no 5 - CSBC 2009
Exemplo
<num-emp>
{let $e := doc(’emps.xml’)//empregado
return
count($e)
}
</num-emp>
<? xml version=“1.0” ?>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
$e
<num-emp>2</num-emp>
109
JAI no 5 - CSBC 2009
Atualizações
XQuery não permite atualizar os documentos
Existe uma iniciativa de uma extensão da XQuery
para adicionar cláusulas de atualização
Ainda não é recomendação da W3C
110
JAI no 5 - CSBC 2009
Básico
W3C
XML
Namespaces
Esquemas para XML
APIs para Manipulação de Documentos XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
111
JAI no 5 - CSBC 2009
Transformações
Documentos XML podem ser transformados com
Xquery ou com XSLT
XSLT (XSL Transformations) é uma recomendação
da W3C bastante utilizada na prática
Pode ser utilizada para gerar documentos XML, HTML,
ou qualquer outro documento cujo formato seja
baseado em texto
Especificação: http://www.w3.org/TR/xslt
112
JAI no 5 - CSBC 2009
XSLT
A XSLT especifica regras de transformação que são
aplicadas aos documentos XML
Consultem o site do W3C para maiores detalhes, e
o tutorial da W3Schools:
http://www.w3schools.com/xsl/default.asp
113
JAI no 5 - CSBC 2009
Básico
W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
114
JAI no 5 - CSBC 2009
Cenário de Uso
Fornecedor
Clientes usando o mesmo vocabulário
para enviar os pedidos
Cliente X
Cliente Y
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
<produto>
<nome>caderno</nome>
<quant>50</quant>
</produto>
115
JAI no 5 - CSBC 2009
Cenário de Uso
Fornecedor usa SAX ou DOM para processar os
pedidos que recebe
Fornecedor provê um esquema (em XML Schema)
para os clientes – clientes devem enviar pedidos
nesse formato
116
JAI no 5 - CSBC 2009
Cenário de Uso
Cliente X também usa XML internamente, mas o
formato de seus pedidos é diferente do esquema
fornecido pelo fornecedor – RETRABALHO?
NÃO: uso de XSLT ou XQuery para transformar os
pedidos do formato interno para o formato esperado
pelo fornecedor
Nenhuma aplicação do cliente precisa ser modificada
117
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
119
JAI no 5 - CSBC 2009
XML Como Solução de Pesquisa
JAI no 5 - CSBC 2009
120
Programmers use the idiom of “doc or die” when a
procedure needs a document and fails if it can’t
find it. Documents are also essential in web services,
supply chains, and information-intensive
applications in every domain.
5.3.1
Solução ou Problema?
JAI no 5 - CSBC 2009
122
DBLP
XML +5500
XML query 604
MORO, BRAGANHOLO, DORNELES,
DUARTE, GALANTE, MELLO.
XML: Some Papers in a Haystack.
SIGMOD Record, 2009.
http://www.informatik.uni-trier.de/~ley/db/
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
123
JAI no 5 - CSBC 2009
Integração de Dados
JAI no 5 - CSBC 2009
125
Processamento distribuído
Troca de informações
Compartilhamento de dados
Wrappers
Dados XML Dados
E vice-versa
Integração de Dados
JAI no 5 - CSBC 2009
126
Várias questões interessantes
Casamento de Esquemas – schema matching
E-Commerce, data warehousing
Identificar correspondências semânticas entre esquemas
Nome NomeCompleto
XML como solução
Alto poder de expressão + versatillidade para definir esquemas
Problema: suporte a sistemas distribuídos, namespaces(problemas em grandes esquemas)
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
127
JAI no 5 - CSBC 2009
Evolução de Esquemas
JAI no 5 - CSBC 2009
130
É o que acontece quando o esquema dos dados
evolui
Atualização nos requisitos dos dados
De repente: acesso Web
Novos tipos de dados
Novas funcionalidades
Desempenho
Evolução de Esquemas
JAI no 5 - CSBC 2009
131
Questões
Alteração esquema adaptação dados, visões, aplicações
Integridade dos dados mantida
Eficiência, sem prejuízo de desempenho
Pouca/nenhuma intervenção humana
Tempo mínimo de indisponibilidade
Soluções
Integração de dados
XML
Evolução de Esquemas
JAI no 5 - CSBC 2009
132
1. XML + Evolução de outros dados
<empregado tstart="2007-01-01" tend="2010-12-31">
<nome tstart="2007-01-01" tend="2010-12-31">
José Brasil</nome>
</empregado>
(Wang, Zaniolo 2003)
Evolução de Esquemas
JAI no 5 - CSBC 2009
133
1. XML + Evolução de outros dados
<empregado tstart="2007-01-01" tend="2010-12-31">
<nome tstart="2007-01-01" tend="2008-12-31">
José Brasil</nome>
<nome tstart="2009-01-01" tend="2010-12-31">
José</nome>
<sobrenome tstart="2009-01-01" tend="2010-12-31">
Brasil</sobrenome>
</empregado>
Evolução de Esquemas
JAI no 5 - CSBC 2009
134
2. Evolução de Dados XML
Documentos válidos para os vários esquemas
N Esquemas 1 Documento
(Wang, Zaniolo 2003)
Outras soluções
(Guerrini, Mesiti 2008) Ferramenta X-Evolution
(Beyer et al 2005) Evolução no IBM DB2
(Rahm, Bernstein 2006) Ontologias, workflows, modelos
conceituais, interfaces de software.
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
135
JAI no 5 - CSBC 2009
XML é estático
Conteúdo normalmente gerado por uma aplicação
Depois de gerado, o documento não se “atualiza”
sozinho
XML Dinâmico: documento com chamadas de
serviço Web embutidas
136
JAI no 5 - CSBC 2009
Exemplo
Documento com dados sobre cidades pode incluir
uma chamada a um serviço de previsão do tempo
Cada chamada trará a previsão para uma cidade
específica
<cidades>
<cidade>
<nome>Rio de Janeiro</nome>
<estado>RJ</estado>
<sc service="forecast@weather.com"/>
</cidade>
<cidade>
<nome>Porto Alegre</nome>
<estado>RS</estado>
<sc service="forecast@weather.com"/>
</cidades>
137
JAI no 5 - CSBC 2009
Exemplo
Ao ser ativado, o serviço traz como resposta um
valor atômico ou trecho XML
No exemplo, o trecho retornado tem a seguinte
estrutura
<previsao>
<temperatura min="25" max="32"/>
<condicao>nublado</condicao>
</previsao>
138
JAI no 5 - CSBC 2009
Exemplo
A subárvore é adicionada ao documento XML, num
processo chamado materialização
<cidades>
<cidade>
<nome>Rio de Janeiro</nome>
<estado>RJ</estado>
<sc service="forecast@weather.com"/>
<previsao>
<temperatura min="25" max="32"/>
<condicao>nublado</condicao>
</previsao>
</cidade>
...
</cidades>
139
JAI no 5 - CSBC 2009
Ativação dos Serviços
Pode ser configurada para ser acionada:
em um tempo pré-determinado (ex. de 10 em 10 segundos)
em tempo de consulta
Problema: chamada de serviços pode levar um tempo longo (servidor pode estar sobrecarregado ou mesmo fora do ar)
Fundamental: otimizar as consultas de modo a levar isso em consideração
140
JAI no 5 - CSBC 2009
Otimização possível
Chame um serviço somente se a sub-árvore que o
contém fizer parte do resultado da consulta
141
JAI no 5 - CSBC 2009
Exemplo
/catalogo/livros/livro[titulo=“Java, como programar“]/preco
livro
titulo
livro livro
preco preco
sc
preco
sc autor
rank
sc
catalogo
revistas
revista
preco
sc
nome avaliacao
sc
“Java, como
programar”
142
JAI no 5 - CSBC 2009
Não funciona em todos os casos...
Suponha uma consulta que pede todas as cidades
cuja temperatura máxima prevista é superior a 30º
C
Nesse caso é necessário chamar todos os serviços do
documento
143
JAI no 5 - CSBC 2009
Alternativa
Abiteboul (2004) apresenta um algoritmo dinâmico
que identifica o conjunto de serviços a serem
chamados para materializar uma consulta
Identifica serviços a serem chamados, com base nas
expressões de caminho da consulta
Elimina serviços da lista com base em sua definição
WSDL
144
JAI no 5 - CSBC 2009
Ordem das chamadas?
Uma chamada de serviço pode conter outra
chamada embutida em sua resposta
Ela também precisa ser ativada para a materialização
Pode haver uma restrição de ordem de chamada
entre serviços de um documento AXML, definida por
um atributo followedBy
Obriga que um determinado serviço sempre seja
chamado depois do outro
145
JAI no 5 - CSBC 2009
Ordem das chamadas?
Mecanismo de otimização deve levar isso em conta
Ruberg e Mattoso (2008) investigam essa questão
e definem a ordem em que os serviços devem ser
chamados (plano de materialização)
O plano de materialização baseia-se no grafo de
dependências das chamadas de serviço
Para isso: análise do WSDL sc1
sc2 sc5
sc3 sc4 sc6 sc7
146
JAI no 5 - CSBC 2009
Além disso...
São analisados servidores alternativos (quando
existem), e o melhor é escolhido (via função de
custo)
A orquestração pode ser distribuída entre vários
nós da rede
147
JAI no 5 - CSBC 2009
Projeto AXML
Novidade sobre o projeto AXML podem ser
encontradas em
http://www.activexml.net/index.axml.html
Algumas outras pesquisas:
Confiança (trust) em AXML
Visões sobre documentos AXML
148
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
149
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
150
JAI no 5 - CSBC 2009
Processamento de Consultas XML
JAI no 5 - CSBC 2009
151
5.3.2.1
RELACIONAL XML
Estrutura tabular Estrutura de árvore
Esquema rígido Esquema não estruturado,
inexistente (autor, autor=
nome + sobrenome)
Nomes únicos Elementos repetitivos
Consultas seguem o
esquema pré-definido
Consultas de formato livre
Por que precisa novos algoritmos?!
Algumas Pesquisas Recentes
Par
Sem índice, sem clustering [IDEAS 2004]
Caminhos
Versões de documentos [RIDE 2004]
Utilizando resumos estruturais [WWW 2006]
Novos contextos para resumos estruturais [SBBD 2007]
Sub-árvores (twigs)
Documentos em formato de grafos [WebDB 2004]
Documentos em formato de árvore, mas SEM compilador para escolhermelhor algoritmo [VLDB 2005]
Busca textual (information retrieval)
Estudo inicial de algoritmos [DATAX 2008]
Outros contextos (streams)
Publish/subscribe [ICDE 2007, VLDB 2007]
JAI no 5 - CSBC 2009
152
Categorias153
Parameters: access pattern, input handling, output handling
(1) set based techniques: input as (sorted) sets of nodes, possibly indexed to improve performance
(2) input driven: the flow of computation is guided entirely by the sequential input
(3) query driven input probing: the query defines the way the input is probed
(4) graph summary evaluation: methods work on a structural summary of the data
Cat Access Pattern Input Handling Output Handling
1 sorted / indexed join sets merge paths, sorted output
2 sequential input drives computation merge paths
3 indexed / random probe for matches incrementally build results
4 indexed / random input drives computation structural constraints on
data summary
[MORO et al VLDB 2005]
JAI no 5 - CSBC 2009
O estado-da-arte
JAI no 5 - CSBC 2009
a1
b1
b2
a2
c2
c1
a
b
c
a1
Sa Sb Sc
a2
b1
b2
c1c2
a2 b2 c1
a1 b1 c1
a1 b1 c2
a1 b2 c1
1) solutions individual root-to-leaf paths
2) merge-join those partial solutions
→ before adding element to stack:
(i) the node has a descendant on each of the query
children streams
(ii) each of those descendant nodes recursively satisfies
this property
→ optimized by indexes
doc query
results
TwigStack
154
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
155
JAI no 5 - CSBC 2009
Sistemas de Disseminação de
Conteúdo XML
JAI no 5 - CSBC 2009
156
Disseminação? Hein??
Serviços de pesquisaespecializados
Últimas notícias
Próximos eventos
Diferentes fontes
Atualizações freqüentes
5.3.2.2
Vigilante End-to-End Containment of Internet Worms
Content-based
Dissemination Services
System / Service
Consumer
query
query
query
Routing
Table
Message
Filtering
Producer
INPUT
160
JAI no 5 - CSBC 2009
Content
XML = standard for information exchange over the Web
Apart from basic Web technologies (URIs, HTTP, and HTML) and the advanced scripting driving the Web 2.0 wave, XML is by far the most successful and ubiquitous Web technology.
Wilde & Glushko, CACM 51(7), 2008
JAI no 5 - CSBC 2009
RoXSum [ICDE 2007]
162
XML content-based routing : profile matching on messages
Profile
Matching
OU
R A
PPR
OA
CH
Profile
Matching
RoXSum
0 1 2 3
XML1XML2XML3 XML0
Input Messages
XML1XML3
Result Messages
Result Messages
RoXSum
1 3
Input Messages
XML1XML2XML3
CU
RR
EN
T
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
163
JAI no 5 - CSBC 2009
<?xml version='1.0'?>
<!-- book list from all sources -->
<books>
<!-- Amazon -->
<book FreeSuperSaving="yes" SurpriseMe="yes" >
<title> Beginning XML, 4th Edition (Programmer to Programmer) </title>
<author>David Hunter</author> <author>Jeff Rafter </author>
<author>Joe Fawcett </author> <author>Eric van der Vlist </author>
<author>Danny Ayers </author> <author>Jon Duckett </author>
<author>Andrew Watt </author>
<author>Linda McKinnon </author>
<type>Paperback</type>
<list_price>$39.99</list_price>
<our_price>$26.39</our_price >
<you_save>16.60</you_save>
<perc>34%</perc>
<buy_used>$21.20</buy_used>
</book> </books>
165
JAI no 5 - CSBC 2009
<!-- Bookpool -->
<book fig="fig3">
<title>Professional XML</title>
<author>Bill Evjen, et al</author>
<type>Paperback</type>
<publisher>Wrox Press</publisher>
<date_published>
<month>March</month>
<year>2007</year>
</date_published>
<id>0471777773</id><usually_ships_in instock=“no”>24 hours</usually_ships_in>
<list_price>$49.99</list_price>
<our_price>$25.50</our_price>
<you_save>36%</you_save>
</book>
167
JAI no 5 - CSBC 2009
<!– Barnes & Nobel-->
<book fig="fig9780470114872 ">
<title>Beginning XML</title>
<author>David Hunter</author>
<author>Jeff Rafter</author>
<author>Joe Fawcett</author>
<author>Eric van der Vlist</author>
<type>Paperback - REV</type>
<date_published>May 2007</date_published>
<usually_ships_in instock="yes">24 hours</usually_ships_in>
<isbn type="13">9780470114872</isbn>
<sales_rank>33,095</sales_rank>
<our_price>19.99</our_price>
<you_save>20%</you_save>
</book>
</books>
169
JAI no 5 - CSBC 2009
<!-- Amazon -->
book FreeSuperSaving SurpriseMe
title
author*
type
list_price
our_price
you_save
perc
buy_used
<!– BookPool -->
book fig
title
author*
type
publisher
date_published
month
year
id
usually_ships_in instock
list_price
our_used
you_save
<!– Barnes & Nobel-->
book fig
title
author*
type
date_published
usually_ships_in instock
isbn type
sales_rank
our_price
you_save
Mesma info
Vocabulário?
Elementos?
Atributos?
170
JAI no 5 - CSBC 2009
Uma Metodologia p/ Modelagem
Fase Modelo Relacional Modelo XML
Conceitual:
semântica
Entidades, atributos, tipo,
relacionamentos, restrições.
Diagrama ER.
Nomes (taxonomia,
vocabulário), relacionamentos.
Lógica:
estrutura
Tabelas, colunas,
relacionamentos, visões.
Formas normais, modelo
relacional, DDL.
Elementos, atributos, valores,
relacionamentos
(aninhamento).
DTD, XML Schema.
Física Implementação e
otimização: armazenamento
e partições, índices,
caminhos de acesso. DDL.
Escrever esquema, instâncias,
otimizações: armazenamento e
partições, índices, unidades
reusáveis.
171
[MORO, LIM, CHANG @ SIGMOD 2007]
JAI no 5 - CSBC 2009
Estudo de Caso
Como modelar com o modelo Relacional quando se
tem uma grande variabilidade de
esquema
1) Produtos em um E-Catalog
Loja de departamentos que vende de camisas a
TVs
Projeto Relacional ????????????????
172
JAI no 5 - CSBC 2009
Estudo: Modelagem Relacional
E-Catalog
PROD (id, price, size, color, fabric, weight,
screensize, stereo …)
Modelo plano
Simples, NULL
PROD (id, price)
TSHIRT(size, color, fabric, FK to PROD)
TV(weight, screensize, stereo, FK to PROD)
Categorias
Complexo, sem NULL
Junção
PROD (id, attribName, attribValue) Vertical
Simples, junções
PROD (id, price, XMLdescription)XML
Simples, flexivel,
sem null e junçõesrequired sparse, optional
173
JAI no 5 - CSBC 2009
Modelagem
Muitas opções de modelagem
Russian Doll, Salami Slice, Venetian Blind –
propostas por Roger Costello (xfront.com)
Quarta opção: Garden of Eden
Outras opções
Fazer todos os atributos globais?!
174
JAI no 5 - CSBC 2009
Padrões de Modelagem
E-Catalog
Endereço
Endereço permanente
Endereço de cobrança
Endereço de envio
175
JAI no 5 - CSBC 2009
Russian Dolls
Bonecas Russas
Um elemento global
Todos os outros elementos aninhados
Fácil de usar
Sem reusabilidade
Mudanças dentro do escopo
<element name="purchaseOrder">
<complexType>
<sequence>
<element name="address" minOccurs="1" maxOccurs="1">
<complexType>
<sequence>
<element name="permAddress" type="string" minOccurs="1"/>
<element name="billToAddress" type="string" minOccurs="1"/>
<element name="sendToAddress" type="string" minOccurs="1"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
Aninhado
176
JAI no 5 - CSBC 2009
<element name="permAddress" type="string"/>
<element name="billToAddress" type="string"/>
<element name="sendToAddress" type="string"/>
<element name="address">
<complexType>
<sequence>
<element ref="data:permAddress" minOccurs="1"/>
<element ref="data:billToAddres" minOccurs="1"/>
<element ref="data:sendToAddress" minOccurs="1"/>
</sequence>
</complexType>
</element>
<element name="purchaseOrder">
<complexType>
<sequence>
<element ref="data:address" minOccurs="1" maxOccurs="1"/>
</sequence>
</complexType>
</element>
Salami Slices
Apenas elementos no nível
superior
Fatias de Salame
Todos os elementos são globais
Reusabilidade
Mudanças globais
Complexidade177
JAI no 5 - CSBC 2009
Venetian Blinds
<complexType name=”tAddress”>
<sequence>
<element type="data:permAddress" type="string" minOccurs="1"/>
<element type="data:billToAddress" type="string" minOccurs="1"/>
<element type="data:sendToAddress" type="string" minOccurs="1"/>
</sequence>
</complexType>
<complexType name=”tPurchase”>
<sequence>
<element type="data:tAddress" minOccurs="1" maxOccurs="1"/>
</sequence>
</complexType>
<element name="purchaseOrder" type="data:tPurchase"/>
Maioria dos tipos no
nível superior
Venezianas
Um elemento global
Todos os demais são locais: através
de tipos complexos e grupos
Reusabilidade
Complexidade, expõe tipos
178
JAI no 5 - CSBC 2009
Garden of Eden
Tudo no nível
superior
<complexType name="tAddress">
<sequence>
<element type="data:permAddress" type="string" minOccurs="1"/>
<element type="data:billToAddress" type="string" minOccurs="1"/>
<element type="data:sendToAddress" type="string" minOccurs="1"/>
</sequence>
</complexType>
<element name="Purchase">
<complexType>
<sequence>
<element name="Address" type="tAddress"/>
</sequence>
</complexType>
</element>
Jardim do Eden
Elementos e tipos são globais
Reusabilidade: elementos e tipos
Complexidade, difícil leitura
179
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
<purchaseOrder number="10293">
<permAddress>...</permAddress>
<billToAddress>...</billToAddress>
<sendToAddress>...</sendToAddress>
...
</purchaseOrder>
<purchaseOrder number="10293">
<address type=”permAddress”>...</address>
<address type=”billToAddress”>...</address>
<address type=”sendToAddress”>...</address>
...
</purchaseOrder>
<purchaseOrder number="10293">
<permAddress>
<address>...</address>
</permAddress>
<billToAddress>
<address>...</address>
</billToAddress>
<sendToAddress>
<address>...</address>
</sendToAddress>
...
</purchaseOrder>
<purchaseOrder number="10293">
<address>
<permAddress>...</permAddress>
<billToAddress>...</billToAddress>
<sendToAddress>...</sendToAddress>
</address>
...
</purchaseOrder>
RUSSIAN DOLLS
Sem reusabilidade
Mudanças locais
SALAMI SLICES
Reusabilidade
Mudanças globais
VENETIAN BLINDS
GARDEN OF EDEN
180
JAI no 5 - CSBC 2009
Critérios para escolher
Flexibilidade
Vocabulário, namespaces
Reuso:
Quais estruturas precisam ser reutilizadas?
Todas? Por várias aplicações diferentes?
Especialização:
Quais estruturas alguém pode querer modificar?
Qual o impacto para estas modificações?
181
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
182
JAI no 5 - CSBC 2009
Cenário
Algumas aplicações lidam com documentos XML
muito grandes (da ordem de Gb)
Exemplo: aplicações de engenharia
Processar consultas de forma eficiente sobre
documentos grandes é um desafio
183
JAI no 5 - CSBC 2009
Em Banco de Dados
Em Bancos de Dados relacionais, o problema é
resolvido usando técnicas de fragmentação
(horizontal, vertical e híbrida)
A base é dividida e espalhada em diferentes nodos da
rede
Consultas são distribuídas, o que as torna mais
eficientes (aproveitam paralelismo, ou então trabalham
sobre bases menores)
184
JAI no 5 - CSBC 2009
Em XML
Problemas de desempenho em consultas sobre bases
XML podem ser minimizados com a fragmentação da
base
paralelismo intra-consulta
diminuição o volume de dados consultadoXQuery XQuery
Base original Base fragmentada
?
185
JAI no 5 - CSBC 2009
Desafio
Definir fragmentação para dados XML
Desde então, várias propostas surgiram
Ma e Schewe (2003)
Bremer e Gertz (2003)
Bose et al. (2003)
Amer-Yahia e Kotidis (2004)
Andrade et al. (2006)
186
JAI no 5 - CSBC 2009
Proposta de Andrade
Segue a linha do que é utilizado em BDs relacionais
Fragmentos horizontais, verticais e híbridos
Trabalha com bases de Documento Único ou Multi-
Documentos
187
JAI no 5 - CSBC 2009
Fragmentação Horizontal
Seleção ()
COrders_c2_fh1 := 4000//, totalorderordersC
COrders COrders_c2_fh1
COrders_c2_fh2
COrders_c2_fh2 :=4000//, totalorderordersC
188
JAI no 5 - CSBC 2009
Fragmentação Vertical
Projeção ()
CLoja_c2_fv1 := ItensLojaLojalojaC //,/,
CLoja_c2_fv2 :=
CLoja_c2_fv1
CLoja_c2_fv2
CLoja
,//, ItensLojalojaC
189
JAI no 5 - CSBC 2009
Fragmentação Híbrida
Horizontal seguida de Vertical
Vertical seguida de Horizontal
190
JAI no 5 - CSBC 2009
Regras de Correção
Fragmentação baseada em uma álgebra
Permite a especificação de regras de correção
Regras de correção podem ser automaticamente
verificadas
Regras de Correção:
Completude
Disjunção
Reconstrução
191
JAI no 5 - CSBC 2009
Regras de Correção
Considere que a coleção C foi decomposta em um
conjunto de fragmentos {F1, … Fn}
C…
F2 Fn
F1
Fragmentação
192
JAI no 5 - CSBC 2009
Completude
Cada item de dados de uma coleção C deve estar
em pelo menos um fragmento Fi
C…
F2 Fn
F1
Fragmentação
193
JAI no 5 - CSBC 2009
Disjunção
O mesmo item de dado não pode estar em mais de
um fragmento
C…
F1
F2 Fn
Fragmentação
194
JAI no 5 - CSBC 2009
Processamento de Consultas
Figueiredo, Braganholo e Mattoso (2007)
propuseram uma metodologia para processamento
de consultas XML em bases fragmentadas
Consulta é analisada, decomposta e enviada aos nós
que contêm os fragmentos de interesse para a consulta
Experimentos demonstram que a abordagem é efetiva
Próximo passos: projeto de fragmentação
195
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
196
JAI no 5 - CSBC 2009
Integração
Esquemas (já falamos sobre isso!)
Instâncias
Problema: a mesma entidade do mundo real aparece
em várias bases de dados que serão integradas
197
JAI no 5 - CSBC 2009
Exemplo
<empregado>
<nome>João Silva Santos</nome>
<cpf>123.456.789-00</cpf>
</empregado>
<pessoa>
<primeiro-nome>João</primeiro-nome>
<sobrenome>S. Santos</sobrenome>
<cic>12345678900</cic>
</pessoa>
198
JAI no 5 - CSBC 2009
?
Como identificar esses casos?
Solução: uso de funções de similaridade
Levam em consideração o esquema e conteúdo dos
elementos
199
JAI no 5 - CSBC 2009
No entanto...
Não basta identificar as instâncias
Seria interessante que uma consulta retornasse uma
instância combinada ao invés de 3 ocorrências
repetidas do mesmo empregado (talvez com dados
e estrutura diferentes)
Problema ainda em aberto...
200
JAI no 5 - CSBC 2009
Pesquisa
XML como Solução de Pesquisa
Integração de Dados
Evolução de Esquemas
Consultas a Dados Dinâmicos
Pesquisa Recente com XML
Processamento de Consultas XML
Sistemas de Disseminação de Conteúdo
Modelagem de Dados Híbridos XML-Relacional
Fragmentação de Bases de Dados
Integração de Instâncias
Novos Desafios
201
JAI no 5 - CSBC 2009
Novos Cenários
N cenários de aplicações dados estruturados, semi e não-estruturados
Grandes coleções heterogêneas com dados estruturados relacionados a dados não-estruturados (ex. emails)
Web, dados estruturados se multiplicam, fontes
Dados escondidos em formulários (deep web);
Dados em páginas com tabelas HTML
Mashups que fornecem visões dinâmicas de dados estruturados;
Dados da Web 2.0
Esse conjunto de repositórios espalhados pela Web tem recebido o nome de dataspaces.
202
JAI no 5 - CSBC 2009
Novos Desafios
Desafios de pesquisa a serem abordados na área de Banco de Dados [Agrawal et al. 2008].
Transição pesquisa: BDs estruturados gerenciamento de coleções de dados ricas em dados estruturados, semi-estruturados e não-estruturados
Dados gerados pela extração de informação de textos e páginas Web
Coletas em blogs e comunidades online, logs de aplicações, sensores e da deep Web.
203
JAI no 5 - CSBC 2009
Novos Desafios
JAI no 5 - CSBC 2009
204
VOLUUUUME de dados
e-Science, processamento de linguagens naturais e
redes sociais
E.g.: redes sociais: identificar dados relevantes +
visualizar adequadamente
Novas soluções especializadas (componentes mais
simples)
XML
Novos Desafios
JAI no 5 - CSBC 2009
205
Alguns desafios inspirados em Agrawal et al. (2008)
Processamento paralelo de documentos e consultas XML;
Identificação do contexto de dados textuais e respectiva representação em XML;
Extração de estrutura de dados textuais;
Busca de palavras em fontes XML heterogêneas sem qualquer representação semântica (ou seja, sem conhecimento de ontologias e domínios por exemplo);
Processamento de dados XML em dispositivos móveis (pouco consumo de energia e configuração de hardware limitada);
Indústria
Padrões em XML
Armazenamento
Bancos de Dados Híbridos
Bancos de Dados Nativos
Ferramentas
207
JAI no 5 - CSBC 2009
Indústria
Padrões em XML
Armazenamento
Bancos de Dados Híbridos
Bancos de Dados Nativos
Ferramentas
208
JAI no 5 - CSBC 2009
Milhares de padrões
O sucesso de XML pode ser medido pelos diversos
padrões industriais baseados nesse formato
O site XML Cover Pages lista vários deles
http://xml.coverpages.org/xml.html#applications
209
JAI no 5 - CSBC 2009
Como os padrões são definidos?
O órgão padronizador define um XML Schema ou
DTD e o disponibiliza para quem quiser utilizar
210
JAI no 5 - CSBC 2009
Indústria
Padrões em XML
Armazenamento
Bancos de Dados Nativos
Bancos de Dados Híbridos
Ferramentas
211
JAI no 5 - CSBC 2009
Uma coluna texto
em uma tabela
Como XML?
JAI no 5 - CSBC 2009
CLOB/BLOB
Armazenar XML como documento texto
PROBLEMAS?
Difícil de consultar e
atualizar
Não fornece
integridade aos dados
Como XML?
JAI no 5 - CSBC 2009
XML/SQL Shredding
Mapear e reduzir XML em tabelas SQL
Consultas XML usando SQL ou SQL/XML
PROBLEMAS?
Cada SGBD SQL tem uma técnica diferente
Consulta XML usando SQL, reconstrói dados XML
Várias colunas
texto em
várias tabelas
XML NATIVO
JAI no 5 - CSBC 2009
XML/SQL Shredding
Mapear e reduzir XML em tabelas SQL
Consulta XML usando SQL, reconstrói dados XML
BLOB/CLOB
Armazenar XML como documento texto
Difícil de consultar e atualizar
• XML Nativo
– Armazena XML no modo nativo, com ou semesquema
– Consulta usando linguagem XML (XQuery, XPath)
– Utiliza índices XML apropriados
DCC889 2009/1
XML Nativo
<Library><book units=”14”>
<title>Adventures of Huckleberry Finn</title><author><last>Twain</last>
<first>Mark</first> </author><year>2002</year><otherInfo> <isbn>0142437174</isbn>
<collection>Penguin Classics</collection><publisher>Penguin Classics</publisher>
</otherInfo></book><book units=”5”>
<title>How the Grinch Stole Christmas!</title><author>Dr. Seuss</author><publisher> Random House</publisher><year>1957</year><isbn>0394800796</isbn>
</book><DVD units=”2” rated=”PG”>
<title>The Grinch</title><director><last>Howard</last>
<first>Ron</first></director><actors><actor>Jim Carrey</actor>
<actor>Taylor Momsen</actor></actors><studio>Universal Studios</studio><year>2001</year>
</DVD></Library>
Library
book
publisher
yearauthor
firstlast
isbn
collection
title
book
publisher
yearauthor
isbntitle
DVD
year
actors
actor
director
studiotitle
first
last
actor
units
units
units
rated
otherInfo
elemento
atributo
valor
Documento
Representação Árvore
XML Nativo, e não SQL
Implementação em Meses SQL XML
Enterprise Knowledge Management 30 5
Suporte para companhias farmacêuticas 30 10
M&A Knowledge Management 18 6
Leis e contratos 15 6
Gerenciamento de patentes 9 4
216
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
XML Nativo, e não SQLConsulta Relacional em JAVA, SGBD relacional shredding
217
public long queryAccumulation(StringxQuery)throws SQLException, IfsException{ AttributeSearchSpecification asp=new
AttributeSearchSpecification();StringclassNames[] =newString[] {"SWAPSTREAM", "CALCULATIONPERIODAMOUNT", "CALCULATION",
"FLOATINGRATECALCULATION", "NOTIONALSCHEDULE","NOTIONALSTEPSCHEDULE"}; StringaliasNames[] =newString[]
{"sS","cPA","c","fRC","nS","nSS"};boolean delBvrs[] = {false,false,false,false,false,false};boolean recBvrs[] =
{false,false,false,false,false,false};SearchClassSpecification scp =new
SearchClassSpecification(classNames,aliasNames,delBvrs,recBvrs);scp.addResultClass("sS");asp.setSearchClassSpecification(scp);JoinQualificati
on jq1 =new JoinQualification();JoinQualificationjq2 =new JoinQualification();JoinQualificationjq3 =new
JoinQualification();JoinQualificationjq4 =new JoinQualification();JoinQualificationjq5 =new JoinQualification();
jq1.setLeftAttribute("sS","CALCULATIONPERIODAMOUNT"); jq1.setRightAttribute("cPA",null); jq2.setLeftAttribute("cPA","CALCULATION");
jq2.setRightAttribute("c",null); jq3.setLeftAttribute("c","FLOATINGRATECALCULATION"); jq3.setRightAttribute("fRC",null);
jq4.setLeftAttribute("c","NOTIONALSCHEDULE"); jq4.setRightAttribute("nS",null); jq5.setLeftAttribute("nS","NOTIONALSTEPSCHEDULE");
jq5.setRightAttribute("nSS",null);AttributeQualificationaq1 =new AttributeQualification(); aq1.setAttribute("fRC","FLOATINGRATEINDEX");
aq1.setOperatorType("="); aq1.setValue("USD-LIBOR-BBA");AttributeQualificationaq2 =new AttributeQualification();
aq2.setAttribute("fRC","DAYCOUNTFRACTION"); aq2.setOperatorType("="); aq2.setValue("ACT/360");AttributeQualificationaq3 =new
AttributeQualification(); aq3.setAttribute("nSS","CURRENCY"); aq3.setOperatorType("="); aq3.setValue("USD");SearchClausesc1 =new
SearchClause(); sc1.setLeftSearchQualification(jq1); sc1.setRightSearchQualification(jq2);
sc1.setOperatorType(SearchClause.AND);SearchClausesc2 =new SearchClause(); sc2.setLeftSearchQualification(sc1);
sc2.setRightSearchQualification(jq3); sc2.setOperatorType(SearchClause.AND);SearchClausesc3 =new SearchClause();
sc3.setLeftSearchQualification(sc2); sc3.setRightSearchQualification(jq4); sc3.setOperatorType(SearchClause.AND);SearchClausesc4 =new
SearchClause(); sc4.setLeftSearchQualification(sc3); sc4.setRightSearchQualification(jq5);
sc4.setOperatorType(SearchClause.AND);SearchClausesc5 =new SearchClause(); sc5.setLeftSearchQualification(aq1);
sc5.setRightSearchQualification(aq2); sc5.setOperatorType(SearchClause.AND);SearchClausesc6 =new SearchClause();
sc6.setLeftSearchQualification(sc5); sc6.setRightSearchQualification(aq3); sc6.setOperatorType(SearchClause.AND);SearchClausesc7 =new
SearchClause(); sc7.setLeftSearchQualification(sc4); sc7.setRightSearchQualification(sc6);
sc7.setOperatorType(SearchClause.AND);asp.setSearchQualification(sc7);ViewSpecification vs;vs=new
ViewSpecification("VIEW_SWAPSTREAM",asp,true); vs.addClass(sess, "fRC",newString[] {"FLOATINGRATEINDEX","DAYCOUNTFRACTION"});
vs.addClass(sess, "nSS",newString[] {"CURRENCY","INITIALVALUE"});sess.createView(vs);long sum= 0; Stringsql= "SELECT
SUM(INITIALVALUE) FROM VIEW_SWAPSTREAM";PreparedStatement pstmt=dataBaseCon.prepareStatement(sql);ResultSet
rset=pstmt.executeQuery();rset.next();sum=rset.getLong(1);rset.close();pstmt.close();return sum;}
JAI no 5 - CSBC 2009
XML Nativo, e não SQLConsulta XQuery, SGBD XML nativo
218
sum(/FpML[trade/swap/swapStream/
calculationPeriodAmount/calculation
[notionalSchedule/notionalStepSchedule/currency='USD„ and
floatingRateCalculation/floatingRateIndex='USD-LIBOR-BBA' and
dayCountFraction='ACT/360']]
/trade/swap/swapStream/calculationPeriodAmount/calculation/not
ionalSchedule/notionalStepSchedule/initialValue)
JAI no 5 - CSBC 2009
XML Nativo
SGBD XML Nativo TIMBER [Jagadish et al VLDB J. 2002]
ROX [Halverson et al VLDB 2004]
NeoCore XML Management System (Xpriori)
Tamino XML Server (SoftwareAG)
TX1 (Toshiba)
eXist (open source)
SGBD Híbrido (relacional + engine nativo) “DB2 goes hybrid”, Beyer et al IBM Systems Journal, 45(2),
2006
“Native Xquery processing in Oracle XMLDB”, Liu et al. SIGMOD 2005
219
JAI no 5 - CSBC 2009
SGBDs Comerciais
JAI no 5 - CSBC 2009
221
-- IBM DB2: cria índice com a restrição de unicidade
CREATE UNIQUE INDEX lattesidx on Professor(profLattes)
GENERATE KEY USING XMLPATTERN ’/lattes/dpessoais/@cpf ’
AS SQL DOUBLE;
-- Oracle 10g: cria índice em cpf
CREATE INDEX lattesidx ON Professor p
(EXTRACTVALUE(VALUE(p),’/lattes/dadospessoais/@cpf ’));
-- Microsoft SQL Server: cria índice em todos caminhos
CREATE XML INDEX lattesidx on Professor(profLattes)
USING XML INDEX xml_lattesidx FOR PATH;
Indústria
Padrões em XML
Armazenamento
Bancos de Dados Híbridos
Bancos de Dados Nativos
Ferramentas
222
JAI no 5 - CSBC 2009
Milhares de Ferramentas
Coletânea disponível aqui:
http://www.rpbourret.com/xml/XMLDatabaseProds
.htm#products
Falaremos sobre alguns tipos de ferramentas
Editores
Transformadores (XSLT)
Mapeamento XML-OO
223
JAI no 5 - CSBC 2009
Editor (Comercial)
Altova XML Spy
(http://www.altova.com/products/xmlspy/xmlspy.ht
ml)
Ferramenta pioneira, bastante completa (comercial)
Faz validação contra DTD, XML Schema, XBRL,
transformações XSLT, consultas XPath e XQuery , edição
gráfica, edita WSDL, gera código Java, C e C# a
partir de XML Schema, possui cliente e debugger
SOAP, etc.
Plataformas: Windows, MacOS e Linux
224
JAI no 5 - CSBC 2009
Editores (Livres)
Exchanger XML Lite(http://www.freexmleditor.com/)
Validação contra DTD e XML Schema, consultas Xpathe XQuery, transformações XSLT
Plataformas: todas (baseado em Java)
XML Copy Editor (http://xml-copy-editor.sourceforge.net/)
Validação contra DTD e XML Schema, consultas XPath, transformações XSLT
Plataformas: Windows e Linux
226
JAI no 5 - CSBC 2009
Transformação
Editores já mencionados
Navegadores (IE, Firefox, etc.)
Altova Map Force
(http://www.altova.com/products/mapforce/data_
mapping.html)
Bastante poderosa, dá apoio também à elaboração
da transformação (geração automática), e não só à
execução
227
JAI no 5 - CSBC 2009
XML e Orientação a Objetos
Frameworks para manipulação de arquivos XML via
linguagem de programação
Objetivo: deixar transparente para a aplicação a
existência de arquivos XML
Elementos XML são transformados em objetos em
memória (com base no esquema do documento)
Exemplo: um cliente no documento se transforma em um
objeto cliente, na memória
228
JAI no 5 - CSBC 2009
XML e Orientação a Objetos
Exemplos de frameworks
Castor (http://www.castor.org/xml-framework.html)
XML Beans (http://xmlbeans.apache.org/)
229
JAI no 5 - CSBC 2009
Uso de XML por ferramentas
Microsoft Office
Open Office
Argo UML
Adobe Acrobat Reader (exporta para XML)
...
230
JAI no 5 - CSBC 2009
Revisão
O que é XML
Quais são as linguagens e padrões
Pesquisa
Problemas resolvidos
Problemas em aberto
Indústria
Ferramentas
232
JAI no 5 - CSBC 2009
Agradecimentos
Carina F. Dorneles (UPF)
Renata M. Galante (UFRGS)
Carlos A. Heuser (UFRGS)
Adrovane Kade (UFRGS)
Vassilis J. Tsotras (UCR, USA)
Zografoula Vagena (Microsoft, UK)
Susan Davidson (UPenn, USA)
Marta Mattoso (COPPE\-UFRJ)
Guilherme Figueiredo (Banco Central)
Cláudio Ferraz
André Vargas
Fernanda Baião (UNIRIO)
Ronaldo S. Mello (UFSC)
Dênio Duarte (UnoChapecó)
Alberto H. F. Laender (UFMG)
José Palazzo M. de Oliveira (UFRGS)
Este trabalho foi parcialmente financiado por CNPq, CAPES, FAPEMIG e FAPERJ.
233
JAI no 5 - CSBC 2009
UFRJ
DESMISTIFICANDO XML: DA
PESQUISA À PRÁTICA
INDUSTRIAL
Bento Gonçalves – RS – Brasil
Mirella Moura Moro – UFMG – mirella@dcc.ufmg.br
Vanessa Braganholo – UFRJ – braganholo@dcc.ufrj.br
234JAI no 5 - CSBC 2009
Namespaces (http://www.w3.org/TR/xml-names)
Usual: vocabulários já definidos são usados para
construir novos vocabulários (reuso)
O que acontece se dois vocabulários que estão
sendo reusados possuem nomes de marcas iguais,
mas em contextos diferentes?
Como diferenciar qual marca veio de onde?
237
JAI no 5 - CSBC 2009
Exemplo
Vocabulário da matemática:
Marcas: conjunto, elemento, ...
Vocabulário da química:
Marcas: elemento , ...
Vocabulário a ser criado: conceitos do ensino médio
Serão utilizados os vocabulários da matemática e da
química, entre outros
238
JAI no 5 - CSBC 2009
Problema
Como distinguir um elemento de um conjunto da
matemática, de um elemento químico?
Solução: uso de namespaces
A cada vocabulário é associado um namespace,
identificado por uma URI
239
JAI no 5 - CSBC 2009
Exemplo
Namespace da matemática: http://matematica.com
Namespace da química: http://quimica.com
URIs são usadas por serem identificadores únicos
Não é necessário que o endereço exista na Web
240
JAI no 5 - CSBC 2009
Exemplo
Ao referenciar um elemento, usa-se o namespace
para fazer a desambiguação
Para encurtar, usa-se um prefixo para referenciar o
namespace
241
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
242
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
Declaração dos namespaces
243
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
Prefixos dos namespaces
244
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
Elementos da matemática
245
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
Elemento da química
246
JAI no 5 - CSBC 2009
Um XML Schema é um Documento XML!
Especificação: http://www.w3.org/TR/xmlschema-0/
Declarações de tipos de elemento são feitas em
XML (através de uma declaração element)
Depois tipos de elementos:
Simples (elementos textuais)
Complexos (elementos com sub-elementos)
248
JAI no 5 - CSBC 2009
Elementos Simples (simpleType)
Declaração associa o nome do elemento a um tipo
simples (pode ser um dos pré-definidos pelo XML
Schema, como xs:string, xs:decimal, xs:integer,
xs:boolean, xs:date, xs:time, etc, ou um criado pelo
usuário através de restrições de tipo)
<xs:element name=’nome’ type=’xs:string’ />
Declara um elemento chamado nome, cujo tipo é uma string
249
JAI no 5 - CSBC 2009
Elementos Complexos (complexType)
Declaração associa o nome do elemento a um tipo complexo
<xs:element name=“empregado“ type=“tEmpregado”/>
<xs:complexType name="tEmpregado">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="inicial-meio" type="xs:string“
minOccurs="0"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
<xs:attribute name="cod" type="xs:string"/>
<xs:attribute name="dept" type="xs:string" />
</xs:complexType>
250
JAI no 5 - CSBC 2009
complexType
Dentro do complexType, podem ser definidas
restrições aos sub-elementos
Cardinalidade (Máxima, Mínima)
Delimitadores de Grupo (Sequência, Escolha, Todos)
251
JAI no 5 - CSBC 2009
Cardinalidade
xs:minOccurs
número mínimo de vezes que um subelemento pode aparecer.
Default = 1
xs:maxOccurs
número máximo de vezes que um subelemento pode aparecer.
Default = 1
Max = unbounded
252
JAI no 5 - CSBC 2009
Exemplo
<xs:element name=“empregados“ type=“tEmpregados”/>
<xs:complexType name=’tEmpregados’>
<xs:sequence>
<xs:element name=’empregado’ type=’tEmpregado’
minOccurs=‟1‟ maxOccurs=‟unbounded‟ />
</xs:sequence>
</xs:complexType>
253
JAI no 5 - CSBC 2009
Delimitadores de grupo
<xs:sequence>
subelementos devem aparecer na instância XML na mesma ordem em
que foram declarados no esquema
<xs:choice>
somente um dos elementos declarados no grupo pode aparecer na
instância
<xs:all>
os elementos do grupo podem aparecer uma vez em qualquer ordem
254
JAI no 5 - CSBC 2009
Sequence - exemplo
<xs:element name=“empregado” type=“tEmpregado”/>
<xs:complexType name="tEmpregado">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="inicial-meio" type="xs:string” minOccurs="0"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<empregado>
<nome>João</nome>
<sobrenome>Santos</sobrenome>
</empregado>
Doc. XML
255
JAI no 5 - CSBC 2009
Sequence – comparando com DTD
<xs:element name=“empregado” type=“tEmpregado”/>
<xs:complexType name="tEmpregado">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="inicial-meio" type="xs:string” minOccurs="0"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!ELEMENT empregado (nome, inicial-meio? , sobrenome)
<!ELEMENT nome (#PCDATA)
<!ELEMENT inicial-meio (#PCDATA)
<!ELEMENT sobrenome (#PCDATA)
DTD
256
JAI no 5 - CSBC 2009
Atributos
São declarados com attribute
<xs:element name=“empregado“ type=“tEmpregado”/>
<xs:complexType name="tEmpregado">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="inicial-meio" type="xs:string“
minOccurs="0"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
<xs:attribute name="cod" type="xs:string"/>
<xs:attribute name="dept" type="xs:string" />
</xs:complexType>
257
JAI no 5 - CSBC 2009
schema
Todas as declarações de elementos e tipos são
colocadas dentro de uma raiz schema
258
JAI no 5 - CSBC 2009
Exemplo Completo
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="empregados" type="tEmpregados"/>
<xs:complexType name="tEmpregados">
<xs:sequence>
<xs:element name="empregado" type="tEmpregado” minOccurs="1“ maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="tEmpregado">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="inicial-meio" type="xs:string“ minOccurs="0"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
<xs:attribute name="cod" type="xs:string"/>
<xs:attribute name="dept" type="xs:string" />
</xs:complexType>
</xs:schema>
259
JAI no 5 - CSBC 2009
Exemplo Completo
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="empregados" type="tEmpregados"/>
<xs:complexType name="tEmpregados">
<xs:sequence>
<xs:element name="empregado" type="tEmpregado” minOccurs="1“ maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="tEmpregado">
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="inicial-meio" type="xs:string“ minOccurs="0"/>
<xs:element name="sobrenome" type="xs:string"/>
</xs:sequence>
<xs:attribute name="cod" type="xs:string"/>
<xs:attribute name="dept" type="xs:string" />
</xs:complexType>
</xs:schema>
<? xml version=“1.0” ?>
<empregados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="empregados.xsd“>
<empregados>
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
260
JAI no 5 - CSBC 2009
XML Schema é capaz de muito mais!
Unicidade
Chaves
Derivações de tipos por restrição ou extensão
...
261
JAI no 5 - CSBC 2009
Escrevendo um documento XML
Documentos XML
Podem ser escritos à mão usando um editor
Podem ser gerados automaticamente
Troca de dados, protocolos entre aplicativos
Importação/exportação entre diferentes formatos de dados
(relacional -> xml, xml -> relacional, etc.)
Marcação de saída é relativamente fácil:
fprintf(sdtout, "<para>paragrafo</para>"\n);
System.out.printl("<para>paragrafo</para>"n\);
263
JAI no 5 - CSBC 2009
Lendo um documento XML
Software pode ser usado para escrever um
documento XML
Software deve ser usado para ler um documento
XML
Infelizmente a leitura é mais complexa do que a escrita
Várias questões:
Caracteres como "enter" "espaços em branco" devem ser
sempre tratados
Substituir as entidades no texto
Processar DTD/XML Schema
264
JAI no 5 - CSBC 2009
Lendo um documento XML
Especificação XML -- na W3C --
Fornece todas as informações
O que deve ser tratado durante a leitura de um documento XML
Para ler um documento XML
Necessidade de um módulo de processamento "XML-sensitive"
Processador XML
Torna o documento XML acessível por uma aplicação
Detecta formatos que não podem ser processados
Entidades que não são recursos válidos
265
JAI no 5 - CSBC 2009
Processamento XML
<?xml version="1.0"><raiz>.....</raiz>
Ler
Escrever
AplicaçãoAcesso via API
Árvore DOM
Eventos SAX
266
JAI no 5 - CSBC 2009
Aplicação
Processador XML
Dados
Erros
Especificação da linguagem XML
Processador XML<xml...>..............................
-------
----- - ---- -
--- ---- --- --
--- --- ----- -
--- --- ----- --
--- --- - --- --
- ----- -- ----
Parser
267
JAI no 5 - CSBC 2009
Parser
O Parser é a parte do processador XML
responsável por verificar a integridade dos dados
XML
Um parsing pode ser executado de dois modos:
com ou sem validação
Parsing sem validação
verifica se o documento é bem formado
Parsing com validação
verifica se o documento é bem formado e válido
268
JAI no 5 - CSBC 2009
APIs e Processadores
APIs
DOM (http://www.w3schools.com/dom/default.asp)
SAX (http://www.saxproject.org/)
Processadores
JavaX
Xerces
Oracle XML Processor
Microsoft XML Processor
Outros...
269
JAI no 5 - CSBC 2009
SAX vs. DOM
<?xml version="1.0"?><pedido>
<cliente>Ana Maria</cliente><data>10/10/2000</data><compra>
<produto><nome>caneta</nome><qtd>2</qtd>
</produto></compra>
</pedido>
pedido
datacliente compra
produto
nome qtd
Ana Maria 10/10/2000
caneta 2
startDocument
startElement pedidostabrtElement clientecaracteres Ana MariaendElement clientestartElement datacaracteres 10/10/2000endElement datastartElement comprastartElement produtostartElement nomecaracteres canetaendElement nomestartElement qtdcaracteres 2endElement qtdendElement produtoendElement compraendElement pedidoendDocument
270
JAI no 5 - CSBC 2009
SAX vs. DOM: como escolher?
Tamanho do documento:
Grande: SAX
Pequeno: DOM (DOM exige que o documento caiba
em memória)
Disponibilidade: documento pode estar sendo
gerado sob demanda (stream)
Nesse caso, usar DOM não é uma alternativa
271
JAI no 5 - CSBC 2009
SAX vs. DOM: como escolher?
Desempenho: SAX!
Com DOM o processamento da aplicação só começa depois que todo o documento foi lido e colocado em memória
Facilidade: DOM!
Permite ir e voltar várias vezes ao mesmo ponto do documento
Estrutura em árvore intuitiva
Não é necessário guardar informações de contexto como em SAX
272
JAI no 5 - CSBC 2009
SAX vs. DOM: como escolher?
SAX é melhor quando:
Questões de memória e performance são críticas
Documento é muito grande para ficar em memória
A aplicação não precisa reconhecer a estrutura do
documento XML
SAX "varre" o documento XML uma única vez.
O status de "qual é o contexto no momento" precisa ser mantido
273
JAI no 5 - CSBC 2009