Vous êtes sur la page 1sur 298
XML uma introdução prática Helder da Rocha © 2000, 2001, 2003, 2005, 2007 Helder da
XML uma introdução prática Helder da Rocha © 2000, 2001, 2003, 2005, 2007 Helder da

XML

uma introdução prática

XML uma introdução prática Helder da Rocha © 2000, 2001, 2003, 2005, 2007 Helder da Rocha

Helder da Rocha

© 2000, 2001, 2003, 2005, 2007 Helder da Rocha

1

Objetivos

!! Oferecer uma introdução geral sobre a tecnologia XML, com conceitos teóricos e experimentação prática, abrangendo fundamentos e principais aplicações

a tecnologia XML, com conceitos teóricos e experimentação prática, abrangendo fundamentos e principais aplicações 2

2

Agenda

!! Dia 1

!! 1. Introdução a XML e tecnologias relacionadas !! 2. Fundamentos de estrutura e sintaxe !! 3. Especificação de aplicações com DTD

!! Dia 2

!! 4. Programação com DOM e SAX (fundamentos*) !! 5. Visualização de documentos XML usando CSS !! 6. Referências e navegação com XLink e XPointer !! 7. Especificação de aplicações com XML Schema (fundamentos*)

!! Dia 3

!! 8. Localização e extração de dados com XPath !! 9. Transformação de XML com XSLT (fundamentos*) !! 10. Layout de página e gráficos com XSL-FO e SVG (fundamentos*)

* tópicos complexos que são abordados de forma introdutória neste curso (eles são explorados em maior profundidade em outros cursos)

que são abordados de forma introdutória neste curso (eles são explorados em maior profundidade em outros

3

Formato

!! Apresentação em slides !! Demonstrações !! Exercícios

!! Realizados em sala de aula !! Propostos para realização fora do horário de aula

! ! Exercícios ! ! Realizados em sala de aula ! ! Propostos para realização fora

4

Material

!! Slides (disponíveis no site) !! Apostila (tópicos selecionados e guia de referência) !! Código de exemplos usados nas demonstrações !! Código de aplicações !! Atualizações (slides e documentos anexos) !! Especificações oficiais !! Ferramentas abertas !! Material de referência

(slides e documentos anexos) ! ! Especificações oficiais ! ! Ferramentas abertas ! ! Material de

5

Sobre material avulso e alterações

!! O material didático distribuído refere-se ao roteiro usado como referência para a maior parte dos cursos !! Em cursos personalizados, alguns tópicos poderão não ser abordados, e material avulso de outros cursos poderá ser usado !! Mesmo em cursos normais, material avulso poderá ser introduzido como atualização

!! A maior parte dos cursos de tecnologia envolvem assuntos que mudam com freqüência !! Melhoramentos na apresentação e didática às vezes são introduzidos antes e uma reforma geral do material

!! Durante o curso o instrutor também poderá trocar a ordem de apresentação de assuntos, aprofundar um assunto ou mesmo tratar superficialmente outro assunto, caso isto traga benefícios ao curso de uma forma geral

um assunto ou mesmo tratar superficialmente outro assunto, caso isto traga benefícios ao curso de uma

6

Sobre ferramentas usadas no curso

!! As ferramentas e aplicações usadas em sala tem acima de tudo um objetivo didático

!! Podem não ser as melhores ferramentas em termos de produtividade e uso profissional

!! Algumas ferramentas usadas em aula foram adaptadas para explorar os exemplos e exercícios apresentados

!! As ferramentas podem não estar mais disponíveis na Web ou estarem em versões mais novas e possivelmente incompatíveis !! Geralmente uma pasta com todo o código usado nessas ferramentas será distribuída com o material didático (depende do curso) – use a versão fornecida (a menos que o instrutor indique outra alternativa) !! É possível que algumas ferramentas só funcionem em determinadas plataformas (Windows, Mac, Java)

alternativa) ! ! É possível que algumas ferramentas só funcionem em determinadas plataformas (Windows, Mac, Java)

7

Ferramentas úteis para este curso

!! Para programação

!! Parsers-validadores: Xerces, Crimson, MSXML 4.0 !! Validadores: MSV (Sun) !! Transformadores XSL: TrAX, Xalan, Xt, Saxon !! APIs: JDOM, JAX !! Veja mais em xml.apache.org e www.alphaworks.ibm.com

!! Para edição (de XML genérico)

!! XML Spy, Liquid e oXygen (software comercial) !! Eclipse e Netbeans (gratuitos) !! Veja mais em www.w3.org/XML/

XML Spy, Liquid e oXygen (software comercial) ! ! Eclipse e Netbeans (gratuitos) ! ! Veja

8

Fontes

[1] World Wide Web Consortium (W3C). eXtensible Markup Language.

http://www.w3.org/XML/. Ponto de partida e principal fonte sobre XML e suas tecnologias "satélite". Contém últimas especificações de XML, XPath, XSchema, XSLT, XSL-FO, XQuery, XLink, XPointer, SVG, XHTML, CSS.

[2] Eric Armstrong et al. Working with XML. Aborda DOM, SAX e XML com Java.

http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/index.html.

[3] Adobe. SVG Tutorial. http://www.adobe.com/svg/. Contém tutorial sobre SVG e links para o plug-in SVG da Adobe (Win/Mac).

[4] IBM Developerworks. http://www-106.ibm.com/developerworks/. Diversos tutoriais e artigos sobre XML, XSLT, DOM e SAX usando geralmente Java.

[5] Doug Tidwell. XSLT. O’Reilly & Associates, 2001. Explora XSLT com aplicações práticas em Java.

[6] Elliotte Rusty Harold. XML Bible, Second Edition, 2001. Aborda todas as

principais tecnologias W3C. 5 capítulos em http://cafeconleche.org/books/bible2/

[7] Erik T. Ray. Learning XML. O’Reilly & Associates, 2001. Introdução ao XML e DTD, XSLT, XLink e XPointer (os dois últimos baseados em especificações draft).

2001. Introdução ao XML e DTD, XSLT, XLink e XPointer (os dois últimos baseados em especificações

9

Importante

!! Tente fazer os exercícios; se não entender, pergunte! !! Explore os exemplos e exercícios em aplicações reais (não se limite a ver um exemplo didático funcionar) !! Tente fazer os exercícios; se não entender, pergunte!

helder.darocha@gmail.com

www.argonavis.com.br

funcionar) ! ! Tente fazer os exercícios; se não entender, pergunte! helder.darocha@gmail.com www.argonavis.com.br 10

10

Introdução a XML X100 Helder da Rocha (helder@argonavis.com.br) Atualizado em setembro de 2001 1
Introdução a XML
X100
Helder da Rocha
(helder@argonavis.com.br)
Atualizado em setembro de 2001
1
O que é XML? !! eXtensible Markup Language: padrão W3C !! Uma maneira de representar
O que é XML?
!! eXtensible Markup Language: padrão W3C
!! Uma maneira de representar informação
!! não é uma linguagem específica
!! não define vocabulário de comando
!! não define gramática, apenas regras mínimas de estrutura
!! Exemplo: documento XML
usuario_33.xml
<contato codigo="33">
<nome>Severino Severovitch</nome>
elemento
<email>bill@norte.com.br</email>
<telefone
tipo="celular">
<area>11</area>
atributo
<numero>9999 4321</numero>
</telefone>
"nó" de texto
</contato>
2

XML versus HTML

HTML mostra como apresentar

XML mostra o que significa

HTML mostra como apresentar XML mostra o que significa <h1> Severino Severovitch </h1>

<h1>Severino Severovitch</h1>

<h2>bill@norte.com.br</h2>

<p>

<b>11</b>

<i>9999 4321</i> </p>

<nome>Severino Severovitch</nome> <email>bill@norte.com.br</email> <telefone>

<ddd>11</ddd>

<numero>9999 4321</numero> </telefone>

3

