256
InfoView2002 1 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD [email protected] http://www.lsi.dsc.ufcg.edu.br

InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD [email protected]

Embed Size (px)

Citation preview

Page 1: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 1

XML – eXtensible Markup Language

Prof. Dr. Cláudio BaptistaUFCG/DSC/SINBAD

[email protected]://www.lsi.dsc.ufcg.edu.br

Page 2: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 2

Roteiro

Introdução a XML XMLSchema DOM e SAX XSL XQuery

Page 3: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 3

Dados semi-estruturados ? Dados semi-estruturados: dados

heterogêneos e irregulares, auto-descritivos.

Banco de dados: originalmente, sistemas fechados, dedicados a gestão de dados regulares, cuja estrutura pouco evolui no tempo

Novas aplicações requerem mais flexibilidade de representação e estão constantemente evoluindo o esquema

Os modelos relacional e de objetos chegaram a seus limites

Introdução

Page 4: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 4

Dados estruturados São dados de um arquivo ou de

um banco de dados relacional, em que sua estrutura é conhecida a priori

Ex.:

Introdução

Create table empregado( matricula int, nome varchar(30), salario float, depto int)

Page 5: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 5

Dados não-estruturados São dados em que não há

nenhuma estrutura os definindo. São normalmente armazenados

em arquivos ou em colunas do tipo BLOB ou CLOB em SGBDs

Ex.: um texto em pdfuma imagem em jpgum video ou áudio

Introdução

Page 6: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 6

Dados semi-estruturados São dados em que uma parte há

estrutura e em outra não há nenhuma estrutura definida.

O esquema da parte estruturada está contido junto com o dado,

Ex.: Um email (parte estruturada: <to>, <subject>, <date>, etc.Parte não estruturada: o corpo da

mensagem)

Introdução

Page 7: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 7

A revolução da Web… 1989 - Primeiro Web Browser 1993 - Mosaic é difundido, há 50 web sites 1994 - Primeiras ferramentas de busca

(WWWW, webcrawler) 1996 - US$ 1M gastos em compras na Web,

presença em 150 países 1997 - 1 milhão de web sites 1998 - 300.000 web servers 2000 - mais de 1 bilhão de páginas web 2002 – quase 2,5 bilhões de páginas web

indexadas (google)

Page 8: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 8

A Web hoje… documentos HTML (em sua maioria) voltada para uso humano gerado automaticamente por

aplicações fácil de alcançar qualquer Web

page, de qualquer server, em qualquer plataforma

Page 9: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 9

O Segredo do sucesso de HTML

HTML é simples: todo mundo pode escrever HTML

HTML é textual: é legível, pode-se usar qualquer editor, ...

HTML é transportável em qualquer plataforma (o browser é a aplicação universal)

HTML conecta pedaços de informação através de hypertext links

Page 10: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 10

HTML

<h1> Bibliography </h1><p> <i> Foundations of Databases </i> Abiteboul, Hull, Vianu <br> Addison Wesley, 1995<p> <i> Data on the Web </i> Abiteoul, Buneman, Suciu <br> Morgan Kaufmann, 1999

Page 11: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 11

Resultado produzido

HTML descreve a apresentação

Page 12: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 12

Problemas com HTML Uma vez criado, um documento é ligado

a uma norma particular (ex. HTML 3.2 ) É necessário dispor de várias versões do

documento em função da mídia em que vai ser apresentado

A indexação de documentos só pode ser feita sobre a parte textual.

Page 13: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 13

HTML ... Um conjunto pré-definido e limitado de

tags, definidas por uma norma (HTML 2.0, 3.2, 4.0).

Estas tags possuem semânticas variadas: h1,..,h6, title, address, … dando as

indicações estruturais center,hr,b,i,big,small,… servem para

descrever a apresentação.

Page 14: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 14

Limites da Web … aplicações não devem consumir

HTML tecnologia de wrapper HTML é

instável (modifica-se a página => modifica-se o wrapper)

companhias se fundem, formam parcerias; necessitam de interoperabilidade de forma rápida

Page 15: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 15

As novas aplicações Comércio Eletrônico Protocolos "B2B" Bibliotecas digitais sistemas distribuídos …

precisamos de um "super HTML"

… estão surgindo ...

Page 16: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 16

XML ? « Buzz word » eXtensible Markup Language Uma linguagem de descrição de

documentos, definida por um organismo internacional W3C

Um conjunto de tecnologias derivadas: Xlink, Xpointer, Xschema, DOM, SAX, XSL,… Usados em aplicações como: SVG, SMIL,

MathML, MusicML, SOAP O esperanto da Web

Page 17: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 17

Web: Mudança de paradigma … Novo padrão Web XML:

XML gerado por aplicações XML consumido por aplicações

troca de dados entre plataformas: interoperabilidade

na empresa entre empresas

Page 18: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 18

XML

<bibliography> <book> <title> Foundations… </title> <author> Abiteboul </author> <author> Hull </author> <author> Vianu </author> <publisher> Addison Wesley </publisher> <year> 1995 </year> </book> …

</bibliography>

XML descreve o conteúdo

Page 19: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 19

XML: uma resposta única a necessidades variadas

HTML é usada como a lingagem universal de apresentação de documentos na Web, mas não é uma linguagem adaptada para descrever a estrutura destes documentos

Os sistemas de bases de dados atuais são muito rígidos para manipular dados cuja estrutura é irregular e evolui com o tempo.

Page 20: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 20

Os segredos de XML Como HTML:

simples, legível, fácil de aprender universal e transportável suportado pela W3C (indústria absorve!)

Mas, Além de HTML flexível : podemos representar qualquer tipo

de informação estensível: pode-se representar informação

de qualquer forma

Page 21: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 21

Noção estrutural

Princípio chave de SGML Idéia fundamental:

Considere um documento, é desejável separar completamente

as informações de estrutura das informações de apresentação.

Page 22: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 22

XML: herdeiro de SGML SGML Standard Generalized Markup

Language, norma ISO 8879:1986 Muito utilizada na indústria para as grandes

técnicas de documentação. Muito complexa para utilização de «público

em geral» SGML tem demonstrado as vantagens do

formato estrutural para a Gestão Eletrônica de Documentos (GED)

XML usa 10% de SGML para representar de forma eficaz 90% dos documentos

Page 23: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 23

Dois mundos se juntam na Web

Gestão de documentos

SGML

HTML

Documentaçãohipertexto

Gestão de dados

Bases de dados estruturados(relacionais e objeto)

Bases de dados semi-estruturadas

Page 24: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 24

Comunidade de BD pode ajudar ...

• otimização e processamento de consultas

• visões, transformações

• data warehouses, integração de dados

• mediadores, re-escrita de consultas

• eficiente armazenamento e indexação

Page 25: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 25

Origem de XML 1993: primeiros trabalhos sobre adaptação

das técnicas SGML à Web (Sperberg)."HTML to the Max: A Manifesto for Adding

SGML Intelligence to the World Wide Web" Junho 1996: criação de um grupo de

trabalho no W3C 10 fev. 1998: publicação da recomendação

para versão 1.0 da linguagem. http://www.w3.org/TR/REC-xml (2/98)

Page 26: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 26

Origem de XML Trabalho cooperativo de um grande

número de empresas e de pesquisadores reunidos no World Wide Web Consortium (W3C) 400 colaboradores da indústria, entre os quais

Oracle, IBM, Compaq, Xerox, Microsoft, etc.. Laboratórios de pesquisa: MIT - USA, INRIA -

França, universidade de Keio - Japão Objetivo: definição de um formalismo para

facilitar a troca de dados na Web

Page 27: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 27

Mandamentos iniciais: XML deverá ser diretamente utilizável

na Internet XML deverá suportar uma larga

variedade de aplicações XML deverá ser compatível com SGML A criação de páginas XML deverá ser

também o mais simples possível

Page 28: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 28

Mandamentos iniciais(2) Os documentos XML deverão ser de

grande legibilidade A criação de documentos deverá

ser rápida A sintaxe deverá ser formal e

concisa A concisão do código tem mínima

importância

Page 29: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 29

Resumindo: XML ...

XML é uma linguagem de

descrição e de troca de

documentos (semi-)estruturados

Page 30: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

Exemplo de um documento

Campina GRande,20 de maio de 2001

Sr. Edilson Silva,Rua das Flores, 12581293 Caruaru

Bar da NoiteRua das Bodegas, s/n58106-920 C. Grande

Tel: 012133564Fax: 879765426

Objet: Dívida?

Prezado Senhor,

Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v

Aproveito do ensejo para renovar meus protestos de elevada estima e consideração.

assinatura

Rodapé

Logotipo

Data

Destinatário

Corpo

Rodapé

Cabeçalho

Objeto

Saudação

Forma Polida

Assinatura

Page 31: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

Representação XML

<carta> . . .</carta>

<cabeca> . . .</cabeca><destinatario> <nome> Sr Edilson Silva </nome> <endereco> <rua> rua das Flores </rua> <cidade> Caruaru </cidade> </endereco></destinatario><objeto> bla bla </objeto><data> 20 Maio 2001 </data><saudacao> Prezado Senhor, </saudacao><corpo> . . .</corpo>

<para> Aqui é o primeiro parágrafo</para><para> aqui é o segundo ...</para>

<logotipo loc="logo-graph"/><endereco> &abrev-endereco; </endereco>

Page 32: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 32

Pontos importantes A representação desta carta em XML não

tem nenhuma indicação sobre a apresentação.

As numerosas propriedades gráficas ou tipográficas estão ausentes da fonte XML.

Estas propriedades serão definidas por intermédio de uma folha de estilo.

Uma folha de estilo é um conjunto de regras para especificar a realização concreta de um documento sobre uma mídia particular.

Page 33: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

Objeto: Dívida

Prezado Senhot,Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v

.

sssinatura

Rodapé

<carta> <cabeca> . . . </cabeca>

<corpo> . . . </corpo></carta>

If carta then ...If cabeca then …If corps then

...If para then

Police new roman,size 12, skip first line

If … then …

Princípio de funcionamento das folhas de estilos

Bar da NoiteRua das Bodegas, s/n58106-920 C. Grande

Tel: 012133564Fax: 879765426 Campina GRande,

20 de maio de 2001

Sr. Edilson Silva,Rua das Flores, 12581293 Caruaru

Page 34: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 34

Descoberta de XML

Vantagens de XML

Page 35: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

35

Estensibilidade e estrutura Em XML, um autor ou uma comunidade de autores inventam

livremente as tags que lhes pareçam úteis para marcar os componentes de um documento.

Exemplo: diversas formas de representar uma data <date> 5 janeiro 2000 </date> <date> <ano> 2000 </ano> <mes> 01 </mes> <dia> 05 </dia> </date> <date format='ISO-8601'> 2000-01-05 </date>

Grande liberdade de escolha das estruturas de dados facilita a troca de dados

comércio eletrônico, transações financeiras e comerciais, pesquisa e indústria de biotecnologias multimídia

Vantagens de XML

Page 36: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 36

Interoperabilidade Todos os dados podem ser vistos como

documentos XML e não mais como arquivos no formato X ou Y.

Consequências: Um servidor de documentos XML pode

responder a um conjunto de necessidades de uma organização.

Um simples editor de textos pode tratar o conjunto de dados de uma organização.

A interoperabilidade dos utilitários está assegurada.

Vantagens de XML

Page 37: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 37

Modularidade e reutilização Cada usuário é livre para definir suas

próprias estruturas de documento Um documento pode também estar

conforme as estruturas tipadas, chamadas DTD

Cada comunidade pode propor as estruturas normalizadas

