JAI no 5 - CSBC 2009
DESMISTIFICANDO XML: DA
PESQUISA À PRÁTICA
INDUSTRIAL
Mirella Moura Moro – UFMG
Vanessa Braganholo – UFRJ
Bento Gonçalves – RS – Brasil
1
Agenda
2





Introdução
Básico
Pesquisa
Indústria
Considerações Finais
Índice lá atrás
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
INTRODUÇÃO
3
Levante a mão se você…
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



JAI no 5 - CSBC 2009
XML
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
JAI no 5 - CSBC 2009
XML
6
A melhor linguagem para resolver
alguns problemas de
gerenciamento de dados

Sim… bem resolvido
JAI no 5 - CSBC 2009
XML
7

XML está por toda a parte
Web services (formato de feeds RSS)
Integração (e-commerce)
Padrões abertos para troca de arquivos

JAI no 5 - CSBC 2009
XML está por toda a parte…
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
…
JAI no 5 - CSBC 2009
Na Web
9

BD = tecnologia base
para qualquer
aplicação web
JAI no 5 - CSBC 2009
XML: o surgimento
10

HTML usa tags para formatação (italic)
Criar conjunto de tags para um domínio
(ex. genoma), e traduzir dados para
documentos apropriadamente marcados
(tags)


Linguagem usa tags para semântica
Aplicável para qualquer semântica
eXtensible Markup Language
JAI no 5 - CSBC 2009
O que XML?
11



É 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, …
JAI no 5 - CSBC 2009
O que XML?
12
Elemento
Tipo de elemento
<bibliografia>
Conteúdo
Elemento
<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>
JAI no 5 - CSBC 2009
Elemento
Vazio
Conteúdo,
caracteres
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>
JAI no 5 - CSBC 2009
HTML tags
apresentação,
estrutura genérica
XML tags
conteúdo, semântica,
(DTD-) específica
Neste JAI
14

BÁSICO
 XML
 Principais

linguagens relacionadas
PESQUISA
 Panorama
geral
 Problemas resolvidos e abertos

INDÚSTRIA
 XML
JAI no 5 - CSBC 2009
na prática
JAI no 5 - CSBC 2009
BÁSICO
Parte 1/3
15
Básico
16






W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
JAI no 5 - CSBC 2009
Básico
17






W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
JAI no 5 - CSBC 2009
W3C – www.w3.org
18

Ó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)
JAI no 5 - CSBC 2009
Básico
19






W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
JAI no 5 - CSBC 2009
XML (http://www.w3.org/TR/xml/)
20

Documento XML
 Sequência
de elementos que englobam texto ou outros
elementos
 Elementos podem conter atributos
JAI no 5 - CSBC 2009
XML
21

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>
JAI no 5 - CSBC 2009
Exemplo de Documento XML
22
<? 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>
JAI no 5 - CSBC 2009
Documentos XML como árvores
23
<? 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>
cod=“E01”

Elementos, atributos e texto → nodos

Relações pai/filho → arestas
empregados
empregado
dept=“D01”
cod=“E02”
empregado
dept=“D01”
nome
inicial-meio
sobrenome
João JAI no 5S.- CSBC 2009Santos
nome
sobrenome
Ana
Ferraz
Documentos XML Bem-Formados
24

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
JAI no 5 - CSBC 2009
não se repetem no mesmo elemento
Tipos de Elemento
25

Composta


Textual


Contém somente texto
Mista


Contém outros (sub)elementos
Contém texto e subelementos
Vazia

<empregado>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
<nome>Ana</nome>
<endereco> Rua das Flores, 75 <cidade>Rio
de Janeiro</cidade></endereco>
<engenheiro></engenheiro>
Elemento sem conteúdo
<engenheiro/>
JAI no 5 - CSBC 2009
Outras considerações importantes
26


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>
JAI no 5 - CSBC 2009
<? 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
Outras considerações importantes
27


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>
JAI no 5 - CSBC 2009
<? 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
Interoperabilidade
28

Chave do sucesso de XML:
 Usuários

podem definir suas próprias marcas
E a interoperabilidade, como fica?
 Vamos
JAI no 5 - CSBC 2009
considerar um exemplo prático
Exemplo prático: interoperabilidade
29
Fornecedor
XML
Cliente X
Aceita pedidos em XML
Pedidos são recebidos pelo servidor e
processados automaticamente
JAI no 5 - CSBC 2009
XML
Cliente Y
Exemplo prático: interoperabilidade
30
Fornecedor
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
Cliente X
Cliente Y
<prod>
<nome>caderno</nome>
<q>50</q>
</prod>
JAI no 5 - CSBC 2009
Exemplo prático: interoperabilidade
31
Fornecedor
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
Cliente X
Estrutura dos documentos são diferentes
Como o fornecedor pode saber processar
arquivos tão diversos?
<prod>
<nome>caderno</nome>
<q>50</q>
</prod>
JAI no 5 - CSBC 2009
Cliente Y
Solução
32

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
JAI no 5 - CSBC 2009
Interoperabilidade
33
Fornecedor
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
Cliente X
Clientes usando o mesmo vocabulário
para enviar os pedidos
Cliente Y
<produto>
<nome>caderno</nome>
<quant>50</quant>
</produto>
JAI no 5 - CSBC 2009
XML e Namespaces: Núcleo
34
Esquemas
(DTD, XML
Schema)
Consulta
(XPath,
XQuery)
XML +
Namespaces
Programação
(SAX, DOM)
JAI no 5 - CSBC 2009
Transformação
(XSLT)
Básico
35






W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
JAI no 5 - CSBC 2009
Esquema XML
36


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
JAI no 5 - CSBC 2009
Doc. XML Bem-formado x Válido
37


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
JAI no 5 - CSBC 2009
Como seria este esquema?
38

DTD - Document Type Definition
 Gramática

Regular
XML Schema
 Esquema
JAI no 5 - CSBC 2009
escrito em XML
Como seria este esquema?
39

DTD - Document Type Definition
 Gramática

Regular
XML Schema
 Esquema
JAI no 5 - CSBC 2009
escrito em XML
DTD (http://www.w3.org/TR/2008/REC-xml20081126/#dt-markupdecl)
40



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
JAI no 5 - CSBC 2009
Declaração de Elemento
41

<!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>
JAI no 5 - CSBC 2009
Cardinalidade
42

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
JAI no 5 - CSBC 2009
Exemplo
43

<!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>
JAI no 5 - CSBC 2009
Sequência e Escolha
44

<!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
JAI no 5 - CSBC 2009
Sequência e Escolha
45

<!ELEMENT empregado (nome, inicial-meio,
sobrenome)>
<empregado>
Doc. XML
O elemento
empregado é composto de 3 sub-elementos: nome, inicial-meio,
<nome>João</nome>
e sobrenome,
nessa ordem
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>

<!ELEMENT empregado (nome | inicial-meio |
sobrenome)>
Doc.
<empregado>
O elemento empregado é composto de 1 sub-elemento: ou nome
ouXML
<nome>João</nome>
inicial-meio
ou sobrenome
</empregado>
JAI no 5 - CSBC 2009
Elemento Textual
46

<!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>
JAI no 5 - CSBC 2009
Elemento Vazio
47

<!ELEMENT estudante EMPTY>
O elemento estudante não possui conteúdo

No documento XML:
<estudante/>
JAI no 5 - CSBC 2009
Elemento Misto
48

<!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>
JAI no 5 - CSBC 2009
Declaração de Atributos
49

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)
JAI no 5 - CSBC 2009
Exemplo
50

<!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)
JAI no 5 - CSBC 2009
Exemplo
51


