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

Preview:

Citation preview

InfoView2002 1

XML – eXtensible Markup Language

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

baptista@dsc.ufcg.edu.brhttp://www.lsi.dsc.ufcg.edu.br

InfoView2002 2

Roteiro

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

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

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)

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

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

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)

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

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

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

InfoView2002 11

Resultado produzido

HTML descreve a apresentação

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.

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.

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

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 ...

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

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

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

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.

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

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.

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

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

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

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)

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

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

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

InfoView2002 29

Resumindo: XML ...

XML é uma linguagem de

descrição e de troca de

documentos (semi-)estruturados

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

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>

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.

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

InfoView2002 34

Descoberta de XML

Vantagens de XML

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

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

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

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

InfoView2002 39

Descoberta de XML

Definição da linguagem XML 1.0

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

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

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

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

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

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

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

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

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 é ]]>.

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.

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

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

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

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

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)>

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

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

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

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)* >

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) >

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>

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

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)>

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>

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

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

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'>

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

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

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

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

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

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

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

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

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> maia@yahoo.com </email>

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

<idade> 24 </idade><email> ana.maria@uol.com.br </email>

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

XML 1.0: Exemplos

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)>]>

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

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

InfoView2002 79

Namespaces

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

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>

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>

InfoView2002 83

Namespace default

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

<title> George Soros </title>

<h2> Contabilidade ... </h2>

<math:reln>

.....

</math:reln>

</html>

InfoView2002 84

Nome de Atributo com Namespace

Atributos podem ter namespace Exemplo:

<myLink xmlns:xlink=”...”

xlink:type=”simple”

......

</myLink>

InfoView2002 85

XML Schema

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”

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”

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

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

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)

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>

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)+>

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..

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

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

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!

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.

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

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

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!

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>

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

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.

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>

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.

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>

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>

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)

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)

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>

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.

InfoView2002 112

Facetas do tipo Integer Facets:

pattern enumeration whitespace maxInclusive maxExclusive minInclusive minExclusive precision

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>

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.

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>

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>

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

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)>

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

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 ...

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>

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"

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?

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

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)

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>

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:

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.

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:

InfoView2002 130

XML API: DOM e SAX

Prof. Dr. Cláudio Baptistabaptista@dsc.ufcg.edu.br

http://www.lsi.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.)

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

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

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>

InfoView2002 135

Exemplo (cont)

InfoView2002 136

Tipos básicos de nodes Document Element Attribute Text

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

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.

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.

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.

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..

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.

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

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.

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."); } }}

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());}

}

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."); }}

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()); }}}...

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); }}

InfoView2002 150

Resultado:

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); }}

InfoView2002 152

Manipulando Atributos

InfoView2002 153

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

adicionar nodes, remover nodes, mudar valores de nodes

Consulte a API!

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”)

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.

InfoView2002 156

Eventos

SAX parserInvoca certos métodos quando eventos ocorrem

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

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.

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)

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.

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>

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");}

}

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); }}

}

InfoView2002 163

Associando o event handler ao parser

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

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 ...

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[]) { ...

InfoView2002 166

Associando o ErrorHandler

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

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[]) {...

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[]) { …}

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)); }}...

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));

}}...

InfoView2002 171

Obtendo Dados: characters()

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)); }}...

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)

InfoView2002 174

XSL - eXtensible Stylesheet Language

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.

InfoView2002 176

Opções para mostrar XML

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

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.

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

InfoView2002 180

External Style Sheets

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

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>

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

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)

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

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

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

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

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

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

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

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

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:

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>

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>

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

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

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

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

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>

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>

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:

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

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>

InfoView2002 204

Resultado

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.

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>

InfoView2002 207

Resultado

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>

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>

InfoView2002 210

XSLT - Elementos

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

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)

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:

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

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

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

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

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>

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>

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>

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

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’)>>

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’)>>

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

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>

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)

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)

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

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

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

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>

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)

InfoView2002 233

fonte

margens e espaçamento

bordas

alinhamento horizontal/justification

endentação

dentre outros ...

Propriedades básicas

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

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)

InfoView2002 236

Consulta a dados semi-estruturados

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

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.

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

InfoView2002 240

Linguagem de Consulta

X-Query

InfoView2002 241

XQuery

Baseda em Quilt (que é baseda em XML-QL)

http://www.w3.org/TR/xquery/2/2001

XML Query data model

InfoView2002 242

FLWR (“Flower”) ExpressionsFOR ... LET... WHERE...RETURN...

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>

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

InfoView2002 245

XQuery

Resultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>

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

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>

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

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

InfoView2002 250

FOR versus LET

FOR liga variáveis nodo iteration

LET liga variáveis coleção one value

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>

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>

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

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)

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

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

Recommended