A validação a um DTD permite a automatização no tratamento dos dados e assegura uma possibilidade de controle de integridade

Vantagens de XML

Page 38: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 38

Accesso às fontes de informaçãoheterogêneas

A consulta e troca de dados entre as base de dados heterogêneas é complexaXML contribui pare minimizar este problema: formato

de troca normalizado, genérico, independente de plataforma

A indexação e consulta de bases de documentos pode se beneficiar de informações estruturais e textuais.

pesquisa por palavras-chaves: Jorge+Amado retorna todos os documentos contendo as palavras Jorge e Amado, então as páginas pessoais de Pedro Amado cujo filho se chama Jorge.

pesquisa estrutural: pesquisa os documentos cujo autor é Jorge Amado (ie os documentos contendo um elemento autor, ou escrito-por contendo Jorge e Amado)

Vantagens de XML

Page 39: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 39

Descoberta de XML

Definição da linguagem XML 1.0

Page 40: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 40

Exemplos de documentos XML

<?xml version="1.0" standalone="yes" ?> <documento> <saudacao> Bom dia! </saudacao> </documento>

<documento> <saudacao> Bom dia! </saudacao> </documento>

<documento></documento> <documento/>

<documento> Bom dia!</documento>

XML 1.0

Page 41: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 41

Estrutura de um documento Um documento XML é composto de

um prólogo cuja presença é facultativa, mas fortemente aconselhada

uma árvore de elementos, obrigatória

comentários, seção CDATA e de instruções de tratamento, facultativos

<?xml version="1.0" standalone="yes" ?>

<documento> <saudacao> Bom dia! </saudacao> </documento>

XML 1.0

Page 42: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 42

O prólogo contém ... Uma declaração XML, facultativa

da forma:<?xml version="1.0" encoding="ISO-8859-1" standalone="yes">

indica ao processador que vai tratar o documento: a versão da linguagem XML utilizada o código de caracteres utilizado a existência de declarações exteriores ao documento

Uma declaração de tipo de documento, facultativa da forma

<!DOCTYPE exemplo SYSTEM "exemplo.dtd" [ declarações ]> indica a estrutura particular a qual deve estar de acordo um

documento

XML 1.0

Page 43: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 43

Estrutura de um DTD Um DTD pode compreender duas

partes uma parte externa

a parte externa é definida fora do documento. É referenciada por uma referência DTD, frequentemente uma URL. Este mecanismo permite assegurar uma reutilização de DTDs frequentemente utilizados.

uma parte interna utilizada para especializar um DTD externo

genérico ou redefinir certos tipos de elementos

XML 1.0

Page 44: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 44

Estrutura de um elemento (1) Um elemento é da forma:

<nome attr='valor'> conteúdo </nome> <nome> é a tag de abertura (XML é case sensitive!) </nome> é a tag de fechamento. A presença é obrigatória, a exceção

particular dos elementos nulos, denotado por <nome> </nome> ou <nome/>

conteúdo é o conteúdo de um elemento . Pode ser:

attr='valor' representa um conjunto eventualmente vazio de atributos, ou seja de pares (nome,valor). Os nomes dos atributos são únicos num elemento.

XML 1.0

uma mistura de texto e elementos instruções de tratamento comentários

vazio texto outros elementos

Page 45: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 45

Estrutura de um elemento (2) Um nome de elemento é uma sequência não nula de caracteres que pode

conter caracteres alfanuméricos undescore sinal de menos ponto caracter dois-pontos (:) é utilizado, mas com um sentido particular

deve satisfazer as seguintes restrições o primeiro caracter deve ser alfabético ou um undescore os três primeiros caracteres não devem formar uma cadeia cuja

representação em letras minúsculas seja "xml".

XML 1.0

Page 46: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 46

Estrutura de um elemento (2)

Exemplos de nomes de elementos

1998-catalogo

xmlSpecification

nome sociedade

_toto

Nome_sociedade

xsl:rule

X.11

incorretoscorretos

XML 1.0

Page 47: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 47

Sintaxe dos atributos Um atributo é um par nome='valor' que permite

de caracterizar um elemento. Um elemento pode ter vários atributos. Neste caso, os pares nome='valor' serão separados por um espaço.

Exemplos <relatorio lingua= ’pt' ult-modif='08/07/99'> <anuario generator='SQL2XML V2.0'

update='07.08.99'> O nome de um atributo obedece as mesmas

regras que o nome de um elemento O valor de um atributo é uma string entre

aspas(") ou apóstrofos simples ('). Um valor de atributo não deve conter os caracteres ^, % e &.

XML 1.0

Page 48: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 48

Seção CDATA

Uma seção CDATA instrui o parser a ignorar os caracteres de markup

Exemplo:<![CDATA[ *p = &q; b = (i <= 3); ]]>

Entre o início da seção, <![CDATA[ e o fim da seção, ]]>, todos os caracteres são passados diretamente para a aplicação, sem interpretação.A única string que não pode ocorrer numa seção CDATA é ]]>.

Page 49: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 49

Comentários

Comentários iniciam com ”<!--” e terminam com ”-->”. (só não podem conter o string ”--”).

Ex.: <!-- Isto é um comentário -->

Comentários podem ser colocados em qualquer linha do documento.

Page 50: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 50

Árvore de elementosUm documento XML contém uma árvore de

elementos, com as seguintes restrições:

Existe num documento um único elemento pai que contém todos os outros. É a raiz do documento.

Todo elemento distinto da raiz é totalmente incluído dentro de seu pai. Assim:

<p> <b> bla bla </p> bla </b> não é uma estrutura XML.

XML 1.0

Page 51: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 51

Documentos bem formados

Um documento é dito bem formado se: está de acordo com as regras sintáticas de XML

(tags são aninhadas propriamente e atributos são únicos)

<?xml version="1.0" standalone="yes" ?>

<documento> <saudacao> Bom dia! </saudacao> </documento>

Ex. de uma documento não bem formado:<documento> <saudacao> Bom dia!</documento></saudacao>

XML 1.0

Page 52: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 52

Documentos válidos Um documento é dito válido se:

seu prólogo contém uma declaração de tipo de documento

sua árvore de elementos respeita a estrutura definida pelo DTD

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>