<!ATTLIST empregado
cod CDATA #REQUIRED
dept CDATA #REQUIRED
>
No documento XML:
<empregado cod=“E01” dept=“D01”>...</empregado>
JAI no 5 - CSBC 2009
Exemplo completo
52
<!ELEMENT empregados (empregado+)>
<!ELEMENT empregado (nome, inicial-meio?, sobrenome)>
<!ATTLIST empregado
cod CDATA #REQUIRED
dept CDATA #REQUIRED
Arquivo emp.xml
>
<!ELEMENT nome (#PCDATA)>
<? xml version=“1.0” ?>
<!DOCTYPE empregados SYSTEM “emp.dtd”>
<!ELEMENT inicial-meio (#PCDATA)>
<empregados>
<!ELEMENT sobrenome (#PCDATA)>
Arquivo emp.dtd
JAI no 5 - CSBC 2009
<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>
Deficiências
53





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
JAI no 5 - CSBC 2009
Básico
54






W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
JAI no 5 - CSBC 2009
Linguagens de Consulta
55

XPath
 Baseada
em expressões de caminho
 Sub-conjunto da XQuery

XQuery
 Mais
JAI no 5 - CSBC 2009
complexa e poderosa
Linguagens de Consulta
56

XPath
 Baseada
em expressões de caminho
 Sub-conjunto da XQuery

XQuery
 Mais
JAI no 5 - CSBC 2009
complexa e poderosa
XPath
57



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)
JAI no 5 - CSBC 2009
Exemplo
58

/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>
JAI no 5 - CSBC 2009
Contexto
59

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>
JAI no 5 - CSBC 2009
Contexto
60

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>
JAI no 5 - CSBC 2009
É como uma árvore de diretórios...
61
C:\Arquivo>cd Artigos
C:\Arquivo\Artigos>cd aceitos
C:\Arquivo\Artigos\aceitos>cd ..
C:\Arquivo\Artigos>cd \
C:\>
Retorno da Expressão
62

Conjunto de nodos retornados é sempre o
especificado pelo último passo do caminho
/empregados/empregado/nome
JAI no 5 - CSBC 2009
<? 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>
Operador //
63

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>
JAI no 5 - CSBC 2009
<? 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>
Atributos
64

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>
JAI no 5 - CSBC 2009
Operador .
65

Seleciona o elemento corrente
/empregados/.
/empregados
 Útil
para uso dentro
de funções
JAI no 5 - CSBC 2009
<? 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>
Operador ..
66

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>
JAI no 5 - CSBC 2009
Operador *
67
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>
JAI no 5 - CSBC 2009
Filtros
68


Restringem o conjunto de nodos selecionados
Podem ser colocados em qualquer passo do
caminho
JAI no 5 - CSBC 2009
Filtros
69

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>
JAI no 5 - CSBC 2009
Contexto do Filtro
70


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”]
JAI no 5 - CSBC 2009
<? 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>
Filtro de Posição
71
//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>
JAI no 5 - CSBC 2009
AND, OR e NOT são aceitos
72
//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>
JAI no 5 - CSBC 2009
Funções
73


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
JAI no 5 - CSBC 2009
Exemplo: Função starts-with
74

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>
JAI no 5 - CSBC 2009
Em resumo
75




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)
JAI no 5 - CSBC 2009
Linguagens de Consulta
76

XPath
 Baseada
em expressões de caminho
 Sub-conjunto da XQuery

XQuery
 Mais
