desmistificando xml: da pesquisa à prática industrial · xml está por toda a parte… jai no 5 -...

273
DESMISTIFICANDO XML: DA PESQUISA À PRÁTICA INDUSTRIAL Bento Gonçalves RS Brasil Mirella Moura Moro UFMG Vanessa Braganholo UFRJ 1 JAI no 5 - CSBC 2009

Upload: dangcong

Post on 09-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

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

INTRODUÇÃO

3JAI no 5 - CSBC 2009

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

Na Web9

BD = tecnologia base

para qualquer

aplicação web

JAI no 5 - CSBC 2009

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

Parte 1/3

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

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

Parte 2/3

118JAI 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

121

WILDE, GLUSHKO.

XML Fever.

CACM July 2008.

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

124

5.3.1.1

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

Projeto de BD = Projeto de ES, tipo assim:

128

JAI no 5 - CSBC 2009

5.3.1.2

JAI no 5 - CSBC 2009

129

OU A FAMOSA HISTORINHA

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="[email protected]"/>

</cidade>

<cidade>

<nome>Porto Alegre</nome>

<estado>RS</estado>

<sc service="[email protected]"/>

</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="[email protected]"/>

<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

Por Exemplo…

157

JAI no 5 - CSBC 2009

REGISTRE-SE RECEBA INFO

ANTES da VENDA dos INGRESSOS158

JAI no 5 - CSBC 2009

O que?

Quem?

Onde?159

JAI no 5 - CSBC 2009

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

Exemplo: Livrarias online

164

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

166

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

JAI no 5 - CSBC 2009168

<!– 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

Parte 3/3

206JAI no 5 - CSBC 2009

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

XML Nativo SGBD Híbrido

JAI no 5 - CSBC 2009

220

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

225

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

CONSIDERAÇÕES FINAIS

231JAI 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 – [email protected]

Vanessa Braganholo – UFRJ – [email protected]

234JAI no 5 - CSBC 2009

Índice

Namespaces

XML Schema

SAX e DOM

235

JAI no 5 - CSBC 2009

Namespaces236

JAI 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

XML Schema247

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

SAX e DOM262

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