![Page 1: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/1.jpg)
InfoView2002 1
XML – eXtensible Markup Language
Prof. Dr. Cláudio BaptistaUFCG/DSC/SINBAD
[email protected]://www.lsi.dsc.ufcg.edu.br
![Page 2: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/2.jpg)
InfoView2002 2
Roteiro
Introdução a XML XMLSchema DOM e SAX XSL XQuery
![Page 3: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/3.jpg)
InfoView2002 3
Dados semi-estruturados ? Dados semi-estruturados: dados
heterogêneos e irregulares, auto-descritivos.
Banco de dados: originalmente, sistemas fechados, dedicados a gestão de dados regulares, cuja estrutura pouco evolui no tempo
Novas aplicações requerem mais flexibilidade de representação e estão constantemente evoluindo o esquema
Os modelos relacional e de objetos chegaram a seus limites
Introdução
![Page 4: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/4.jpg)
InfoView2002 4
Dados estruturados São dados de um arquivo ou de
um banco de dados relacional, em que sua estrutura é conhecida a priori
Ex.:
Introdução
Create table empregado( matricula int, nome varchar(30), salario float, depto int)
![Page 5: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/5.jpg)
InfoView2002 5
Dados não-estruturados São dados em que não há
nenhuma estrutura os definindo. São normalmente armazenados
em arquivos ou em colunas do tipo BLOB ou CLOB em SGBDs
Ex.: um texto em pdfuma imagem em jpgum video ou áudio
Introdução
![Page 6: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/6.jpg)
InfoView2002 6
Dados semi-estruturados São dados em que uma parte há
estrutura e em outra não há nenhuma estrutura definida.
O esquema da parte estruturada está contido junto com o dado,
Ex.: Um email (parte estruturada: <to>, <subject>, <date>, etc.Parte não estruturada: o corpo da
mensagem)
Introdução
![Page 7: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/7.jpg)
InfoView2002 7
A revolução da Web… 1989 - Primeiro Web Browser 1993 - Mosaic é difundido, há 50 web sites 1994 - Primeiras ferramentas de busca
(WWWW, webcrawler) 1996 - US$ 1M gastos em compras na Web,
presença em 150 países 1997 - 1 milhão de web sites 1998 - 300.000 web servers 2000 - mais de 1 bilhão de páginas web 2002 – quase 2,5 bilhões de páginas web
indexadas (google)
![Page 8: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/8.jpg)
InfoView2002 8
A Web hoje… documentos HTML (em sua maioria) voltada para uso humano gerado automaticamente por
aplicações fácil de alcançar qualquer Web
page, de qualquer server, em qualquer plataforma
![Page 9: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/9.jpg)
InfoView2002 9
O Segredo do sucesso de HTML
HTML é simples: todo mundo pode escrever HTML
HTML é textual: é legível, pode-se usar qualquer editor, ...
HTML é transportável em qualquer plataforma (o browser é a aplicação universal)
HTML conecta pedaços de informação através de hypertext links
![Page 10: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/10.jpg)
InfoView2002 10
HTML
<h1> Bibliography </h1><p> <i> Foundations of Databases </i> Abiteboul, Hull, Vianu <br> Addison Wesley, 1995<p> <i> Data on the Web </i> Abiteoul, Buneman, Suciu <br> Morgan Kaufmann, 1999
![Page 11: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/11.jpg)
InfoView2002 11
Resultado produzido
HTML descreve a apresentação
![Page 12: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/12.jpg)
InfoView2002 12
Problemas com HTML Uma vez criado, um documento é ligado
a uma norma particular (ex. HTML 3.2 ) É necessário dispor de várias versões do
documento em função da mídia em que vai ser apresentado
A indexação de documentos só pode ser feita sobre a parte textual.
![Page 13: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/13.jpg)
InfoView2002 13
HTML ... Um conjunto pré-definido e limitado de
tags, definidas por uma norma (HTML 2.0, 3.2, 4.0).
Estas tags possuem semânticas variadas: h1,..,h6, title, address, … dando as
indicações estruturais center,hr,b,i,big,small,… servem para
descrever a apresentação.
![Page 14: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/14.jpg)
InfoView2002 14
Limites da Web … aplicações não devem consumir
HTML tecnologia de wrapper HTML é
instável (modifica-se a página => modifica-se o wrapper)
companhias se fundem, formam parcerias; necessitam de interoperabilidade de forma rápida
![Page 15: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/15.jpg)
InfoView2002 15
As novas aplicações Comércio Eletrônico Protocolos "B2B" Bibliotecas digitais sistemas distribuídos …
precisamos de um "super HTML"
… estão surgindo ...
![Page 16: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/16.jpg)
InfoView2002 16
XML ? « Buzz word » eXtensible Markup Language Uma linguagem de descrição de
documentos, definida por um organismo internacional W3C
Um conjunto de tecnologias derivadas: Xlink, Xpointer, Xschema, DOM, SAX, XSL,… Usados em aplicações como: SVG, SMIL,
MathML, MusicML, SOAP O esperanto da Web
![Page 17: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/17.jpg)
InfoView2002 17
Web: Mudança de paradigma … Novo padrão Web XML:
XML gerado por aplicações XML consumido por aplicações
troca de dados entre plataformas: interoperabilidade
na empresa entre empresas
![Page 18: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/18.jpg)
InfoView2002 18
XML
<bibliography> <book> <title> Foundations… </title> <author> Abiteboul </author> <author> Hull </author> <author> Vianu </author> <publisher> Addison Wesley </publisher> <year> 1995 </year> </book> …
</bibliography>
XML descreve o conteúdo
![Page 19: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/19.jpg)
InfoView2002 19
XML: uma resposta única a necessidades variadas
HTML é usada como a lingagem universal de apresentação de documentos na Web, mas não é uma linguagem adaptada para descrever a estrutura destes documentos
Os sistemas de bases de dados atuais são muito rígidos para manipular dados cuja estrutura é irregular e evolui com o tempo.
![Page 20: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/20.jpg)
InfoView2002 20
Os segredos de XML Como HTML:
simples, legível, fácil de aprender universal e transportável suportado pela W3C (indústria absorve!)
Mas, Além de HTML flexível : podemos representar qualquer tipo
de informação estensível: pode-se representar informação
de qualquer forma
![Page 21: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/21.jpg)
InfoView2002 21
Noção estrutural
Princípio chave de SGML Idéia fundamental:
Considere um documento, é desejável separar completamente
as informações de estrutura das informações de apresentação.
![Page 22: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/22.jpg)
InfoView2002 22
XML: herdeiro de SGML SGML Standard Generalized Markup
Language, norma ISO 8879:1986 Muito utilizada na indústria para as grandes
técnicas de documentação. Muito complexa para utilização de «público
em geral» SGML tem demonstrado as vantagens do
formato estrutural para a Gestão Eletrônica de Documentos (GED)
XML usa 10% de SGML para representar de forma eficaz 90% dos documentos
![Page 23: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/23.jpg)
InfoView2002 23
Dois mundos se juntam na Web
Gestão de documentos
SGML
HTML
Documentaçãohipertexto
Gestão de dados
Bases de dados estruturados(relacionais e objeto)
Bases de dados semi-estruturadas
![Page 24: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/24.jpg)
InfoView2002 24
Comunidade de BD pode ajudar ...
• otimização e processamento de consultas
• visões, transformações
• data warehouses, integração de dados
• mediadores, re-escrita de consultas
• eficiente armazenamento e indexação
![Page 25: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/25.jpg)
InfoView2002 25
Origem de XML 1993: primeiros trabalhos sobre adaptação
das técnicas SGML à Web (Sperberg)."HTML to the Max: A Manifesto for Adding
SGML Intelligence to the World Wide Web" Junho 1996: criação de um grupo de
trabalho no W3C 10 fev. 1998: publicação da recomendação
para versão 1.0 da linguagem. http://www.w3.org/TR/REC-xml (2/98)
![Page 26: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/26.jpg)
InfoView2002 26
Origem de XML Trabalho cooperativo de um grande
número de empresas e de pesquisadores reunidos no World Wide Web Consortium (W3C) 400 colaboradores da indústria, entre os quais
Oracle, IBM, Compaq, Xerox, Microsoft, etc.. Laboratórios de pesquisa: MIT - USA, INRIA -
França, universidade de Keio - Japão Objetivo: definição de um formalismo para
facilitar a troca de dados na Web
![Page 27: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/27.jpg)
InfoView2002 27
Mandamentos iniciais: XML deverá ser diretamente utilizável
na Internet XML deverá suportar uma larga
variedade de aplicações XML deverá ser compatível com SGML A criação de páginas XML deverá ser
também o mais simples possível
![Page 28: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/28.jpg)
InfoView2002 28
Mandamentos iniciais(2) Os documentos XML deverão ser de
grande legibilidade A criação de documentos deverá
ser rápida A sintaxe deverá ser formal e
concisa A concisão do código tem mínima
importância
![Page 29: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/29.jpg)
InfoView2002 29
Resumindo: XML ...
XML é uma linguagem de
descrição e de troca de
documentos (semi-)estruturados
![Page 30: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/30.jpg)
Exemplo de um documento
Campina GRande,20 de maio de 2001
Sr. Edilson Silva,Rua das Flores, 12581293 Caruaru
Bar da NoiteRua das Bodegas, s/n58106-920 C. Grande
Tel: 012133564Fax: 879765426
Objet: Dívida?
Prezado Senhor,
Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v
Aproveito do ensejo para renovar meus protestos de elevada estima e consideração.
assinatura
Rodapé
Logotipo
Data
Destinatário
Corpo
Rodapé
Cabeçalho
Objeto
Saudação
Forma Polida
Assinatura
![Page 31: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/31.jpg)
Representação XML
<carta> . . .</carta>
<cabeca> . . .</cabeca><destinatario> <nome> Sr Edilson Silva </nome> <endereco> <rua> rua das Flores </rua> <cidade> Caruaru </cidade> </endereco></destinatario><objeto> bla bla </objeto><data> 20 Maio 2001 </data><saudacao> Prezado Senhor, </saudacao><corpo> . . .</corpo>
<para> Aqui é o primeiro parágrafo</para><para> aqui é o segundo ...</para>
<logotipo loc="logo-graph"/><endereco> &abrev-endereco; </endereco>
![Page 32: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/32.jpg)
InfoView2002 32
Pontos importantes A representação desta carta em XML não
tem nenhuma indicação sobre a apresentação.
As numerosas propriedades gráficas ou tipográficas estão ausentes da fonte XML.
Estas propriedades serão definidas por intermédio de uma folha de estilo.
Uma folha de estilo é um conjunto de regras para especificar a realização concreta de um documento sobre uma mídia particular.
![Page 33: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/33.jpg)
Objeto: Dívida
Prezado Senhot,Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v
.
sssinatura
Rodapé
<carta> <cabeca> . . . </cabeca>
<corpo> . . . </corpo></carta>
If carta then ...If cabeca then …If corps then
...If para then
Police new roman,size 12, skip first line
If … then …
Princípio de funcionamento das folhas de estilos
Bar da NoiteRua das Bodegas, s/n58106-920 C. Grande
Tel: 012133564Fax: 879765426 Campina GRande,
20 de maio de 2001
Sr. Edilson Silva,Rua das Flores, 12581293 Caruaru
![Page 34: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/34.jpg)
InfoView2002 34
Descoberta de XML
Vantagens de XML
![Page 35: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/35.jpg)
35
Estensibilidade e estrutura Em XML, um autor ou uma comunidade de autores inventam
livremente as tags que lhes pareçam úteis para marcar os componentes de um documento.
Exemplo: diversas formas de representar uma data <date> 5 janeiro 2000 </date> <date> <ano> 2000 </ano> <mes> 01 </mes> <dia> 05 </dia> </date> <date format='ISO-8601'> 2000-01-05 </date>
Grande liberdade de escolha das estruturas de dados facilita a troca de dados
comércio eletrônico, transações financeiras e comerciais, pesquisa e indústria de biotecnologias multimídia
Vantagens de XML
![Page 36: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/36.jpg)
InfoView2002 36
Interoperabilidade Todos os dados podem ser vistos como
documentos XML e não mais como arquivos no formato X ou Y.
Consequências: Um servidor de documentos XML pode
responder a um conjunto de necessidades de uma organização.
Um simples editor de textos pode tratar o conjunto de dados de uma organização.
A interoperabilidade dos utilitários está assegurada.
Vantagens de XML
![Page 37: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/37.jpg)
InfoView2002 37
Modularidade e reutilização Cada usuário é livre para definir suas
próprias estruturas de documento Um documento pode também estar
conforme as estruturas tipadas, chamadas DTD
Cada comunidade pode propor as estruturas normalizadas
A validação a um DTD permite a automatização no tratamento dos dados e assegura uma possibilidade de controle de integridade
Vantagens de XML
![Page 38: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/38.jpg)
InfoView2002 38
Accesso às fontes de informaçãoheterogêneas
A consulta e troca de dados entre as base de dados heterogêneas é complexaXML contribui pare minimizar este problema: formato
de troca normalizado, genérico, independente de plataforma
A indexação e consulta de bases de documentos pode se beneficiar de informações estruturais e textuais.
pesquisa por palavras-chaves: Jorge+Amado retorna todos os documentos contendo as palavras Jorge e Amado, então as páginas pessoais de Pedro Amado cujo filho se chama Jorge.
pesquisa estrutural: pesquisa os documentos cujo autor é Jorge Amado (ie os documentos contendo um elemento autor, ou escrito-por contendo Jorge e Amado)
Vantagens de XML
![Page 39: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/39.jpg)
InfoView2002 39
Descoberta de XML
Definição da linguagem XML 1.0
![Page 40: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/40.jpg)
InfoView2002 40
Exemplos de documentos XML
<?xml version="1.0" standalone="yes" ?> <documento> <saudacao> Bom dia! </saudacao> </documento>
<documento> <saudacao> Bom dia! </saudacao> </documento>
<documento></documento> <documento/>
<documento> Bom dia!</documento>
XML 1.0
![Page 41: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/41.jpg)
InfoView2002 41
Estrutura de um documento Um documento XML é composto de
um prólogo cuja presença é facultativa, mas fortemente aconselhada
uma árvore de elementos, obrigatória
comentários, seção CDATA e de instruções de tratamento, facultativos
<?xml version="1.0" standalone="yes" ?>
<documento> <saudacao> Bom dia! </saudacao> </documento>
XML 1.0
![Page 42: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/42.jpg)
InfoView2002 42
O prólogo contém ... Uma declaração XML, facultativa
da forma:<?xml version="1.0" encoding="ISO-8859-1" standalone="yes">
indica ao processador que vai tratar o documento: a versão da linguagem XML utilizada o código de caracteres utilizado a existência de declarações exteriores ao documento
Uma declaração de tipo de documento, facultativa da forma
<!DOCTYPE exemplo SYSTEM "exemplo.dtd" [ declarações ]> indica a estrutura particular a qual deve estar de acordo um
documento
XML 1.0
![Page 43: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/43.jpg)
InfoView2002 43
Estrutura de um DTD Um DTD pode compreender duas
partes uma parte externa
a parte externa é definida fora do documento. É referenciada por uma referência DTD, frequentemente uma URL. Este mecanismo permite assegurar uma reutilização de DTDs frequentemente utilizados.
uma parte interna utilizada para especializar um DTD externo
genérico ou redefinir certos tipos de elementos
XML 1.0
![Page 44: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/44.jpg)
InfoView2002 44
Estrutura de um elemento (1) Um elemento é da forma:
<nome attr='valor'> conteúdo </nome> <nome> é a tag de abertura (XML é case sensitive!) </nome> é a tag de fechamento. A presença é obrigatória, a exceção
particular dos elementos nulos, denotado por <nome> </nome> ou <nome/>
conteúdo é o conteúdo de um elemento . Pode ser:
attr='valor' representa um conjunto eventualmente vazio de atributos, ou seja de pares (nome,valor). Os nomes dos atributos são únicos num elemento.
XML 1.0
uma mistura de texto e elementos instruções de tratamento comentários
vazio texto outros elementos
![Page 45: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/45.jpg)
InfoView2002 45
Estrutura de um elemento (2) Um nome de elemento é uma sequência não nula de caracteres que pode
conter caracteres alfanuméricos undescore sinal de menos ponto caracter dois-pontos (:) é utilizado, mas com um sentido particular
deve satisfazer as seguintes restrições o primeiro caracter deve ser alfabético ou um undescore os três primeiros caracteres não devem formar uma cadeia cuja
representação em letras minúsculas seja "xml".
XML 1.0
![Page 46: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/46.jpg)
InfoView2002 46
Estrutura de um elemento (2)
Exemplos de nomes de elementos
1998-catalogo
xmlSpecification
nome sociedade
_toto
Nome_sociedade
xsl:rule
X.11
incorretoscorretos
XML 1.0
![Page 47: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/47.jpg)
InfoView2002 47
Sintaxe dos atributos Um atributo é um par nome='valor' que permite
de caracterizar um elemento. Um elemento pode ter vários atributos. Neste caso, os pares nome='valor' serão separados por um espaço.
Exemplos <relatorio lingua= ’pt' ult-modif='08/07/99'> <anuario generator='SQL2XML V2.0'
update='07.08.99'> O nome de um atributo obedece as mesmas
regras que o nome de um elemento O valor de um atributo é uma string entre
aspas(") ou apóstrofos simples ('). Um valor de atributo não deve conter os caracteres ^, % e &.
XML 1.0
![Page 48: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/48.jpg)
InfoView2002 48
Seção CDATA
Uma seção CDATA instrui o parser a ignorar os caracteres de markup
Exemplo:<![CDATA[ *p = &q; b = (i <= 3); ]]>
Entre o início da seção, <![CDATA[ e o fim da seção, ]]>, todos os caracteres são passados diretamente para a aplicação, sem interpretação.A única string que não pode ocorrer numa seção CDATA é ]]>.
![Page 49: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/49.jpg)
InfoView2002 49
Comentários
Comentários iniciam com ”<!--” e terminam com ”-->”. (só não podem conter o string ”--”).
Ex.: <!-- Isto é um comentário -->
Comentários podem ser colocados em qualquer linha do documento.
![Page 50: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/50.jpg)
InfoView2002 50
Árvore de elementosUm documento XML contém uma árvore de
elementos, com as seguintes restrições:
Existe num documento um único elemento pai que contém todos os outros. É a raiz do documento.
Todo elemento distinto da raiz é totalmente incluído dentro de seu pai. Assim:
<p> <b> bla bla </p> bla </b> não é uma estrutura XML.
XML 1.0
![Page 51: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/51.jpg)
InfoView2002 51
Documentos bem formados
Um documento é dito bem formado se: está de acordo com as regras sintáticas de XML
(tags são aninhadas propriamente e atributos são únicos)
<?xml version="1.0" standalone="yes" ?>
<documento> <saudacao> Bom dia! </saudacao> </documento>
Ex. de uma documento não bem formado:<documento> <saudacao> Bom dia!</documento></saudacao>
XML 1.0
![Page 52: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/52.jpg)
InfoView2002 52
Documentos válidos Um documento é dito válido se:
seu prólogo contém uma declaração de tipo de documento
sua árvore de elementos respeita a estrutura definida pelo DTD
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<!DOCTYPE documento [ <!ELEMENT documento (saudacao)> <!ELEMENT saudacao (#PCDATA)>]><documento> <saudacao> Bom dia! </saudacao> </documento>
XML 1.0
![Page 53: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/53.jpg)
InfoView2002 53
Noção de DTD Um documento válido deve conter uma declaração de tipo de
documento. Esta declaração pode fazer referência, por intermédio de uma URL a um arquivo externo. Este arquivo é chamado de DTD (Definição de Tipo de Documento).
Exemplo
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <!DOCTYPE documento SYSTEM "acolhida.dtd"><documento> <saudacao> Bom dia! </saudacao> </documento>
XML 1.0
![Page 54: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/54.jpg)
InfoView2002 54
Noção de DTD
XML 1.0
<!–- Arquivo acolhida.dtd. Exemplo de DTD simples --><!–- Autor: Cláudio Baptista --><!–- Data: 18/setembro/2002-->
<!–- a declaração XML não é obrigatória dentro de um DTD --><!–- permite assegurar que os documentos que a referenciam --> <!–- utilizam a mesma versão de XML --> <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<!–- Definição do elemento raiz --><!ELEMENT documento (saudacao)>
<!–- Um elemento saudacao contém texto --><!ELEMENT saudacao (#PCDATA)>
![Page 55: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/55.jpg)
InfoView2002 55
Conteúdo de um DTD Um DTD pode conter as
declarações de elementos de listas de atributos de entidades gerais de entidades parametrizadas de notações
como também comentários
XML 1.0
![Page 56: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/56.jpg)
InfoView2002 56
Declaração de elemento Uma declaração de elemento é da forma
<!ELEMENT nome modelo> ELEMENT é uma palavra-chave e se escreve
imperativamente em maiúsculas nome é um nome válido de um elemento modelo é o modelo de conteúdo deste elemento.
Distinguimos cinco modelos de conteúdo elementos dados misto livre vazio
XML 1.0: elementos
![Page 57: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/57.jpg)
InfoView2002 57
Modelo de conteúdo de elementos (1)
Sequência de elementos filhos ( .., .., ..) Exemplo
<!ELEMENT capitulo (titulo,intro,secao)> Um elemento capitulo cujo conteúdo, imperativamente
e nesta ordem, contém sub-elementos titulo, intro e secao.
Alternativa ( ..| ..| ..) Exemplo
<!ELEMENT capitulo (titulo,intro,(secao|secoes))>
Indicadores de ocorrência *,+,?Um nome de elemento pode ter um indicador de orrorrência:
p* : p pode ocorrer zero, uma ou várias vezes dentro do conteúdo de um instância
p+ : p pode ocorrer uma ou várias vezesp? : p pode ocorrer zero ou uma vez
![Page 58: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/58.jpg)
InfoView2002 58
Modelo de conteúdo de elementos (2)
Exemplos<!ELEMENT capitulo (
titulo,
intro?,
secao+ ) >
<!ELEMENT secao (
titulo-secao,
texto-secao ) >
<!ELEMENT texto-secao (p|a)* >
![Page 59: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/59.jpg)
InfoView2002 59
Modelo de conteúdo de dados A presença de dados no conteúdo
de um elemento é especifidada pela palavra-chave #PCDATA
Exemplo<!ELEMENT p (#PCDATA) >
![Page 60: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/60.jpg)
InfoView2002 60
Modelo de conteúdo misto Este modelo permite definir os modelos de
conteúdo podendo misturar dados e elementos Forma do modelo
(#PCDATA | nome1 | …|nomen)* Exemplos de declarações
<!ELEMENT p (#PCDATA | negrito | italico | sublinhado)* ><!ELEMENT negrito (#PCDATA|italico|sublinhado)* ><!ELEMENT italico (#PCDATA) ><!ELEMENT sublinhado (#PCDATA) >
Exemplo de uso <p> um parágrafo pode conter texto <negrito> em
evidência </negrito> ou em <italico> itálico </italico></p>
![Page 61: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/61.jpg)
InfoView2002 61
Modelo de conteúdo livre (1) Um elemento pode ser definido como sendo um
conteúdo qualquer, desde que este conteúdo respeite as regras gerais da linguagem XML.
Exemplo<!ELEMENT qualquer ANY>
Para que o conteúdo de um elemento de modelo de conteúdo livre seja válido, é necessário que, se ele contiver elementos, estes sejam declarados num DTD
![Page 62: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/62.jpg)
InfoView2002 62
Modelo de conteúdo livre (2)
Utilidade: este modelo de conteúdo é particularmente útil quando da criação de um DTD complexo
Exemplo<!ELEMENT relatorio ANY><!ELEMENT capitulo ANY><!ELEMENT secao ANY><!ELEMENT titulo-secao ANY><!ELEMENT ilustracao ANY><!ELEMENT bibliografia ANY><!ELEMENT indice ANY><!ELEMENT p ANY><!ELEMENT negrito (#PCDATA)><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (prenome+,nome)><!ELEMENT nome (#PCDATA)><!ELEMENT prenome (#PCDATA)>
![Page 63: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/63.jpg)
InfoView2002 63
Modelo de conteúdo vazio
Um elemento pode ser declarado como obrigatoriamente vazio, usando a palavra-chave EMPTY.
Exemplo de declarações<!ELEMENT p (#PCDATA|bibref)* ><!ELEMENT bibref EMPTY><!ATTLIST bibref ref IDREF #REQUIRED>
Exemplo de utilização<p> para uma definição precisa, veja <bibref ref='REC-xml-19980210'/> </p>
![Page 64: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/64.jpg)
InfoView2002 64
Modelo de conteúdo vazio
Observações: quando o modelo de conteúdo de um
elemento é o modelo vazio, deve obrigatoriamente obedecer a sintaxe <nome/>
não é possível misturar EMPTY a uma outra construção de modelo de conteúdo
![Page 65: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/65.jpg)
InfoView2002 65
Declaração de atributos Um atributo é um par nome-valor
associado a um elemento uma declaração de atributos num
DTD permite especificar os atributos que poderão ou deverão estar associados às instâncias dos elementos.
Forma da declaração<!ATTLIST nome-elemento nome-atributo tipo-atributo declaração-default>
XML 1.0: atributos
![Page 66: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/66.jpg)
InfoView2002 66
Declaração de atributos Exemplos
<!ELEMENT ex1 (#PCDATA)>
<!ATTLIST ex1 lang NMTOKEN #IMPLIED >
<!ATTLIST ex1 target ID #IMPLIED >
<!ATTLIST ex1 nb (1 | 2 | 3) '1'>
equivalente a<!ATTLIST ex1 lang NMTOKEN #IMPLIED >
target ID #IMPLIED >
nb (1 | 2 | 3) '1'>
![Page 67: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/67.jpg)
InfoView2002 67
Tipo de atributo O tipo de atributo pode ser:
CDATA: o valor do atributo é uma cadeia de caracteres
ID ou IDREF: permite definir um identificador para um documento
Uma lista de escolhas num conjunto de tokens, ou identificadores lógicos
NMTOKEN ou NMTOKENS: abreviação de Name Token. Permite ao atributo de ter seu valor de um conjunto de nomes simbólicos.
ENTITY ou ENTITIES: permite que um atributo tome como valor o nome de uma entidade externa não XML
NOTATION: define um atributo de notação
XML 1.0: atributos
![Page 68: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/68.jpg)
InfoView2002 68
Declaração default Possui quatro formas
valor por default do atributo #REQUIRED: cada instância deverá ter um
atributo deste nome. Não aceita valor default.
#IMPLIED: presença facultativa. Não aceita valor default.
#FIXED: fixa o valor deste atributo para toda instância.
XML 1.0: atributos
![Page 69: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/69.jpg)
InfoView2002 69
Exemplos (1) Atributo CDATA
<!ATTLIST f att1 CDATA #FIXED '<toto>' >O atributo att1 dos elementos de tipo f tem um valorr constante: o string <toto>.
Atributo enumerado Exemplo 1
<!ELEMENT data (#PCDATA) ><!ATTLIST data formato (ANSI | ISO | BR) #REQUIRED><data formato= ’BR'> 24 Maio 1998 </data><data formato='ISO'> 1998-05-24 </data>O atributo formato é obrigatório e deve ter valores do tipo ANSI, ISO ou BR
Exemplo 2<!ELEMENT list (item,item+)><!ELEMENT item (list|#PCDATA)><!ATTLIST list type (ord | num | alpha) 'ord'><list type='alpha'> <item> Maria </item> <item> Pedro </item> <item> José </item></list>
XML 1.0: atributos
![Page 70: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/70.jpg)
InfoView2002 70
Exemplos (2) Atributos ID e IDREF
Estes tipos de atributos permitem de criar uma referência a um documento<!–- declaração do element secao --><!–- o atributo de identificação de secao --><!–- target é optional --><!ELEMENT secao (#PCDATA|xref)* ><!ATTLIST secao target ID #IMPLIED >
<!–- declaracao do elemento xref --><!ELEMENT xref EMPTY ><!ATTLIST xref ref IDREF #REQUIRED>
<secao target='X321'> conteúdo de uma seção </secao><secao> outra seção. Faz referência à seção X321 <xref ref='X321'/>
</secao>
Obs.: nós não referenciamos de fato uma seção, mas um elemento do documento que possui um atributo do tipo ID e cujo valor é X321.
XML 1.0: atributos
![Page 71: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/71.jpg)
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<: <
>: >
&: &
XML 1.0: entidades
![Page 72: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/72.jpg)
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 "© Tropical Editition">]><livro> ©right; </livro>
produzirá© Tropical Editions
observação: 00A9 é o código Unicode do caracter ©
XML 1.0: entidades
![Page 73: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/73.jpg)
InfoView2002 73
Entidades externas endereçadas por URL
Exemplo<?xml version='1.0' ?><!DOCTYPE livro [ <!ENTITY capitulo1 SYSTEM "chap1.xml"> <!ENTITY capitulo2 SYSTEM "chap2.xml"> <!ENTITY autor "Maria Luiza Baptista">]><livro> <titulo> XML para iniciantes </titulo> <autor> &autor; </autor> <intro> Era uma vez uma Web… </intro> &capitulo1; &capitulo2;</livro>
Restrição: as entidades externas devem ser documentos bem formados
![Page 74: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/74.jpg)
InfoView2002 74
Notações e entidades não XML
Exemplo<!DOCTYPE exemplo [ <!NOTATION jpeg SYSTEM "/usr/local/bin/xview"> <!ENTITY foto-ferias SYSTEM "./fotos/foto1.jpg" NDATA jpeg><!ELEMENT exemplo (foto)><!ELEMENT foto EMPTY><!ATTLIST foto img ENTITY #REQUIRED>
]><exemplo> <foto img='foto-ferias'/></exemplo> A declaração de notação associa ao formato jpeg a aplicação xview
que poderá ser utilizada em extensão da aplicação XML. A declaração da entidade foto-ferias indica que o conteúdo dos
dados está situado no arquivo foto1.jpg A palavra-chave NDATA indica que este arquivo é de um formato não
XML
![Page 75: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/75.jpg)
InfoView2002 75
Exemplo<?xml version='1.0' ?><!DOCTYPE db [ <!ELEMENT db (pessoa*)> <!ELEMENT pessoa (nome, idade, email)> <!ELEMENT nome (#PCDATA)><!ELEMENT idade (#PCDATA)><!ELEMENT email (#PCDATA)>
]><db> <pessoa> <nome> Pedro Maia </nome>
<idade> 33 </idade><email> [email protected] </email>
</pessoa> <pessoa> <nome> Ana Maria </nome>
<idade> 24 </idade><email> [email protected] </email>
</pessoa> <pessoa> . . . </pessoa></db>
XML 1.0: Exemplos
![Page 76: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/76.jpg)
InfoView2002 76
DTDs como esquemas
ExemploSeja o esquema r1(a, b, c) e r2 (c, e)<db> <r1> <a> a1 </a> <b> b1 </b> <c> c1 </c> </r1>
<r1> <a> a2 </a> <b> b2 </b> <c> c2 </c> </r1> <r2> <c> c1 </c> <d> d1 </d> </r2> <r2> <c> c2 </c> <d> d3 </d> </r2>
</db><!DOCTYPE db[<!ELEMENT (r1*|r2*)><!ELEMENT r1(a,b,c)><!ELEMENT r2(c,d)><!ELEMENT a (#PCDATA)><!ELEMENT b (#PCDATA)><!ELEMENT c (#PCDATA)><!ELEMENT d (#PCDATA)>]>
![Page 77: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/77.jpg)
InfoView2002 77
<?xml version="1.0"?><!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)><!ATTLIST EMAIL LANGUAGE (Western|Greek|Latin|Universal) "Western" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|LOW|HIGH) "NORMAL">
<!ELEMENT TO (#PCDATA)><!ELEMENT FROM (#PCDATA)><!ELEMENT CC (#PCDATA)>
<!ELEMENT BCC (#PCDATA)><!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE">
<!ELEMENT SUBJECT (#PCDATA)><!ELEMENT BODY (#PCDATA)>
<!ENTITY SIGNATURE "Mattheus Baptista">
XML 1.0
Exemplo de DTD
![Page 78: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/78.jpg)
InfoView2002 78
Limitações de DTDs como esquemas
DTD impõe ordem Não existe a noção de tipos de dados atômicos (int,
float, etc) Não podemos especificar uma faixa de valores de
domínio IDREF não é relacionado a um tipo. Tipos são associados com tags => elementos com
mesmo nome porém pertencendo a diferentes tipos (nome de pessoa e nome de um curso) não podem usar o mesmo elemento nome. Nesta caso ou redefinimos nomePessoa e nomeCurso ou usamo namespaces com os qualificadores, pessoa:nome e curso:nome
![Page 79: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/79.jpg)
InfoView2002 79
Namespaces
![Page 80: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/80.jpg)
InfoView2002 80
Namespaces XML permite autores de documentos criarem
suas próprias tags => pode haver uma mesma tag com semântica diferenciada
Ex.: Documento1: <assunto> Bioinformatica </assunto> Documento2: <assunto> Animais </assunto>
Usa PI para associar nomes exclusivos a URI Permitem que seja usado um esquema de atribuição
de nomes ao longo de um conjunto de documentos
![Page 81: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/81.jpg)
InfoView2002 81
Solução
Primeira tentativa
<Documento1:assunto> Bioinformatica </Documento1:assunto>
Segunda tentativa<www.lsi.dsc.ufcg.edu.br/cursos:assunto>
Bioinformatica</www.lsi.dsc.ufcg.edu.br/cursos:assunto>
Solução final (uso de namespaces) <curso:curso xmlns:curso=”www.lsi.dsc.ufcg.edu.br/cursos”>
<curso:assunto> Bioinformatica </curso:assunto>
![Page 82: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/82.jpg)
InfoView2002 82
Examplo de Namespace
<html:html xmlns:html=”...” xmlns:math=”...”>
<html:title> George Soros </html:title>
<html:h2> Counting ... </html:h2>
<math:reln>
.....
</math:reln>
</html:html>
![Page 83: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/83.jpg)
InfoView2002 83
Namespace default
<html xmlns=”...” xmlns:math=”...”>
<title> George Soros </title>
<h2> Contabilidade ... </h2>
<math:reln>
.....
</math:reln>
</html>
![Page 84: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/84.jpg)
InfoView2002 84
Nome de Atributo com Namespace
Atributos podem ter namespace Exemplo:
<myLink xmlns:xlink=”...”
xlink:type=”simple”
......
</myLink>
![Page 85: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/85.jpg)
InfoView2002 85
XML Schema
![Page 86: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/86.jpg)
InfoView2002 86
XML Schema Visa remediar as limitações dos DTDs Schemas são documentos XML Por ser mais recente ainda não é
suportado por muitos parsers Schemas ainda usam um DTD para ser
validado Declaração default:
<xsd:schema xmlns:xsd=“http://www.w3.org/2000/10/XMLSchema”
![Page 87: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/87.jpg)
InfoView2002 87
Propósito de XML Schemas Especificar:
a estrutura de documentos “o elemento estudante contém os elementos matrícula,
endereço, curso, nome, ... os tipos de dados de cada elemento/atributo
“o elemento idade deve ser inteiro entre 0 e 130”
![Page 88: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/88.jpg)
InfoView2002 88
Motivação para XML Schemas Existe insastifação em usar DTDs:
sintaxe diferente você escreve seu documento XML usando uma sintaxe
e o DTD usando outra sintaxe capacidade limitada de tipos de dados
DTDs suportam um conjunto muito limitado de tipos de dados. Não podemos dizer “o elemento <salario> deve ser entre 0 e 3000,00”
Desejo de se ter um conjunto de tipos de dados compatíveis com aqueles encontrados nos banco de dados
![Page 89: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/89.jpg)
InfoView2002 89
Vantagens de XML Schemas XML Schemas são mais poderosos que DTDs:
Tipos de dados melhor especificado +41 tipos e a capacidade de se criar tipos de dados
definidos pelo usuário Escritos em XML (mesma linguagem dos
documentos) Podem expressar conjuntos (sets): um elemento filho
pode estar em qualquer ordem Pode especificar unicidade (chaves) Uso de técnicas de orientação a objetos
![Page 90: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/90.jpg)
InfoView2002 90
Exemplo: Conversão do DTD CatalogoLivros.dtd para
XML Schema<!ELEMENT CatalogoLivros(livro)+>
<!ELEMENT livro(titulo, autor, data, isbn, editora)
<!ELEMENT titulo (#PCDATA)
<!ELEMENT autor (#PCDATA)
<!ELEMENT data (#PCDATA)
<!ELEMENT isbn (#PCDATA)
<!ELEMENT editora (#PCDATA)
![Page 91: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/91.jpg)
InfoView2002 91
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=“editora" type="xsd:string"/></xsd:schema>
![Page 92: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/92.jpg)
InfoView2002 92
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”>
<xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/></xsd:schema>
<!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>
<!ELEMENT livro (titulo, autor, data, ISBN, editora)>
<!ELEMENT CatalogoLivros (livro)+>
![Page 93: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/93.jpg)
InfoView2002 93
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>
Todos XML Schemas têm "schema" como elemento raiz..
![Page 94: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/94.jpg)
InfoView2002 94
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>
Os elementos quesão usados paracriar um XML Schema vêm doXMLSchemanamespace
![Page 95: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/95.jpg)
InfoView2002 95
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>
indica que oselementos declaradosneste schema(CatalogoLivros,livro, titulo, autor, data, ISBN, editora)vão para este namespace
![Page 96: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/96.jpg)
InfoView2002 96
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence> <xsd:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”data" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xsd:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/></xsd:schema>
Este está referenciando uma declaração de um elemento livro.livro em qualnamespace? Uma vez quenão há um qualificador de namespace, é umareferência ao elemento livro no namespace default, que é o targetNamespace!
O namespace default éhttp://www.publishing.orgque é o targetNamespace!
![Page 97: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/97.jpg)
InfoView2002 97
Referenciando um schema numa instância de um documento XML
<?xml version="1.0"?><CatalogoLivros xmlns ="http://www.publishing.org" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation="http://www.publishing.org CatalogoLivros.xsd"> <livro> <titulo>Meninos de Rua</titulo> <autor>Jorge Amado</autor> <data>julho,1976 </data> <ISBN>94303-12021-43892</ISBN> <editora>Nossos Livros</editora> </livro> ...</CatalogoLivros>
1. O uso de um namespace default, diz ao schema-validator que todos os elementos usados nestedocument vêm do publishing namespace.2. schemaLocation indica para o schema-validator que o namespace http://www.publishing.org está definido em CAtalogoLivros.xsd.3. Diz ao schema-validator que o atributo schemaLocation usado pertence ao the namespace schema instance namespace.
![Page 98: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/98.jpg)
InfoView2002 98
Referenciando um schema num documento XML
CatalogoLivros.xml CatalogoLivros.xsd
targetNamespace="A"schemaLocation="A CatalogoLivros.xsd"
- define elementos no namespace A
- usa elementos do namespace A
![Page 99: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/99.jpg)
InfoView2002 99
Há multiplos níveis de verificação
CatalogoLivros.xml CatalogoLivros.xsd XMLSchema.xsd(schema-for-schemas)
Valida se o documento xml estáconforme as regras descritasem CatalogLivros.xsd
Valida se CatalogoLivros.xsd é um documentoschema válido, i.e., está conformecom as regras descritas noschema-for-schemas
![Page 100: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/100.jpg)
InfoView2002 100
Valores Default para minOccurs e maxOccurs
O valor default para minOccurs é "1"O valor default para maxOccurs é "1"
<element ref=”titulo" minOccurs="1" maxOccurs="1"/>
<element ref=”titulo"/>
Equivalentes!
![Page 101: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/101.jpg)
InfoView2002 101
Esquema alternativo ...<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>
![Page 102: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/102.jpg)
102
Um tipo pode ser nomeado
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" type="CardCatalogueEntry" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="CardCatalogueEntry"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType></xsd:schema>
Tipo nomeado
![Page 103: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/103.jpg)
InfoView2002 103
Observação
<xsd:element name="A" type=”ttt"/><xsd:complexType name=”ttt"> <xsd:sequence> <xsd:element name="B" …/> <xsd:element name="C" …/> </xsd:sequence></xsd:complexType>
é equivalente a
<xsd:element name="A"> <xsd:complexType> <xsd:sequence> <xsd:element name="B" …/> <xsd:element name="C" …/> </xsd:sequence> </xsd:complexType></xsd:element>
Elemento A referencia ocomplexType ttt.
Elemento A tem a definição complexType embutida na delcaração do elemento.
![Page 104: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/104.jpg)
InfoView2002 104
Observação 2Uma declaração de elemento pode ter um atributo type, ou um complexType elemento filho, mas não pode ter ambos.
<xsd:element name="A" type=”ttt"> <xsd:complexType> … </xsd:complexType></xsd:element>
![Page 105: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/105.jpg)
InfoView2002 105
Sumário de declaração de Elementos (2 formas)
<xsd:element name="nome" type="type" minOccurs="int" maxOccurs="int"/>
Um tipos simples (ex.., xsd:string)ou o nome deum complexType
<xsd:element name="nome" minOccurs="int" maxOccurs="int"> <xsd:complexType> … </xsd:complexType></xsd:element>
1
2
Um inteiro não negativo
Um inteiro nãonegativo ou "unbounded"
Obs: minOccurs e maxOccurs podem ser usadosapenas em declaração de elementos.
![Page 106: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/106.jpg)
InfoView2002 106
Problema: Como restringir os tipos?Suponha que queremos restringir o elemento ISBN da seguinte forma:
ddddd-ddddd-ddddd ou d-ddd-ddddd-d ou d-dd-dddddd-d, onde 'd' significa 'digit'
<xsd:simpleType name="ISBNType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{5}-\d{5}-\d{5}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction></xsd:simpleType>
![Page 107: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/107.jpg)
107
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xsd:simpleType name="ISBNType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{5}-\d{5}-\d{5}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:date"/> <xsd:element name="ISBN" type="ISBNType"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
![Page 108: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/108.jpg)
InfoView2002 108
<xsd:complexType> ou <xsd:simpleType>? Use o elemento complexType
quando quiser definir elementos filhos e/ou atributos de um elemento
Use o elemento simpleType quando precisar criar um novo tipo que é um refinamento de um tipo embutido (string, integer, etc)
![Page 109: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/109.jpg)
InfoView2002 109
Criando seus próprios Datatypes
Um novo datatype pode ser definido de um datatype existente (chamado tipo "base" ) através da especificação de valores para uma ou mais das facetas opcionais para o tipo base.
Exemplo. O tipo primitivo string tem seis facetas opcionais:
pattern enumeration length minLength maxlength whitespace (valores: preserve, replace, collapse)
![Page 110: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/110.jpg)
InfoView2002 110
Exemplo de criação de um novo Datatype através da especificação de
valores de facetas
<xsd:simpleType name=”NumTelefone"> <xsd:restriction base="xsd:string"> <xsd:length value="8"/> <xsd:pattern value="\d{3}-\d{4}"/> </xsd:restriction></xsd:simpleType>
![Page 111: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/111.jpg)
InfoView2002 111
Outro Exemplo
<xsd:simpleType name=”Cores-Brasil"> <xsd:restriction base="xsd:string"> <xsd:enumeration value=”verde"/> <xsd:enumeration value=”amarelo"/> <xsd:enumeration value=”azul"/> <xsd:enumeration value=”branco"/> </xsd:restriction></xsd:simpleType>
Cria um novo tipo chamado Cores-Brasil.Um elemento declarado deste tipo deve tero valor verde, amarelo, azul ou branco.
![Page 112: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/112.jpg)
InfoView2002 112
Facetas do tipo Integer Facets:
pattern enumeration whitespace maxInclusive maxExclusive minInclusive minExclusive precision
![Page 113: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/113.jpg)
InfoView2002 113
Exemplo<xsd:simpleType name= "EarthSurfaceElevation"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="-1290"/> <xsd:maxInclusive value="29035"/> </xsd:restriction></xsd:simpleType><xsd:element name="elevation" type="EarthSurfaceElevation"/>
Exemplo. Definindo um elemento elevation: <elevation>5240</elevation>
![Page 114: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/114.jpg)
InfoView2002 114
Tipos Derivados Podemos ter uma forma de
especializar definições complexType. Conhecido como "tipos derivados" derivar por extensão: estender o
complexType pai com mais elementos derivar por restrição: restringir o
complexType pai através da restrição de alguns elementos para ter
uma faixa de valores mais restrita, ou um número de ocorrências mais restrito.
![Page 115: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/115.jpg)
InfoView2002 115
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”>
<xsd:complexType name="Publicacoes"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:date"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=”livro"> <xsd:complexContent> <xsd:extension base=”Publicacoes" > <xsd:sequence> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" type=”livro" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>
![Page 116: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/116.jpg)
InfoView2002 116
Derivação por Restrição<xsd:complexType name="Publicacao"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”date" type="xsd:year"/> </xsd:sequence></xsd:complexType><xsd:complexType name= "PublicacaoUnicoAutor"> <xsd:complexContent> <xsd:restriction base="Publicacao"> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:year"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent></xsd:complexType>
![Page 117: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/117.jpg)
InfoView2002 117
Proibindo Derivações <xsd:complexType name="Publicacao" final="#all" …>
Publicação não pode ser estendida or restringida
<xsd:complexType name="Publicacao" final="restriction" …> Publicacao não pode ser restringida
<xsd:complexType name="Publicação" final="extension" …> Publicação não pode ser estendida
![Page 118: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/118.jpg)
InfoView2002 118
Atributos
Seja o DTD<!ELEMENT CatalogoLivros (livro)+><!ELEMENT livro (titulo, autor+, data, ISBN, editora)><!ATTLIST livro Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED EmEstoque (true | false) "false" Revisor CDATA " "><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>
![Page 119: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/119.jpg)
InfoView2002 119
<xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>
<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> <xsd:attributeGroup ref="AtributosLivro"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="AtributosLivro"> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:attributeGroup>
EmEstoque (true | false) "false"
Revisor CDATA " "
Categoria (autobiography | non-fiction | fiction) #REQUIRED
![Page 120: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/120.jpg)
InfoView2002 120
<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:complexType></xsd:element>
Alternativamente ...
![Page 121: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/121.jpg)
121
Sumário de Declaração de Atributos (2 formas)
<xsd:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>
requireddefaultfixedoptionalprohibited
This attribute is onlyused with use="default"and use="fixed"
xsd:stringxsd:integerxsd:boolean...
1
2 <xsd:attribute name="nome" use=”como-usad" value="valor"> <xsd:simpleType> <xsd:restriction base=”tipo-simples"> <xsd:facet value="valor"/> … </xsd:restriction> </xsd:simpleType></xsd:attribute>
![Page 122: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/122.jpg)
InfoView2002 122
Observação sobre Atributos A declaração de atributos sempre
vem após as declarações de elementos.
Os atributos estão sempre com relação ao elemento que eles estão definidos (nested).
<xsd:element name=”A"> <xsd:complexType> <xsd:sequence> … </xsd:sequence> <xsd:attribute name=”aa" …/> <xsd:attribute name=”ab" …/> </xsd:complexType></xsd:element>
”aa e ab sãoatributos de A"
![Page 123: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/123.jpg)
InfoView2002 123
Elementos com Simple Content e Atributos
Exemplo. Considere:
<elevation units=“metros">5440</elevation>
O elemento elevation tem duas restrições: - um simples (integer) conteúdo - um atributo chamado units
Como declarar elevation?
![Page 124: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/124.jpg)
InfoView2002 124
<xsd:element name="elevation"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:integer"> <xsd:attribute name="units" type="xsd:string" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType></xsd:element>
Solução
![Page 125: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/125.jpg)
125
<xsd:simpleType name="elevationType"> <xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/> <xsd:maxInclusive value="12000"/> </xsd:restriction></xsd:simpleType><xsd:simpleType name="unitsType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="feet"/> <xsd:enumeration value="meters"/> </xsd:restriction></xsd:simpleType><xsd:element name="elevation"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="elevationType"> <xsd:attribute name="units" type="unitsType" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>
Solução mais completa (constraints)
![Page 126: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/126.jpg)
InfoView2002 126
Expressando Alternativas
<!ELEMENT transporte (trem | aviao | carro)>DTD:
XML Schema: <?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.travel.org" xmlns="http://www.travel.org”> <xsd:element name="transporte"> <xsd:complexType> <xsd:choice> <xsd:element name="trem" type="xsd:string"/> <xsd:element name=”aviao" type="xsd:string"/> <xsd:element name=”carro" type="xsd:string"/> </xsd:choice> </xsd:complexType> </xsd:element></xsd:schema>
![Page 127: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/127.jpg)
InfoView2002 127
Expressando Repetições
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.binary.org" xmlns="http://www.binary.org”> <xsd:element name="binary-string"> <xsd:complexType> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element name="zero" type="xsd:unsignedByte" fixed="0"/> <xsd:element name="one" type="xsd:unsignedByte" fixed="1"/> </xsd:choice> </xsd:complexType> </xsd:element></xsd:schema>
<!ELEMENT binary-string (zero | one)*>DTD:
XML Schema:
![Page 128: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/128.jpg)
InfoView2002 128
Expressando Ordem Qualquer
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence> <xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType> <xsd:all> <xsd:element name=”titulo" type="xsd:string"/> <xsd:element name=”autor" type="xsd:string"/> <xsd:element name=”data" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
XML Schema:
Problema: criar um elemento livro, que contenha autor, titulo, data, ISBN, e editora, em qualquer ordem.
![Page 129: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/129.jpg)
InfoView2002 129
Elemento Vazio
<?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.photography.org" xmlns="http://www.photography.org”> <xsd:element name="galeria"> <xsd:complexType> <xsd:sequence> <xsd:element name="imagem" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name="href" type="xsd:uriReference" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>
Schema:
<!ELEMENT imagem EMPTY><!ATTLIST imagem href CDATA #REQUIRED>DTD:
![Page 130: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/130.jpg)
InfoView2002 130
XML API: DOM e SAX
Prof. Dr. Cláudio [email protected]
http://www.lsi.dsc.ufcg.edu.br
![Page 131: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/131.jpg)
InfoView2002 131
DOM - Introdução
XML Document Object Model (DOM)W3C standard recommendationConstrói árvore na memória para documentos XML Um DOM Document é uma coleção de nodes organizada numa hierarquiaDOM provê uma API que permite o programador adicionar, editar, mover, ou remover nodes em qualquer ponto da árvoreDOM-based parsers fazem o “parsing” destas estruturas. Existe em várias linguagens (Java, C, C++, Python, Perl, etc.)
![Page 132: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/132.jpg)
InfoView2002 132
DOM Roadmap
Um Parser analiza um arquivo XMLpara criar um DOM documentque é composto de nodesque podem ser elementos, atributos, textos,ou outros tipos de nodeque fazem parte de um (ou mais) Namespace(s)que podem ser acessados via métodosda DOM API
![Page 133: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/133.jpg)
InfoView2002 133
Evolução do DOM
Level 0 - Foi a primeira recomendação que permitia Web browsers identificar e manipular elementos numa página
Level 1- inclui suporte a XML e HTML Level 2- permite o uso de Namespaces,
provê API mais sofisticada com eventos e CSS
Level 3- suporte avançado a Namespaces, eventos de User interface, DTD, XML Schema, Xpath, XSLT
![Page 134: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/134.jpg)
InfoView2002 134
Exemplo<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ORDERS SYSTEM "orders.dtd"><orders> <order> <customerid limit="1000">12341</customerid> <status>pending</status> <item instock="Y" itemid="SA15"> <name>Silver Show Saddle, 16 inch</name> <price>825.00</price> <qty>1</qty> </item> <item instock="N" itemid="C49"> <name>Premium Cinch</name> <price>49.00</price> <qty>1</qty> </item> </order> <order> <customerid limit="150">251222</customerid> <status>pending</status> <item instock="Y" itemid="WB78"> <name>Winter Blanket (78 inch)</name> <price>20</price> <qty>10</qty> </item> </order></orders>
![Page 135: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/135.jpg)
InfoView2002 135
Exemplo (cont)
![Page 136: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/136.jpg)
InfoView2002 136
Tipos básicos de nodes Document Element Attribute Text
![Page 137: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/137.jpg)
InfoView2002 137
DOM Introdução
DOM treeCada node representa um elemento, atributo, etc.
<?xml version = "1.0"?><message from = ”Ana" to = ”Marta"> <body>Oi Marta!</body></message>
Node criado para elemento messageElemento message tem element child node: elemento body Elemento body tem text child node: “Oi Marta!"Atributos from e to também têm nodes na árvore
![Page 138: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/138.jpg)
InfoView2002 138
Implementações de DOM
DOM-based parsersMicrosoft msxmlSun Microsystem JAXP
Parser Descrição
JAXP Sun Microsystem Java API para XMLParsing (JAXP) é livremente disponívelem java.sun.com/xml.
XML4J IBM XML Parser for Java (XML4J) élivremente disponível emwww.alphaworks.ibm.com/tech/xml4j.
Xerces Apache Xerces Java Parser é livrementedisponível em xml.apache.org/xerces.
msxml Microsoft XML parser (msxml) version2.0 é embutido no Internet Explorer5.5. Version 3.0 está livrementedisponível em msdn.microsoft.com/xml.
4DOM 4DOM é um parser para linguagem Python,disponível livremente emfourthought.com/4Suite/4DOM.
XML::DOM XML::DOM é um módulo Perl que permitemanipular documentos XML usando Perl.Visitewww-4.ibm.com/software/developer/library/xml-perl2.
![Page 139: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/139.jpg)
InfoView2002 139
DOM: classes e interfaces.
Class/Interface Descrição
Document interface Representa o top-level node do documento XML, que provê acesso atodos os demais nodes—incluindo o elemento root.
Node interface Representa um XML document node.NodeList interface Representa uma lista de Node objects.Element interface Representa um elemento node. Deriva de Node.Attr interface Representa um atributo node. Deriva de Node.CharacterDatainterface
Representa character data. Deriva de Node.
Text interface Representa um text node. Deriva de CharacterData.
Comment interface Representa um node comentário. Deriva de CharacterData.
ProcessingInstructioninterface
Representa um processing instruction node. Deriva de Node.
CDATASection interface Representa um CDATA section. Deriva de Text.
![Page 140: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/140.jpg)
InfoView2002 140
Alguns métodos de Document
Método Descrição
createElement Cria um element node.createAttribute Crira um attribute node.createTextNode Cria um text node.createComment Cria um comment node.createProcessingInstruction Cria um processing instruction node.createCDATASection Cria um CDATA section node.getDocumentElement Retorna to elemento rootappendChild Concatena um child node.getChildNodes Retorna os child nodes.
![Page 141: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/141.jpg)
InfoView2002 141
Métodos Node
Método Descrição
appendChild Concatena um child node.cloneNode Duplica o node.getAttributes Retorna os atributos do nodegetChildNodes Retorna os nodes filhos do node.getNodeName Retorna o nome do nodegetNodeType Retorna o tipo do node (ex.. elemento, atributo, text,
etc.).getNodeValue Retorna o valor do node.getParentNode Retorna o pai do nodehasChildNodes Retorna true se o node tem nodes filhosremoveChild Remova um node filho do node.replaceChild Troca um node filho com outro node.setNodeValue Coloca o valor do nodeinsertBefore Concatena um node filho na frente de um node filho..
![Page 142: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/142.jpg)
InfoView2002 142
Alguns tipos de node
Tipo de Node DescriçãoNode.ELEMENT_NODE Representa um element node.Node.ATTRIBUTE_NODE Representa um attribute node.Node.TEXT_NODE Representa um text node.Node.COMMENT_NODE Representa um comment node.Node.PROCESSING_INSTRUCTION_NODE
Representa um processing instructionnode.
Node.CDATA_SECTION_NODE Representa um CDATA section node.
![Page 143: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/143.jpg)
InfoView2002 143
Métodos de Element
Método Descrição
getAttribute Retorna um valor de atributo.getTagName Retorna um nome de elementoremoveAttribute Remove um atributo de um elementosetAttribute Coloca um valor de atributo
![Page 144: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/144.jpg)
InfoView2002 144
Parsing um arquivo XML num documento Processo em 3 passos
1. Criar o DocumentBuilderFactory. Este objeto criará o DocumentBuilder.
2. Criar o DocumentBuilder. O DocumentBuilder fará o atual parsing criar o objeto Document.
3. Fazer o parsing do arquivo para criar o objeto Document.
![Page 145: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/145.jpg)
InfoView2002 145
Exemplo de aplicação básica
import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;import org.w3c.dom.Document;
public class OrderProcessor { public static void main (String args[]) { File docFile = new File("orders.xml"); Document doc = null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); } catch (Exception e) { System.out.print("Problem parsing the file."); } }}
![Page 146: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/146.jpg)
InfoView2002 146
Ex de aplicação básicaimport javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;import org.w3c.dom.Document;import org.w3c.dom.Element;public class OrderProcessor {
...System.exit(1);
}//Passo 1: obtém o elemento raiz (root) Element root = doc.getDocumentElement();System.out.println("The root element is " + root.getNodeName());}
}
![Page 147: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/147.jpg)
InfoView2002 147
Ex de aplicação básica - Obtendo um node filho
...import org.w3c.dom.NodeList;... //PASSO 1: obtém o elemento raiz(root) Element root = doc.getDocumentElement(); System.out.println("The root element is "+root.getNodeName()); //PASSO 2: obtém os filhos (children) NodeList children = root.getChildNodes(); System.out.println("There are "+children.getLength()+" nodes in this document."); }}
![Page 148: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/148.jpg)
InfoView2002 148
Usando getFirstChild() e getNextSibling()
...import org.w3c.dom.Node;...//PASSO 3: processando os filhos (children)for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling()) { System.out.println(child.getNodeName()+" = "+child.getNodeValue()); }}}...
![Page 149: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/149.jpg)
InfoView2002 149
Múltiplos filhos
...public class OrderProcessor { private static void stepThrough (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); for (Node child = start.getFirstChild(); child != null;child = child.getNextSibling()) { stepThrough(child); } } public static void main (String args[]) { File docFile = new File("orders.xml"); ... System.out.println("There are "+children.getLength() +" nodes in this document."); //PASSO 4: fazendo recursividade stepThrough(root); }}
![Page 150: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/150.jpg)
InfoView2002 150
Resultado:
![Page 151: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/151.jpg)
InfoView2002 151
Manipulando Atributos
...import org.w3c.dom.NamedNodeMap;...private static void stepThroughAll (Node start){ System.out.println(start.getNodeName()+" = "+start.getNodeValue()); if (start.getNodeType() == start.ELEMENT_NODE) { NamedNodeMap startAttr = start.getAttributes(); for (int i = 0; i < startAttr.getLength(); i++) { Node attr = startAttr.item(i); System.out.println(" Attribute: "+ attr.getNodeName() +" = "+attr.getNodeValue()); } } for (Node child = start.getFirstChild(); child != null; child = child.getNextSibling()) { stepThroughAll(child); }}
![Page 152: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/152.jpg)
InfoView2002 152
Manipulando Atributos
![Page 153: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/153.jpg)
InfoView2002 153
Edição de documentos XML Existem métodos para
adicionar nodes, remover nodes, mudar valores de nodes
Consulte a API!
![Page 154: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/154.jpg)
InfoView2002 154
SAX
SAXSimple API for XMLOutro método para acessar o conteúdo de documentos XML.Desenvolvido por membros da XML-DEV mailing-list (não é da W3C)Usa um modelo baseado em eventos
Notificações (eventos) ocorrem à medida em que o documento é analizado (“parsed”)
![Page 155: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/155.jpg)
InfoView2002 155
SAX-based Parsers
SAX-based parsersDisponível em várias LPs:
e.g., Java, Python, C++, etc.
Produto Descrição
JAXP Sun JAXP é disponível em java.sun.com/xml.JAXP suporta SAX e DOM.
Xerces Apache Xerces parser é disponível emwww.apache.org. Xerces suporta SAX e DOM.
MSXML 3.0 Microsoft msxml parser disponível emmsdn.microsoft.com/xml e suporta SAX eDOM.
![Page 156: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/156.jpg)
InfoView2002 156
Eventos
SAX parserInvoca certos métodos quando eventos ocorrem
Programadores devem fazer overriding destes métodos para processar os dados
![Page 157: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/157.jpg)
InfoView2002 157
Métodos invocados pelo SAX parser
Método Descrição
setDocumentLocator Invocado no início do parsing.startDocument Invocado quando o parser encontra o início
de um documento XMLendDocument Invocado quando o parser encontra o fim de
um documento XMLstartElement Invocado quando a tag de inicio de um elemento é encontradaendElement Invocado quando a tag de fim de um elemento é encontrada.characters Invocado quando text characters são encontrados.ignorableWhitespace Invocado quando whitespace que pode ser ignorado é
encontrado.processingInstruction Invocado quando um PI é encontrada.
![Page 158: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/158.jpg)
InfoView2002 158
Como SAX funciona?Dado o documento XML abaixo:
<?xml version="1.0"?><samples><server>UNIX</server><monitor>color</monitor></samples>
SAX gera os seguintes EVENTOS:Start documentStart element (samples)Characters (white space)Start element (server)Characters (UNIX)End element (server)Characters (white space)Start element (monitor)Characters (color)End element (monitor)Characters (white space)End element (samples)
![Page 159: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/159.jpg)
InfoView2002 159
Como SAX funciona?Processamento em SAX involve os seguintes passos
1. Criar um event handler2. Criar o SAX parser3. Associar o event handler ao parser criado4. Fazer o parsing do documento, enviando cada evento aoevent handler.
![Page 160: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/160.jpg)
InfoView2002 160
Exemplo: Uma pesquisa de opinião
<?xml version="1.0"?><surveys><response username="bob"><question subject="appearance">A</question><question subject="communication">B</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">B</question></response><response username="sue"><question subject="appearance">C</question><question subject="communication">A</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">A</question></response><response username="carol"><question subject="appearance">A</question><question subject="communication">C</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">C</question></response></surveys>
![Page 161: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/161.jpg)
InfoView2002 161
Criando um event handler
import org.xml.sax.helpers.DefaultHandler;public class SurveyReader extends DefaultHandler{
public SurveyReader() {System.out.println("Object Created.");
}public void showEvent(String name) {
System.out.println("Hello, "+name+"!");}public static void main (String args[]) { SurveyReader reader = new SurveyReader(); reader.showEvent(”Nick");}
}
![Page 162: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/162.jpg)
InfoView2002 162
Criando o SAX parser
// Exemplo usando JAXPimport org.xml.sax.helpers.DefaultHandler;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.XMLReader;
public class SurveyReader extends DefaultHandler{
public SurveyReader() {}public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory =
SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser();
xmlReader = saxParser.getXMLReader();
} catch (Exception e) { System.err.println(e); System.exit(1); }}
}
![Page 163: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/163.jpg)
InfoView2002 163
Associando o event handler ao parser
...xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new SurveyReader());} catch (Exception e) {...
![Page 164: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/164.jpg)
InfoView2002 164
Parsing os dados...import org.xml.sax.InputSource;...xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new SurveyReader());InputSource source = new InputSource("surveys.xml");xmlReader.parse(source);} catch (Exception e) {...
Pronto! Falta apenas definir os eventos ...
![Page 165: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/165.jpg)
InfoView2002 165
Criando um ErrorHandler...import org.xml.sax.SAXParseException;public class SurveyReaderextends DefaultHandler{ public SurveyReader() { } public void error (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); } public void warning (SAXParseException e) { System.out.println("Problem parsing the file: "+e.getMessage()); } public void fatalError (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); System.out.println("Cannot continue."); System.exit(1); }public static void main (String args[]) { ...
![Page 166: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/166.jpg)
InfoView2002 166
Associando o ErrorHandler
...xmlReader.setContentHandler(new SurveyReader());xmlReader.setErrorHandler(new SurveyReader());InputSource source = new InputSource("surveys.xml");...
![Page 167: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/167.jpg)
InfoView2002 167
Eventos: startDocument()...import org.xml.sax.SAXException;public class SurveyReaderextends DefaultHandler{...public void fatalError (SAXParseException e) {System.out.println("Error parsing " +"the file: "+e.getMessage());System.out.println("Cannot continue.");System.exit(1);}public void startDocument() throws SAXException { System.out.println("Tallying survey results...");}public static void main (String args[]) {...
![Page 168: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/168.jpg)
InfoView2002 168
Eventos: startElement()...import org.xml.sax.Attributes;public class SurveyReader extends DefaultHandler{ ... public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { System.out.print("Start element: "); System.out.println(localName); } public static void main (String args[]) { …}
![Page 169: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/169.jpg)
InfoView2002 169
startElement(): pegando atributos
...public void startElement(
String namespaceURI,String localName,String qName,Attributes atts)throws SAXException {
System.out.print("Start element: "); System.out.println(localName); for (int att = 0; att < atts.getLength(); att++) { String attName = atts.getLocalName(att); System.out.println(" " + attName + ": " + atts.getValue(attName)); }}...
![Page 170: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/170.jpg)
InfoView2002 170
Obtendo Dados: characters()
…// ch inclui o documento inteiropublic void characters(char[] ch,
int start,int length)throws SAXException {
if (thisElement == "question") {printIndent(4);System.out.print(thisQuestion + ": ");System.out.println(new String(ch, start, length));
}}...
![Page 171: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/171.jpg)
InfoView2002 171
Obtendo Dados: characters()
![Page 172: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/172.jpg)
InfoView2002 172
Obtendo Dados: characters() (completo)
...public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" ");}} String thisQuestion = ""; String thisElement = ""; public void startElement( String namespaceURI,
String localName,String qName,Attributes atts)throws SAXException {
if (localName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (localName == "question") { thisQuestion = atts.getValue("subject"); } thisElement = localName; }
public void endElement( String namespaceURI,
String localName,String qName)throws SAXException {
thisQuestion = ""; thisElement = "";}public void characters(char[] ch,
int start,int length)throws SAXException {
if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); }}...
![Page 173: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/173.jpg)
InfoView2002 173
SAX versus DOM
DOMModelo baseado em árvorearmazena o documento inteiro numa hierarquia de document nodesDados são acessados rapidamenteProvê facilidades para adicionar e remover nodes
SAXInvoca métodos quando markup (tag) é encontradaMelhor performance do que DOMMenos overhead de memória do que DOMTipicamente usado para ler documentos (não para modificá-los)
![Page 174: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/174.jpg)
InfoView2002 174
XSL - eXtensible Stylesheet Language
![Page 175: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/175.jpg)
InfoView2002 175
XSL - Motivação Vantagens de separar apresentação de
conteúdo: Múltiplos formatos de saída: tamanhos
diferentes, mídias diferentes (papel, online), dispositivos diferentes (PDA, celular, PC)
Interface voltada para usuário (ex.: acessabilidade), cores, fontes, etc.
Uso de estilos padrões Liberdade do autor não se preocupar com
apresentação, que será tratada depois por um profissional.
![Page 176: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/176.jpg)
InfoView2002 176
Opções para mostrar XML
![Page 177: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/177.jpg)
InfoView2002 177
O que faz uma folha de estilo? Especifica a apresentação de XML
em duas categorias: Uma transformação opcional do
documento de entrada em outra estrutura
Uma descrição de como apresentar a informação transformada
![Page 178: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/178.jpg)
InfoView2002 178
O que faz um folha de estilo? geração de texto supressão de conteúdo mover texto duplicar texto ordenação transformações mais complexas
que computam nova informação baseada na informação existente.
![Page 179: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/179.jpg)
InfoView2002 179
Revisão de CSS CSS - Cascade Style Sheet Define o estilo de um documento
para apresentação Pode ser inline ou externa ao
documento Precedência de estilos:
Autor > Usuário > Web Browser
![Page 180: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/180.jpg)
InfoView2002 180
External Style Sheets
External Style SheetsContidas num arquivo.css Único style sheet usado por múltiplas páginasUsado com o elemento link
![Page 181: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/181.jpg)
InfoView2002 181
Exemplo de um CSS
/* styles.css *//* An external stylesheet */a { text-decoration: underline; color: red; background-color: #ccffcc }
li em { color: red; font-weight: bold}
ul { margin-left: 2cm }
<html><!-- Linking external style sheets --><head><title>Exemplo de CSS</title><link rel = "stylesheet" type = "text/css”
href = "styles.css"></head>
![Page 182: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/182.jpg)
InfoView2002 182
XSL - Princípios gerais
Como CSS, funcionamento a base de regras
CSS não modifica a estrutura de um documento, XSL sim
XSL utiliza a sintaxe XML
![Page 183: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/183.jpg)
InfoView2002 183
XSL - Histórico
XML derivada de SGMLPadronizada pelo W3CXSL derivada de DSSSL (Document Style Semantics and Specification Language)Primeira proposta formal em 1997 pela W3C (já continha conceitos de XSLT, como uso de templates)Novembro de 1999 XSLT tornou-se uma recomendação da W3CÚltima versão de XSL: Outubro de 2001 (incluindo XSL-FO)
![Page 184: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/184.jpg)
InfoView2002 184
Componentes de XSL
XSL consiste logicamente de 3 componentes:
XPath: XML Path Language-- linguagem para referenciar partes específicas de um documento XML
XSLT: XSL Transformations-- linguagem para descrever como transformar um documento XML (representado como uma árvore) em outro
XSL-FO: uma descrição de um conjunto de Formatting Objects e Formatting Properties
![Page 185: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/185.jpg)
InfoView2002 185
XSLT - Características
Linguagem declarativaDescreve a transformação desejada, ao invés de prover uma sequência de instruções procedurais
XSLT é essencialmente uma “ferramenta” para transformar documentos XML
XSLT manipula árvores
Uso de XSL Namespaces - O W3C provê um namespace para tags XSL
![Page 186: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/186.jpg)
InfoView2002 186
XSLT - Características
Processadores XSLT
Aplicam um stylesheet XSLT a um documento origem XML e produz um documento resultado.
Tratam árvores
Exemplos de processadores: Saxon, xt, MSXML3, Xalan (Apache)Web browsers já trazem tal processador sobretudo IE 6.0 e Netscape 6.0
![Page 187: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/187.jpg)
InfoView2002 187
XSLT - Estrutura de uma folha XSL
Uma folha XSL é um conjunto de regras
Uma regra associa um seletor a uma forma ou modelo
O seletor define a estrutura a qual pode se aplicar esta regra
A forma define a estrutura da sub-árvore gerada quando da ativação da regra
Se várias regras se aplicam a um elemento, a mais específica é executada
![Page 188: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/188.jpg)
188
XSLT - CaracterísticasElemento raiz de um documento XSL é <xsl:stylesheet> ou <xsl:transform>
<xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<?xml version=“1.0” encoding=ISO-8859-1”?><xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:template match=“”>corpo do template
</xsl:template>…
<xsl:template match=“”>corpo do template
</xsl:template></xsl:stylesheet>
Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou <xsl:transform> + Conjunto de regras de template
![Page 189: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/189.jpg)
InfoView2002 189
XSLT - Características
O corpo das regras de template é constituído por:Expressões XPathElementos XSLTFunções XSLT e XPath
Permite manipular partes de um documento
Duas formas de utilizar um arquivo xsl:Através de uma linha de comando, que referencia os documentos envolvidos na transformação (p.e, o xml origem, o html resultado e o xslt)Incluindo uma referência no próprio arquivo xml
![Page 190: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/190.jpg)
InfoView2002 190
<?xml version=“1.0” encoding=“iso-8859-1”?><saudacao>Bem-vindo ao InfoView 2002!</saudacao>
Saudacao.xml
<html><head>
<title>Saudação de Hoje</title></head><body>
<p>Bem-vindo ao InfoView 2002!</p></body></html>
Saudacao.html
![Page 191: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/191.jpg)
InfoView2002 191
<?xml version=“1.0” encoding=“iso-8859-1”?><xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”><xsl:template match=“/”>
<html><head>
<title>Saudação de Hoje</title></head><body>
<p><xsl:value-of select=“saudacao”/></p></body></html>
</xsl:template></xsl:stylesheet>
Saudacao.xsl
Linha de comando para transformar Saudacao.xml em Saudacao.html via Saudacao.xsl:C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html
![Page 192: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/192.jpg)
InfoView2002 192
<?xml version=“1.0” encoding=“iso-8859-1”?><?xml-stylesheet type=“text/xsl” href=“saudacao.xsl”?><saudacao>Bem-vindo ao InfoView 2002!</saudacao>
Saudacao.xml
Inclusão de uma referência ao arquivo xsl no próprio arquivo xml:
![Page 193: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/193.jpg)
InfoView2002 193
Exemplo 2
Stylesheet que transforma elementos <para> e <emphasis>
para HTML:<?xml version='1.0'?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="para"> <p><xsl:apply-templates/></p></xsl:template>
<xsl:template match="emphasis"> <i><xsl:apply-templates/></i></xsl:template>
</xsl:stylesheet>
![Page 194: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/194.jpg)
InfoView2002 194
Exemplo 2(cont)
Com a stylesheet anterior, o documento XML:<?xml version='1.0'?><para>Isto é um <emphasis>teste</emphasis>.</para>
seria transformado em:<?xml version="1.0" encoding="utf-8"?><p>Isto é um <i>teste</i>.</p>
![Page 195: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/195.jpg)
InfoView2002 195
Exemplo 3:<capitulo titulo = introducao>
Texto do capitulo
</capitulo>
<xsl:template match=“capitulo”>
<H1> <xsl:value-of select=“./@titulo”> </H1>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=“text()”>
<xsl:value-of select=“.”/>
</xsl:template>
<H1> Introducao </H1>
Texto do capitulo
XML
XSL
HTML
![Page 196: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/196.jpg)
InfoView2002 196
Templates
A maioria dos templates têm a seguinte forma:<xsl:template match="emphasis">
<i><xsl:apply-templates/></i></xsl:template>
The elemento <xsl:template> é um template
O match pattern determina onde este template se aplica
Elementos XSLT vêm do XSL namespace
![Page 197: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/197.jpg)
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 > 3 and $x < 8
![Page 198: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/198.jpg)
InfoView2002 198
Xpath - Exemplo de patterns (1)
para associa todos filhos <para> no contexto corrente
para/emphasis associa com todos elementos <emphasis> que têm um pai <para>
/ associa com a raiz do documento
para//emphasis associa com todos elementos <emphasis> que têm um ancestral <para>
section/para[1] associa o primeiro filho <para> de todos os filhos <section> no contexto corrente
//title associa todos elementos <title> em qualquer lugar no documento
.//title associa todos elementos <title> que são descendentes do contexto corrente
![Page 199: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/199.jpg)
InfoView2002 199
XPath- Exemplo de patterns (2)
section/*/note associa elementos <note> que tenham <section> como avós.
stockquote[@symbol] associa elementos <stockquote> que têm um atributo "symbol"
stockquote[@symbol="XXXX"] associa elementos <stockquote> que têm um atributo "symbol" com valor "XXXX"
emphasis|strong associa elementos <emphasis> ou <strong>
![Page 200: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/200.jpg)
InfoView2002 200
XSLT - Elementos
Elementos XSLT possuem sintaxe e semântica bem definidos
Existem muitos elementos pré-definidos no namespace XSLT e que são interpretados por processadores XSLT
Nem todos os elementos XSLT estão disponíveis para todos os processadores XSLT
Forma:<xsl: element_name>
![Page 201: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/201.jpg)
InfoView2002 201
XSLT - Elementos
<?xml version="1.0" encoding="ISO-8859-1" ?> -<catalog>
<cd><title>Empire Burlesque</title><artist>Bob Dylan</artist>
<country>USA</country><company>Columbia</company><price>10.90</price>
<year>1985</year> </cd><cd>
<title>Hide your heart</title><artist>Bonnie Tyler</artist><country>UK</country><company>CBS Records</company><price>9.90</price><year>1988</year>
</cd>...
</catalog>
Exemplo Base de XML:
![Page 202: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/202.jpg)
InfoView2002 202
XSLT - Elementos
<xsl:template>Contém regras que serão aplicadas a um nó específicoPossui o atributo “match”, que determina à qual elemento XML, a regra deve ser aplicada.
<xsl:value-of>É usado para selecionar o valor de um elemento XML e adicioná-lo à saída da transformaçãoPossui o atributo “select”, que contém uma expressão Xpath que calcula o valor a ser adicionado ao documento resultado
![Page 203: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/203.jpg)
InfoView2002 203
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform”>
<xsl:template match="/">
<html> <body>
-<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td> <xsl:value-of select="catalog/cd/title" /> </td>- <td> <xsl:value-of select="catalog/cd/artist"/> </td>
</tr>
</table>
</body> </html> </xsl:template> </xsl:stylesheet>
![Page 204: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/204.jpg)
InfoView2002 204
Resultado
![Page 205: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/205.jpg)
InfoView2002 205
XSLT - Elementos
<xsl:for-each>Permite a construção de loopsPossui o atributo “select”, que contém uma expressão Xpath que vai determinar sobre que elemento será realizado o loop
<xsl:sort>É usado para ordenar a saídaPossui o atributo “select”, que indica qual elemento XML ordenarPossui o atributo “order”, que indica o tipo da ordenação: ascending ou descending.
![Page 206: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/206.jpg)
InfoView2002 206
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">-
<xsl:template match="/">
<html><body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist" />
<tr>
<td> <xsl:value-of select="title" /> </td>
<td> <xsl:value-of select="artist" /> </td>
</tr>
</xsl:for-each>
</table>
</body> </html>
</xsl:template> </xsl:stylesheet>
![Page 207: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/207.jpg)
InfoView2002 207
Resultado
![Page 208: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/208.jpg)
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>‘10’>conteúdo ...
</xsl:if>
![Page 209: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/209.jpg)
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>'10'">
<tr>
<td> <xsl:value-of select="title" /> </td>
<td> <xsl:value-of select="artist" /> </td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body> </html> </xsl:template> </xsl:stylesheet>
![Page 210: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/210.jpg)
InfoView2002 210
XSLT - Elementos
![Page 211: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/211.jpg)
InfoView2002 211
XSLT - Elementos<xsl:attribute>
É usado para adicionar atributos aos elementos
<picture><xsl:attribute name=“source”/>
<picture>
<xsl:template match="/"> <xsl:for-each select="catalog/cd">
<xsl:element name="singer"><xsl:value-of
select="artist" /> </xsl:element><br />
</xsl:for-each></xsl:template>
<xsl:element> cria um elemento (node) na saída
![Page 212: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/212.jpg)
InfoView2002 212
XSLT - Elementos
<xsl:copy>Cria uma cópia do nó corrente do documento origem para o documento destino
<xsl:template match="message"> <xsl:copy></xsl:copy>
</xsl:template>
<xsl:copy-of>–Cria uma cópia do nó corrente (inclusive os nós filhos e atributos)
![Page 213: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/213.jpg)
InfoView2002 213
<?xml version = "1.0"?><!-- Banco de Dados Esporte --><esportes> <jogo titulo = "cricket">
<id>243</id> <para> Mais popular na Inglaterra </para>
</jogo> <jogo titulo = ”baseball">
<id>431</id> <para> Mais popular nos EUA </para>
</jogo> <jogo titulo = ”futebol">
<id>123</id> <para> Mais popular no Brasil </para>
</jogo></esportes>
Exemplo: Seja o DB XML:
![Page 214: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/214.jpg)
InfoView2002 214
match elemento esportes e aplica os templates aos nodes
filhos esportes
<?xml version = "1.0"?><!-- Usando xsl:element e xsl:attribute --><xsl:stylesheet version = "1.0” xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <xsl:apply-templates/> </xsl:template>
<xsl:template match = ”esportes"> <esportes> <xsl:apply-templates/> </esportes> </xsl:template> <xsl:template match = ”jogo"> <xsl:element name = "{@titulo}"> <xsl:attribute name = "id">
<xsl:value-of select = "id"/> </xsl:attribute> <comment>
<xsl:value-of select = "para"/> </comment>
</xsl:element> </xsl:template></xsl:stylesheet>
Use o atributo match para selecionar a raiz do documento XML
Cria elemento titulo
Cria atributo id para elemento titulo
Cria comentário com o conteúdo do elemento
para
Exemplo (cont): XSL
![Page 215: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/215.jpg)
InfoView2002 215
<?xml version = "1.0" ?><esportes> <cricket id = "243">
<comment> Mais popular na Inglaterra</comment>
</cricket> <baseball id = "432">
<comment> Mais popular nos EUA</comment>
</baseball> <futebol id = ”123">
<comment> Mais popular no Brasil</comment>
</futebol></esportes>
Resultado produzido
![Page 216: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/216.jpg)
InfoView2002 216
XSLT - Elementos
<xsl:param> Elemento que define parâmetros Possui o atributo “name” para assinalar o nome do
parâmetro Possui o atributo “select”, que armazena o valor do
parâmetro
<xsl:call-template> Elemento que chama um determinado template Possui o atributo “name” para assinalar o nome do
template
![Page 217: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/217.jpg)
InfoView2002 217
<xsl:with-param> Elemento que define os valores dos parâmetros quando da
chamada de um template Possui o atributo “name” para assinalar o nome do
parâmetro Possui o atributo “select”, que armazena o valor do
parâmetro
<xsl:variable> Elemento usado para declarar variáveis Possui o atributo “name” para assinalar o nome da variável Possui o atributo “select”, que armazena o valor do variável
XSLT - Elementos
![Page 218: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/218.jpg)
InfoView2002 218
XSLT - Elementos
<xsl:template name=“parenthsize”><xsl:param name=“string”/><xsl:value-of select=“concat(‘(‘,$string,’)’)”/>
</xsl:template>
<xsl:variable name=“credit-in-paren”><xsl:call-template name=“parenthsize”>
<xsl:with-param name=“string” select=“@credit”/></xsl:call-template>
<xsl:variable>
![Page 219: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/219.jpg)
InfoView2002 219
XSLT - Elementos
<xsl:text> Elemento usado para escrever texto na saída
<xsl:template match="car"> <p> <xsl:value-of
select="@year"/> <xsl:text>.</xsl:text> <xsl:value-of
select="@color"/> </p> </xsl:template>
![Page 220: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/220.jpg)
InfoView2002 220
XSLT - Funções
Juntamente com XPath e os elementos XSLT, formam o core XSLT
Em um stylesheet XSLT podem ser usadas dois tipos de funções built-in:
Funções XPath Funções XSLT
Existem ainda as funções que podem ser definidas pelo elemento XSLT <xsl:functions>
<xsl:value-of select=“funcs:f1”><xsl:functions ns=“funcs” type=“text/javascript”>
function f1() { return “Funcao 1”; }
</xsl:functions>
![Page 221: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/221.jpg)
InfoView2002 221
XSLT - Funções
format-number() É usada para converter números em strings de
acordo com algum padrão de formato format-number(value, format) => string<<format-number(12.5, ‘$#.00’)>> <<$12.50>><<format-number(0.25, ‘#00%’)>> <<25%>>
generate-id() Gera um string, na forma de um nome XML, que
unicamente identifica um nó. generate-id(nó) => string o código retornado depende do XSLT processor<<generate-id(book)>> <<N015732>>
![Page 222: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/222.jpg)
InfoView2002 222
XSLT - Funções
current() Retorna o nó corrente current() => conjunto de nós<<generate-id(current())>>
document() Retorna o nó raiz de um documento XML externo document(uri) => nó
<<document(‘data.xml’)>>
![Page 223: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/223.jpg)
InfoView2002 223
XSLT - Funções
id() Retorna o nó com um determinado valor para seu
atributo ID id(value) => nó<<id(‘A321-780’)>> <product code=“A321-780”>
element-available() É usada para testar se um determinada instrução
XSLT está disponível para uso. Element-available(name) => boolean<<element-available(‘xsl:text’)>>
![Page 224: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/224.jpg)
InfoView2002 224
XSLT - Funções
count(arg1) retorna o número de nodes presentes no conjunto de
nós passados como argumento sum(arg1)
calcula a soma de um conjunto de valores numéricos contidos nos nodes do conjunto de nodes passados como argumento
contains(arg1, arg2) testa se arg1 contém arg2 como substring é case sensitive
Ex: contains (‘Paris’, ‘A’) retorna false
![Page 225: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/225.jpg)
InfoView2002 225
XSLT - Exemplo Completo (Doc1 – Documento Origem XML)<?xml version="1.0" encoding="utf-8" ?>
<customers> <customer CustomerID="ALFKI" CompanyName="Alfreds Futterkiste"
ContactName="Maria Anders" ContactTitle="Sales Representative" Address="Obere Str. 57" City="Berlin" PostalCode="12209" Country="Germany" Phone="030-0074321" Fax="030-0076545" />
<customer CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" ContactName="Ana Trujillo" ContactTitle="Owner" Address="Avda. de la Constitución 2222" City="México D.F." PostalCode="05021" Country="Mexico" Phone="(5) 555-4729" Fax="(5) 555-3745" />
<customer CustomerID="AROUT" CompanyName="Around the Horn" ContactName="Thomas Hardy" ContactTitle="Sales Representative" Address="120 Hanover Sq." City="London" PostalCode="WA1 1DP" Country="UK" Phone="(171) 555-7788" Fax="(171) 555-6750" />
<customer CustomerID="BERGS" CompanyName="Berglunds snabbköp" ContactName="Christina Berglund" ContactTitle="Order Administrator" Address="Berguvsvägen 8" City="Luleå" PostalCode="S-958 22" Country="Sweden" Phone="0921-12 34 65" Fax="0921-12 34 67" />...
</customers>
![Page 226: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/226.jpg)
InfoView2002 226
<?xml version="1.0" encoding="UTF-16" ?>
<customers><customer CompanyName="Cactus Comidas para llevar" CustomerID="CACTU" Country="Argentina" />
<customer CompanyName="Océano Atlántico Ltda." CustomerID="OCEAN" Country="Argentina" />
<customer CompanyName="Ernst Handel" CustomerID="ERNSH" Country="Austria" /> <customer CompanyName="Piccolo und mehr" CustomerID="PICCO"
Country="Austria" /> <customer CompanyName="Maison Dewey" CustomerID="MAISD"
Country="Belgium" /> <customer CompanyName="Comércio Mineiro" CustomerID="COMMI"
Country="Brazil" />
...<customer CompanyName="Save-a-lot Markets" CustomerID="SAVEA" Country="USA" /> <customer CompanyName="The Big Cheese" CustomerID="THEBI" Country="USA" />
</customers>
XSLT - Exemplo Completo (Doc1 – Documento Resultado XML)
![Page 227: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/227.jpg)
InfoView2002 227
<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match=“customer">
<xsl:apply-templates /> </xsl:template> <xsl:template match="customers"> <xsl:for-each select="customer"> <xsl:sort select="@Country" order="ascending" />
<customer> <xsl:attribute name="CompanyName"> <xsl:value-of select="@CompanyName" /> </xsl:attribute>
<xsl:attribute name="CustomerID"> <xsl:value-of select="@CustomerID" />
</xsl:attribute><xsl:attribute name="Country">
<xsl:value-of select="@Country"/></xsl:attribute>
</customer> </xsl:for-each></xsl:template> </xsl:stylesheet>
XSLT - Exemplo Completo (Documento XSLT para conversão Doc1 => Doc2)
![Page 228: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/228.jpg)
InfoView2002 228
XSL: Extensible Stylesheet Language Formatting Objects
Formatting objects Usado para formatar documentos XML
para apresentação Tipicamente usado quando o resultado da
transformção é para mídia impressa livros, revistas, encartes, etc.
FOP Ferramenta em Java da Apache Transforma documentos XSL que contêm
formatting objects Download em xml.apache.org/fop
![Page 229: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/229.jpg)
InfoView2002 229
XSLFO Exemplos de ferramentas
http://xml.apache.org/fop - FOP para PDF
http://www.unicorn-enterprises.com/ - TeX para PDF
http://www.jfor.org/ - XSLFO para RTF http://www.xsmiles.org/ - browser XML
que usa FOP
![Page 230: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/230.jpg)
InfoView2002 230
<?xml version="1.0" encoding="utf-8"?><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">...<fo:page-sequence> <fo:flow> <fo:block font-size="18pt" font-weight="bold" text-align="centered"> Prefácio </fo:block> <fo:block font-size="12pt" space-before="1pc" text-align="justified"> Este é um documento simples de teste. Ele mostra uma <fo:inline font-style="italic">árvore</fo:inline> fo-result parcial (sem usar page layout). </fo:block> </fo:flow></fo:page-sequence>...</fo:root>
Exemplo
![Page 231: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/231.jpg)
InfoView2002 231
Exemplo<xsl:template match="chapter"> <fo:flow> <xsl:apply-templates/> </fo:flow></xsl:template>
<xsl:template match="chapter/title"> <fo:block font-size="18pt" font-weight="bold" text-align="centered"> <xsl:apply-templates/> </fo:block></xsl:template>
<xsl:template match="para"> <fo:block font-size="12pt" space-before="1pc" text-align="justified"> <xsl:apply-templates/> </fo:block></xsl:template>
<xsl:template match="emphasis"> <fo:inline font-style="italic"> <xsl:apply-templates/> </fo:inline></xsl:template>
![Page 232: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/232.jpg)
InfoView2002 232
page-sequence-- a parte maior (tal como body) na qual o layout de página
pode diferir de outras partes
flow-- um capítulo ou divisão de seção dentro de uma page-sequence
block-- um parágrafo (ou title ou block quote, etc.)
inline-- uma mudança de fonte dentro de um parágrafo
list FOs--list-block, list-item, list-item-label, list-item-body
graphic--referencia um objeto gráfico externo
table FOs--análogo a table model em HTML
Alguns Formatting Objects (FO)
![Page 233: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/233.jpg)
InfoView2002 233
fonte
margens e espaçamento
bordas
alinhamento horizontal/justification
endentação
dentre outros ...
Propriedades básicas
![Page 234: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/234.jpg)
InfoView2002 234
<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="article"> <fo:page-sequence font-family="serif" font-size="12pt"> <xsl:apply-templates/> </fo:page-sequence></xsl:template>
<xsl:template match="chapter"> <fo:flow> <xsl:apply-templates/> </fo:flow></xsl:template>
<xsl:template match="para"> <fo:block space-before="6pt"> <xsl:apply-templates/> </fo:block></xsl:template><!--(continua no próximo slide) -->
Exemplo Final
![Page 235: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/235.jpg)
InfoView2002 235
<xsl:template match="chapter/title"> <fo:block font-family="sans-serif" color="blue" font-weight="bold" font-size="18pt" space-after="0.5em"> <xsl:number level="multiple" count="chapter"/> <xsl:text> </xsl:text>
<xsl:apply-templates/> </fo:block></xsl:template><xsl:template match="section/title"> <fo:block font-family="sans-serif" font-weight="bold" font-size="16pt" space-after="0.5em"> <xsl:number level="multiple" count="chapter|section"/> <xsl:text> </xsl:text> <xsl:apply-templates/> </fo:block></xsl:template><xsl:template match="article/title"> <fo:block font-family="sans-serif" font-size="24pt" space-after="2pc"> <xsl:apply-templates/> </fo:block></xsl:template></xsl:stylesheet>
Exemplo (cont)
![Page 236: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/236.jpg)
InfoView2002 236
Consulta a dados semi-estruturados
![Page 237: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/237.jpg)
InfoView2002 237
Requisitos desejáveis (Maier ’98) Expressividade
linguagem de consulta ao estilo SQL possibilitar a restruturação de dados semi-estruturados
Semântica precisa muito importante para XML
Composição o resultado de uma consulta deve poder ser
utilizado dentro de uma outra consulta Consulta ao esquema
visando otimização Facilitar a geração automática de consultas
Consulta
![Page 238: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/238.jpg)
InfoView2002 238
Expressões de caminho (Path expressions)
Expressões que permitem navegar no grafo de dados
Expressões de caminho simples sequências de labels exemplos
root.pessoas {&p1,&p2,&p3}root.pessoas.filhos {&p2,&p3}
semântica o resultado de uma expressão de caminho r.l1. … .ln,
onde l1,…,ln são os labels e r um objeto, é o conjunto de nodos do grafo acessíveis de r por um caminho do grafo tal que os arcos percorridos passam sucessivamente pelos labels l1,…,ln.
![Page 239: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/239.jpg)
InfoView2002 239
Expressões de caminho Expressões de caminho generalizadas Idéia: além de especificar completamente um caminho,
permite exprimir restrições (constraints) sobre o caminho
Utilização de expressões regulares Exemplos
_ é um caracter coringa que designa um label qualquer
(pessoa|estudante)._.idade As expressões de caminho definidas até o presente
retornam os conjuntos de objetos e não de dados semi-estruturados
Consulta
![Page 240: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/240.jpg)
InfoView2002 240
Linguagem de Consulta
X-Query
![Page 241: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/241.jpg)
InfoView2002 241
XQuery
Baseda em Quilt (que é baseda em XML-QL)
http://www.w3.org/TR/xquery/2/2001
XML Query data model
![Page 242: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/242.jpg)
InfoView2002 242
FLWR (“Flower”) ExpressionsFOR ... LET... WHERE...RETURN...
![Page 243: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/243.jpg)
InfoView2002 243
XQuery
Encontre os títulos dos livros publicados após 1995:
FOR $x IN document("bib.xml")/bib/book
WHERE $x/year > 1995
RETURN $x/title
FOR $x IN document("bib.xml")/bib/book
WHERE $x/year > 1995
RETURN $x/titleResultado: <title> abc </title> <title> def </title> <title> ghi </title>
![Page 244: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/244.jpg)
InfoView2002 244
XQueryPara cada autor de um livro publicado pela
Morgan Kaufmann, listar os livros publicados:
FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)
RETURN <result>
$a,
FOR $t IN /bib/book[author=$a]/title
RETURN $t
</result>
FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)
RETURN <result>
$a,
FOR $t IN /bib/book[author=$a]/title
RETURN $t
</result>
distinct = elimina duplicatas
![Page 245: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/245.jpg)
InfoView2002 245
XQuery
Resultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>
![Page 246: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/246.jpg)
InfoView2002 246
XQuery
FOR $x in expr -- liga $x a cada valor na lista expr
LET $x = expr -- liga $x à inteira lista expr Usado para subexpressões comuns e
para agregações
![Page 247: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/247.jpg)
InfoView2002 247
XQuery
count = função (aggregate) que retorna o número de elementos
<big_publishers>
FOR $p IN distinct(document("bib.xml")//publisher)
LET $b := document("bib.xml")/book[publisher = $p]
WHERE count($b) > 100
RETURN $p
</big_publishers>
<big_publishers>
FOR $p IN distinct(document("bib.xml")//publisher)
LET $b := document("bib.xml")/book[publisher = $p]
WHERE count($b) > 100
RETURN $p
</big_publishers>
![Page 248: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/248.jpg)
InfoView2002 248
XQuery
Encontre os livros cujos preços são maiores do que a média de preços:
FOR $b in document("bib.xml")/bib/book
LET $a=avg(document("bib.xml")/bib/book/price)
WHERE $b/price > $a
RETURN $b
FOR $b in document("bib.xml")/bib/book
LET $a=avg(document("bib.xml")/bib/book/price)
WHERE $b/price > $a
RETURN $b
![Page 249: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/249.jpg)
InfoView2002 249
XQuery
Sumário: FOR-LET-WHERE-RETURN = FLWR
FOR/LET Clauses
WHERE Clause
RETURN Clause
Lista de tuplas
Lista de tuplas
Instância do modelo de dados Xquery
![Page 250: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/250.jpg)
InfoView2002 250
FOR versus LET
FOR liga variáveis nodo iteration
LET liga variáveis coleção one value
![Page 251: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/251.jpg)
InfoView2002 251
FOR versus LET
FOR $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
FOR $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
Retorna: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ...
LET $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
LET $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
Retorna: <result> <book>...</book> <book>...</book> <book>...</book> ...</result>
![Page 252: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/252.jpg)
InfoView2002 252
Coleções em XQuery
Conjuntos e Bags /bib/book/author = uma coleção do tipo Bag Distinct(/bib/book/author) = uma coleção do
tipo conjunto (Set) LET $a = /bib/book $a é uma coleção $b/author uma coleção (vários
autores...)RETURN <result> $b/author </result>RETURN <result> $b/author </result>
Retorna: <result> <author>...</author> <author>...</author> <author>...</author> ...</result>
![Page 253: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/253.jpg)
InfoView2002 253
Ordenação em XQuery
<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>
<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>
Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR
![Page 254: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/254.jpg)
InfoView2002 254
If-Then-Else
FOR $h IN //holding
RETURN <holding>
$h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
</holding> SORTBY (title)
FOR $h IN //holding
RETURN <holding>
$h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
</holding> SORTBY (title)
![Page 255: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/255.jpg)
InfoView2002 255
Quantificador Existencial
FOR $b IN //book
WHERE SOME $p IN $b//para SATISFIES
contains($p, "sailing")
AND contains($p, "windsurfing")
RETURN $b/title
FOR $b IN //book
WHERE SOME $p IN $b//para SATISFIES
contains($p, "sailing")
AND contains($p, "windsurfing")
RETURN $b/title
![Page 256: InfoView20021 XML – eXtensible Markup Language Prof. Dr. Cláudio Baptista UFCG/DSC/SINBAD baptista@dsc.ufcg.edu.br](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc105497959413d8c06ce/html5/thumbnails/256.jpg)
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