JAI no 5 - CSBC 2009
complexa e poderosa
XQuery
77



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
JAI no 5 - CSBC 2009
XQuery é capaz de
78



Gerar respostas com estrutura diferente do
documento consultado
Consultar vários documentos
Gerar texto puro ou fragmentos de documentos
XML
JAI no 5 - CSBC 2009
Estrutura da Linguagem
79






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
JAI no 5 - CSBC 2009
Exemplos
80


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>
JAI no 5 - CSBC 2009
Construtor de Elemento
81
<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
JAI no 5 - CSBC 2009
Construtor de Elemento
82
<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.
JAI no 5 - CSBC 2009
Exemplo de funcionamento
83
<emp-dept>
{for $e in doc(’emps.xml’)//empregado
return $e/nome
}
</emp-dept>
1. Elemento é construído na saída
<emp-dept>
JAI no 5 - CSBC 2009
Exemplo de funcionamento
84
<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>
JAI no 5 - CSBC 2009
Exemplo de funcionamento
85
<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
JAI no 5 - CSBC 2009
Exemplo de funcionamento
86
<emp-dept>
{for $e in doc(‟emps.xml‟)//empregado
return $e/nome
<? xml version=“1.0” ?>
}
<empregados>
</emp-dept>
<empregado cod=“E01” dept=“D01”>
4. $e é ligada ao
primeiro empregado
JAI no 5 - CSBC 2009
$e
<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>
Exemplo de funcionamento
87
<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>
JAI no 5 - CSBC 2009
Exemplo de funcionamento
88
<emp-dept>
{for $e in doc(‟emps.xml‟)//empregado
return $e/nome
<? xml version=“1.0” ?>
}
<empregados>
</emp-dept>
<empregado cod=“E01” dept=“D01”>
6. $e é ligada ao
segundo empregado
$e
JAI no 5 - CSBC 2009
<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>
Exemplo de funcionamento
89
<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>
JAI no 5 - CSBC 2009
Exemplo de funcionamento
90
<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>
JAI no 5 - CSBC 2009
Cláusula FOR
91

Faz parte de uma cláusula mais complexa FLWOR
 FOR
 LET
 WHERE
 ORDER
BY
 RETURN
JAI no 5 - CSBC 2009
Analogia com SQL
92
for
 SQL from