<!DOCTYPE documento [ <!ELEMENT documento (saudacao)> <!ELEMENT saudacao (#PCDATA)>]><documento> <saudacao> Bom dia! </saudacao> </documento>

XML 1.0

Page 53: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 53

Noção de DTD Um documento válido deve conter uma declaração de tipo de

documento. Esta declaração pode fazer referência, por intermédio de uma URL a um arquivo externo. Este arquivo é chamado de DTD (Definição de Tipo de Documento).

Exemplo

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <!DOCTYPE documento SYSTEM "acolhida.dtd"><documento> <saudacao> Bom dia! </saudacao> </documento>

XML 1.0

Page 54: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 54

Noção de DTD

XML 1.0

<!–- Arquivo acolhida.dtd. Exemplo de DTD simples --><!–- Autor: Cláudio Baptista --><!–- Data: 18/setembro/2002-->

<!–- a declaração XML não é obrigatória dentro de um DTD --><!–- permite assegurar que os documentos que a referenciam --> <!–- utilizam a mesma versão de XML --> <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>

<!–- Definição do elemento raiz --><!ELEMENT documento (saudacao)>

<!–- Um elemento saudacao contém texto --><!ELEMENT saudacao (#PCDATA)>

Page 55: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 55

Conteúdo de um DTD Um DTD pode conter as

declarações de elementos de listas de atributos de entidades gerais de entidades parametrizadas de notações

como também comentários

XML 1.0

Page 56: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 56

Declaração de elemento Uma declaração de elemento é da forma

<!ELEMENT nome modelo> ELEMENT é uma palavra-chave e se escreve

imperativamente em maiúsculas nome é um nome válido de um elemento modelo é o modelo de conteúdo deste elemento.

Distinguimos cinco modelos de conteúdo elementos dados misto livre vazio

XML 1.0: elementos

Page 57: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 57

Modelo de conteúdo de elementos (1)

Sequência de elementos filhos ( .., .., ..) Exemplo

<!ELEMENT capitulo (titulo,intro,secao)> Um elemento capitulo cujo conteúdo, imperativamente

e nesta ordem, contém sub-elementos titulo, intro e secao.

Alternativa ( ..| ..| ..) Exemplo

<!ELEMENT capitulo (titulo,intro,(secao|secoes))>

Indicadores de ocorrência *,+,?Um nome de elemento pode ter um indicador de orrorrência:

p* : p pode ocorrer zero, uma ou várias vezes dentro do conteúdo de um instância

p+ : p pode ocorrer uma ou várias vezesp? : p pode ocorrer zero ou uma vez

Page 58: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 58

Modelo de conteúdo de elementos (2)

Exemplos<!ELEMENT capitulo (

titulo,

intro?,

secao+ ) >

<!ELEMENT secao (

titulo-secao,

texto-secao ) >

<!ELEMENT texto-secao (p|a)* >

Page 59: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 59

Modelo de conteúdo de dados A presença de dados no conteúdo

de um elemento é especifidada pela palavra-chave #PCDATA

Exemplo<!ELEMENT p (#PCDATA) >

Page 60: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 60

Modelo de conteúdo misto Este modelo permite definir os modelos de

conteúdo podendo misturar dados e elementos Forma do modelo

(#PCDATA | nome1 | …|nomen)* Exemplos de declarações

<!ELEMENT p (#PCDATA | negrito | italico | sublinhado)* ><!ELEMENT negrito (#PCDATA|italico|sublinhado)* ><!ELEMENT italico (#PCDATA) ><!ELEMENT sublinhado (#PCDATA) >

Exemplo de uso <p> um parágrafo pode conter texto <negrito> em

evidência </negrito> ou em <italico> itálico </italico></p>

Page 61: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 61

Modelo de conteúdo livre (1) Um elemento pode ser definido como sendo um

conteúdo qualquer, desde que este conteúdo respeite as regras gerais da linguagem XML.

Exemplo<!ELEMENT qualquer ANY>

Para que o conteúdo de um elemento de modelo de conteúdo livre seja válido, é necessário que, se ele contiver elementos, estes sejam declarados num DTD

Page 62: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 62

Modelo de conteúdo livre (2)

Utilidade: este modelo de conteúdo é particularmente útil quando da criação de um DTD complexo

Exemplo<!ELEMENT relatorio ANY><!ELEMENT capitulo ANY><!ELEMENT secao ANY><!ELEMENT titulo-secao ANY><!ELEMENT ilustracao ANY><!ELEMENT bibliografia ANY><!ELEMENT indice ANY><!ELEMENT p ANY><!ELEMENT negrito (#PCDATA)><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (prenome+,nome)><!ELEMENT nome (#PCDATA)><!ELEMENT prenome (#PCDATA)>

Page 63: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 63

Modelo de conteúdo vazio

Um elemento pode ser declarado como obrigatoriamente vazio, usando a palavra-chave EMPTY.

Exemplo de declarações<!ELEMENT p (#PCDATA|bibref)* ><!ELEMENT bibref EMPTY><!ATTLIST bibref ref IDREF #REQUIRED>

Exemplo de utilização<p> para uma definição precisa, veja <bibref ref='REC-xml-19980210'/> </p>

Page 64: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 64

Modelo de conteúdo vazio

Observações: quando o modelo de conteúdo de um

elemento é o modelo vazio, deve obrigatoriamente obedecer a sintaxe <nome/>

não é possível misturar EMPTY a uma outra construção de modelo de conteúdo

Page 65: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 65

Declaração de atributos Um atributo é um par nome-valor

associado a um elemento uma declaração de atributos num

DTD permite especificar os atributos que poderão ou deverão estar associados às instâncias dos elementos.

Forma da declaração<!ATTLIST nome-elemento nome-atributo tipo-atributo declaração-default>

XML 1.0: atributos

Page 66: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 66

Declaração de atributos Exemplos

<!ELEMENT ex1 (#PCDATA)>

<!ATTLIST ex1 lang NMTOKEN #IMPLIED >

<!ATTLIST ex1 target ID #IMPLIED >

<!ATTLIST ex1 nb (1 | 2 | 3) '1'>

equivalente a<!ATTLIST ex1 lang NMTOKEN #IMPLIED >

target ID #IMPLIED >

nb (1 | 2 | 3) '1'>

Page 67: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 67

Tipo de atributo O tipo de atributo pode ser:

CDATA: o valor do atributo é uma cadeia de caracteres

ID ou IDREF: permite definir um identificador para um documento

Uma lista de escolhas num conjunto de tokens, ou identificadores lógicos

NMTOKEN ou NMTOKENS: abreviação de Name Token. Permite ao atributo de ter seu valor de um conjunto de nomes simbólicos.

ENTITY ou ENTITIES: permite que um atributo tome como valor o nome de uma entidade externa não XML

NOTATION: define um atributo de notação

XML 1.0: atributos

Page 68: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 68

Declaração default Possui quatro formas

valor por default do atributo #REQUIRED: cada instância deverá ter um

atributo deste nome. Não aceita valor default.

#IMPLIED: presença facultativa. Não aceita valor default.

#FIXED: fixa o valor deste atributo para toda instância.

XML 1.0: atributos

Page 69: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 69

Exemplos (1) Atributo CDATA

<!ATTLIST f att1 CDATA #FIXED '<toto>' >O atributo att1 dos elementos de tipo f tem um valorr constante: o string <toto>.

Atributo enumerado Exemplo 1

<!ELEMENT data (#PCDATA) ><!ATTLIST data formato (ANSI | ISO | BR) #REQUIRED><data formato= ’BR'> 24 Maio 1998 </data><data formato='ISO'> 1998-05-24 </data>O atributo formato é obrigatório e deve ter valores do tipo ANSI, ISO ou BR

Exemplo 2<!ELEMENT list (item,item+)><!ELEMENT item (list|#PCDATA)><!ATTLIST list type (ord | num | alpha) 'ord'><list type='alpha'> <item> Maria </item> <item> Pedro </item> <item> José </item></list>

XML 1.0: atributos

Page 70: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 70

Exemplos (2) Atributos ID e IDREF

Estes tipos de atributos permitem de criar uma referência a um documento<!–- declaração do element secao --><!–- o atributo de identificação de secao --><!–- target é optional --><!ELEMENT secao (#PCDATA|xref)* ><!ATTLIST secao target ID #IMPLIED >

<!–- declaracao do elemento xref --><!ELEMENT xref EMPTY ><!ATTLIST xref ref IDREF #REQUIRED>

<secao target='X321'> conteúdo de uma seção </secao><secao> outra seção. Faz referência à seção X321 <xref ref='X321'/>

</secao>

Obs.: nós não referenciamos de fato uma seção, mas um elemento do documento que possui um atributo do tipo ID e cujo valor é X321.

XML 1.0: atributos

Page 71: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 71

Entidades internas Entidades pré-definidas

certos caracteres, como < > & ' " não podem ser utilizados dentro do texto de um documento

estes caracteres devem ser representados por seus códigos pré-definidos, chamadas entidades pré-definidas<: &lt;

>: &gt;

&: &amp;

XML 1.0: entidades

Page 72: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 72

Entidades internas Entidades definidas pelo usuário

é possível declarar as entidades dentro do DTD esta declaração tem a forma

<!ENTITY nome-entidade "valor-entidade">

Exemploa declaração seguinte

<!DOCTYPE livro [ <!ENTITY copyright "&#x00A9; Tropical Editition">]><livro> &copyright; </livro>

produzirá© Tropical Editions

observação: 00A9 é o código Unicode do caracter ©

XML 1.0: entidades

Page 73: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 73

Entidades externas endereçadas por URL

Exemplo<?xml version='1.0' ?><!DOCTYPE livro [ <!ENTITY capitulo1 SYSTEM "chap1.xml"> <!ENTITY capitulo2 SYSTEM "chap2.xml"> <!ENTITY autor "Maria Luiza Baptista">]><livro> <titulo> XML para iniciantes </titulo> <autor> &autor; </autor> <intro> Era uma vez uma Web… </intro> &capitulo1; &capitulo2;</livro>

Restrição: as entidades externas devem ser documentos bem formados

Page 74: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 74

Notações e entidades não XML

Exemplo<!DOCTYPE exemplo [ <!NOTATION jpeg SYSTEM "/usr/local/bin/xview"> <!ENTITY foto-ferias SYSTEM "./fotos/foto1.jpg" NDATA jpeg><!ELEMENT exemplo (foto)><!ELEMENT foto EMPTY><!ATTLIST foto img ENTITY #REQUIRED>

]><exemplo> <foto img='foto-ferias'/></exemplo> A declaração de notação associa ao formato jpeg a aplicação xview

que poderá ser utilizada em extensão da aplicação XML. A declaração da entidade foto-ferias indica que o conteúdo dos

dados está situado no arquivo foto1.jpg A palavra-chave NDATA indica que este arquivo é de um formato não

XML

Page 75: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 75

Exemplo<?xml version='1.0' ?><!DOCTYPE db [ <!ELEMENT db (pessoa*)> <!ELEMENT pessoa (nome, idade, email)> <!ELEMENT nome (#PCDATA)><!ELEMENT idade (#PCDATA)><!ELEMENT email (#PCDATA)>

]><db> <pessoa> <nome> Pedro Maia </nome>

<idade> 33 </idade><email> [email protected] </email>

</pessoa> <pessoa> <nome> Ana Maria </nome>

<idade> 24 </idade><email> [email protected] </email>

</pessoa> <pessoa> . . . </pessoa></db>

XML 1.0: Exemplos

Page 76: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 76

DTDs como esquemas

ExemploSeja o esquema r1(a, b, c) e r2 (c, e)<db> <r1> <a> a1 </a> <b> b1 </b> <c> c1 </c> </r1>

<r1> <a> a2 </a> <b> b2 </b> <c> c2 </c> </r1> <r2> <c> c1 </c> <d> d1 </d> </r2> <r2> <c> c2 </c> <d> d3 </d> </r2>

</db><!DOCTYPE db[<!ELEMENT (r1*|r2*)><!ELEMENT r1(a,b,c)><!ELEMENT r2(c,d)><!ELEMENT a (#PCDATA)><!ELEMENT b (#PCDATA)><!ELEMENT c (#PCDATA)><!ELEMENT d (#PCDATA)>]>

Page 77: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 77

<?xml version="1.0"?><!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)><!ATTLIST EMAIL LANGUAGE (Western|Greek|Latin|Universal) "Western" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|LOW|HIGH) "NORMAL">

<!ELEMENT TO (#PCDATA)><!ELEMENT FROM (#PCDATA)><!ELEMENT CC (#PCDATA)>

<!ELEMENT BCC (#PCDATA)><!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE">

<!ELEMENT SUBJECT (#PCDATA)><!ELEMENT BODY (#PCDATA)>

<!ENTITY SIGNATURE "Mattheus Baptista">

XML 1.0

Exemplo de DTD

Page 78: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 78

Limitações de DTDs como esquemas

DTD impõe ordem Não existe a noção de tipos de dados atômicos (int,

float, etc) Não podemos especificar uma faixa de valores de

domínio IDREF não é relacionado a um tipo. Tipos são associados com tags => elementos com

mesmo nome porém pertencendo a diferentes tipos (nome de pessoa e nome de um curso) não podem usar o mesmo elemento nome. Nesta caso ou redefinimos nomePessoa e nomeCurso ou usamo namespaces com os qualificadores, pessoa:nome e curso:nome

Page 79: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 79

Namespaces

Page 80: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 80

Namespaces XML permite autores de documentos criarem

suas próprias tags => pode haver uma mesma tag com semântica diferenciada

Ex.: Documento1: <assunto> Bioinformatica </assunto> Documento2: <assunto> Animais </assunto>

Usa PI para associar nomes exclusivos a URI Permitem que seja usado um esquema de atribuição

de nomes ao longo de um conjunto de documentos

Page 81: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 81

Solução

Primeira tentativa

<Documento1:assunto> Bioinformatica </Documento1:assunto>

Segunda tentativa<www.lsi.dsc.ufcg.edu.br/cursos:assunto>

Bioinformatica</www.lsi.dsc.ufcg.edu.br/cursos:assunto>

Solução final (uso de namespaces) <curso:curso xmlns:curso=”www.lsi.dsc.ufcg.edu.br/cursos”>

<curso:assunto> Bioinformatica </curso:assunto>

Page 82: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 82

Examplo de Namespace

<html:html xmlns:html=”...” xmlns:math=”...”>

<html:title> George Soros </html:title>

<html:h2> Counting ... </html:h2>

<math:reln>

.....

</math:reln>

</html:html>

Page 83: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 83

Namespace default

<html xmlns=”...” xmlns:math=”...”>

<title> George Soros </title>

<h2> Contabilidade ... </h2>

<math:reln>

.....

</math:reln>

</html>

Page 84: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 84

Nome de Atributo com Namespace

Atributos podem ter namespace Exemplo:

<myLink xmlns:xlink=”...”

xlink:type=”simple”

......

</myLink>

Page 85: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 85

XML Schema

Page 86: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 86

XML Schema Visa remediar as limitações dos DTDs Schemas são documentos XML Por ser mais recente ainda não é

suportado por muitos parsers Schemas ainda usam um DTD para ser

validado Declaração default:

<xsd:schema xmlns:xsd=“http://www.w3.org/2000/10/XMLSchema”

Page 87: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 87

Propósito de XML Schemas Especificar:

a estrutura de documentos “o elemento estudante contém os elementos matrícula,

endereço, curso, nome, ... os tipos de dados de cada elemento/atributo

“o elemento idade deve ser inteiro entre 0 e 130”

Page 88: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 88

Motivação para XML Schemas Existe insastifação em usar DTDs:

sintaxe diferente você escreve seu documento XML usando uma sintaxe

e o DTD usando outra sintaxe capacidade limitada de tipos de dados

DTDs suportam um conjunto muito limitado de tipos de dados. Não podemos dizer “o elemento <salario> deve ser entre 0 e 3000,00”

Desejo de se ter um conjunto de tipos de dados compatíveis com aqueles encontrados nos banco de dados

Page 89: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 89

Vantagens de XML Schemas XML Schemas são mais poderosos que DTDs:

Tipos de dados melhor especificado +41 tipos e a capacidade de se criar tipos de dados

definidos pelo usuário Escritos em XML (mesma linguagem dos

documentos) Podem expressar conjuntos (sets): um elemento filho

pode estar em qualquer ordem Pode especificar unicidade (chaves) Uso de técnicas de orientação a objetos

Page 90: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 90

Exemplo: Conversão do DTD CatalogoLivros.dtd para

XML Schema<!ELEMENT CatalogoLivros(livro)+>

<!ELEMENT livro(titulo, autor, data, isbn, editora)

<!ELEMENT titulo (#PCDATA)

<!ELEMENT autor (#PCDATA)

<!ELEMENT data (#PCDATA)

<!ELEMENT isbn (#PCDATA)

<!ELEMENT editora (#PCDATA)

Page 91: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 91

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=“editora" type="xsd:string"/></xsd:schema>

Page 92: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 92

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”>

<xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/></xsd:schema>

<!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>

<!ELEMENT livro (titulo, autor, data, ISBN, editora)>

<!ELEMENT CatalogoLivros (livro)+>

Page 93: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 93

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>

Todos XML Schemas têm "schema" como elemento raiz..

Page 94: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 94

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>

Os elementos quesão usados paracriar um XML Schema vêm doXMLSchemanamespace

Page 95: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 95

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>

indica que oselementos declaradosneste schema(CatalogoLivros,livro, titulo, autor, data, ISBN, editora)vão para este namespace

Page 96: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 96

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>

Este está referenciando uma declaração de um elemento livro.livro em qualnamespace? Uma vez quenão há um qualificador de namespace, é umareferência ao elemento livro no namespace default, que é o targetNamespace!

O namespace default éhttp://www.publishing.orgque é o targetNamespace!

Page 97: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 97

Referenciando um schema numa instância de um documento XML

<?xml version="1.0"?><CatalogoLivros xmlns ="http://www.publishing.org" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation="http://www.publishing.org CatalogoLivros.xsd"> <livro> <titulo>Meninos de Rua</titulo> <autor>Jorge Amado</autor> <data>julho,1976 </data> <ISBN>94303-12021-43892</ISBN> <editora>Nossos Livros</editora> </livro> ...</CatalogoLivros>

1. O uso de um namespace default, diz ao schema-validator que todos os elementos usados nestedocument vêm do publishing namespace.2. schemaLocation indica para o schema-validator que o namespace http://www.publishing.org está definido em CAtalogoLivros.xsd.3. Diz ao schema-validator que o atributo schemaLocation usado pertence ao the namespace schema instance namespace.

Page 98: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 98

Referenciando um schema num documento XML

CatalogoLivros.xml CatalogoLivros.xsd

targetNamespace="A"schemaLocation="A CatalogoLivros.xsd"

- define elementos no namespace A

- usa elementos do namespace A

Page 99: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 99

Há multiplos níveis de verificação

CatalogoLivros.xml CatalogoLivros.xsd XMLSchema.xsd(schema-for-schemas)

Valida se o documento xml estáconforme as regras descritasem CatalogLivros.xsd

Valida se CatalogoLivros.xsd é um documentoschema válido, i.e., está conformecom as regras descritas noschema-for-schemas

Page 100: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 100

Valores Default para minOccurs e maxOccurs

O valor default para minOccurs é "1"O valor default para maxOccurs é "1"

<element ref=”titulo" minOccurs="1" maxOccurs="1"/>

<element ref=”titulo"/>

Equivalentes!

Page 101: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 101

Esquema alternativo ...<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>

Page 102: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

102

Um tipo pode ser nomeado

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" type="CardCatalogueEntry" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="CardCatalogueEntry"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType></xsd:schema>

Tipo nomeado

Page 103: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 103

Observação

<xsd:element name="A" type=”ttt"/><xsd:complexType name=”ttt"> <xsd:sequence> <xsd:element name="B" …/> <xsd:element name="C" …/> </xsd:sequence></xsd:complexType>

é equivalente a

<xsd:element name="A"> <xsd:complexType> <xsd:sequence> <xsd:element name="B" …/> <xsd:element name="C" …/> </xsd:sequence> </xsd:complexType></xsd:element>

Elemento A referencia ocomplexType ttt.

Elemento A tem a definição complexType embutida na delcaração do elemento.

Page 104: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 104

Observação 2Uma declaração de elemento pode ter um atributo type, ou um complexType elemento filho, mas não pode ter ambos.

<xsd:element name="A" type=”ttt"> <xsd:complexType> … </xsd:complexType></xsd:element>

Page 105: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 105

Sumário de declaração de Elementos (2 formas)

<xsd:element name="nome" type="type" minOccurs="int" maxOccurs="int"/>

Um tipos simples (ex.., xsd:string)ou o nome deum complexType

<xsd:element name="nome" minOccurs="int" maxOccurs="int"> <xsd:complexType> … </xsd:complexType></xsd:element>

1

2

Um inteiro não negativo

Um inteiro nãonegativo ou "unbounded"

Obs: minOccurs e maxOccurs podem ser usadosapenas em declaração de elementos.

Page 106: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 106

Problema: Como restringir os tipos?Suponha que queremos restringir o elemento ISBN da seguinte forma:

ddddd-ddddd-ddddd ou d-ddd-ddddd-d ou d-dd-dddddd-d, onde 'd' significa 'digit'

<xsd:simpleType name="ISBNType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{5}-\d{5}-\d{5}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction></xsd:simpleType>

Page 107: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

107

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:simpleType name="ISBNType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{5}-\d{5}-\d{5}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:date"/> <xsd:element name="ISBN" type="ISBNType"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>

Page 108: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 108

<xsd:complexType> ou <xsd:simpleType>? Use o elemento complexType

quando quiser definir elementos filhos e/ou atributos de um elemento

Use o elemento simpleType quando precisar criar um novo tipo que é um refinamento de um tipo embutido (string, integer, etc)

Page 109: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 109

Criando seus próprios Datatypes

Um novo datatype pode ser definido de um datatype existente (chamado tipo "base" ) através da especificação de valores para uma ou mais das facetas opcionais para o tipo base.

Exemplo. O tipo primitivo string tem seis facetas opcionais:

pattern enumeration length minLength maxlength whitespace (valores: preserve, replace, collapse)

Page 110: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 110

Exemplo de criação de um novo Datatype através da especificação de

valores de facetas

<xsd:simpleType name=”NumTelefone"> <xsd:restriction base="xsd:string"> <xsd:length value="8"/> <xsd:pattern value="\d{3}-\d{4}"/> </xsd:restriction></xsd:simpleType>

Page 111: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 111

Outro Exemplo

<xsd:simpleType name=”Cores-Brasil"> <xsd:restriction base="xsd:string"> <xsd:enumeration value=”verde"/> <xsd:enumeration value=”amarelo"/> <xsd:enumeration value=”azul"/> <xsd:enumeration value=”branco"/> </xsd:restriction></xsd:simpleType>

Cria um novo tipo chamado Cores-Brasil.Um elemento declarado deste tipo deve tero valor verde, amarelo, azul ou branco.

Page 112: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 112

Facetas do tipo Integer Facets:

pattern enumeration whitespace maxInclusive maxExclusive minInclusive minExclusive precision

Page 113: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 113

Exemplo<xsd:simpleType name= "EarthSurfaceElevation"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="-1290"/> <xsd:maxInclusive value="29035"/> </xsd:restriction></xsd:simpleType><xsd:element name="elevation" type="EarthSurfaceElevation"/>

Exemplo. Definindo um elemento elevation: <elevation>5240</elevation>

Page 114: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 114

Tipos Derivados Podemos ter uma forma de

especializar definições complexType. Conhecido como "tipos derivados" derivar por extensão: estender o

complexType pai com mais elementos derivar por restrição: restringir o

complexType pai através da restrição de alguns elementos para ter

uma faixa de valores mais restrita, ou um número de ocorrências mais restrito.

Page 115: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 115

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”>

<xsd:complexType name="Publicacoes"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:date"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=”livro"> <xsd:complexContent> <xsd:extension base=”Publicacoes" > <xsd:sequence> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" type=”livro" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>

Page 116: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 116

Derivação por Restrição<xsd:complexType name="Publicacao"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”date" type="xsd:year"/> </xsd:sequence></xsd:complexType><xsd:complexType name= "PublicacaoUnicoAutor"> <xsd:complexContent> <xsd:restriction base="Publicacao"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:year"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent></xsd:complexType>

Page 117: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 117

Proibindo Derivações <xsd:complexType name="Publicacao" final="#all" …>

Publicação não pode ser estendida or restringida

<xsd:complexType name="Publicacao" final="restriction" …> Publicacao não pode ser restringida

<xsd:complexType name="Publicação" final="extension" …> Publicação não pode ser estendida

Page 118: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 118

Atributos

Seja o DTD<!ELEMENT CatalogoLivros (livro)+><!ELEMENT livro (titulo, autor+, data, ISBN, editora)><!ATTLIST livro Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED EmEstoque (true | false) "false" Revisor CDATA " "><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>

Page 119: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 119

<xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> <xsd:attributeGroup ref="AtributosLivro"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="AtributosLivro"> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:attributeGroup>

EmEstoque (true | false) "false"

Revisor CDATA " "

Categoria (autobiography | non-fiction | fiction) #REQUIRED

Page 120: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 120

<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:complexType></xsd:element>

Alternativamente ...

Page 121: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

121

Sumário de Declaração de Atributos (2 formas)

<xsd:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>

requireddefaultfixedoptionalprohibited

This attribute is onlyused with use="default"and use="fixed"

xsd:stringxsd:integerxsd:boolean...

1

2 <xsd:attribute name="nome" use=”como-usad" value="valor"> <xsd:simpleType> <xsd:restriction base=”tipo-simples"> <xsd:facet value="valor"/> … </xsd:restriction> </xsd:simpleType></xsd:attribute>

Page 122: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 122

Observação sobre Atributos A declaração de atributos sempre

vem após as declarações de elementos.

Os atributos estão sempre com relação ao elemento que eles estão definidos (nested).

<xsd:element name=”A"> <xsd:complexType> <xsd:sequence> … </xsd:sequence> <xsd:attribute name=”aa" …/> <xsd:attribute name=”ab" …/> </xsd:complexType></xsd:element>

”aa e ab sãoatributos de A"

Page 123: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 123

Elementos com Simple Content e Atributos

Exemplo. Considere:

<elevation units=“metros">5440</elevation>

O elemento elevation tem duas restrições: - um simples (integer) conteúdo - um atributo chamado units

Como declarar elevation?

Page 124: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 124

<xsd:element name="elevation"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:integer"> <xsd:attribute name="units" type="xsd:string" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType></xsd:element>

Solução

Page 125: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

125

<xsd:simpleType name="elevationType"> <xsd:restriction base="xsd:integer">

<xsd:minInclusive value="0"/> <xsd:maxInclusive value="12000"/> </xsd:restriction></xsd:simpleType><xsd:simpleType name="unitsType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="feet"/> <xsd:enumeration value="meters"/> </xsd:restriction></xsd:simpleType><xsd:element name="elevation"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="elevationType"> <xsd:attribute name="units" type="unitsType" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>

Solução mais completa (constraints)

Page 126: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 126

Expressando Alternativas

<!ELEMENT transporte (trem | aviao | carro)>DTD:

XML Schema: <?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.travel.org" xmlns="http://www.travel.org”> <xsd:element name="transporte"> <xsd:complexType> <xsd:choice> <xsd:element name="trem" type="xsd:string"/> <xsd:element name=”aviao" type="xsd:string"/> <xsd:element name=”carro" type="xsd:string"/> </xsd:choice> </xsd:complexType> </xsd:element></xsd:schema>

Page 127: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 127

Expressando Repetições

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.binary.org" xmlns="http://www.binary.org”> <xsd:element name="binary-string"> <xsd:complexType> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="zero" type="xsd:unsignedByte" fixed="0"/> <xsd:element name="one" type="xsd:unsignedByte" fixed="1"/> </xsd:choice> </xsd:complexType> </xsd:element></xsd:schema>

<!ELEMENT binary-string (zero | one)*>DTD:

XML Schema:

Page 128: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 128

Expressando Ordem Qualquer

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:all> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>

XML Schema:

Problema: criar um elemento livro, que contenha autor, titulo, data, ISBN, e editora, em qualquer ordem.

Page 129: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 129

Elemento Vazio

<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.photography.org" xmlns="http://www.photography.org”> <xsd:element name="galeria"> <xsd:complexType> <xsd:sequence> <xsd:element name="imagem" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="href" type="xsd:uriReference" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>

Schema:

<!ELEMENT imagem EMPTY><!ATTLIST imagem href CDATA #REQUIRED>DTD:

Page 130: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 130

XML API: DOM e SAX

Prof. Dr. Cláudio [email protected]

http://www.lsi.dsc.ufcg.edu.br

Page 131: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 131

DOM - Introdução

XML Document Object Model (DOM)W3C standard recommendationConstrói árvore na memória para documentos XML Um DOM Document é uma coleção de nodes organizada numa hierarquiaDOM provê uma API que permite o programador adicionar, editar, mover, ou remover nodes em qualquer ponto da árvoreDOM-based parsers fazem o “parsing” destas estruturas. Existe em várias linguagens (Java, C, C++, Python, Perl, etc.)

Page 132: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 132

DOM Roadmap

Um Parser analiza um arquivo XMLpara criar um DOM documentque é composto de nodesque podem ser elementos, atributos, textos,ou outros tipos de nodeque fazem parte de um (ou mais) Namespace(s)que podem ser acessados via métodosda DOM API

Page 133: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 133

Evolução do DOM

Level 0 - Foi a primeira recomendação que permitia Web browsers identificar e manipular elementos numa página

Level 1- inclui suporte a XML e HTML Level 2- permite o uso de Namespaces,

provê API mais sofisticada com eventos e CSS

Level 3- suporte avançado a Namespaces, eventos de User interface, DTD, XML Schema, Xpath, XSLT

Page 134: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 134

Exemplo<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ORDERS SYSTEM "orders.dtd"><orders> <order> <customerid limit="1000">12341</customerid> <status>pending</status> <item instock="Y" itemid="SA15"> <name>Silver Show Saddle, 16 inch</name> <price>825.00</price> <qty>1</qty> </item> <item instock="N" itemid="C49"> <name>Premium Cinch</name> <price>49.00</price> <qty>1</qty> </item> </order> <order> <customerid limit="150">251222</customerid> <status>pending</status> <item instock="Y" itemid="WB78"> <name>Winter Blanket (78 inch)</name> <price>20</price> <qty>10</qty> </item> </order></orders>

Page 135: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 135

Exemplo (cont)

Page 136: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 136

Tipos básicos de nodes Document Element Attribute Text

Page 137: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 137

DOM Introdução

DOM treeCada node representa um elemento, atributo, etc.

<?xml version = "1.0"?><message from = ”Ana" to = ”Marta"> <body>Oi Marta!</body></message>

Node criado para elemento messageElemento message tem element child node: elemento body Elemento body tem text child node: “Oi Marta!"Atributos from e to também têm nodes na árvore

Page 138: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 138

Implementações de DOM

DOM-based parsersMicrosoft msxmlSun Microsystem JAXP

Parser Descrição

JAXP Sun Microsystem Java API para XMLParsing (JAXP) é livremente disponívelem java.sun.com/xml.

XML4J IBM XML Parser for Java (XML4J) élivremente disponível emwww.alphaworks.ibm.com/tech/xml4j.

Xerces Apache Xerces Java Parser é livrementedisponível em xml.apache.org/xerces.

msxml Microsoft XML parser (msxml) version2.0 é embutido no Internet Explorer5.5. Version 3.0 está livrementedisponível em msdn.microsoft.com/xml.

4DOM 4DOM é um parser para linguagem Python,disponível livremente emfourthought.com/4Suite/4DOM.

XML::DOM XML::DOM é um módulo Perl que permitemanipular documentos XML usando Perl.Visitewww-4.ibm.com/software/developer/library/xml-perl2.

Page 139: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 139

DOM: classes e interfaces.

Class/Interface Descrição

Document interface Representa o top-level node do documento XML, que provê acesso atodos os demais nodes—incluindo o elemento root.

Node interface Representa um XML document node.NodeList interface Representa uma lista de Node objects.Element interface Representa um elemento node. Deriva de Node.Attr interface Representa um atributo node. Deriva de Node.CharacterDatainterface

Representa character data. Deriva de Node.

Text interface Representa um text node. Deriva de CharacterData.

Comment interface Representa um node comentário. Deriva de CharacterData.

ProcessingInstructioninterface

Representa um processing instruction node. Deriva de Node.

CDATASection interface Representa um CDATA section. Deriva de Text.

Page 140: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 140

Alguns métodos de Document

Método Descrição

createElement Cria um element node.createAttribute Crira um attribute node.createTextNode Cria um text node.createComment Cria um comment node.createProcessingInstruction Cria um processing instruction node.createCDATASection Cria um CDATA section node.getDocumentElement Retorna to elemento rootappendChild Concatena um child node.getChildNodes Retorna os child nodes.

Page 141: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 141

Métodos Node

Método Descrição

appendChild Concatena um child node.cloneNode Duplica o node.getAttributes Retorna os atributos do nodegetChildNodes Retorna os nodes filhos do node.getNodeName Retorna o nome do nodegetNodeType Retorna o tipo do node (ex.. elemento, atributo, text,

etc.).getNodeValue Retorna o valor do node.getParentNode Retorna o pai do nodehasChildNodes Retorna true se o node tem nodes filhosremoveChild Remova um node filho do node.replaceChild Troca um node filho com outro node.setNodeValue Coloca o valor do nodeinsertBefore Concatena um node filho na frente de um node filho..

Page 142: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 142

Alguns tipos de node

Tipo de Node DescriçãoNode.ELEMENT_NODE Representa um element node.Node.ATTRIBUTE_NODE Representa um attribute node.Node.TEXT_NODE Representa um text node.Node.COMMENT_NODE Representa um comment node.Node.PROCESSING_INSTRUCTION_NODE

Representa um processing instructionnode.

Node.CDATA_SECTION_NODE Representa um CDATA section node.

Page 143: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 143

Métodos de Element

Método Descrição

getAttribute Retorna um valor de atributo.getTagName Retorna um nome de elementoremoveAttribute Remove um atributo de um elementosetAttribute Coloca um valor de atributo

Page 144: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 144

Parsing um arquivo XML num documento Processo em 3 passos

1. Criar o DocumentBuilderFactory. Este objeto criará o DocumentBuilder.

2. Criar o DocumentBuilder. O DocumentBuilder fará o atual parsing criar o objeto Document.

3. Fazer o parsing do arquivo para criar o objeto Document.

Page 145: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 145

Exemplo de aplicação básica

import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;import org.w3c.dom.Document;

public class OrderProcessor { public static void main (String args[]) { File docFile = new File("orders.xml"); Document doc = null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); } catch (Exception e) { System.out.print("Problem parsing the file."); } }}

Page 146: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 146

Ex de aplicação básicaimport javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;import org.w3c.dom.Document;import org.w3c.dom.Element;public class OrderProcessor {

...System.exit(1);

}//Passo 1: obtém o elemento raiz (root) Element root = doc.getDocumentElement();System.out.println("The root element is " + root.getNodeName());}

}

Page 147: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 147

Ex de aplicação básica - Obtendo um node filho

...import org.w3c.dom.NodeList;... //PASSO 1: obtém o elemento raiz(root) Element root = doc.getDocumentElement(); System.out.println("The root element is "+root.getNodeName()); //PASSO 2: obtém os filhos (children) NodeList children = root.getChildNodes(); System.out.println("There are "+children.getLength()+" nodes in this document."); }}

Page 148: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 148

Usando getFirstChild() e getNextSibling()

...import org.w3c.dom.Node;...//PASSO 3: processando os filhos (children)for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling()) { System.out.println(child.getNodeName()+" = "+child.getNodeValue()); }}}...

Page 149: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 149

Múltiplos filhos

...public class OrderProcessor { private static void stepThrough (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); for (Node child = start.getFirstChild(); child != null;child = child.getNextSibling()) { stepThrough(child); } } public static void main (String args[]) { File docFile = new File("orders.xml"); ... System.out.println("There are "+children.getLength() +" nodes in this document."); //PASSO 4: fazendo recursividade stepThrough(root); }}

Page 150: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 150

Resultado:

Page 151: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 151

Manipulando Atributos

...import org.w3c.dom.NamedNodeMap;...private static void stepThroughAll (Node start){ System.out.println(start.getNodeName()+" = "+start.getNodeValue()); if (start.getNodeType() == start.ELEMENT_NODE) { NamedNodeMap startAttr = start.getAttributes(); for (int i = 0; i < startAttr.getLength(); i++) { Node attr = startAttr.item(i); System.out.println(" Attribute: "+ attr.getNodeName() +" = "+attr.getNodeValue()); } } for (Node child = start.getFirstChild(); child != null; child = child.getNextSibling()) { stepThroughAll(child); }}

Page 152: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 152

Manipulando Atributos

Page 153: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 153

Edição de documentos XML Existem métodos para

adicionar nodes, remover nodes, mudar valores de nodes

Consulte a API!

Page 154: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 154

SAX

SAXSimple API for XMLOutro método para acessar o conteúdo de documentos XML.Desenvolvido por membros da XML-DEV mailing-list (não é da W3C)Usa um modelo baseado em eventos

Notificações (eventos) ocorrem à medida em que o documento é analizado (“parsed”)

Page 155: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 155

SAX-based Parsers

SAX-based parsersDisponível em várias LPs:

e.g., Java, Python, C++, etc.

Produto Descrição

JAXP Sun JAXP é disponível em java.sun.com/xml.JAXP suporta SAX e DOM.

Xerces Apache Xerces parser é disponível emwww.apache.org. Xerces suporta SAX e DOM.

MSXML 3.0 Microsoft msxml parser disponível emmsdn.microsoft.com/xml e suporta SAX eDOM.

Page 156: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 156

Eventos

SAX parserInvoca certos métodos quando eventos ocorrem

Programadores devem fazer overriding destes métodos para processar os dados

Page 157: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 157

Métodos invocados pelo SAX parser

Método Descrição

setDocumentLocator Invocado no início do parsing.startDocument Invocado quando o parser encontra o início

de um documento XMLendDocument Invocado quando o parser encontra o fim de

um documento XMLstartElement Invocado quando a tag de inicio de um elemento é encontradaendElement Invocado quando a tag de fim de um elemento é encontrada.characters Invocado quando text characters são encontrados.ignorableWhitespace Invocado quando whitespace que pode ser ignorado é

encontrado.processingInstruction Invocado quando um PI é encontrada.

Page 158: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 158

Como SAX funciona?Dado o documento XML abaixo:

<?xml version="1.0"?><samples><server>UNIX</server><monitor>color</monitor></samples>

SAX gera os seguintes EVENTOS:Start documentStart element (samples)Characters (white space)Start element (server)Characters (UNIX)End element (server)Characters (white space)Start element (monitor)Characters (color)End element (monitor)Characters (white space)End element (samples)

Page 159: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 159

Como SAX funciona?Processamento em SAX involve os seguintes passos

1. Criar um event handler2. Criar o SAX parser3. Associar o event handler ao parser criado4. Fazer o parsing do documento, enviando cada evento aoevent handler.

Page 160: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 160

Exemplo: Uma pesquisa de opinião

<?xml version="1.0"?><surveys><response username="bob"><question subject="appearance">A</question><question subject="communication">B</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">B</question></response><response username="sue"><question subject="appearance">C</question><question subject="communication">A</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">A</question></response><response username="carol"><question subject="appearance">A</question><question subject="communication">C</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">C</question></response></surveys>

Page 161: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 161

Criando um event handler

import org.xml.sax.helpers.DefaultHandler;public class SurveyReader extends DefaultHandler{

public SurveyReader() {System.out.println("Object Created.");

}public void showEvent(String name) {

System.out.println("Hello, "+name+"!");}public static void main (String args[]) { SurveyReader reader = new SurveyReader(); reader.showEvent(”Nick");}

}

Page 162: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 162

Criando o SAX parser

// Exemplo usando JAXPimport org.xml.sax.helpers.DefaultHandler;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.XMLReader;

public class SurveyReader extends DefaultHandler{

public SurveyReader() {}public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory =

SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser();

xmlReader = saxParser.getXMLReader();

} catch (Exception e) { System.err.println(e); System.exit(1); }}

}

Page 163: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 163

Associando o event handler ao parser

...xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new SurveyReader());} catch (Exception e) {...

Page 164: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 164

Parsing os dados...import org.xml.sax.InputSource;...xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new SurveyReader());InputSource source = new InputSource("surveys.xml");xmlReader.parse(source);} catch (Exception e) {...

Pronto! Falta apenas definir os eventos ...

Page 165: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 165

Criando um ErrorHandler...import org.xml.sax.SAXParseException;public class SurveyReaderextends DefaultHandler{ public SurveyReader() { } public void error (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); } public void warning (SAXParseException e) { System.out.println("Problem parsing the file: "+e.getMessage()); } public void fatalError (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); System.out.println("Cannot continue."); System.exit(1); }public static void main (String args[]) { ...

Page 166: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 166

Associando o ErrorHandler

...xmlReader.setContentHandler(new SurveyReader());xmlReader.setErrorHandler(new SurveyReader());InputSource source = new InputSource("surveys.xml");...

Page 167: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 167

Eventos: startDocument()...import org.xml.sax.SAXException;public class SurveyReaderextends DefaultHandler{...public void fatalError (SAXParseException e) {System.out.println("Error parsing " +"the file: "+e.getMessage());System.out.println("Cannot continue.");System.exit(1);}public void startDocument() throws SAXException { System.out.println("Tallying survey results...");}public static void main (String args[]) {...

Page 168: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 168

Eventos: startElement()...import org.xml.sax.Attributes;public class SurveyReader extends DefaultHandler{ ... public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { System.out.print("Start element: "); System.out.println(localName); } public static void main (String args[]) { …}

Page 169: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 169

startElement(): pegando atributos

...public void startElement(

String namespaceURI,String localName,String qName,Attributes atts)throws SAXException {

System.out.print("Start element: "); System.out.println(localName); for (int att = 0; att < atts.getLength(); att++) { String attName = atts.getLocalName(att); System.out.println(" " + attName + ": " + atts.getValue(attName)); }}...

Page 170: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 170

Obtendo Dados: characters()

…// ch inclui o documento inteiropublic void characters(char[] ch,

int start,int length)throws SAXException {

if (thisElement == "question") {printIndent(4);System.out.print(thisQuestion + ": ");System.out.println(new String(ch, start, length));

}}...

Page 171: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 171

Obtendo Dados: characters()

Page 172: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 172

Obtendo Dados: characters() (completo)

...public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" ");}} String thisQuestion = ""; String thisElement = ""; public void startElement( String namespaceURI,

String localName,String qName,Attributes atts)throws SAXException {

if (localName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (localName == "question") { thisQuestion = atts.getValue("subject"); } thisElement = localName; }

public void endElement( String namespaceURI,

String localName,String qName)throws SAXException {

thisQuestion = ""; thisElement = "";}public void characters(char[] ch,

int start,int length)throws SAXException {

if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); }}...

Page 173: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 173

SAX versus DOM

DOMModelo baseado em árvorearmazena o documento inteiro numa hierarquia de document nodesDados são acessados rapidamenteProvê facilidades para adicionar e remover nodes

SAXInvoca métodos quando markup (tag) é encontradaMelhor performance do que DOMMenos overhead de memória do que DOMTipicamente usado para ler documentos (não para modificá-los)

Page 174: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 174

XSL - eXtensible Stylesheet Language

Page 175: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 175

XSL - Motivação Vantagens de separar apresentação de

conteúdo: Múltiplos formatos de saída: tamanhos

diferentes, mídias diferentes (papel, online), dispositivos diferentes (PDA, celular, PC)

Interface voltada para usuário (ex.: acessabilidade), cores, fontes, etc.

Uso de estilos padrões Liberdade do autor não se preocupar com

apresentação, que será tratada depois por um profissional.

Page 176: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 176

Opções para mostrar XML

Page 177: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 177

O que faz uma folha de estilo? Especifica a apresentação de XML

em duas categorias: Uma transformação opcional do

documento de entrada em outra estrutura

Uma descrição de como apresentar a informação transformada

Page 178: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 178

O que faz um folha de estilo? geração de texto supressão de conteúdo mover texto duplicar texto ordenação transformações mais complexas

que computam nova informação baseada na informação existente.

Page 179: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 179

Revisão de CSS CSS - Cascade Style Sheet Define o estilo de um documento

para apresentação Pode ser inline ou externa ao

documento Precedência de estilos:

Autor > Usuário > Web Browser

Page 180: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 180

External Style Sheets

External Style SheetsContidas num arquivo.css Único style sheet usado por múltiplas páginasUsado com o elemento link

Page 181: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 181

Exemplo de um CSS

/* styles.css *//* An external stylesheet */a { text-decoration: underline; color: red; background-color: #ccffcc }

li em { color: red; font-weight: bold}

ul { margin-left: 2cm }

<html><!-- Linking external style sheets --><head><title>Exemplo de CSS</title><link rel = "stylesheet" type = "text/css”

href = "styles.css"></head>

Page 182: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 182

XSL - Princípios gerais

Como CSS, funcionamento a base de regras

CSS não modifica a estrutura de um documento, XSL sim

XSL utiliza a sintaxe XML

Page 183: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 183

XSL - Histórico

XML derivada de SGMLPadronizada pelo W3CXSL derivada de DSSSL (Document Style Semantics and Specification Language)Primeira proposta formal em 1997 pela W3C (já continha conceitos de XSLT, como uso de templates)Novembro de 1999 XSLT tornou-se uma recomendação da W3CÚltima versão de XSL: Outubro de 2001 (incluindo XSL-FO)

Page 184: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 184

Componentes de XSL

XSL consiste logicamente de 3 componentes:

XPath: XML Path Language-- linguagem para referenciar partes específicas de um documento XML

XSLT: XSL Transformations-- linguagem para descrever como transformar um documento XML (representado como uma árvore) em outro

XSL-FO: uma descrição de um conjunto de Formatting Objects e Formatting Properties

Page 185: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 185

XSLT - Características

Linguagem declarativaDescreve a transformação desejada, ao invés de prover uma sequência de instruções procedurais

XSLT é essencialmente uma “ferramenta” para transformar documentos XML

XSLT manipula árvores

Uso de XSL Namespaces - O W3C provê um namespace para tags XSL

Page 186: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 186

XSLT - Características

Processadores XSLT

Aplicam um stylesheet XSLT a um documento origem XML e produz um documento resultado.

Tratam árvores

Exemplos de processadores: Saxon, xt, MSXML3, Xalan (Apache)Web browsers já trazem tal processador sobretudo IE 6.0 e Netscape 6.0

Page 187: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 187

XSLT - Estrutura de uma folha XSL

Uma folha XSL é um conjunto de regras

Uma regra associa um seletor a uma forma ou modelo

O seletor define a estrutura a qual pode se aplicar esta regra

A forma define a estrutura da sub-árvore gerada quando da ativação da regra

Se várias regras se aplicam a um elemento, a mais específica é executada

Page 188: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

188

XSLT - CaracterísticasElemento raiz de um documento XSL é <xsl:stylesheet> ou <xsl:transform>

<xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>

<?xml version=“1.0” encoding=ISO-8859-1”?><xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>

<xsl:template match=“”>corpo do template

</xsl:template>…

<xsl:template match=“”>corpo do template

</xsl:template></xsl:stylesheet>

Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou <xsl:transform> + Conjunto de regras de template

Page 189: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 189

XSLT - Características

O corpo das regras de template é constituído por:Expressões XPathElementos XSLTFunções XSLT e XPath

Permite manipular partes de um documento

Duas formas de utilizar um arquivo xsl:Através de uma linha de comando, que referencia os documentos envolvidos na transformação (p.e, o xml origem, o html resultado e o xslt)Incluindo uma referência no próprio arquivo xml

Page 190: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 190

<?xml version=“1.0” encoding=“iso-8859-1”?><saudacao>Bem-vindo ao InfoView 2002!</saudacao>

Saudacao.xml

<html><head>

<title>Saudação de Hoje</title></head><body>

<p>Bem-vindo ao InfoView 2002!</p></body></html>

Saudacao.html

Page 191: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 191

<?xml version=“1.0” encoding=“iso-8859-1”?><xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”><xsl:template match=“/”>

<html><head>

<title>Saudação de Hoje</title></head><body>

<p><xsl:value-of select=“saudacao”/></p></body></html>

</xsl:template></xsl:stylesheet>

Saudacao.xsl

Linha de comando para transformar Saudacao.xml em Saudacao.html via Saudacao.xsl:C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html

Page 192: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 192

<?xml version=“1.0” encoding=“iso-8859-1”?><?xml-stylesheet type=“text/xsl” href=“saudacao.xsl”?><saudacao>Bem-vindo ao InfoView 2002!</saudacao>

Saudacao.xml

Inclusão de uma referência ao arquivo xsl no próprio arquivo xml:

Page 193: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 193

Exemplo 2

Stylesheet que transforma elementos <para> e <emphasis>

para HTML:<?xml version='1.0'?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="para"> <p><xsl:apply-templates/></p></xsl:template>

<xsl:template match="emphasis"> <i><xsl:apply-templates/></i></xsl:template>

</xsl:stylesheet>

Page 194: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 194

Exemplo 2(cont)

Com a stylesheet anterior, o documento XML:<?xml version='1.0'?><para>Isto é um <emphasis>teste</emphasis>.</para>

seria transformado em:<?xml version="1.0" encoding="utf-8"?><p>Isto é um <i>teste</i>.</p>

Page 195: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 195

Exemplo 3:<capitulo titulo = introducao>

Texto do capitulo

</capitulo>

<xsl:template match=“capitulo”>

<H1> <xsl:value-of select=“./@titulo”> </H1>

<xsl:apply-templates/>

</xsl:template>

<xsl:template match=“text()”>

<xsl:value-of select=“.”/>

</xsl:template>

<H1> Introducao </H1>

Texto do capitulo

XML

XSL

HTML

Page 196: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 196

Templates

A maioria dos templates têm a seguinte forma:<xsl:template match="emphasis">

<i><xsl:apply-templates/></i></xsl:template>

The elemento <xsl:template> é um template

O match pattern determina onde este template se aplica

Elementos XSLT vêm do XSL namespace

Page 197: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 197

XSLT – Expressões XPath

Contrutores sintáticosChamadas de função - pode-se chamar funções embutidas ou definidas em XSLT

concat()calculaDesconto()count(@*)not(isbn)

$ - referencia uma variável ou um parâmetro$X$ALPHA

or, and - representa expressões booleanas or e and, respectivamente$x = 5 or $x = 10 $x &gt; 3 and $x &lt; 8

Page 198: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 198

Xpath - Exemplo de patterns (1)

para associa todos filhos <para> no contexto corrente

para/emphasis associa com todos elementos <emphasis> que têm um pai <para>

/ associa com a raiz do documento

para//emphasis associa com todos elementos <emphasis> que têm um ancestral <para>

section/para[1] associa o primeiro filho <para> de todos os filhos <section> no contexto corrente

//title associa todos elementos <title> em qualquer lugar no documento

.//title associa todos elementos <title> que são descendentes do contexto corrente

Page 199: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 199

XPath- Exemplo de patterns (2)

section/*/note associa elementos <note> que tenham <section> como avós.

stockquote[@symbol] associa elementos <stockquote> que têm um atributo "symbol"

stockquote[@symbol="XXXX"] associa elementos <stockquote> que têm um atributo "symbol" com valor "XXXX"

emphasis|strong associa elementos <emphasis> ou <strong>

Page 200: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 200

XSLT - Elementos

Elementos XSLT possuem sintaxe e semântica bem definidos

Existem muitos elementos pré-definidos no namespace XSLT e que são interpretados por processadores XSLT

Nem todos os elementos XSLT estão disponíveis para todos os processadores XSLT

Forma:<xsl: element_name>

Page 201: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 201

XSLT - Elementos

<?xml version="1.0" encoding="ISO-8859-1" ?> -<catalog>

<cd><title>Empire Burlesque</title><artist>Bob Dylan</artist>

  <country>USA</country><company>Columbia</company><price>10.90</price>

<year>1985</year> </cd><cd>

<title>Hide your heart</title><artist>Bonnie Tyler</artist><country>UK</country><company>CBS Records</company><price>9.90</price><year>1988</year>

</cd>...

</catalog>

Exemplo Base de XML:

Page 202: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 202

XSLT - Elementos

<xsl:template>Contém regras que serão aplicadas a um nó específicoPossui o atributo “match”, que determina à qual elemento XML, a regra deve ser aplicada.

<xsl:value-of>É usado para selecionar o valor de um elemento XML e adicioná-lo à saída da transformaçãoPossui o atributo “select”, que contém uma expressão Xpath que calcula o valor a ser adicionado ao documento resultado

Page 203: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 203

<?xml version="1.0" encoding="ISO-8859-1" ?>

<xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform”>

<xsl:template match="/">

<html> <body>

-<h2>My CD Collection</h2>

<table border="1">

<tr bgcolor="#9acd32">

<th>Title</th>

<th>Artist</th>

</tr>

<tr>

<td>  <xsl:value-of select="catalog/cd/title" />   </td>- <td>  <xsl:value-of select="catalog/cd/artist"/>   </td>

</tr>

</table>

</body> </html> </xsl:template>  </xsl:stylesheet>

Page 204: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 204

Resultado

Page 205: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 205

XSLT - Elementos

<xsl:for-each>Permite a construção de loopsPossui o atributo “select”, que contém uma expressão Xpath que vai determinar sobre que elemento será realizado o loop

<xsl:sort>É usado para ordenar a saídaPossui o atributo “select”, que indica qual elemento XML ordenarPossui o atributo “order”, que indica o tipo da ordenação: ascending ou descending.

Page 206: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 206

<?xml version="1.0" encoding="ISO-8859-1" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">-

<xsl:template match="/">

<html><body>

  <h2>My CD Collection</h2>

<table border="1">

<tr bgcolor="#9acd32">

<th>Title</th>

<th>Artist</th>

</tr>

<xsl:for-each select="catalog/cd">

<xsl:sort select="artist" />

<tr>

<td>  <xsl:value-of select="title" />   </td>

<td>  <xsl:value-of select="artist" />   </td>

  </tr>

</xsl:for-each>

  </table>

</body>  </html>

  </xsl:template>  </xsl:stylesheet>

Page 207: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 207

Resultado

Page 208: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 208

XSLT - Elementos

<xsl:if>Aplica um conteúdo apenas se uma condição especificada for verdadeiraPossui o atributo “test”, que contém a expressão a ser avaliada

<xsl:if test=“price&gt;‘10’>conteúdo ...

</xsl:if>

Page 209: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 209

<?xml version="1.0" encoding="ISO-8859-1" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html><body>

  <h2>My CD Collection</h2>

<table border="1">

<tr bgcolor="#9acd32">

  <th>Title</th>

  <th>Artist</th>

</tr>

<xsl:for-each select="catalog/cd">

<xsl:if test="price&gt;'10'">

<tr>

<td>  <xsl:value-of select="title" />   </td>

<td>  <xsl:value-of select="artist" />   </td>

</tr>

</xsl:if>

</xsl:for-each>

</table>

  </body>  </html> </xsl:template>  </xsl:stylesheet>

Page 210: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 210

XSLT - Elementos

Page 211: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 211

XSLT - Elementos<xsl:attribute>

É usado para adicionar atributos aos elementos

<picture><xsl:attribute name=“source”/>

<picture>

<xsl:template match="/"> <xsl:for-each select="catalog/cd">

<xsl:element name="singer"><xsl:value-of

select="artist" /> </xsl:element><br />

</xsl:for-each></xsl:template>

<xsl:element> cria um elemento (node) na saída

Page 212: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 212

XSLT - Elementos

<xsl:copy>Cria uma cópia do nó corrente do documento origem para o documento destino

<xsl:template match="message"> <xsl:copy></xsl:copy>

</xsl:template>

<xsl:copy-of>–Cria uma cópia do nó corrente (inclusive os nós filhos e atributos)

Page 213: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 213

<?xml version = "1.0"?><!-- Banco de Dados Esporte --><esportes> <jogo titulo = "cricket">

<id>243</id> <para> Mais popular na Inglaterra </para>

</jogo> <jogo titulo = ”baseball">

<id>431</id> <para> Mais popular nos EUA </para>

</jogo> <jogo titulo = ”futebol">

<id>123</id> <para> Mais popular no Brasil </para>

</jogo></esportes>

Exemplo: Seja o DB XML:

Page 214: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 214

match elemento esportes e aplica os templates aos nodes

filhos esportes

<?xml version = "1.0"?><!-- Usando xsl:element e xsl:attribute --><xsl:stylesheet version = "1.0” xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <xsl:apply-templates/> </xsl:template>

<xsl:template match = ”esportes"> <esportes> <xsl:apply-templates/> </esportes> </xsl:template> <xsl:template match = ”jogo"> <xsl:element name = "{@titulo}"> <xsl:attribute name = "id">

<xsl:value-of select = "id"/> </xsl:attribute> <comment>

<xsl:value-of select = "para"/> </comment>

</xsl:element> </xsl:template></xsl:stylesheet>

Use o atributo match para selecionar a raiz do documento XML

Cria elemento titulo

Cria atributo id para elemento titulo

Cria comentário com o conteúdo do elemento

para

Exemplo (cont): XSL

Page 215: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 215

<?xml version = "1.0" ?><esportes> <cricket id = "243">

<comment> Mais popular na Inglaterra</comment>

</cricket> <baseball id = "432">

<comment> Mais popular nos EUA</comment>

</baseball> <futebol id = ”123">

<comment> Mais popular no Brasil</comment>

</futebol></esportes>

Resultado produzido

Page 216: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 216

XSLT - Elementos

<xsl:param> Elemento que define parâmetros Possui o atributo “name” para assinalar o nome do

parâmetro Possui o atributo “select”, que armazena o valor do

parâmetro

<xsl:call-template> Elemento que chama um determinado template Possui o atributo “name” para assinalar o nome do

template

Page 217: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 217

<xsl:with-param> Elemento que define os valores dos parâmetros quando da

chamada de um template Possui o atributo “name” para assinalar o nome do

parâmetro Possui o atributo “select”, que armazena o valor do

parâmetro

<xsl:variable> Elemento usado para declarar variáveis Possui o atributo “name” para assinalar o nome da variável Possui o atributo “select”, que armazena o valor do variável

XSLT - Elementos

Page 218: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 218

XSLT - Elementos

<xsl:template name=“parenthsize”><xsl:param name=“string”/><xsl:value-of select=“concat(‘(‘,$string,’)’)”/>

</xsl:template>

<xsl:variable name=“credit-in-paren”><xsl:call-template name=“parenthsize”>

<xsl:with-param name=“string” select=“@credit”/></xsl:call-template>

<xsl:variable>

Page 219: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 219

XSLT - Elementos

<xsl:text> Elemento usado para escrever texto na saída

<xsl:template match="car"> <p> <xsl:value-of

select="@year"/> <xsl:text>.</xsl:text> <xsl:value-of

select="@color"/> </p> </xsl:template>

Page 220: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 220

XSLT - Funções

Juntamente com XPath e os elementos XSLT, formam o core XSLT

Em um stylesheet XSLT podem ser usadas dois tipos de funções built-in:

Funções XPath Funções XSLT

Existem ainda as funções que podem ser definidas pelo elemento XSLT <xsl:functions>

<xsl:value-of select=“funcs:f1”><xsl:functions ns=“funcs” type=“text/javascript”>

function f1() { return “Funcao 1”; }

</xsl:functions>

Page 221: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 221

XSLT - Funções

format-number() É usada para converter números em strings de

acordo com algum padrão de formato format-number(value, format) => string<<format-number(12.5, ‘$#.00’)>> <<$12.50>><<format-number(0.25, ‘#00%’)>> <<25%>>

generate-id() Gera um string, na forma de um nome XML, que

unicamente identifica um nó. generate-id(nó) => string o código retornado depende do XSLT processor<<generate-id(book)>> <<N015732>>

Page 222: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 222

XSLT - Funções

current() Retorna o nó corrente current() => conjunto de nós<<generate-id(current())>>

document() Retorna o nó raiz de um documento XML externo document(uri) => nó

<<document(‘data.xml’)>>

Page 223: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 223

XSLT - Funções

id() Retorna o nó com um determinado valor para seu

atributo ID id(value) => nó<<id(‘A321-780’)>> <product code=“A321-780”>

element-available() É usada para testar se um determinada instrução

XSLT está disponível para uso. Element-available(name) => boolean<<element-available(‘xsl:text’)>>

Page 224: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 224

XSLT - Funções

count(arg1) retorna o número de nodes presentes no conjunto de

nós passados como argumento sum(arg1)

calcula a soma de um conjunto de valores numéricos contidos nos nodes do conjunto de nodes passados como argumento

contains(arg1, arg2) testa se arg1 contém arg2 como substring é case sensitive

Ex: contains (‘Paris’, ‘A’) retorna false

Page 225: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 225

XSLT - Exemplo Completo (Doc1 – Documento Origem XML)<?xml version="1.0" encoding="utf-8" ?>

<customers>  <customer CustomerID="ALFKI" CompanyName="Alfreds Futterkiste"

ContactName="Maria Anders" ContactTitle="Sales Representative" Address="Obere Str. 57" City="Berlin" PostalCode="12209" Country="Germany" Phone="030-0074321" Fax="030-0076545" />

  <customer CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" ContactName="Ana Trujillo" ContactTitle="Owner" Address="Avda. de la Constitución 2222" City="México D.F." PostalCode="05021" Country="Mexico" Phone="(5) 555-4729" Fax="(5) 555-3745" />

  <customer CustomerID="AROUT" CompanyName="Around the Horn" ContactName="Thomas Hardy" ContactTitle="Sales Representative" Address="120 Hanover Sq." City="London" PostalCode="WA1 1DP" Country="UK" Phone="(171) 555-7788" Fax="(171) 555-6750" />

  <customer CustomerID="BERGS" CompanyName="Berglunds snabbköp" ContactName="Christina Berglund" ContactTitle="Order Administrator" Address="Berguvsvägen 8" City="Luleå" PostalCode="S-958 22" Country="Sweden" Phone="0921-12 34 65" Fax="0921-12 34 67" />...

</customers>

Page 226: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 226

<?xml version="1.0" encoding="UTF-16" ?>

<customers><customer CompanyName="Cactus Comidas para llevar" CustomerID="CACTU" Country="Argentina" />

  <customer CompanyName="Océano Atlántico Ltda." CustomerID="OCEAN" Country="Argentina" />

  <customer CompanyName="Ernst Handel" CustomerID="ERNSH" Country="Austria" />   <customer CompanyName="Piccolo und mehr" CustomerID="PICCO"

Country="Austria" />   <customer CompanyName="Maison Dewey" CustomerID="MAISD"

Country="Belgium" />  <customer CompanyName="Comércio Mineiro" CustomerID="COMMI"

Country="Brazil" />

...<customer CompanyName="Save-a-lot Markets" CustomerID="SAVEA" Country="USA" />   <customer CompanyName="The Big Cheese" CustomerID="THEBI" Country="USA" />

</customers>

XSLT - Exemplo Completo (Doc1 – Documento Resultado XML)

Page 227: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 227

<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match=“customer">

  <xsl:apply-templates /> </xsl:template> <xsl:template match="customers"> <xsl:for-each select="customer">  <xsl:sort select="@Country" order="ascending" />

<customer> <xsl:attribute name="CompanyName">  <xsl:value-of select="@CompanyName" />   </xsl:attribute>

<xsl:attribute name="CustomerID">  <xsl:value-of select="@CustomerID" />

</xsl:attribute><xsl:attribute name="Country">

  <xsl:value-of select="@Country"/></xsl:attribute>

  </customer>  </xsl:for-each></xsl:template> </xsl:stylesheet>

XSLT - Exemplo Completo (Documento XSLT para conversão Doc1 => Doc2)

Page 228: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 228

XSL: Extensible Stylesheet Language Formatting Objects

Formatting objects Usado para formatar documentos XML

para apresentação Tipicamente usado quando o resultado da

transformção é para mídia impressa livros, revistas, encartes, etc.

FOP Ferramenta em Java da Apache Transforma documentos XSL que contêm

formatting objects Download em xml.apache.org/fop

Page 229: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 229

XSLFO Exemplos de ferramentas

http://xml.apache.org/fop - FOP para PDF

http://www.unicorn-enterprises.com/ - TeX para PDF

http://www.jfor.org/ - XSLFO para RTF http://www.xsmiles.org/ - browser XML

que usa FOP

Page 230: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 230

<?xml version="1.0" encoding="utf-8"?><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">...<fo:page-sequence> <fo:flow> <fo:block font-size="18pt" font-weight="bold" text-align="centered"> Prefácio </fo:block> <fo:block font-size="12pt" space-before="1pc" text-align="justified"> Este é um documento simples de teste. Ele mostra uma <fo:inline font-style="italic">árvore</fo:inline> fo-result parcial (sem usar page layout). </fo:block> </fo:flow></fo:page-sequence>...</fo:root>

Exemplo

Page 231: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 231

Exemplo<xsl:template match="chapter"> <fo:flow> <xsl:apply-templates/> </fo:flow></xsl:template>

<xsl:template match="chapter/title"> <fo:block font-size="18pt" font-weight="bold" text-align="centered"> <xsl:apply-templates/> </fo:block></xsl:template>

<xsl:template match="para"> <fo:block font-size="12pt" space-before="1pc" text-align="justified"> <xsl:apply-templates/> </fo:block></xsl:template>

<xsl:template match="emphasis"> <fo:inline font-style="italic"> <xsl:apply-templates/> </fo:inline></xsl:template>

Page 232: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 232

page-sequence-- a parte maior (tal como body) na qual o layout de página

pode diferir de outras partes

flow-- um capítulo ou divisão de seção dentro de uma page-sequence

block-- um parágrafo (ou title ou block quote, etc.)

inline-- uma mudança de fonte dentro de um parágrafo

list FOs--list-block, list-item, list-item-label, list-item-body

graphic--referencia um objeto gráfico externo

table FOs--análogo a table model em HTML

Alguns Formatting Objects (FO)

Page 233: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 233

fonte

margens e espaçamento

bordas

alinhamento horizontal/justification

endentação

dentre outros ...

Propriedades básicas

Page 234: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 234

<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="article"> <fo:page-sequence font-family="serif" font-size="12pt"> <xsl:apply-templates/> </fo:page-sequence></xsl:template>

<xsl:template match="chapter"> <fo:flow> <xsl:apply-templates/> </fo:flow></xsl:template>

<xsl:template match="para"> <fo:block space-before="6pt"> <xsl:apply-templates/> </fo:block></xsl:template><!--(continua no próximo slide) -->

Exemplo Final

Page 235: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 235

<xsl:template match="chapter/title"> <fo:block font-family="sans-serif" color="blue" font-weight="bold" font-size="18pt" space-after="0.5em"> <xsl:number level="multiple" count="chapter"/> <xsl:text> </xsl:text>

<xsl:apply-templates/> </fo:block></xsl:template><xsl:template match="section/title"> <fo:block font-family="sans-serif" font-weight="bold" font-size="16pt" space-after="0.5em"> <xsl:number level="multiple" count="chapter|section"/> <xsl:text> </xsl:text> <xsl:apply-templates/> </fo:block></xsl:template><xsl:template match="article/title"> <fo:block font-family="sans-serif" font-size="24pt" space-after="2pc"> <xsl:apply-templates/> </fo:block></xsl:template></xsl:stylesheet>

Exemplo (cont)

Page 236: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 236

Consulta a dados semi-estruturados

Page 237: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 237

Requisitos desejáveis (Maier ’98) Expressividade

linguagem de consulta ao estilo SQL possibilitar a restruturação de dados semi-estruturados

Semântica precisa muito importante para XML

Composição o resultado de uma consulta deve poder ser

utilizado dentro de uma outra consulta Consulta ao esquema

visando otimização Facilitar a geração automática de consultas

Consulta

Page 238: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 238

Expressões de caminho (Path expressions)

Expressões que permitem navegar no grafo de dados

Expressões de caminho simples sequências de labels exemplos

root.pessoas {&p1,&p2,&p3}root.pessoas.filhos {&p2,&p3}

semântica o resultado de uma expressão de caminho r.l1. … .ln,

onde l1,…,ln são os labels e r um objeto, é o conjunto de nodos do grafo acessíveis de r por um caminho do grafo tal que os arcos percorridos passam sucessivamente pelos labels l1,…,ln.

Page 239: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 239

Expressões de caminho Expressões de caminho generalizadas Idéia: além de especificar completamente um caminho,

permite exprimir restrições (constraints) sobre o caminho

Utilização de expressões regulares Exemplos

_ é um caracter coringa que designa um label qualquer

(pessoa|estudante)._.idade As expressões de caminho definidas até o presente

retornam os conjuntos de objetos e não de dados semi-estruturados

Consulta

Page 240: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 240

Linguagem de Consulta

X-Query

Page 241: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 241

XQuery

Baseda em Quilt (que é baseda em XML-QL)

http://www.w3.org/TR/xquery/2/2001

XML Query data model

Page 242: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 242

FLWR (“Flower”) ExpressionsFOR ... LET... WHERE...RETURN...

Page 243: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 243

XQuery

Encontre os títulos dos livros publicados após 1995:

FOR $x IN document("bib.xml")/bib/book

WHERE $x/year > 1995

RETURN $x/title

FOR $x IN document("bib.xml")/bib/book

WHERE $x/year > 1995

RETURN $x/titleResultado: <title> abc </title> <title> def </title> <title> ghi </title>

Page 244: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 244

XQueryPara cada autor de um livro publicado pela

Morgan Kaufmann, listar os livros publicados:

FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)

RETURN <result>

$a,

FOR $t IN /bib/book[author=$a]/title

RETURN $t

</result>

FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)

RETURN <result>

$a,

FOR $t IN /bib/book[author=$a]/title

RETURN $t

</result>

distinct = elimina duplicatas

Page 245: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 245

XQuery

Resultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>

Page 246: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 246

XQuery

FOR $x in expr -- liga $x a cada valor na lista expr

LET $x = expr -- liga $x à inteira lista expr Usado para subexpressões comuns e

para agregações

Page 247: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 247

XQuery

count = função (aggregate) que retorna o número de elementos

<big_publishers>

FOR $p IN distinct(document("bib.xml")//publisher)

LET $b := document("bib.xml")/book[publisher = $p]

WHERE count($b) > 100

RETURN $p

</big_publishers>

<big_publishers>

FOR $p IN distinct(document("bib.xml")//publisher)

LET $b := document("bib.xml")/book[publisher = $p]

WHERE count($b) > 100

RETURN $p

</big_publishers>

Page 248: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 248

XQuery

Encontre os livros cujos preços são maiores do que a média de preços:

FOR $b in document("bib.xml")/bib/book

LET $a=avg(document("bib.xml")/bib/book/price)

WHERE $b/price > $a

RETURN $b

FOR $b in document("bib.xml")/bib/book

LET $a=avg(document("bib.xml")/bib/book/price)

WHERE $b/price > $a

RETURN $b

Page 249: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 249

XQuery

Sumário: FOR-LET-WHERE-RETURN = FLWR

FOR/LET Clauses

WHERE Clause

RETURN Clause

Lista de tuplas

Lista de tuplas

Instância do modelo de dados Xquery

Page 250: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 250

FOR versus LET

FOR liga variáveis nodo iteration

LET liga variáveis coleção one value

Page 251: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 251

FOR versus LET

FOR $x IN document("bib.xml")/bib/book

RETURN <result> $x </result>

FOR $x IN document("bib.xml")/bib/book

RETURN <result> $x </result>

Retorna: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ...

LET $x IN document("bib.xml")/bib/book

RETURN <result> $x </result>

LET $x IN document("bib.xml")/bib/book

RETURN <result> $x </result>

Retorna: <result> <book>...</book> <book>...</book> <book>...</book> ...</result>

Page 252: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 252

Coleções em XQuery

Conjuntos e Bags /bib/book/author = uma coleção do tipo Bag Distinct(/bib/book/author) = uma coleção do

tipo conjunto (Set) LET $a = /bib/book $a é uma coleção $b/author uma coleção (vários

autores...)RETURN <result> $b/author </result>RETURN <result> $b/author </result>

Retorna: <result> <author>...</author> <author>...</author> <author>...</author> ...</result>

Page 253: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 253

Ordenação em XQuery

<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>

<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>

Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR

Page 254: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 254

If-Then-Else

FOR $h IN //holding

RETURN <holding>

$h/title,

IF $h/@type = "Journal"

THEN $h/editor

ELSE $h/author

</holding> SORTBY (title)

FOR $h IN //holding

RETURN <holding>

$h/title,

IF $h/@type = "Journal"

THEN $h/editor

ELSE $h/author

</holding> SORTBY (title)

Page 255: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 255

Quantificador Existencial

FOR $b IN //book

WHERE SOME $p IN $b//para SATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN $b/title

FOR $b IN //book

WHERE SOME $p IN $b//para SATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN $b/title

Page 256: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br

InfoView2002 256

Quantificador Universal

FOR $b IN //book

WHERE EVERY $p IN $b//para SATISFIES

contains($p, "sailing")

RETURN $b/title

FOR $b IN //book

WHERE EVERY $p IN $b//para SATISFIES

contains($p, "sailing")

RETURN $b/title