Anatomia de um documento XML !! Documentos XML são documentos de texto Unicode !! É
Anatomia de um documento XML
!! Documentos XML são documentos de texto Unicode
!! É uma hierarquia de elementos a partir de uma raiz
!! Menor documento tem um elemento (vazio ou não):
<nome> !"#"$%&' !"#"$'#%( </nome>
!! Menor documento contendo elemento vazio
Elemento raiz
<nome></nome>
<nome/>
=
!! Menor documento contendo elemento e conteúdo texto
<nome>
!"#"$%&' !"#"$'#%(
</nome>
Etiqueta
Conteúdo do
Etiqueta
inicial
Elemento
final
4
XML Namespaces !! Estabelecem um contexto para elementos e atributos !! É formalmente declarado através
XML Namespaces
!! Estabelecem um contexto para elementos e atributos
!! É formalmente declarado através de um identificador (um string, geralmente
uma URI) através de atributo reservado do XML: xmlns
!! Podem ser associados a um prefixo para qualificar elementos e atributos
!! Quando o prefixo não é usado, estabelece um namespace default adotado
pelo elemento onde é declarado e seus elementos filho
!"#$%&'(')*+
++!,-$.)+%/#0'0-12"-3%/0)"2*456!7,-$.)*+
++!(&#$'+!"#$%&'()*+,,- /0#*"-'*+
++++!,-$.)*(8%9)")!7,-$.)*+
Escopo do namespace vale
para elemento <clima> e
herdado por todos os seus
descendentes
++!7(&#$'*+
!7"#$%&'(')*+
!"#$%&'(')+:$&/"+112%;#<77' =(&#$'2*+
++!,-$.)+%/#0'0-12"-3%/0)"2*456!7,-$.)*+
Escopo do namespace vale
para descendentes de
<simulacao> qualificados
com o prefixo 'w'
++!1+(&#$'*+
++++!1+,-$.)*(8%9)")!71+,-$.)*+
++++!,-$.)+%/#0'0-128);'"2*>?@!7,-$.)*+
++!71+(&#$'*+
!7"#$%&'(')*+
Nos dois casos, elementos <tempo> significam coisas diferentes, mas não há conflito
porque pertencem a namespaces diferentes (um deles não tem namespace)
5

Documentos XML bem formados

!! Para que possa ser manipulado como uma árvore, um documento XML precisa ser bem formado

!! Documentos que não são bem formados não são documentos XML – use um editor XML para descobrir

!! Documentos bem-formados obedecem as regras de construção de documentos XML genéricos !! Regras incluem

!! Ter um, e apenas um, elemento raiz !! Valores dos atributos estarem entre aspas ou apóstrofes !! Atributos não se repetirem !! Todos os elementos terem etiqueta de fechamento !! Elementos estarem corretamente aninhados

não se repetirem ! ! Todos os elementos terem etiqueta de fechamento ! ! Elementos estarem

6

Exemplos de algumas regras

!! (1) Elementos não devem se sobrepor

!! Não pode

!"#!$#!%"#!%$#&

!! (2) Atributos têm que ter valores entre aspas

!! Não pode !! Deve ser

!'(&)*+,'-./#&&

!'(&)*+,'-0./0#&

!! (3) Nomes de elementos são case-sensitive

!! Não pode

!"#111!%2#&

!! (4) Todos os elementos têm marcadores de abertura e de fechamento

!! Não pode !! Deve ser

de abertura e de fechamento ! ! Não pode ! ! Deve ser !$(# 3 !$(#&

!$(#3!$(#&

!$(%#3!$(%#&

!$(#!%$(#3!$(#!%$(#&

ou

7

XML válido

!! Um XML bem construído pode não ser válido em determinada aplicação !! Aplicação típica pode esperar que

!! elementos façam parte de um vocabulário limitado, !! certos atributos tenham valores e tipos definidos, !! elementos sejam organizados de acordo com uma determinada estrutura hierárquica, etc.

!! É preciso especificar a linguagem!

!! Esquema: modelo que descreve todos os elementos, atributos, entidades, suas relações e tipos de dados

!! Um documento é considerado válido em relação a um esquema se obedecer todas as suas regras

e tipos de dados ! ! Um documento é considerado válido em relação a um esquema

8

Esquema

Documentos que aderem à especificação (válidos)

Documento fora da especificação

especificação (válidos) Documento fora da especificação ! ! O esquema representa uma classe ! ! Os

!! O esquema representa uma classe !! Os documentos são instâncias

Esquema (universo de documentos válidos)

!! Como definir esquemas:

!! DTD - Document Type Definition !! W3C XML Schema

9

DTD vs. XML Schema

!! Um esquema é essencial para que haja comunicação usando XML

!! Pode ser estabelecido "informalmente" (via software) !! Uso formal permite validação usando ferramentas genéricas de manipulação de XML

!! Soluções padrão do W3C

DTD

!"#$#%#&'()*+,-,*(( ((((((((((.+*/01(0/-231(,0304*+056( !"7''$89'()*+,-,*(
!"#$#%#&'()*+,-,*((
((((((((((.+*/01(0/-231(,0304*+056(
!"7''$89'()*+,-,*(
(((((((((()*:2;*(&%'<=#&(>?#@A8?#B6(

! Simples mas não é XML ! Não suporta namespaces ! Limitado quando a tipos de dados

suporta namespaces • ! Limitado quando a tipos de dados XML Schema ! CD: ED)F0/-(( (((((

XML Schema

!CD:ED)F0/-((

(((((C/3+DECD:GHIIIJK%$9)F0/-H6(

(!CD:E030/0+,(+-/0GH)*+,-,*H6(

((!CD:E)*/L30C'ML06(

(((!CD:E-,,N2OP,0(+-/0GH)*:2;*H(((((((((((((((((((((((((

((((((((((((((((((PD0GHN0QP2N0:H6(

! É XML, porém mais complexo ! Suporta namespaces ! Permite definição de tipos

10

Por que usar XML para compartilhar dados?

!! Porque é um padrão aberto

!! Facilidade para converter para formatos proprietários

!! Porque é texto

!! Fácil de ler, fácil de processar, menos incompatibilidades

!! Porque promove a separação entre estrutura, conteúdo e apresentação

!! Facilita geração de dados para visualização dinâmica !! Evita repetição de informação / simplifica manutenção

!! Porque permite semântica na Web

!! Elementos HTML não carregam significado, apenas dicas de formatação: mecanismos de busca ficam prejudicados

Web ! ! Elementos HTML não carregam significado, apenas dicas de formatação: mecanismos de busca ficam

11

Como produzir XML

!! Criando um documento de texto Unicode a partir de qualquer editor de textos

de texto Unicode a partir de qualquer editor de textos ! "#$%&%# '"#()*#+, -- ,.' ''!

!"#$%&%#'"#()*#+,--,.'

''!$#/0.10203)$#'10203#2)%"4!5$#/0.'

''!0/&)6.7)668$#3%09"#/973!50/&)6.'

''!%060:#$0'%);#+,"06<6&3,.'

''''!&30&.==!5&30&.'

''''!$</03#.>>>>'?-@=!5$</03#.'

''!5%060:#$0.'

!5"#$%&%#.'

!! Gerando um documento a partir de uma árvore montada dinamicamente

um documento a partir de uma árvore montada dinamicamente 33 Severino Severovitch bill@norte.com.br celular 11 9999

33

Severino Severovitch

bill@norte.com.br

celular

11

9999 4321

Severino Severovitch bill@norte.com.br celular 11 9999 4321 ! "#$%&%# '"#()*#+, -- ,.' ''!

!"#$%&%#'"#()*#+,--,.'

''!$#/0.10203)$#'10203#2)%"4!5$#/0.'

''!0/&)6.7)668$#3%09"#/973!50/&)6.'

''!%060:#$0'%);#+,"06<6&3,.'

''''!&30&.==!5&30&.'

''''!$</03#.>>>>'?-@=!5$</03#.'

''!5%060:#$0.'

!5"#$%&%#.'

12

Visualização em um browser

!! Folha de estilo: conjunto de regras para formatar ou transformar as informações de um documento XML !! CSS - Cascading Style Sheets

!! Transformação visando apresentação visual !! Aplicação do estilo em tempo de execução no cliente

!! XSLT - eXtensible Stylesheet Language

!! Transformação em texto, HTML ou outro formato !! Aplicação em tempo real ou prévia (no servidor)

!! Se não estiver associado a uma folha de estilo, o documento XML não tem uma "aparência" definida

!! Vários browsers por default mostram a árvore-fonte XML !! Outros mostram apenas os nós de texto sem formatação

Vários browsers por default mostram a árvore-fonte XML ! ! Outros mostram apenas os nós de

13

Formas de processamento XML

!! Via APIs de programação

!! SAX – Simple API for XML: leitura seqüencial, ideal para extração de dados !! DOM – Document Object Model: leitura completa, ideal para manipulação (inserção, reordenação, alteração, remoção de nós)

!! Via linguagens de processamento (suportadas por parsers e processadores padronizados pela W3C)

!! XSLT, XPath, XLink, XPointer e XQuery: extração, transformação e localização de dados !! XSL-FO, XHTML, SVG: apresentação de dados

e XQuery : extração, transformação e localização de dados ! ! XSL-FO , XHTML , SVG

14

Processamento XML

texto "custom" !"#$%& XML !"#$%& XML para <xml> SGBD e vice-versa <xml>
texto
"custom"
!"#$%&
XML
!"#$%&
XML para
<xml>
SGBD
e vice-versa
<xml> <xml>
DOM
SAX

SGBD

e vice-versa <xml> <xml> DOM SAX SGBD Gráficos SVG Imagens JPG e PNG 2000 2001 WML

Gráficos SVG Imagens JPG e PNG

2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001
2000 2001

2000

2001

WML

VoiceXML

Web

HTML

CSS

JavaScript

VRML

PDF RTF PDF PDF TeX SGML PDF e PostScript
PDF
RTF
PDF
PDF
TeX
SGML
PDF e
PostScript

15

XPath

33 Severino Severovitch bill@norte.com.br celular 11
33
Severino Severovitch
bill@norte.com.br
celular
11
9999 4321
9999 4321

!! Linguagem usada para navegar na árvore XML

!! Uma expressão XPath é um caminho na árvore que resulta em um valor (número, texto, booleano), objeto (elemento, atributo, nó de texto) ou conjunto de objetos

! Caminhos absolutos

!"#$%&%#!'"#()*#+ ++!"#$%&%#!%,-,.#$,!'%)/#+

++!"#$%&%#!%,-,.#$,!$01,2#!%,3%45+

! Relativos ao contexto !"#$%&%#+:

++'"#()*#+!"#$6!'"#()*#%$

++%,-,.#$,!'%)/#+!"#$6!%,-,.#$,!'%)/#%$

++%,-,.#$,!$01,2#!%,3%45+

!! Expressões XPath são usadas dentro de atributos XML

!! Usadas em XSLT, XLink, XQuery e XPointer

! ! Expressões XPath são usadas dentro de atributos XML ! ! Usadas em XSLT, XLink,

16

XLink, XPointer e XQuery

!!

XLink : especificação W3C que define vínculos (de diversos tipos) entre documentos XML

!! Funcionalidade mínima é igual ao <a href> do HTML !! É uma coleção de atributos, com namespace próprio, que podem ser usados em elementos de qualquer linguagem XML.

!!

XPointer: aponta para partes de documentos XML

!! Identificador no destino, acessível por XLink: !"#$%&'()*+,-#.)$/,0 !! Caminho resultante de expressão XPath: !12#$/)(34"#5(24#.60

!!

XQuery: linguagem para pesquisar documentos XML através de queries com sintaxe inspirada em SQL

!! Exemplo:

7890:;0<=0.2>?@)$/3,?A?B(#2CDDE!@",64>2$/B/200

0000000FGH9H0$2@)+,I)5)(#$20I)5)(25#/>',0

00000009HJK9=0:;0

?A?B(#2CDDE!@" ,64>2$/B/2 00 0000000 FGH9H 0 $2@)+,I)5)(#$20I)5)(25#/>', 0 0000000 9HJK9= 0 :;0 17

17

XSL

!! eXtensible Stylesheet Language

!! Aplicação de XML para transformação e apresentação de dados disponíveis em XML

!! Não existe mais como uma especificação. Foi dividida em duas

!! XSLT – foca em transformação de dados. XSLT é uma linguagem funcional para processamento de templates !! XSL-FO – linguagem de descrição de página (como PDF, HTML+CSS)

!! Cada especificação define um namespace próprio

!! XSLT usa o identificador !""#$%%&&&'&(')*+%,---%./0%1*2345)*67 !! XSL-FO usa !""#$%%&&&'&(')*+%,---%./0%8)*62"7

!! Importante: as URLs acima são usadas como identificadores de namespace, e não representam nenhum endereço Web

!! É muito comum usar URLs como identificadores de namespace !! Todas as aplicações XML do W3C usam URLs da forma:

77!""#$%%&&&'&(')*+%!"#$%&'%()*"("$+%!,'(#$-$.*"+/

77 !""#$%%&&&'&(')*+% !"#$%&'%()*"("$+ % !,'(#$-$.*"+ / 18

18

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

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="livro/titulo"> <td><xsl:value-of select="." /></td>

XSLT

!! XSL Transformations (XSLT)

!! Linguagem (XML) para criação de documentos que contêm regras de transformação para documentos XML !! Documentos escritos em XSLT são chamados de folhas de estilo (mas são na verdade templates) e contêm

!! Elementos XSLT: !"#$%&'"#(, !)*(, !*+,-#'./(,

!! Expressões XPath para localizar nós da árvore-fonte !! Texto ou XML a ser gerado no documento-resultado

!! Usa-se um processador XSLT

no documento-resultado ! ! Usa-se um processador XSLT fonteToHtml.xslt Folha de estilos fonte.xml Documento

fonteToHtml.xslt

Folha de

estilos

Folha de estilos
Folha de estilos

fonte.xml

Documento

Fonte

Documento Fonte
Documento Fonte

Processador XSLT Xalan, TrAX, Saxon Firefox, I. Explorer, etc.

Documento

Resultado

19

XSLT: documento-fonte (1) ! ! Considere o seguinte documento-fonte: ! "#$%&'#($! )*+, -./01 , 2!

XSLT: documento-fonte (1)

!! Considere o seguinte documento-fonte:

!"#$%&'#($!)*+,-./01,2!

!!!"&%)3$4!5#%6)*#+,789:;,2<)&!*$!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!=#'$)%&">&%)3$42!

!!!"*$?6)'&2@A&!-#BC&">*$?6)'&2!

">#$%&'#($2!

!! E sua representação como uma árvore-fonte

! ! E sua representação como uma árvore-fonte 0$ 4(&*#)(5&6$ 1"%$ :;<=>$
0$ 4(&*#)(5&6$
0$
4(&*#)(5&6$

1"%$

:;<=>$

4#*"7&86$

 

!"#$%&$'()&"*#$

 
 
 

12(*3"%($

+,-./$

4%&93")#6$

 

?@#$:(AB#$

 

20

XSLT: folha de estilos (2)

!!

O seguinte template (parte de uma folha de estilos XSLT) pode extrair os dados do documento-fonte

!"#$%&'()$*&'+(*&,-./*'012*3'/4+

documento-fonte (em azul - XPath)

documento

resultado

(em preto)

(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !
(em azul - XPath) documento resultado (em preto) ++++ !)45+*'012*3'+6'+)0'78"1 ++ ++++ !

++++!)45+*'012*3'+6'+)0'78"1++

++++!"#$%3*$9':17+#'$',&./;86/+<4+6',1$19+

++++6'+!"#$%3*$9':17+#'$',&./108='(/+<4+>#++

++++!"#$%3*$9':17+#'$',&./108='(<;)*0&86*/+<4+

108='(<;)*0&86* /+<4 +
108='(<;)*0&86* /+<4 +
108='(<;)*0&86* /+<4 +
108='(<;)*0&86* /+<4 +

++++&'261+,1(1+6'#&821+1+*'01)10&1+6'+++++

++++!"#$%3*$9':17+#'$',&./6'#&821/+<4?!<)4+++++

!<"#$%&'()$*&'4+

elementos XSLT (em vermelho, com prefixo xsl)

!!

Elementos XSLT são qualificados com prefixo (da forma

!"#$%&$&'&()*+) para evitar conflitos com o documento-resultado

!!

O prefixo xsl e namespace precisam ser declarados com xmlns:xsl

evitar conflitos com o documento-resultado ! ! O prefixo xsl e namespace precisam ser declarados com

21

XSLT: documento-resultado (3)

!! Após a transformação, o resultado será

!"#$%!&'()*&+'!,'!#('-./)!!

01234!,'5)6)7!

,'!8.)!,'!9&*'.()!:;!!

<=>?!

@'*,)!5)A)!,';@.*)!)!&'()#)(@)!,'!

BC)!0&76)D"E#$!

!! Para obter outros resultados e gerar outros formatos com os mesmos dados, pode-se criar folhas de estilo adicionais

! Para obter outros resultados e gerar outros formatos com os mesmos dados, pode-se criar folhas

22

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="p1"> <fo:region-body/>

XSL-FO

!! XSL Formatting Objects

!! Linguagem XML de descrição de página com os mesmos recursos que PostScript ou PDF !! Descreve o layout preciso de texto e imagens !! Possui centenas de elementos, atributos e propriedades (que são semelhantes às propriedades do CSS) !! Páginas são facilmente convertidas para PDF e PostScript !! Ideal para gerar documentos para impressão (livros, etc.)

!! Normalmente gerada via XSLT

XML

XSLT

XML XSLT
XML XSLT
XML XSLT
XML XSLT

XML

Fonte

XML Fonte
XML Fonte
! Normalmente gerada via XSLT XML XSLT XML Fonte Processador XSLT XML Documento XSLFO FOP Documento

Processador

XSLT

XML

Documento

XSLFO

FOP

Documento

PDF

23

XSL-FO: menor documento

'''!"#$)*+#,&-.*/&0%-/0&('
'''!"#$)*+#,&-.*/&0%-/0&('
'''''''!"#$/1.2)0-2*30-.*/&0%'.*/&0%-4*.056276('
'''''''''''!"#$%031#4-8#9+:('
'''''''!:"#$/1.2)0-2*30-.*/&0%('
!!!":"#$)*+#,&-.*/&0%-/0&('
''''''!"#$2*30-/0;,04<0'.*/&0%-4*.056276('
''''!"#$")#='")#=-4*.056>/)-%031#4-8#9+6('
''''''''''C0))#'DEFG'
'''''''!:"#$8)#<?('

''''!:"#$")#=('

'''!:"#$2*30-/0;,04<0('

!:"#$%##&('

!:"#$%##&(' !"#$%##&' !"#$%&'()* +,,-&

!"#$%##&'!"#$%&'()*+,,-& ///0/10(23.4555.678.9(2":,*('

Este é o "<head>" do XSL-FO

Ligação entre as regras de layout e o conteúdo afetado

!!!!!!!!"#$8)#<?'<#)#%568),06'"#4&-/1@056AB2&6('

Este é o "<body>" do XSL-FO

24

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title>Página

<html xmlns="http://www.w3.org/1999/xhtml"> <head><title>Página XHTML</title></head> <body> <h1>Página XHTML</h1>

XHTML

!! eXtensible HTML

!! Linguagem XML de descrição de página Web !! Mesmos elementos do HTML 4.0 Strict !! Elementos descrevem somente a estrutura dos

componentes da página. A forma precisa ser especificada usando CSS: não há elementos/atributos para mudar cor, alinhamento, etc.

!! Pode ser misturada (estendida) com outras linguagens XML (MathML, SVG, linguagens proprietárias)

!! Normalmente gerada via XSLT

XML

XML XSLT
XML XSLT
XML XSLT

XSLT

XML XSLT
XML XSLT
XML XSLT
XML XSLT
! ! Normalmente gerada via XSLT XML XSLT XML Documento Fonte Processador XSLT XML Documento

XML

Documento

Fonte

Processador XSLT

XML

Documento

XHTML

25

<svg xmlns="http://www.w3.org/2000/svg"> <circle style="fill: red" cx="3cm"
<svg xmlns="http://www.w3.org/2000/svg">
<circle style="fill: red" cx="3cm" cy="3cm" r="2.5cm" />
<rect style="fill: blue" x="6cm" y="6cm"
height="2.5cm" width="1.5cm" />
SVG
!! Scalable Vector Graphics (padrão W3C)
!! Gráficos vetoriais em XML
!! Plug-ins para principais browsers: concorre com Flash
!! Suporta animações, links, JavaScript, CSS
!! Produzido por ferramentas como Adobe Ilustrator
!! Pode ser embutido no código XHTML e XSL-FO
Zoom +
Zoom +
26
Exemplo de SVG JavaScript ! "#$ %&'()*+,-./0,%*1'$*)+,-./0,2%% %% ! $ %34/5'/6+,

Exemplo de SVG

JavaScript

!"#$%&'()*+,-./0,%*1'$*)+,-./0,2%%

%%!$%34/5'/6+,7518)9:;5'/3<%43%$8<=3%->:?,2%%

%%%%!/'8/51%")@51+,A'55B%81(,%%

%%%%%%%%%%%%/C+,D/0,%/@+,D/0,%8+,EFG/0,%H2%%

%%%%!81/)%")@51+,A'55B%I5<1,%C+,J/0,%@+,J/0,%%

%%%%%%%%%%*1'$*)+,EFG/0,%&'()*+,-FG/0,%H2!H$2%%

%%!$%34/5'/6+,7518)9:;5'/3<%43%$8<=3%E>:?,2%%

%%%%!/'8/51%")@51+,A'55B%$8114K%3=7/')@B%.FG,%%

%%%%%%%%%%%%/C+,G/0,%/@+,G/0,%8+,E/0,%H2!H$2%%

%%!7%C054"B!"#$%+,*))=BHH&&&F&DF38$H-LLLHC5'46,%%

%%%%%!"#$%B*81A+,*))=BHH&&&F&DF38$HM87=*'/"HNOM,2%%

%%%%!)1C)%")@51+,/3538B%I57/6K%A34)PA70'5@B%)7*307K%%

%%%%%%%%%%%%%%%%%A34)P"'Q1B%-E=),%C+,D/0,%@+,R/0,2%

%%%%NOM%S%TUV!H)1C)2!H72%%

CSS

XLink

!H"#$2%%

%%%%%%%%%%%%%%%%%A34)P"'Q1B%-E=) ,%C+,D/0,%@+,R/0,2% %%%%NOM%S%TUV !H )1C) 2!H 7 2 %% CSS XLink !H "#$ 2%% 27

27

Outras aplicações populares do XML TEI MathML DocBook Classe3 oper(): void Classe oper(): void

Outras aplicações populares do XML

TEI MathML
TEI
MathML
DocBook
DocBook
TEI MathML DocBook Classe3 oper(): void Classe oper(): void oper2(): int 1 * XMI oper2(): int

Classe3

oper(): void

Classe

oper(): void

oper2(): int

1

*

Classe3 oper(): void Classe oper(): void oper2(): int 1 * XMI oper2(): int CML WML VoiceXML

XMI

oper2(): int CML
oper2(): int
CML

WML

VoiceXML

Web Services

SOAP

WSDL

XML-RPC

UDDI

void Classe oper(): void oper2(): int 1 * XMI oper2(): int CML WML VoiceXML Web Services

ebXML

void Classe oper(): void oper2(): int 1 * XMI oper2(): int CML WML VoiceXML Web Services

28

Classe2

oper(): void

oper2(): int

Demonstração !! Exemplo de transformação XML PDF <xslt> FOP FO (1.a) (1) <xsl:fo>
Demonstração
!! Exemplo de transformação XML
PDF
<xslt>
FOP
FO
(1.a)
(1)
<xsl:fo>
<xml>
(1.b)
<xslt>
JFOR
Saxon
(3)
SVG
<xslt>
Texto
(4)
(2)
2000
2001
HTML
<xslt>
SVG
Texto texto
texto texto
HTML
texto texto
texto texto
texto
29

Conclusões

!! XML é uma ótima solução para compartilhar dados !! Para implementar soluções em gestão de informações usando XML, pode-se usar

!! DTD ou XSchema para especificar o modelo de dados e validar as informações !! As APIs DOM ou SAX para extrair dados dos documentos, gerar documentos, ler e gravar em bancos de dados !! XSLT e XPath para transformar os dados em outros formatos !! XLink, XPointer e XQuery para criar vínculos lógicos entre os documentos e localizar seus componentes !! XSL-FO ou XHTML para formatar os dados para impressão ou visualização na tela (PDF, Word ou Web) !! SVG para gerar informações em forma de gráfico vetorial

ou visualização na tela (PDF, Word ou Web) ! ! SVG para gerar informações em forma

30

XML: uma introdução prática X100

XML: uma introdução prática X100 Helder da Rocha (helder@argonavis.com.br) Atualizado em setembro de 2001 1
XML: uma introdução prática X100 Helder da Rocha (helder@argonavis.com.br) Atualizado em setembro de 2001 1

Helder da Rocha

(helder@argonavis.com.br)

Atualizado em setembro de 2001

1

Como criar um documento XML

!! XML não tem comandos, nem operadores, nem funções, nem tipos

!! Não é exatamente uma "linguagem" !! A especificação XML não estabelece nenhum vocabulário !! Define apenas uma estrutura e sintaxe geral para a organização de informações estruturadas

!! Para criar o menor documento XML

!! Abra um editor de textos qualquer !! Salve o arquivo com extensão .xml !! Escreva um elemento raiz vazio; por exemplo:

!"#$$%&'( !! Salve o arquivo !! Abra em um browser como Firefox ou Internet Explorer

por exemplo: !"#$$%&'( ! ! Salve o arquivo ! ! Abra em um browser como Firefox

2

Especificação XML

!! As regras para criação de documentos XML são definidas pelo World Wide Web Consortium (W3C) através de especificação

!! !""#$%%&&&'&(')*+%,-%./0%1

!! A especificação não define

!! nomes de elementos e atributos (cada aplicação define os seus) !! como escrever documentos válidos: a validade de um documento XML é definido pelo autor da aplicação em que ele é usado

!! A especificação define

!! tokens, caracteres e formatos de texto que podem ser usados em documentos XML (basicamente texto Unicode) !! elementos e atributos reservados (começam com o string xml) !! regras mínimas que possibilitam a leitura por um processador XML: um documento que segue essas regras é bem formado !! como uma aplicação pode validar um documento XML usando um DTD (Document Type Definition) com sintaxe similar a SGML

como uma aplicação pode validar um documento XML usando um DTD (Document Type Definition) com sintaxe

3

Estrutura XML

!! Um documento XML pode ser representado como uma árvore. A estrutura é formada por vários nós (galhos e folhas)

<?xml version="1.0" encoding="iso-8859-1" ?> <!-- Isto é um comentário -->

<cartao-simples> <logotipo href="/imagens/logo14bis.gif" /> <nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar - Centro - 25600-000 - Petrópolis - RJ</endereco>

informações usadas

pelo processador XML

<email>dumont@14bis.com.br</email>

<telefone tipo="residencial" >

<ddd>21</ddd>

<numero>2313011</numero>

</telefone>

</cartao-simples>

</telefone> </cartao-simples> um " nó" pode ser • ! um elemento, • ! um

um "nó" pode ser ! um elemento, ! um atributo, ! um bloco de texto, ! um comentário, ! uma instrução, ! uma declaração, ! uma entidade,

4

5

nó raiz / elemento raiz do documento cartao-simples
nó raiz
/
elemento raiz do
documento
cartao-simples

Árvore XML

email dumont@14bis.com.br
email
dumont@14bis.com.br
nome Alberto Santos Dumont
nome
Alberto
Santos
Dumont
endereco logotipo telefone Rua do Encanto, 22 - 2o. andar - Centro - 25600-000 -
endereco
logotipo
telefone
Rua do Encanto, 22 -
2o. andar - Centro
- 25600-000 -
Petrópolis - RJ
href
ddd
/imagens/logo14bis.gif
tipo
tipo
residencial
residencial
residencial
residencial
residencial

residencial

21

numero
numero

2313011

/imagens/logo14bis.gif tipo residencial 21 numero 2313011 LEGENDA nó de elemento nó de atributo nó de

LEGENDA

LEGENDA nó de elemento

nó de elemento

nó de atributo

nó de atributo

nó de texto

www.argonavis.com.br

5

Componentes de um documento

!! Um documento pode conter

!! Prólogo !! Comentários !! Instruções de processamento !! Atributos nos elementos !! Nós de texto dentro dos elementos !! Elementos aninhados (sendo apenas um na raiz) !! Conteúdo misto (elemento e texto) dentro de elementos !! Entidades gerais !! Entidades de caractere !! Blocos CDATA

misto (elemento e texto) dentro de elementos ! ! Entidades gerais ! ! Entidades de caractere

6

Declaração XML

Prólogo

Comentário (pode aparecer em qualquer lugar) Instrução de processamento Declaração de tipo de documento

<?xml version="1.0" encoding="iso-8859-1" ?> <!-- Isto é um comentário --> <?comando tipo="simples" parametro ?> <!DOCTYPE cartao-simples SYSTEM "cartoes.dtd"> <cartao-simples> <logotipo href="/imagens/logo14bis.gif" /> <nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar - Centro - 25600-000 - Petrópolis - RJ</endereco>

<email>dumont@14bis.com.br</email>

<telefone tipo="residencial" >

<ddd>21</ddd>

<numero>2313011</numero>

</telefone>

</cartao-simples>

<ddd>21</ddd> <numero>2313011</numero> </telefone> </cartao-simples> 7

7

Nó raiz e elementos

elemento raiz do documento

nó raiz ( / )

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

<cartao-simples> <logotipo href="/imagens/logo14bis.gif" /> <nome>Alberto Santos
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar -
Centro - 25600-000 - Petrópolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
elementos
<numero>2313011</numero>
</telefone>
</cartao-simples>

elementos

elementos <numero>2313011</numero> </telefone> </cartao-simples> elementos 8

8

Atributos

!! Só podem conter um descendente: nó de texto

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

<cartao-simples> <logotipo href="/imagens/logo14bis.gif" />

href=" /imagens/logo14bis.gif " /> <nome> Alberto Santos Dumont </nome>

<nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar - Centro - 25600-000 - Petrópolis - RJ</endereco>

<email>dumont@14bis.com.br</email>

<email> dumont@14bis.com.br </email> <telefone tipo=" residencial " >

<telefone tipo="residencial" >

<ddd>21</ddd>

<numero>2313011</numero>

</telefone>

</cartao-simples>

atributos

<numero>2313011</numero> </telefone> </cartao-simples> atributos 9

9

Nós de texto

!! Não podem ter descendentes (são as folhas da árvore)

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

<cartao-simples> <logotipo href="

/imagens/logo14bis.gif
/imagens/logo14bis.gif

" />

<nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar - Centro - 25600-000 - Petrópolis - RJ</endereco>

- Centro - 25600-000 - Petrópolis - RJ </endereco> residencial </numero> <email>
residencial
residencial
25600-000 - Petrópolis - RJ </endereco> residencial </numero> <email> dumont@14bis.com.br

</numero>

<email>dumont@14bis.com.br</email>

<telefone tipo="

<ddd>21</ddd>

<numero>2313011

" >

nós de

texto

</telefone>

</cartao-simples>

21 </ddd> <numero> 2313011 " > nós de texto </telefone> </cartao-simples> 10

10

Entidades gerais

!! São constantes associadas a um valor de texto

!! Podem aparecer em qualquer lugar do documento !! São substituídas durante o processamento do documento !! Podem ser definidas pelo usuário (via DTD)

!! Sintaxe: !"#$%&'&"() !! Exemplo:

!! !"#$#%"&%'()&*+

!! Entidades pré-definidas:

! ! Entidades pré-definidas: ! ! !*$()) ) que corresponde a ! ! !,$()) ) que

!! !*$()) )que corresponde a !! !,$()) )que corresponde a !! !'./() )que corresponde a !! !012$())que corresponde a !! !'/24())que corresponde a

+)

-)

!)

3)

5))

11

Entidades de caracteres

!! Também são substituídas durante o processamento do documento !! Sintaxe:

!! !"#$%&'()*+,-./0123456 !! !"7#$%&'()*+,-8/73./0123456

!! Exemplos:

!! !"9+:56;"799<=566

!! !"799=95 representa um espaço em Unicode !! Veja mais em www.unicode.org/charts/

!! XML não define por default as entidades do HTML

!! Não existe !>,?@56ou !3A14./56a menos que sejam definidas em um DTD (como no DTD do XHTML)

do HTML ! ! Não existe !>,?@56 ou !3A14./56 a menos que sejam definidas em um

12

Elementos e atributos: regras básicas

!! Etiqueta inicial e final têm que ter o mesmo nome (considerando diferença de maiúscula e minúscula)

!! Não pode haver espaço depois do ! nas etiquetas iniciais nem depois do !"#nas finais

!! Atributos têm sempre a forma nome, seguido de ' $', seguido do valor entre aspas ou apóstrofes

!! !"#$%&'()"*&+ou !"#$+%+,'()"*, são válidos !! aspas podem ser usadas entre apóstrofes !! apóstrofes podem ser usados entre aspas !! aspas e apóstrofes não podem ser neutralizados, mas podem ser representados pelas entidades -./"01+e -(2"31+ !! Não pode haver atributos na etiqueta final !! Atributos não podem se repetir no mesmo elemento

-(2"31+ ! ! Não pode haver atributos na etiqueta final ! ! Atributos não podem se

13

Um documento é bem formado quando

!! Tem um único elemento raiz !! Todas as etiquetas iniciais e finais dos seus elementos combinam (levando em conta maiúsculos e minúsculos) !! Seus elementos estão bem aninhados

!! Não acontece nada do tipo !"#!$#!"#$!%$#&

!! Valores dos atributos estão entre aspas ou apóstrofes !! Os atributos não se repetem !! Elementos e atributos têm identificadores válidos !! Comentários não aparecem dentro de etiquetas !! Sinais < ou & nunca ocorrem dentro de atributos ou nós de texto do documento

dentro de etiquetas ! ! Sinais < ou & nunca ocorrem dentro de atributos ou nós

14

Elementos e atributos

!! Elementos mal formados

!"#$%&'(()%*+$,-'./.%"01$%&'(()%*!

"23*"24*'./5!-5"0.6*"0.$*!

!!".6*'./5!-5"0!.6*!

!"/,-787%*9!:!;!"!<!:!="0/,-787%*!

!">?@ABC*DEFGHH"0IJKLMN*!

!! Atributos mal formados

!"1$%&'((7%!.'1%OD*+$,-'./.%"01$%&'(()%*!

!"8P7Q/!9ORSTUFVR#WFFR!0*!

!!"7!9ORDR!;ORXR!<ORER!9ORHR!0*!

!! Elementos e atributos bem formados

!"1$%&'((7%!.'1%OYXY*Z[('8%"01$%&'(()%*!

!"8P7Q/!9!O!RSTUFV\,-%.]#WFFR!0*!

formados !"1$%&'((7%!.'1%OYXY*Z[('8%"01$%&'(()%*! !"8P7Q/!9!O!RSTUFV\,-%.]#WFFR!0*! 15

15

Quando usar elementos ou atributos?

!! Há várias maneiras de representar a mesma informação em XML

!"#$#%&'()&(*++,!("#$#%-

!"#$#-".#/0&'0-123/0)&0-#45/0*++,0-(%-

!"#$#%-

-!".#%&'!(".#%-

-!123%)&!(123%-

-!#45%*++,!(#45%-

!("#$#%--

!"#$#%- -!".#%&'!(".#%- -!123%)&!(123%- -!#45%*++,!(#45%- !("#$#%-- 16

16

Quando usar elementos ou atributos?

!! Uma questão de design

!! Elementos geralmente referem-se a coisas que têm atributos !! Atributos geralmente são características dessas coisas que podem ser descritas com poucas palavras

!! Uma questão de suporte tecnológico

!! Atributos não podem conter subelementos !! Atributos são mais fáceis de serem validados num DTD

!! Sempre que possível, priorize os argumentos de design aos de suporte tecnológico

de serem validados num DTD ! ! Sempre que possível, priorize os argumentos de design aos

17

Identificadores de elementos e atributos

!! Nomes de atributos e elementos !! Podem conter

!! qualquer caractere alfanumérico ou ideograma

!! !

!! "

!! #$(sublinhado)

(ponto)

(hífen)

!! Não podem começar com

!! ponto !! hífen !! número

!! Não podem começar com a seqüência 'xml'

! ! Não podem começar com a seqüência 'xml' ! ! É reservada para atributos e

!! É reservada para atributos e elementos com significado especial, definido em especificação (ex: xmlns, xml:lang)

18

Identificadores de elementos e atributos

!! Elementos bem formados

< !"#$%&%'('$> )'"# )&#*%#+*$</ !"#$%&%'('$>

!"#$%&'()*+*,-./01203'

''!#&45&#$6375%6#$8'9#6%$#!:#&45&#$63'

''!&5;<='=<>?6#$6/@ABCC@''

'''''''''DE6=;F/@AGHB@3IJ6"D&#?='K6=%665$L'MN>"$#!:&5;<=3'

!:"#$%&3'

!OAO:3'

!PQQ+.R-ST-U'PQQ+PVQ/@WWX@3Y-Z1VQ2[\V',']^_!:PQQ+.R-ST-U3'

!! Elementos mal formados

!H`T-Z1V3a2-Q,)R-ZVb!:H`T-Z1V3'

!P,1Z\V'QR'P1cQTZV3AdHeXfBGGBfXeHdA!:P,1Z\V'QR'P1cQTZV3'

!()*T.2R3gVTb,b!:()*T.2R3''

!P,1Z\V'QR'P1cQTZV3AdHeXfBGGBfXeHdA!:P,1Z\V'QR'P1cQTZV3' !()*T.2R3gVTb,b!:()*T.2R3'' 19

19

Conteúdo misto

!! Texto misturado com elementos XML

!"#$%&'() ))!*$%+'(,!-*$%+'()

))!.+#+/#+0'(1)2345+5$)5$)430'#6+78'))))

))5$3"#')5$)26)5'%26$3"')9:;)<)'))

))!5$0434%+'($=$6$3"'!-5$0434%+'(>)?6))

))$=$6$3"')<)0'#6+5').'#)52+*))

))!5$0434%+'($"4@2$"+*!-5$0434%+'()@2$))

))+"#4A2$6)+=/26)*4/3404%+5')+'))

))%'3"$B5'>)!-.+#+/#+0'()

!-"#$%&'())

))+"#4A2$6)+=/26)*4/3404%+5')+')) ))%'3"$B5'>) !-.+#+/#+0'( ) !-"#$%&'()) 20

20

Bloco CDATA

!! Ignora efeitos especiais dos caracteres

!"#$#%&'()%*+'!,-!./0"1#$#%&'(!

"-2-34&'()'5+$,-*-!'!+-6%$5#-!#*-78'!,-!./09!

!"#$%&'&#!

!!!!!"-34*-+:(!

!!!!!!!!!"5'3-(;'<'!()/:*$:!=1>"15'3-(!

!!!!!"1-34*-+:(!

**+)

!!"1-2-34&'(!!

() /:*$:!=1>"15'3-(! !!!!!"1-34*-+:(! **+) !! "1-2-34&'(!! 21

21

Instruções de processamento

!! Instruções dependentes do processador !! Funcionam como comentários para os processadores que não a conhecem

!"!"#$%&"%'()"*#$%&'(%'(&()*'"+''

!"+,$-.%/+(**

''*%,%-.'/)0%1'%0&2,''

'''''3$)0'&4%/(&''

'''''56%$%'2(789''

'''''56%$%'2(789'' "+'' 22

"+''

22

Comentários

!! Iguais aos comentários HTML

!"##$%&'($)$*+$,(+-.'/01($##2$

!! Comentários não podem conter a seqüência --

!"##$$1&'($)$*+$-00($!!"&)01("$##2$

! ! Comentários não podem conter a seqüência -- !"##$$1&'($)$*+$-00($ !!" &)01("$##2$ 23

23

Declaração XML

!! É uma instrução de processamento para o processador XML !! É opcional

!! Exceto quando o encoding não for UTF-8 (default)

!"#$%&!'()*+,-./012/!!

!!!!!!(-3,4+-5./+*,6778960/!!

!!!!!!*:;-4;&,-(./<(*/!#=!!

UTF-8 (default) !"#$%&!'()*+,-./012/!! !!!!!!(-3,4+-5./+*,6778960/!! !!!!!!*:;-4;&,-(./<(*/!#=!! 24

24

XML Namespaces

!! Permite que elementos de mesmo nome de diferentes aplicações sejam misturados sem que haja conflitos !! Um namespace (universo de nomes) é declarado usando atributos reservados

!! !"#$%&'()*$+(,(-.)/0'1(namespace default): associa o identificador com todos os elementos contidos no elemento que declara o atributo que não estão qualificados com prefixo. Ex: 2$/"*31 !! !"#$%450*,(!/&'()*$+(,(-.)/0': associa o identificador com os elementos e atributos contidos no elemento que declara o atributo cujo nome local é precedido do prefixo. Ex 250*,(!/4$/"*31

!! O prefixo é arbitrário e só existe dentro do documento !! O identificador (geralmente uma URI) deve ser reconhecido pela aplicação para validar o documento !! XML Namespaces é uma especificação a parte

!! !""#$%%&&&'&(')*+%,-%./0123/45%6

! XML Namespaces é uma especificação a parte ! ! !""#$%%&&&'&(')*+%,-%./0123/45%6 25

25

Exemplo

Vale para todo o elemento <cartao>

Esta URI está associada a este prefixo

<ct:cartao xmlns:ct="urn:B1-01.234.567/cartoes"> <ct:nome>Alberto Santos
<ct:cartao
xmlns:ct="urn:B1-01.234.567/cartoes">
<ct:nome>Alberto Santos Dumont</ct:nome>
<ct:endereco>Rua do Encanto, 22 - Centro
25600-000 - Petrópolis - RJ</ct:endereco>
<ct:email>dumont@14bis.com.br</ct:email>
<ct:telefone tipo="residencial">
<ct:ddd>21</ct:ddd>
<ct:numero>2313011</ct:numero>
</ct:telefone>
</ct:cartao>
<ct:numero>2313011</ct:numero> </ct:telefone> </ct:cartao> 26

26

Exemplo com 3 namespaces

<departamento Namespace xmlns:ct="urn:B1-01.234.567/cartoes" default
<departamento
Namespace
xmlns:ct="urn:B1-01.234.567/cartoes"
default
xmlns="emp:E2-3349.9.0001-89/empresa"
xmlns:html="http://www.w3.org/WD/REC-HTML/Strict">
URI padrão
<ct:nome>Fulano de Tal</ct:nome>
XHTML
<nome>Contabilidade</nome>
<endereco>Rua Projetada, 33</endereco>
<html:a href="web.html">
<html:strong>link negrito HTML</html:strong>
</html:a>
<urgencia><ct:numero>2313011</ct:numero></urgencia>
</departamento>
<urgencia><ct:numero>2313011</ct:numero></urgencia> </departamento> 27

27

Observações importantes sobre namespaces

!! O escopo da declaração xmlns (sem prefixo) inclui

!! O elemento onde ela acontece !! Os elementos-filho

!! O escopo da declaração xmlns:prefixo inclui

!! O próprio elemento se qualificado com mesmo prefixo !! Os elementos-filho qualificados com o prefixo !! Os atributos do elemento onde ocorre a declaração e elementos filho qualificados com o prefixo

!! O identificador não representa endereço na internet

!! Geralmente é escrito como URL, porque URLs são unívocas !! O identificador é string e não endereço: omitir ou incluir uma ! final faz diferença

!! Declarar e usar um namespace pode ser opcional

! ! Declarar e usar um namespace pode ser opcional ! ! Depende da aplicação que

!! Depende da aplicação que irá processar o documento

28

XML: uma introdução prática X100

XML: uma introdução prática X100 Helder da Rocha (helder@argonavis.com.br) Atualizado em setembro de 2001 1
XML: uma introdução prática X100 Helder da Rocha (helder@argonavis.com.br) Atualizado em setembro de 2001 1

Helder da Rocha

(helder@argonavis.com.br)

Atualizado em setembro de 2001

1

Documentos XML bem formados

!! Para que possa ser manipulado como uma árvore, um documento XML precisa ser bem formado

!! Documentos que não são bem formados não são documentos XML – use um editor XML para descobrir

!! Documentos bem-formados obedecem as regras de construção de documentos XML genéricos !! Regras incluem

!! Ter um, e apenas um, elemento raiz !! Valores dos atributos estarem entre aspas ou apóstrofes !! Atributos não se repetirem !! Todos os elementos terem etiqueta de fechamento !! Elementos estarem corretamente aninhados

não se repetirem ! ! Todos os elementos terem etiqueta de fechamento ! ! Elementos estarem

2

XML válido

!! Um XML bem construído pode não ser válido em determinada aplicação !! Aplicação típica pode esperar que

!! elementos façam parte de um vocabulário limitado, !! certos atributos tenham valores e tipos definidos, !! elementos sejam organizados de acordo com uma determinada estrutura hierárquica, etc.

!! É preciso especificar a linguagem!

!! Esquema: modelo que descreve todos os elementos, atributos, entidades, suas relações e tipos de dados

!! Um documento XML é considerado válido em relação a um esquema se obedecer todas as suas regras

tipos de dados ! ! Um documento XML é considerado válido em relação a um esquema

3

Por que validar?

!! Para a maior parte das aplicações, um XML bem formado é suficiente !! É possível, em documentos XML bem-formados, mas que não são válidos

!! Montar a árvore usando DOM !! Extrair nós, acrescentar nós, alterar o conteúdo dos elementos usando SAX ou DOM !! Transformar o documento em outro usando XSLT !! Gerar um PDF ou um SVG com dados contidos no documento !! Exibir o XML em um browser usando CSS

!! Então porque ter o trabalho de criar um DTD ou um XML Schema?

! ! Exibir o XML em um browser usando CSS ! ! Então porque ter o

4

Definir um esquema

!! Documentos não válidos são "individualistas"

!! Um esquema representa um conjunto de documentos, que existem e que virão a existir !! É possível fazer muitas coisas com UM documento não válido. É difícil automatizar os processos sem considerar uma CLASSE de documentos

!! Um esquema é uma formalidade necessária

!! Se você tem uma grande coleção de documentos que foram construídos segundo determinadas regras, você já tem, informalmente, um esquema !! Para validar documentos de acordo com suas convenções, é preciso ter um esquema

informalmente , um esquema ! ! Para validar documentos de acordo com suas convenções, é preciso

5

Esquema

Documentos que aderem à especificação (válidos)

Documento fora da especificação

especificação (válidos) Documento fora da especificação ! ! O esquema representa uma classe ! ! Os

!! O esquema representa uma classe !! Os documentos são instâncias

Esquema (universo de documentos válidos)

!! Como definir esquemas:

!! DTD - Document Type Definition !! W3C XML Schema

6

Documentos válidos

!! Um relacionamento pode ser estabelecido formalmente entre um esquema e sua instância

!! Declaração de tipo de documento (para DTD)

!! !"#$%&'()*!"#$%&%'+'+&),*-./012324535-6*

!! Declaração de namespace e schema (para XML Schema), no elemento raiz

!! !!"#$%&%'785/98:-;,<=&>-*

?@0AB:-133CDEEF.7478@-*

?@0ABD?B/:-133CDEEGGG4GH48I9EJKKLEM,N+712@FO/AB3FA72-*

?B/DB712@FN87F3/8A:-133CDEEF.7478@*./012324?B5-6*444*

!! Para validar

!! Use um parser validador (com suporte à linguagem de esquema desejada)

7

7

O que define um esquema

!! Um vocabulário

!! Elementos, atributos

!! Uma gramática

!! Relacionamentos (que elementos são permitidos onde, e de que forma, e com que conteúdo)

!! Uma coleção de entidades

!! Variáveis que são substituídas por valores constantes durante o processamento (nem todo esquema tem suporte a declaração de entidades)

substituídas por valores constantes durante o processamento (nem todo esquema tem suporte a declaração de entidades)

8

O que é um DTD?

!! Um DTD (Document Type Definition) declara todos os elementos e atributos de um documento
!! Um DTD (Document Type Definition) declara todos os
elementos e atributos de um documento XML
!! Define quais elementos e atributos são válidos e em que contexto
!! A sintaxe é baseada em SGML. Para definir um elemento:
<!ELEMENT nome-do-elemento (modelo de conteudo)>
!! O DTD do web.xml define principalmente elementos
!! Exemplo: DTD para um documento simples
<!ELEMENT pessoa (nome, web?, telefone+)>
<!ELEMENT nome (prenome, inicial*, sobrenome)>

<!ELEMENT prenome (#PCDATA)> <!ELEMENT inicial (#PCDATA)> <!ELEMENT sobrenome (#PCDATA)> <!ELEMENT web (email|website)> <!ELEMENT email (#PCDATA)> <!ELEMENT website (#PCDATA)> <!ELEMENT telefone (#PCDATA)>

( #PCDATA )> <!ELEMENT telefone ( #PCDATA )> pessoa tem nome , seguido de zero ou

pessoa tem nome, seguido de zero ou um web e um ou mais telefone

nome tem um prenome, seguido de zero ou mais inicial e um sobrenome

web pode conter ou um email ou um website

9

Elementos que só podem conter texto

Documentos válidos segundo o DTD !! Os documentos abaixo são válidos segundo o DTD mostrado
Documentos válidos segundo o DTD
!! Os documentos abaixo são válidos segundo o DTD mostrado na
página anterior
<pessoa>
<nome><prenome>Giordano</prenome>
<sobrenome>Bruno</sobrenome></nome>
<telefone>1199343232</telefone>
</pessoa>
<pessoa>
<nome><prenome>Giordano</prenome>
<sobrenome>Bruno</sobrenome></nome>
<web><website>www.site.com</website></web>
<telefone>1199343232</telefone>
</pessoa>
<pessoa>
<nome><prenome>Giordano</prenome>
<inicial>F</inicial><inicial>R</inicial>
<sobrenome>Bruno</sobrenome></nome>
<web><email>giordano@web.net</email></web>
<telefone>1199343232</telefone>
<telefone>1134999992</telefone>
</pessoa>
10
Documentos inválidos segundo o DTD !! Os documentos abaixo não são válidos de acordo com
Documentos inválidos segundo o DTD
!! Os documentos abaixo não são válidos de acordo com o DTD.
!! Por que?
<pessoa>
<nome><prenome>Giordano</prenome>
<sobrenome>Bruno</sobrenome></nome>
</pessoa>
<pessoa>
<nome><prenome>Giordano</prenome>
<sobrenome>Bruno</sobrenome></nome>
<web><website>www.site.com</website>
<email>giordano@web.net</email></web>
<telefone>1199343232</telefone>
</pessoa>
<pessoa>
<nome><prenome>Giordano</prenome>
<sobrenome>Bruno</sobrenome></nome>
<telefone>1199343232</telefone>
<telefone>1134999992</telefone>
<web><email>giordano@web.net</email></web>
</pessoa>
11

DTD para validar uma instância

!! Considere o seguinte documento XML

<bilhete codigo="ZMIKT8">

<voo transportador="JH"

numero="2349"

de="REC" para="CGH" />

<passageiro>

<sobrenome>Newton</sobrenome>

<prenome>Isaac</prenome>

</passageiro>

</bilhete>

<prenome>Isaac</prenome> </passageiro> </bilhete> 12

12

Possíveis regras de validação

!! Os elementos permitidos são

!! bilhete, voo, passageiro, sobrenome, prenome

!! O elemento bilhete contém pelo menos um voo e exatamente um passageiro !! o elemento passageiro deve ter um elemento sobrenome e um elemento nome !! os atributos de e para de voo contém valores

!! que podem ser escolhidos de uma lista em um DTD !! que podem ser qualquer coisa, em outro DTD

contém valores ! ! que podem ser escolhidos de uma lista em um DTD ! !

13

UM possível DTD

!! Este DTD valida o documento de forma pouco rigorosa

!"#$#%#&'()*+,-.-(/(0112(345546-*71(8(9(

!":''$;<'()*+,-.-(=1>*61(&%'?@#&(AB#CD;B#E(9(

!"#$#%#&'(345546-*71(/(51)7-F1G-2(37-F1G-(8(9(

!"#$#%#&'(37-F1G-(/(AHIE:':(8(9(

!"#$#%#&'(51)7-F1G-(/(AHIE:':(8(9(

!"#$#%#&'(011(#%H'J(9(

!":''$;<'(011(>-(&%'?@#&(AB#CD;B#E(9(

!":''$;<'(011(FKG-71(&%'?@#&(AB#CD;B#E(9(

!":''$;<'(011(3474(&%'?@#&(AB#CD;B#E(9(

!":''$;<'(011(.74F5317.4>17(&%'?@#&(AB#CD;B#E(9((

!":''$;<'(011(.74F5317.4>17(&%'?@#&(AB#CD;B#E(9(( 14

14

Um DTD melhor

!! Este DTD restringe as informações que podem ser usadas nos atributos de voo

!"#$#%#&'()*+,-.-(/(01123(456657-*81(9(:(

!";''$<='()*+,-.-(>1?*71(&%'@A#&(BC#DE<C#F(:(

!"#$#%#&'(456657-*81(/(61)8-G1H-3(48-G1H-(9(:(

!"#$#%#&'(48-G1H-(/(BIJF;';(9(:(

!"#$#%#&'(61)8-G1H-(/(BIJF;';(9(:(

!"#$#%#&'(011(#%I'K(:(

!";''$<='(011(?-(/C#J(L(JMN(L(MCE(L(=FE9(BC#DE<C#F(:(

!";''$<='(011(GOH-81(&%'@A#&(BC#DE<C#F(:(

!";''$<='(011(4585(/C#J(L(JMN(L(MCE(L(=FE9(BC#DE<C#F(:(

!";''$<='(011(.85G6418.5?18(/PN(L(CM9(BC#DE<C#F(:((

!";''$<='(011(.85G6418.5?18(/PN(L(CM9(BC#DE<C#F(:(( 15

15

Elementos de um DTD XML 1.0

!! !"#$%&'()*++

!! Vincula o DTD a um documento !! Usad0 no início do documento XML

!! !"),)-).&*++

!! Define um elemento

!! !"/&&,01&*++

!! Define os atributos de um elemento

!! !").&0&'*++

!! Define uma entidade ( ex: !"#$%&')

!! !".$&/&0$.*++

!! Define notação interna para uma URI

uma entidade ( ex: !"#$%&' ) ! ! !".$&/&0$.*++ ! ! Define notação interna para uma

16

Elemento <!DOCTYPE>

!! Como vincular um documento XML a um DTD !"#$%&'()*+,-./012/&(-3,4+-5./6789::;<90/&"=&
!! Como vincular um documento XML a um DTD
!"#$%&'()*+,-./012/&(-3,4+-5./6789::;<90/&"=&
!3?)@?,9*+$A%(*=&
&&&!-,$(=&B111C&

nome do elemento raiz do documento

onde buscar validação:

SYSTEM ou PUBLIC

!! O elemento <!DOCTYPE> é um elemento do DTD que deve ser usado dentro da página XML

!! Identifica o elemento raiz !! Associa o arquivo a um DTD através de URL ou identificador público

!>!"#$%&'(3?)@?,9*+$A%(*&)%)$'*(/3?)@?,14@4/=&

URI ou

identificador

!! Alguns DTDs possuem um identificador formal público (FPI)

!! Neste caso, são declarados com a palavra PUBLIC e duas strings: o identificador seguido de uma URL onde pode ser encontrado

!>D8EFGHI&JFKL&&+,-.#(/9MMNOEMMDFD&JFKL&P12MMIQ/&&&&&&&&&&&&&&&

&&&&/R@@ASMMTTT1TO1,)5MFUMUIE9R@$%P2M*@)+3@14@4/=&&

&&&&/R@@ASMMTTT1TO1,)5MFUMUIE9R@$%P2M*@)+3@14@4/=&& 17

17

DTD Interno

!"#$%&!'()*+,-./012/!(-3,4+-5./+*,6778960/!#:!

";<=>?@AB!!"##$%&C! !!";BDBEBF?!G(**,H!I-,%(J!G),K+**H,LM:! !!";BDBEBF?!-,%(!IG)(-,%(J!*,N)(-,%(M:! !!";BDBEBF?!G)(-,%(!IOA><P?PM:! !!";BDBEBF?!*,N)(-,%(!IOA><P?PM:! !!";BDBEBF?!G),K+**H,!IOA><P?PM:! Q:! !"G(**,H:! !!"-,%(:!

!!!!"G)(-,%(:R+3SH)4"TG)(-,%(:!

!!!!"T*,N)(-,%(:U(V-%H-"T*,N)(-,%(:!

!!"T-,%(:!

"TG(**,H:!

!!!!"G)(-,%(:R+3SH)4"TG)(-,%(:! !!!!"T*,N)(-,%(:U(V-%H-"T*,N)(-,%(:! !!"T-,%(:! "TG(**,H:! 18

18

DTD incompleto

!! O DTD foi importado, mas está incompleto. Parte dele é definido localmente

!"#$%&'()*+,--./*!"!#$%&'()**+,-./.'0*

***!")1)2)3&*4.5,*67(%#8&89:*

***!")3&;&'**<=<*>#.?@5,4=*&A+,*#,BC4C=C.4>:*

D:*

!! Elementos, atributos e entidades definidos no documento têm prioridade sobre declarações importadas

no documento têm prioridade sobre declarações importadas ! ! Processador lê primeiro elementos locais , depois

!! Processador lê primeiro elementos locais, depois os que foram carregados do DTD externo !! A primeira declaração é usada. Declarações adicionais para o mesmo elemento/atributo/entidade são desconsideradas – logo, declarações locais têm precedência

19

DTD: exemplo

zero ou uma ocorrência

exatamente uma ocorrência cada

<!ELEMENT cartao-simples ( logotipo?, nome, endereco, zero ou mais ocorrências definição de elemento email*,
<!ELEMENT cartao-simples ( logotipo?,
nome, endereco,
zero ou mais
ocorrências
definição de
elemento
email*,
telefone+ ) >
uma ou mais
ocorrências
<!ELEMENT logotipo EMPTY >
<!ATTLIST logotipo
href CDATA #REQUIRED >
<!ELEMENT nome ( #PCDATA ) >
<!ELEMENT endereco ( #PCDATA ) >
<!ELEMENT email ( #PCDATA ) >
<!ELEMENT telefone ( ddd, numero ) >
<!ATTLIST telefone
não pode conter outros nós
(exceto atributos)
atributo obrigatório
contém "Character DATA"
um ou
valor default
o outro
lista de
atributos
tipo ( residencial | comercial ) "residencial"
codigo-pais NMTOKEN #IMPLIED >
<!ELEMENT ddd ( #PCDATA ) >
<!ELEMENT numero ( #PCDATA ) >
atributo opcional
contém nome ou número
20

Elemento <!ELEMENT>

!! Sintaxe

!!"#"$"%&'"#$%&'#&%(%$%")#*+#")%,'#*-*

!! O conteúdo pode ser

!! (1) ()*+,-&-., !! (2) (uma seqüência ., !! (3) (uma lista de opções ., !! (4) (conteúdo misto ., !! (5) a palavra "$*&/ ou !! (6) a palavra -%/.

de opções . , ! ! (4) ( conteúdo misto . , ! ! (5) a

21

Conteúdo #PCDATA

!! Parsed Character Data

!! Elemento declarado com esse tipo pode conter apenas texto simples !! Pode conter entidades &valor; !! Não pode conter elementos

esse tipo pode conter apenas texto simples ! ! Pode conter entidades &valor; ! ! Não

22

Conteúdo Seqüência