where  SQL where
return  SQL select
let (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
JAI no 5 - CSBC 2009
Exemplo WHERE/ORDER BY
93
<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”
JAI no 5 - CSBC 2009
Exemplo WHERE/ORDER BY
94
<emp-dept>
{
for $e in doc(’emps.xml’)//empregado
where $e/@dept=’D01’
order by $e/nome
return $e/nome
Além disso, os resultados
}
são ordenados por
</emp-dept>
$e/nome
JAI no 5 - CSBC 2009
Exemplo WHERE/ORDER BY
95
Resultado
<emp-dept>
<nome>Ana</nome>
<nome>João</nome>
</emp-dept>
<emp-dept>
{
for $e in doc(’emps.xml’)//empregado
where $e/@dept=’D01’
<? xml version=“1.0” ?>
order by $e/nome
<empregados>
<empregado cod=“E01” dept=“D01”>
return $e/nome
<nome>João</nome>
<inicial-meio>S.</inicial-meio>
}
<sobrenome>Santos</sobrenome>
</empregado>
</emp-dept>
JAI no 5 - CSBC 2009
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
Exemplo CONSULTA ANINHADA
96
<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}
distinct-values seleciona apenas
{$e/sobrenome}
</empregado>
os departamentos distintos
}
</empregados>
</departamento>
}
</departamentos>
JAI no 5 - CSBC 2009
Exemplo CONSULTA ANINHADA
97
<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
O for $e será executado uma
return
<empregado>
vez para cada valor em $d
{$e/nome}
(como um for aninhado em
{$e/sobrenome}
</empregado>
linguagem de programação)
}
</empregados>
</departamento>
}
</departamentos>
JAI no 5 - CSBC 2009
Resultado Exemplo
98
<? 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>
{for $d in distinct-values(doc(’emps.xml’)//empregado/@dept)
return
<departamento>
<codigo>{$d}</codigo>
<empregados>
Resultado
<departamentos>
{for $e in doc(’emps.xml’)//empregado
<departamento>
where $e/@dept=$d
<codigo>D01</codigo>
return
<empregados>
<empregado>
<empregado>
{$e/nome}
<nome>João</nome>
{$e/sobrenome}
<sobrenome>Santos</sobrenome>
</empregado>
</empregado>
}
<empregado>
</empregados>
<nome>Ana</nome>
</departamento>
<sobrenome>Ferraz</sobrenome>
}
</empregado>
</departamentos>
</empregados>
</departamento>
</departamentos>
JAI no 5 - CSBC 2009
Produto cartesiano
99


Operadores for na mesma cláusula FLWOR
funcionam como um produto cartesiano
Exemplos usando dois documentos: emps.xml e
dept.xml
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>
dept.xml
<? 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>
<resultado>
<dep-emp>
<departamento>Vendas</departamento>
<empregado>João</empregado>
</dep-emp>
100
<dep-emp>
<resultado>
<departamento>Vendas</departamento>
{for $d in doc(’dept.xml’)//departamento),
<empregado>Ana</empregado>
$e in doc(’emps.xml’)//empregado
</dep-emp>
return
<dep-emp>
<dep-emp>
<departamento>Financeiro</departamento>
<departamento>{$d/nome/text()}</departamento>
<empregado>João</empregado>
<empregado>{$e/nome/text()}</empregado>
</dep-emp>
</dep-emp>
<dep-emp>
}
<departamento>Financeiro</departamento>
</resultado>
<empregado>Ana</empregado>
</dep-emp>
</resultado>
emps.xml
<empregados>
Resultado
<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> dept.xml
Junção
101

Um produto cartesiano se transforma em junção se
adicionarmos uma cláusula WHERE à consulta
JAI no 5 - CSBC 2009
Exemplo JUNÇÃO
102
<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>
JAI no 5 - CSBC 2009
Resultado
103
<resultado>
<resultado>
<dep-emp>
{for $d in doc(’dept.xml’)//departamento,
<departamento>Vendas</departamento>
$e in doc(’emps.xml’)//empregado
<empregado>João</empregado>
where $d/@cod=$e/@dept
</dep-emp>
return
<dep-emp>
<dep-emp>
<departamento>Vendas</departamento>
<empregado>Ana</empregado>
<departamento>{$d/nome/text()}</departamento>
</dep-emp>
<empregado>{$e/nome/text()}</empregado>
</resultado>
</dep-emp>
emps.xml
}
<empregados>
<departamentos>
<empregado cod=“E01” dept=“D01”>
</resultado>
JAI no 5 - CSBC 2009
<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>
<departamento cod=“D01”>
<nome>Vendas</nome>
<local>3º. andar</local>
</departamento>
<departamento cod=“D02”>
<nome>Financeiro</nome>
<local>4º. andar</local>
</departamento>
</departamentos> dept.xml
doc e collection
104


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
JAI no 5 - CSBC 2009
Exemplo
105

Assumindo que existe uma coleção chamada
empregados
<emp-dept>
{for $e in collection(’empregados’)//empregado
return
$e/nome
}
</emp-dept>
JAI no 5 - CSBC 2009
Operações de Agregação
106

Existem 5 funções de agregação em Xquery
 SUM
 COUNT
 AVG
 MAX
 MIN

Devem ser usadas com o operador LET
JAI no 5 - CSBC 2009
Exemplo
107
<num-emp>
{let $e := doc(’emps.xml’)//empregado
return
count($e)
Ao contrário do for, o let se liga
}
a todos os elementos de uma só
vez
</num-emp>
JAI no 5 - CSBC 2009
Exemplo
108
<num-emp>
{let $e := doc(’emps.xml’)//empregado
return
<? xml version=“1.0” ?>
count($e)
<empregados>
}
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
</num-emp>
$e
JAI no 5 - CSBC 2009
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
Exemplo
<num-emp>2</num-emp>
109
<num-emp>
{let $e := doc(’emps.xml’)//empregado
return
<? xml version=“1.0” ?>
count($e)
<empregados>
}
<empregado cod=“E01” dept=“D01”>
<nome>João</nome>
</num-emp>
$e
JAI no 5 - CSBC 2009
<inicial-meio>S.</inicial-meio>
<sobrenome>Santos</sobrenome>
</empregado>
<empregado cod=“E02” dept=“D01”>
<nome>Ana</nome>
<sobrenome>Ferraz</sobrenome>
</empregado>
</empregados>
Atualizações
110


XQuery não permite atualizar os documentos
Existe uma iniciativa de uma extensão da XQuery
para adicionar cláusulas de atualização
 Ainda
JAI no 5 - CSBC 2009
não é recomendação da W3C
Básico
111








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
JAI no 5 - CSBC 2009
Transformações
112


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
JAI no 5 - CSBC 2009
XSLT
113


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
JAI no 5 - CSBC 2009
Básico
114






W3C
XML
Esquemas para XML
Linguagens de Consulta para XML
Transformação de Documentos XML
Cenário de Uso
JAI no 5 - CSBC 2009
Cenário de Uso
115
Fornecedor
<produto>
<nome>caneta</nome>
<quant>100</quant>
</produto>
Cliente X
Clientes usando o mesmo vocabulário
para enviar os pedidos
Cliente Y
<produto>
<nome>caderno</nome>
<quant>50</quant>
</produto>
JAI no 5 - CSBC 2009
Cenário de Uso
116


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
JAI no 5 - CSBC 2009
Cenário de Uso
117

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
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
PESQUISA
Parte 2/3
118
Pesquisa
119

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
JAI no 5 - CSBC 2009
XML
Como
Solução
de
Pesquisa
5.3.1
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.
JAI no 5 - CSBC 2009
Solução ou Problema?
121
WILDE, GLUSHKO.
XML Fever.
CACM July 2008.
JAI no 5 - CSBC 2009
Solução ou Problema?
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/
JAI no 5 - CSBC 2009
Pesquisa
123

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
JAI no 5 - CSBC 2009
Integração
de
Dados
5.3.1.1
124
JAI no 5 - CSBC 2009
Integração de Dados
125

Processamento distribuído
Troca de informações
Compartilhamento de dados

Wrappers


 XML  Dados
 E vice-versa
 Dados
JAI no 5 - CSBC 2009
Integração de Dados
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)
JAI no 5 - CSBC 2009
Pesquisa
127

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
JAI no 5 - CSBC 2009
Evolução
de
Esquemas
5.3.1.2
128

Projeto de BD = Projeto de ES, tipo assim:
JAI no 5 - CSBC 2009
129

OU A FAMOSA HISTORINHA
JAI no 5 - CSBC 2009
Evolução de Esquemas
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
JAI no 5 - CSBC 2009
Evolução de Esquemas
131

Questões
esquema  adaptação dados, visões,
aplicações
 Alteração
 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
 XML
JAI no 5 - CSBC 2009
de dados
Evolução de Esquemas
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)
JAI no 5 - CSBC 2009
Evolução de Esquemas
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>
JAI no 5 - CSBC 2009
Evolução de Esquemas
134
2. Evolução de Dados XML
 Documentos válidos para os vários esquemas
Esquemas  1 Documento
 (Wang, Zaniolo 2003)
 Outras soluções
N
 (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.
JAI no 5 - CSBC 2009
Pesquisa
135

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
JAI no 5 - CSBC 2009
XML é estático
136



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
JAI no 5 - CSBC 2009
Exemplo
137


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
JAI no 5 - CSBC 2009
<cidades>
<cidade>
<nome>Rio de Janeiro</nome>
<estado>RJ</estado>
<sc service="[email protected]"/>
</cidade>
<cidade>
<nome>Porto Alegre</nome>
<estado>RS</estado>
<sc service="[email protected]"/>
</cidades>
Exemplo
138


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>
JAI no 5 - CSBC 2009
Exemplo
139

A subárvore é adicionada ao documento XML, num
processo chamado materialização
<cidades>
<cidade>
<nome>Rio de Janeiro</nome>
<estado>RJ</estado>
<sc service="[email protected]"/>
<previsao>
<temperatura min="25" max="32"/>
<condicao>nublado</condicao>
</previsao>
</cidade>
...
</cidades>
JAI no 5 - CSBC 2009
Ativação dos Serviços
140

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
JAI no 5 - CSBC 2009
Otimização possível
141

Chame um serviço somente se a sub-árvore que o
contém fizer parte do resultado da consulta
JAI no 5 - CSBC 2009
Exemplo
142
/catalogo/livros/livro[titulo=“Java, como programar“]/preco
catalogo
livro
livro
preco
sc
nome
revista
livro
titulo
preco
preco
“Java, como
programar”
autor
avaliacao
sc
JAI no 5 - CSBC 2009
revistas
sc
rank
sc
preco
sc
Não funciona em todos os casos...
143

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
JAI no 5 - CSBC 2009
Alternativa
144

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
JAI no 5 - CSBC 2009
Ordem das chamadas?
145

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
JAI no 5 - CSBC 2009
Ordem das chamadas?
146



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
sc3
JAI no 5 - CSBC 2009
sc5
sc4
sc6
sc7
Além disso...
147


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
JAI no 5 - CSBC 2009
Projeto AXML
148


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
JAI no 5 - CSBC 2009
Pesquisa
149

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
JAI no 5 - CSBC 2009
Pesquisa
150

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
JAI no 5 - CSBC 2009
Processamento
de
Consultas
XML
5.3.2.1
151
Por que precisa novos algoritmos?!
RELACIONAL
XML
Estrutura tabular
Estrutura de árvore
Esquema rígido
Esquema não estruturado,
inexistente (autor, autor=
nome + sobrenome)
Elementos repetitivos
Nomes únicos
Consultas seguem o Consultas de formato livre
esquema pré-definido
JAI no 5 - CSBC 2009
Algumas Pesquisas Recentes
152

Par


Caminhos





Documentos em formato de grafos [WebDB 2004]
Documentos em formato de árvore, mas SEM compilador para escolher
melhor algoritmo [VLDB 2005]
Busca textual (information retrieval)


Versões de documentos [RIDE 2004]
Utilizando resumos estruturais [WWW 2006]
Novos contextos para resumos estruturais [SBBD 2007]
Sub-árvores (twigs)


Sem índice, sem clustering [IDEAS 2004]
Estudo inicial de algoritmos [DATAX 2008]
Outros contextos (streams)

Publish/subscribe [ICDE 2007, VLDB 2007]
JAI no 5 - CSBC 2009
Categorias
153
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
1
2
3
4
Access Pattern
sorted / indexed
sequential
indexed / random
indexed / random
[MORO et al VLDB 2005]
JAI no 5 - CSBC 2009
Input Handling
Output Handling
join sets
input drives computation
probe for matches
input drives computation
merge paths, sorted output
merge paths
incrementally build results
structural constraints on
data summary
O estado-da-arte
154
a1 b1 c1
a1
b1
a2
a
b2 c 2
b
c1
c
doc
query
TwigStack
JAI no 5 - CSBC 2009
a1 b1 c2
a2
b2
a1
b1
c12
a1 b2 c1
Sa
Sb
Sc
a2 b2 c1
results
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
Pesquisa
155

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
JAI no 5 - CSBC 2009
Sistemas de Disseminação de
5.3.2.2Conteúdo XML
156


Disseminação? Hein??
Serviços de pesquisa
especializados




Últimas notícias
Próximos eventos
Diferentes fontes
Atualizações freqüentes
Vigilante
JAI no 5 - CSBC 2009
End-to-End
Containment of
Internet Worms
Por Exemplo…
157
JAI no 5 - CSBC 2009
REGISTRE-SE RECEBA INFO
ANTES da VENDA dos INGRESSOS
158
JAI no 5 - CSBC 2009
159
JAI no 5 - CSBC 2009
O que?
Quem?
Onde?
Content-based
Dissemination Services
160
Producer
System / Service
INPUT
Message
Filtering
Consumer
query
query
query
JAI no 5 - CSBC 2009
Routing
Table
Content 
XML = standard for information exchange
the Web
over
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
OUR APPROACH
CURRENT

XML content-based routing : profile matching on messages
Profile
Matching
Input Messages
XML3
XML2
XML1
Profile
Matching
Input Messages
XML3
JAI no 5 - CSBC 2009
XML2
XML0
XML1
Result Messages
XML3
XML1
Result Messages
RoXSum
RoXSum
0123
13
Pesquisa
163

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
JAI no 5 - CSBC 2009
Exemplo: Livrarias online
164
JAI no 5 - CSBC 2009
165
<?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>Joe Fawcett </author>
<author>Danny Ayers </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>
JAI no 5 - CSBC 2009
<author>Jeff Rafter </author>
<author>Eric van der Vlist </author>
<author>Jon Duckett </author>
166
JAI no 5 - CSBC 2009
167
<!-- 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>
JAI no 5 - CSBC 2009
168
JAI no 5 - CSBC 2009
169
<!– 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>
JAI no 5 - CSBC 2009
<!-- Amazon -->
book FreeSuperSaving SurpriseMe
<!– Barnes & Nobel-->
title
book fig
author*
170
title
type
author*
<!– BookPool -->
list_price
book fig
type
our_price
title
date_published
you_save
author*
usually_ships_in instock
perc
type
isbn type
publisher
buy_used
sales_rank
date_published
month
our_price
year
you_save
id
 Mesma info
usually_ships_in instock
Vocabulário?
list_price
Elementos?
our_used
Atributos?
you_save
JAI no 5 - CSBC 2009
Uma Metodologia p/ Modelagem
171
Fase
Modelo Relacional
Modelo XML
Conceitual: Entidades, atributos, tipo,
Nomes (taxonomia,
semântica relacionamentos, restrições. vocabulário), relacionamentos.
Diagrama ER.
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.
[MORO, LIM, CHANG @ SIGMOD 2007]
JAI no 5 - CSBC 2009
Estudo de Caso
172
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 ????????????????
JAI no 5 - CSBC 2009
Estudo: Modelagem Relacional
173

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)
required
JAI no 5 - CSBC 2009
sparse, optional
XML
Simples, flexivel,
sem null e junções
Modelagem
174




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
JAI no 5 - CSBC 2009
todos os atributos globais?!
Padrões de Modelagem
175


E-Catalog
Endereço
 Endereço
permanente
 Endereço de cobrança
 Endereço de envio
JAI no 5 - CSBC 2009
Russian Dolls
<element name="purchaseOrder">
<complexType>
<sequence>
<element name="address" minOccurs="1" maxOccurs="1">
<complexType>
<sequence>
<element name="permAddress" type="string" minOccurs="1"/>
Aninhado
<element name="billToAddress" type="string" minOccurs="1"/>
<element name="sendToAddress" type="string" minOccurs="1"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
Bonecas Russas
Um elemento global
Todos os outros elementos aninhados
Fácil de usar
Sem reusabilidade
Mudanças dentro do escopo
176
JAI no 5 - CSBC 2009
Salami Slices
<element name="permAddress" type="string"/>
<element name="billToAddress" type="string"/>
Apenas elementos
<element name="sendToAddress" type="string"/>
superior
<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>
Fatias de Salame
Todos os elementos são globais
Reusabilidade
Mudanças globais
Complexidade
177
JAI no 5 - CSBC 2009
no nível
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"/>
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
Maioria dos tipos no
nível superior
Garden of Eden
<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
Tudo no nível
superior
RUSSIAN DOLLS
Sem reusabilidade
Mudanças locais
VENETIAN BLINDS
SALAMI SLICES
Reusabilidade
Mudanças globais
GARDEN OF EDEN
180
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>
...
JAI no 5 - CSBC 2009
</purchaseOrder>
Critérios para escolher
181

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?

JAI no 5 - CSBC 2009
Pesquisa
182

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
JAI no 5 - CSBC 2009
Cenário
183

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
JAI no 5 - CSBC 2009
Em Banco de Dados
184

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)
JAI no 5 - CSBC 2009
Em XML
185

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 consultado

JAI no 5 - CSBC 2009
XQuery
XQuery
Base original
Base fragmentada
?
Desafio
186

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)
JAI no 5 - CSBC 2009
Proposta de Andrade
187

Segue a linha do que é utilizado em BDs relacionais
 Fragmentos
horizontais, verticais e híbridos
 Trabalha com bases de Documento Único ou MultiDocumentos
JAI no 5 - CSBC 2009
Fragmentação Horizontal
188
COrders_c2_fh1
COrders
COrders_c2_fh2
Seleção ()
JAI no 5 - CSBC 2009
COrders_c2_fh1 :=
Corders,  / order/ total 4000
COrders_c2_fh2 :=
Corders,  / order/ total  4000
Fragmentação Vertical
189
CLoja_c2_fv1
CLoja
CLoja_c2_fv2
Projeção ()
JAI no 5 - CSBC 2009
CLoja_c2_fv1 :=
Cloja , / Loja,/ Loja / Itens
CLoja_c2_fv2 :=
Cloja ,  / Loja / Itens, 
Fragmentação Híbrida
190


Horizontal seguida de Vertical
Vertical seguida de Horizontal
JAI no 5 - CSBC 2009
Regras de Correção
191

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
JAI no 5 - CSBC 2009
Regras de Correção
192

Considere que a coleção C foi decomposta em um
conjunto de fragmentos {F1, … Fn}
Fragmentação
F1
…
C
F2
JAI no 5 - CSBC 2009
Fn
Completude
193

Cada item de dados de uma coleção C deve estar
em pelo menos um fragmento Fi
Fragmentação
F1
…
C
F2
JAI no 5 - CSBC 2009
Fn
Disjunção
194

O mesmo item de dado não pode estar em mais de
um fragmento
Fragmentação
F1
…
C
F2
JAI no 5 - CSBC 2009
Fn
Processamento de Consultas
195

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
JAI no 5 - CSBC 2009
Pesquisa
196

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
JAI no 5 - CSBC 2009
Integração
197


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
JAI no 5 - CSBC 2009
Exemplo
198
<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>
JAI no 5 - CSBC 2009
?
199


Como identificar esses casos?
Solução: uso de funções de similaridade
 Levam
em consideração o esquema e conteúdo dos
elementos
JAI no 5 - CSBC 2009
No entanto...
200



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...
JAI no 5 - CSBC 2009
Pesquisa
201

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
JAI no 5 - CSBC 2009
Novos Cenários
202



N cenários de aplicações dados estruturados, semi e nãoestruturados
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.
JAI no 5 - CSBC 2009
Novos Desafios
203



 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ãoestruturados
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.
JAI no 5 - CSBC 2009
Novos Desafios
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
JAI no 5 - CSBC 2009
Novos Desafios
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);
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
INDÚSTRIA
Parte 3/3
206
Indústria
207


Padrões em XML
Armazenamento
 Bancos
de Dados Híbridos
 Bancos de Dados Nativos

Ferramentas
JAI no 5 - CSBC 2009
Indústria
208


Padrões em XML
Armazenamento
 Bancos
de Dados Híbridos
 Bancos de Dados Nativos

Ferramentas
JAI no 5 - CSBC 2009
Milhares de padrões
209


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
JAI no 5 - CSBC 2009
Como os padrões são definidos?
210

O órgão padronizador define um XML Schema ou
DTD e o disponibiliza para quem quiser utilizar
JAI no 5 - CSBC 2009
Indústria
211


Padrões em XML
Armazenamento
 Bancos
de Dados Nativos
 Bancos de Dados Híbridos

Ferramentas
JAI no 5 - CSBC 2009
Como XML?
CLOB/BLOB
 Armazenar XML como documento texto
 PROBLEMAS?
Difícil de consultar e
atualizar
 Não fornece
integridade aos dados

Uma coluna texto
em uma tabela
JAI no 5 - CSBC 2009
Como XML?
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
JAI no 5 - CSBC 2009
XML NATIVO

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 sem
esquema
– Consulta usando linguagem XML (XQuery,
XPath)
– Utiliza índices XML apropriados
JAI no 5 - CSBC 2009
XML Nativo
Documento
elemento
<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>
atributo
valor
Representação Árvore
Library
book
DVD
units
units
title
year
author
otherInfo
rated
last
year
studio
title
director actors
first
isbn
publisher
collection
last
first
book
units
isbn
title
author
year
publisher
DCC889 2009/1
actor
actor
XML Nativo, e não SQL
216
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
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
XML Nativo, e não SQL
Consulta 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 SQL
Consulta 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
219

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

JAI no 5 - CSBC 2009
XML Nativo  SGBD Híbrido
220
JAI no 5 - CSBC 2009
SGBDs Comerciais
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;
JAI no 5 - CSBC 2009
Indústria
222


Padrões em XML
Armazenamento
 Bancos
de Dados Híbridos
 Bancos de Dados Nativos

Ferramentas
JAI no 5 - CSBC 2009
Milhares de Ferramentas
223


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
JAI no 5 - CSBC 2009
Editor (Comercial)
224

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
JAI no 5 - CSBC 2009
225
JAI no 5 - CSBC 2009
Editores (Livres)
226

Exchanger XML Lite
(http://www.freexmleditor.com/)
 Validação
contra DTD e XML Schema, consultas Xpath
e XQuery, transformações XSLT
 Plataformas: todas (baseado em Java)

XML Copy Editor (http://xml-copyeditor.sourceforge.net/)
 Validação
contra DTD e XML Schema, consultas XPath,
transformações XSLT
 Plataformas: Windows e Linux
JAI no 5 - CSBC 2009
Transformação
227



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
JAI no 5 - CSBC 2009
XML e Orientação a Objetos
228

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
JAI no 5 - CSBC 2009
XML e Orientação a Objetos
229

Exemplos de frameworks
 Castor
(http://www.castor.org/xml-framework.html)
 XML Beans (http://xmlbeans.apache.org/)
JAI no 5 - CSBC 2009
Uso de XML por ferramentas
230





Microsoft Office
Open Office
Argo UML
Adobe Acrobat Reader (exporta para XML)
...
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
CONSIDERAÇÕES FINAIS
231
Revisão
232



O que é XML
Quais são as linguagens e padrões
Pesquisa
 Problemas
resolvidos
 Problemas em aberto


Indústria
Ferramentas
JAI no 5 - CSBC 2009
Agradecimentos
233
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.
UFRJ
JAI no 5 - CSBC 2009
JAI no 5 - CSBC 2009
DESMISTIFICANDO XML: DA
PESQUISA À PRÁTICA
INDUSTRIAL
Mirella Moura Moro – UFMG – [email protected]
Vanessa Braganholo – UFRJ – [email protected]
Bento Gonçalves – RS – Brasil
234
Índice
235



Namespaces
XML Schema
SAX e DOM
JAI no 5 - CSBC 2009
236
Namespaces
JAI no 5 - CSBC 2009
Namespaces (http://www.w3.org/TR/xml-names)
237



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?
JAI no 5 - CSBC 2009
Exemplo
238

Vocabulário da matemática:
 Marcas:

Vocabulário da química:
 Marcas:

conjunto, elemento, ...
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
JAI no 5 - CSBC 2009
Problema
239



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
JAI no 5 - CSBC 2009
Exemplo
240

Namespace da matemática: http://matematica.com
Namespace da química: http://quimica.com

URIs são usadas por serem identificadores únicos

 Não
JAI no 5 - CSBC 2009
é necessário que o endereço exista na Web
Exemplo
241


Ao referenciar um elemento, usa-se o namespace
para fazer a desambiguação
Para encurtar, usa-se um prefixo para referenciar o
namespace
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
242
<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>
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
243
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
Declaração dos namespaces
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
244
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
Prefixos dos namespaces
<m:conjunto>
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
245
<ensino xmlns:m="http://www.matematica.com"
xmlns:q="http://www.quimica.com">
<m:conjunto>
Elementos da matemática
<m:elemento>1</m:elemento>
<m:elemento>3</m:elemento>
</m:conjunto>
<q:elemento>Ca</q:elemento>
</ensino>
JAI no 5 - CSBC 2009
Exemplo – documento de ensino
246
<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>
Elemento da química
<q:elemento>Ca</q:elemento>
</ensino>
JAI no 5 - CSBC 2009
247
XML Schema
JAI no 5 - CSBC 2009
Um XML Schema é um Documento XML!
248

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)
JAI no 5 - CSBC 2009
Elementos Simples (simpleType)
249

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
JAI no 5 - CSBC 2009
Elementos Complexos (complexType)
250

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>
JAI no 5 - CSBC 2009
complexType
251

Dentro do complexType, podem ser definidas
restrições aos sub-elementos
 Cardinalidade
(Máxima, Mínima)
 Delimitadores de Grupo (Sequência, Escolha, Todos)
JAI no 5 - CSBC 2009
Cardinalidade
252

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
JAI no 5 - CSBC 2009
Exemplo
253
<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>
JAI no 5 - CSBC 2009
Delimitadores de grupo
254
<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
JAI no 5 - CSBC 2009
Sequence - exemplo
255
<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>
JAI no 5 - CSBC 2009
Doc. XML
Sequence – comparando com DTD
256
<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)
JAI no 5 - CSBC 2009
DTD
Atributos
257

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>
JAI no 5 - CSBC 2009
schema
258

Todas as declarações de elementos e tipos são
colocadas dentro de uma raiz schema
JAI no 5 - CSBC 2009
Exemplo Completo
259
<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>
JAI no 5 - CSBC 2009
</xs:schema>
Exemplo Completo
260
<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"/>
<? xml version=“1.0”
?>
</xs:sequence>
<empregados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="empregados.xsd“>
</xs:complexType>
<empregados>
<xs:complexType name="tEmpregado">
<empregado cod=“E01” dept=“D01”>
<xs:sequence>
<nome>João</nome>
<xs:element name="nome"
type="xs:string"/>
<inicial-meio>S.</inicial-meio>
<xs:element name="inicial-meio"
type="xs:string“ minOccurs="0"/>
<sobrenome>Santos</sobrenome>
</empregado>
<xs:element name="sobrenome"
type="xs:string"/>
<empregado cod=“E02” dept=“D01”>
</xs:sequence>
<nome>Ana</nome>
<xs:attribute name="cod" type="xs:string"/>
<sobrenome>Ferraz</sobrenome>
<xs:attribute name="dept"
type="xs:string" />
</empregado>
</xs:complexType>
</empregados>
JAI no 5 - CSBC 2009
</xs:schema>
XML Schema é capaz de muito mais!
261




Unicidade
Chaves
Derivações de tipos por restrição ou extensão
...
JAI no 5 - CSBC 2009
262
SAX e DOM
JAI no 5 - CSBC 2009
Escrevendo um documento XML
263

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\);
JAI no 5 - CSBC 2009
Lendo um documento XML
264


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
JAI no 5 - CSBC 2009
Lendo um documento XML
265

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
JAI no 5 - CSBC 2009
Processamento XML
266
Árvore DOM
Ler
<?xml version="1.0">
<raiz>
.....
</raiz>
Acesso via API
Escrever
Eventos SAX
JAI no 5 - CSBC 2009
Aplicação
Processador XML
267
Aplicação
<xml...>
.......
......
......
...........
Processador XML
Erros
Parser
----------- - ---- --- ---- --- ---- --- ----- --- --- ----- ---- --- - --- -- ----- -- ----
JAI no 5 - CSBC 2009
Dados
Especificação da
linguagem XML
Parser
268



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
JAI no 5 - CSBC 2009
se o documento é bem formado e válido
APIs e Processadores
269

APIs
DOM (http://www.w3schools.com/dom/default.asp)
 SAX (http://www.saxproject.org/)


Processadores
JavaX
 Xerces
 Oracle XML Processor
 Microsoft XML Processor
 Outros...

JAI no 5 - CSBC 2009
SAX vs. DOM
270
<?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
cliente
data compra
Ana Maria 10/10/2000
produto
nome
qtd
caneta
2
JAI no 5 - CSBC 2009
startDocument
startElement pedido
stabrtElement cliente
caracteres Ana Maria
endElement cliente
startElement data
caracteres 10/10/2000
endElement data
startElement compra
startElement produto
startElement nome
caracteres caneta
endElement nome
startElement qtd
caracteres 2
endElement qtd
endElement produto
endElement compra
endElement pedido
endDocument
SAX vs. DOM: como escolher?
271

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
JAI no 5 - CSBC 2009
caso, usar DOM não é uma alternativa
SAX vs. DOM: como escolher?
272

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
JAI no 5 - CSBC 2009
SAX vs. DOM: como escolher?
273

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

JAI no 5 - CSBC 2009
"varre" o documento XML uma única vez.
O status de "qual é o contexto no momento" precisa ser mantido
Baixar

Desmistificando XML: da Pesquisa à Prática Industrial