Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivos
!! Oferecer uma introduo geral sobre a tecnologia
XML, com conceitos tericos e experimentao
prtica, abrangendo fundamentos e principais
aplicaes
Agenda
!! Dia 1
!! 1. Introduo a XML e tecnologias relacionadas
!! 2. Fundamentos de estrutura e sintaxe
!! 3. Especificao de aplicaes com DTD
!! Dia 2
!!
!!
!!
!!
!! Dia 3
Formato
!! Apresentao em slides
!! Demonstraes
!! Exerccios
Material
!! Slides (disponveis no site)
!! Apostila (tpicos selecionados e guia de referncia)
!! Cdigo de exemplos usados nas demonstraes
!! Cdigo de aplicaes
!! Atualizaes (slides e documentos anexos)
!! Especificaes oficiais
!! Ferramentas abertas
!! Material de referncia
Fontes
[1] World
[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.
Tidwell. XSLT. OReilly & Associates, 2001. Explora XSLT com aplicaes
prticas em Java.
[6] Elliotte
DTD, XSLT, XLink e XPointer (os dois ltimos baseados em especificaes draft).
Importante
!! Tente fazer os exerccios; se no entender, pergunte!
!! Explore os exemplos e exerccios em aplicaes reais
(no se limite a ver um exemplo didtico funcionar)
!! Tente fazer os exerccios; se no entender, pergunte!
helder.darocha@gmail.com
www.argonavis.com.br
10
Introduo a XML
X100
Helder da Rocha
(helder@argonavis.com.br)
O que XML?
!! eXtensible Markup Language: padro W3C
!! Uma maneira de representar informao
!! no uma linguagem especfica
!! no define vocabulrio de comando
!! no define gramtica, apenas regras mnimas de estrutura
usuario_33.xml
<contato codigo="33">
<nome>Severino Severovitch</nome>
<email>bill@norte.com.br</email>
<telefone tipo="celular">
<area>11</area>
<numero>9999 4321</numero>
</telefone>
</contato>
elemento
atributo
"n" de texto
<h1>Severino Severovitch</h1>
<h2>bill@norte.com.br</h2>
<p>
<b>11</b>
<i>9999 4321</i>
</p>
XML mostra
o que
significa
<nome>Severino Severovitch</nome>
<email>bill@norte.com.br</email>
<telefone>
<ddd>11</ddd>
<numero>9999 4321</numero>
</telefone>
Elemento raiz
<nome/>
Contedo do
Elemento
Etiqueta
final
XML Namespaces
!! Estabelecem um contexto para elementos e atributos
!! formalmente declarado atravs de um identificador (um string, geralmente
uma URI) atravs de atributo reservado do XML: xmlns
!"#$%&'(')*+
Escopo do namespace vale
++!,-$.)+%/#0'0-12"-3%/0)"2*456!7,-$.)*+
para elemento <clima> e
++!(&#$'+!"#$%&'()*+,,-../0#*"-'*+
herdado por todos os seus
++++!,-$.)*(8%9)")!7,-$.)*+
descendentes
++!7(&#$'*+
!7"#$%&'(')*+
!"#$%&'(')+:$&/"+112%;#<77'..=(&#$'2*+
++!,-$.)+%/#0'0-12"-3%/0)"2*456!7,-$.)*+
Escopo do namespace vale
++!1+(&#$'*+
para descendentes de
++++!1+,-$.)*(8%9)")!71+,-$.)*+
<simulacao> qualificados
++++!,-$.)+%/#0'0-128);'"2*>?@!7,-$.)*+
com o prefixo 'w'
++!71+(&#$'*+
!7"#$%&'(')*+
Nos dois casos, elementos <tempo> significam coisas diferentes, mas no h conflito
porque pertencem a namespaces diferentes (um deles no tem namespace)
!"#!$#!%"#!%$#&
!'(&)*+,'-./#&&
!'(&)*+,'-0./0#&
!"#111!%2#&
!$(#3!$(#&
!$(%#3!$(%#&
ou
!$(#!%$(#3!$(#!%$(#&
7
XML vlido
!! Um XML bem construdo pode no ser vlido em
determinada aplicao
!! Aplicao tpica pode esperar que
!! elementos faam parte de um vocabulrio limitado,
!! certos atributos tenham valores e tipos definidos,
!! elementos sejam organizados de acordo com uma
determinada estrutura hierrquica, etc.
Esquema
Documentos que aderem
especificao (vlidos)
Esquema (universo de
documentos vlidos)
Documento
fora da
especificao
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(
10
!! Porque texto
!! Fcil de ler, fcil de processar, menos incompatibilidades
!"#$%&%#'"#()*#+,--,.'
''!$#/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
Visualizao em um browser
!! Folha de estilo: conjunto de regras para formatar ou
transformar as informaes de um documento XML
!! CSS - Cascading Style Sheets
!! Transformao visando apresentao visual
!! Aplicao do estilo em tempo de execuo no cliente
Processamento XML
texto
XML para
SGBD
e vice-versa
"custom"
XML
!"#$%&
!"#$%&
<xml>
<xml>
<xml>
Web
VRML
PDF
PDF
PDF
DOM
SAX
SGBD
WML
VoiceXML
Grficos SVG
Imagens
JPG e PNG
HTML
CSS
JavaScript
RTF
TeX
SGML
PDF e
PostScript
2000 2001
15
XPath
!! Linguagem usada para navegar na rvore XML
!! Uma expresso XPath um caminho na rvore que resulta
em um valor (nmero, texto, booleano), objeto (elemento,
atributo, n de texto) ou conjunto de objetos
! Caminhos absolutos
!"#$%&%#!'"#()*#+
33
++!"#$%&%#!%,-,.#$,!'%)/#+
Severino Severovitch
++!"#$%&%#!%,-,.#$,!$01,2#!%,3%45+
bill@norte.com.br
celular
11
9999 4321
16
17
XSL
!! eXtensible Stylesheet Language
!! Aplicao de XML para transformao e apresentao de dados
disponveis em XML
18
<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
fonte.xml
Documento
Fonte
Processador XSLT
Xalan, TrAX, Saxon
Firefox, I. Explorer, etc.
Documento
Resultado
19
:;<=>$
!"#$%&$'()&"*#$
12(*3"%($
4%&93")#6$
?@#$:(AB#$
+,-./$
20
documento
resultado
(em preto)
!"#$%&'()$*&'+(*&,-./*'012*3'/4+
++++!)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+
++++&'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)
21
<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
XSLT
XML
Fonte
XML
Processador
XSLT
Documento
XSLFO
FOP
Documento
PDF
23
'''!"#$)*+#,&-.*/&0%-/0&('
'''''''!"#$/1.2)0-2*30-.*/&0%'.*/&0%-4*.056276('
'''''''''''!"#$%031#4-8#9+:('
Ligao entre as
'''''''!:"#$/1.2)0-2*30-.*/&0%('
regras de layout e
!!!":"#$)*+#,&-.*/&0%-/0&('
o contedo afetado
''''''!"#$2*30-/0;,04<0'.*/&0%-4*.056276('
''''!"#$")#='")#=-4*.056>/)-%031#4-8#9+6('
!!!!!!!!"#$8)#<?'<#)#%568),06'"#4&-/1@056AB2&6('
''''''''''C0))#'DEFG'
'''''''!:"#$8)#<?('
Este o "<body>"
''''!:"#$")#=('
do XSL-FO
'''!:"#$2*30-/0;,04<0('
!:"#$%##&('
24
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Pgina XHTML</title></head>
<body>
<h1>Pgina XHTML</h1>
XHTML
!! eXtensible HTML
!! Linguagem XML de descrio de pgina Web
!! Mesmos elementos do HTML 4.0 Strict
!! Elementos descrevem somente a estrutura dos
componentes da pgina. A forma precisa ser especificada
XSLT
XML
Documento
Fonte
XML
Processador XSLT
Documento
XHTML
25
<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
Zoom +
26
Exemplo de SVG
JavaScript
!"#$%&'()*+,-./0,%*1'$*)+,-./0,2%%
%%!$%34/5'/6+,7518)9:;5'/3<%43%$8<=3%->:?,2%%
CSS
%%%%!/'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%%
!H"#$2%%
XLink
27
MathML
DocBook
Classe
oper(): void
oper2(): int
Classe2
oper(): void
oper2(): int
XMI
WML
VoiceXML
Classe3
oper(): void
oper2(): int
Web Services
SOAP
WSDL
UDDI
XML-RPC
CML
ebXML
28
Demonstrao
!! Exemplo de transformao XML
<xslt>
FO
FOP
(1)
<xml>
(1.b)
Saxon
<xslt>
Texto
<xsl:fo>
(1.a)
(3)
<xslt>
SVG
JFOR
(4)
(2)
Texto texto
texto texto
texto texto
texto texto
texto
<xslt>
HTML
HTML
2000 2001
SVG
29
Concluses
!! XML uma tima soluo para compartilhar dados
!! Para implementar solues em gesto de
informaes usando XML, pode-se usar
!! DTD ou XSchema para especificar o modelo de dados e
validar as informaes
!! 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 vnculos lgicos entre os
documentos e localizar seus componentes
!! XSL-FO ou XHTML para formatar os dados para impresso
ou visualizao na tela (PDF, Word ou Web)
!! SVG para gerar informaes em forma de grfico vetorial
30
X100
Helder da Rocha
(helder@argonavis.com.br)
Especificao XML
!! As regras para criao de documentos XML so definidas pelo
World Wide Web Consortium (W3C) atravs de especificao
!! !""#$%%&&&'&(')*+%,-%./0%1
!! A especificao no define
!! A especificao define
!! tokens, caracteres e formatos de texto que podem ser usados em
documentos XML (basicamente texto Unicode)
!! elementos e atributos reservados (comeam com o string xml)
!! regras mnimas que possibilitam a leitura por um processador XML: um
documento que segue essas regras bem formado
!! como uma aplicao pode validar um documento XML usando um DTD
(Document Type Definition) com sintaxe similar a SGML
Estrutura XML
!! Um documento XML pode ser representado como uma rvore.
A estrutura formada por vrios ns (galhos e folhas)
<?xml version="1.0" encoding="iso-8859-1" ?>
<!-- Isto um comentrio -->
informaes usadas
pelo processador XML
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrpolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
um "n" pode ser ...
! um elemento,
<ddd>21</ddd>
! um atributo,
<numero>2313011</numero>
! um bloco de texto,
! um comentrio,
</telefone>
! uma instruo,
! uma declarao,
</cartao-simples>
! uma entidade, ...
n raiz
rvore XML
elemento raiz do
documento
cartao-simples
dumont@14bis.com.br
nome
endereco
Alberto
Santos
Dumont
logotipo
numero
ddd
tipo
21
2313011
5
residencial
href
/imagens/logo14bis.gif
LEGENDA
telefone
n de elemento
n de atributo
n de texto
www.argonavis.com.br
Componentes de um documento
!! Um documento pode conter
!! Prlogo
!! Comentrios
!! Instrues de processamento
!! Atributos nos elementos
!! Ns de texto dentro dos elementos
!! Elementos aninhados (sendo apenas um na raiz)
!! Contedo misto (elemento e texto) dentro de elementos
!! Entidades gerais
!! Entidades de caractere
!! Blocos CDATA
Prlogo
Declarao XML
Comentrio (pode aparecer em qualquer lugar)
Instruo de processamento
Declarao de tipo de documento
N raiz e elementos
elemento raiz do
documento
n raiz
(/)
Atributos
!! S podem conter um descendente: n de texto
<?xml version="1.0" encoding="iso-8859-1" ?>
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrpolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
<numero>2313011</numero>
</telefone>
atributos
</cartao-simples>
Ns de texto
!! No podem ter descendentes (so as folhas da rvore)
<?xml version="1.0" encoding="iso-8859-1" ?>
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrpolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
<numero>2313011</numero>
ns de
</telefone>
texto
</cartao-simples>
10
Entidades gerais
!! So constantes associadas a um valor de texto
!! Podem aparecer em qualquer lugar do documento
!! So substitudas durante o processamento do documento
!! Podem ser definidas pelo usurio (via DTD)
!! Sintaxe: !"#$%&'&"()
!! Exemplo:
!! !"#$#%"&%'()&*+
!! Entidades pr-definidas:
!! !*$()
) )que corresponde a
!! !,$()
) )que corresponde a
!! !'./() )que corresponde a
!! !012$())que corresponde a
!! !'/24())que corresponde a
+)
-)
!)
3)
5))
11
Entidades de caracteres
!! Tambm so substitudas durante o processamento
do documento
!! Sintaxe:
!! !"#$%&'()*+,-./0123456
!! !"7#$%&'()*+,-8/73./0123456
!! Exemplos:
!! !"9+:56;"799<=566
!! !"799=95 representa um espao em Unicode
!! Veja mais em www.unicode.org/charts/
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*!
!"1$%&'((7%!.'1%OD*+$,-'./.%"01$%&'(()%*!
!"8P7Q/!9ORSTUFVR#WFFR!0*!
!!"7!9ORDR!;ORXR!<ORER!9ORHR!0*!
!"1$%&'((7%!.'1%OYXY*Z[('8%"01$%&'(()%*!
!"8P7Q/!9!O!RSTUFV\,-%.]#WFFR!0*!
15
17
18
19
Contedo 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'()
!-"#$%&'())
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&'(!!
21
Instrues de processamento
!! Instrues dependentes do processador
!! Funcionam como comentrios para os processadores
que no a conhecem
!"!"#$%&"%'()"*#$%&'(%'(&()*'"+''
!"+,$-.%/+(**
''*%,%-.'/)0%1'%0&2,''
'''''3$)0'&4%/(&''
'''''56%$%'2(789''
"+''
22
Comentrios
!! Iguais aos comentrios HTML
!"##$%&'($)$*+$,(+-.'/01($##2$
23
Declarao XML
!! uma instruo de processamento para o
processador XML
!! opcional
!"#$%&!'()*+,-./012/!!
!!!!!!(-3,4+-5./+*,6778960/!!
!!!!!!*:;-4;&,-(./<(*/!#=!!
24
XML Namespaces
!! Permite que elementos de mesmo nome de diferentes
aplicaes 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 no esto 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
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 Dumont</ct:nome>
<ct:endereco>Rua do Encanto, 22 - Centro
25600-000 - Petrpolis - 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>
26
27
28
X100
Helder da Rocha
(helder@argonavis.com.br)
XML vlido
!! Um XML bem construdo pode no ser vlido em
determinada aplicao
!! Aplicao tpica pode esperar que
!! elementos faam parte de um vocabulrio limitado,
!! certos atributos tenham valores e tipos definidos,
!! elementos sejam organizados de acordo com uma
determinada estrutura hierrquica, etc.
Definir um esquema
!! Documentos no vlidos so "individualistas"
!! Um esquema representa um conjunto de documentos,
que existem e que viro a existir
!! possvel fazer muitas coisas com UM documento no
vlido. difcil automatizar os processos sem considerar
uma CLASSE de documentos
Esquema
Documentos que aderem
especificao (vlidos)
Esquema (universo de
documentos vlidos)
Documento
fora da
especificao
Documentos vlidos
!! Um relacionamento pode ser estabelecido
formalmente entre um esquema e sua instncia
!! Declarao de tipo de documento (para DTD)
!! !"#$%&'()*!"#$%&%'+'+&),*-./012324535-6*
!! Para validar
!! Use um parser validador (com suporte linguagem de
esquema desejada)
7
!! Uma gramtica
!! Relacionamentos (que elementos so permitidos onde, e
de que forma, e com que contedo)
O que um DTD?
!! Um DTD (Document Type Definition) declara todos os
elementos e atributos de um documento XML
!! Define quais elementos e atributos so vlidos e em que contexto
!! A sintaxe baseada em SGML. Para definir um elemento:
<!ELEMENT nome-do-elemento (modelo de conteudo)>
10
11
13
UM possvel 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((
14
Um DTD melhor
!! Este DTD restringe as informaes 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(:((
15
!! !"),)-).&*++
!! Define um elemento
!! !"/&&,01&*++
!! !").&0&'*++
!! !".$&/&0$.*++
Elemento <!DOCTYPE>
!! O elemento <!DOCTYPE> um elemento do DTD que deve
ser usado dentro da pgina XML
!! Identifica o elemento raiz
!! Associa o arquivo a um DTD atravs de URL ou identificador pblico
URI ou
identificador
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:!
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:*
19
DTD: exemplo
zero ou uma
ocorrncia
exatamente uma
ocorrncia cada
20
Elemento <!ELEMENT>
!! Sintaxe
!!"#"$"%&'"#$%&'#&%(%$%")#*+#")%,'#*-*
21
Contedo #PCDATA
!! Parsed Character Data
!! Elemento declarado com esse tipo pode conter apenas
texto simples
!! Pode conter entidades &valor;
!! No pode conter elementos
22
Contedo Seqncia
!! O contedo deve ter uma lista de elementos
separados por vrgula
!! Indica que os elementos filho que podem aparecer dentro
do elemento declarado
!! Define uma ordenao dos elementos filho
!! Exemplos
!! !"#$#%#&'($%&'%())*+,-.(/-0-1+*-2.((
((((((((((((((((((-,3405.(6-784/-9:(;(
!! !"#$#%#&'('&*+))0+<+,+/4=3.(=3>+-85:(;((
23
!! Exemplos
!"#$#%#&'(!"#$%&')*+,,-./0,/-(1(23,+-(1((
(((((((((((((((((((,-4-./0,/-(1(*56./257(8((
!"#$#%#&'($("$)*&')9+:;,-<(),2/-(1(4/2=+;,-77(8(
!"#$#%#&'(+&,!&'))><(?7(1(),<(@77(8(
!"#$#%#&'(,&-#')A,+:-=+(1(B-C,+:-=+(1((
((((((((((((((()A,+:-=+<(/:/9/25D<(B-C,+:-=+778(
24
Contedo misto
!! !"#$%&'&()(*+*,-()(...()(*+*,/01(
!! Permite contedo de elementos, contedo de texto ou
elementos misturados com texto
25
Elemento <!ATTLIST>
!! Sintaxe
!"#$$%&'$(()*)+),-.((
(( ( ( (( (/-0123-.4(-15.(6/*.078)9/3*-:((
!"#$$%&'$(()*)+),-.((
(( ( ( ( (/-0123-.;(-15.(6/*.078)9/3*-:((
<<<((
ou((
!"#$$%&'$(()*)+),-.((
(( ( ( ( (/-0123-.4(-15.(6/*.078)9/3*-((
(( ( ( ( (/-0123-.;(-15.(6/*.078)9/3*-((
(( ( ( ( (/-0123-.=(-15.(6/*.078)9/3*-((
(( ( ( ( (/-0123-.>(-15.(6/*.078)9/3*-((
<<<(:(
27
Exemplos
!"#$%%&'(%!)**!+,!-.%/01-!!!2'.3&'14!5!
"#$%%&'(%!)**!678,9*!:4$%$!2;'<14!=>?@A?B>=5!
"#$%%&'(%!)**!CD9D!EF1:!G!:HI!G!HFJ!G!(4JK!2F1LJ'F14!5!
"#$%%&'(%!)**!M9D6NC*9MD+*9!EFH!G!OIK!=FH=!5!
ou
!"#$%%&'(%!)**!+,!-.%/01-!!!!!2'.3&'14!!
! !
!!!!!!678,9*!:4$%$!!!2;'<14!=>?@A?B>=!
! !
!!!!!!CD9D!EF1:!G!:HI!G!HFJ!G!(4JK!2F1LJ'F14!!!
! !
!!!!!!M9D6NC*9MD+*9!EFH!G!OIK!=FH=!5!
28
Tipos de dados
!"#$#%
,"-*.%
&'$()*&%
,"-*.+%
&'$()*&+%
*&$,$/%
Lista de opes
*&$,$,*+%
,"%
&($#$,(&%
29
31
Tipo ID
!! Atributos do tipo ID tem que conter um nome (e no
NMTOKEN) que seja unvoco no documento.
!! Nome tem mesmas regras que identificador XML
(caracteres alfanumricos, no comea com nmero, etc.)
!! Exemplos
!"#$%%&'(%!)**!!"#$%"&'(&+,-./',-01!
"#$%%&'(%!234*5*!)*+,-"&'(&+,-./',-01!
32
Tipo IDREF
!! IDREF referncia para um ID. Exemplo:
!"#$%%&'(%!)*+,-,!.+,/.0,!!"#$%&12345'2367!
!! Aplicao
".89,),9-,7!
!!":,,!/,0*;,<=#'()*=7!>>>!"?:,,7!
!!":,,!/,0*;,<=#'+,-=7!>>>!"?:,,7!
!!")*+,-,!@AB89,<=.(=!.+,/.0,<=#'()*=7!!
!!!>>>!"?)*+,-,7!
!!")*+,-,!@AB89,<=.)=!.+,/.0,<=#'+,-=7!!
!!!>>>!"?)*+,-,7!
"?.89,),9-,7!
33
Tipo IDREFS
!! Lista de elementos IDREF. Exemplo:
!"#$%%&'(%!)*+,-,!.+,/.0,!!"#$%&'12345'2367!!
Valores default
!! #REQUIRED: fora o autor do documento a definir
um valor explcito ao atributo.
!! #IMPLIED: o atributo opcional.
!! #FIXED: o atributo tem um valor fixo, constante
!! Exemplos
%+,!"#$#%"!&-.-/01%232$*'%45667899:::;-.-/01;<0.4=%%
%+,!"#$#%"!&>-?1@A%232$*'%45667899:::;>1;<0.4=%%
36
Elemento <!ENTITY>
!! H vrios tipos de !"#$%&%'()
!! Definem entidades: variveis usadas nos DTDs e documentos XML
37
!! Uso
!"1<F19?!K3031<!4!;,+31,4/<!43-.4!D9L<#>!!
"J1<F19?!
!!".3M?!;5*361789:<("J.3M?!!
38
!! Uso
!*5*)*+786(
;+,)0<=0:>!
!*5*)*+786(
!! Contedo de menu.xml:
!)*+,6(
%*478(
!1)*+,6(
!! Resultado
!*5*)*+786(
((!)*+,6(
((((%*478(
((!1)*+,6(
!1*5*)*+786(
39
!! Uso no XML:
!"2+6:,+!;*)5,?-<*:*-5!!
40
!! Declare as entidades
!"#$'(4(<!)(0-2+45((=/12!0!1.3=8!
"#$'(4(<!)(0-2+26+(=141!0!563=8!
!! E use no DTD
"#$'(4(<!)(0-2+5+27+4(=.$/!0!)0-2+26+8(0!)0-2+458=8!
"#>((%45(!)**!+,!-)0-2+5+27+487!?.$@34.$6!8
"#>((%45(!)**!9:;:!-)0-2+5+27+487!?.$@34.$6!8!
41
"#$%&'&(!---,!!
"#$%&'&(!/!01!!+2345367+,!!
"#$%&'&(!/!89:!+3'35);7+,!
"#$.$*$%&!---,!
!! Contedo de voos.dtd:
!"#$%&'&(!/!01!!+2345367+,!!
!"#$%&'&(!/!89:!+3'35);7+,
42
Condicionais
!! primeira vista parecem inteis
!! Servem para construir DTDs configurveis e modulares
!! Mdulos permitem segmentao e reuso
!! So usados por aplicaes como XHTML 1.1, SVG 1.1
!! XML Schema
!! vantagem: (1) XML; (2) permite especificao muito
mais precisa e detalhada.
!! desvantagem: muito mais complicado que DTD
XML Schema
!"#$%&'()*+,-./012/"3&
!#*4*56($7&#$%-*4#*./68894::;;;1;<1,)=:>220:?@AB56($7/3&
&!#*4(%($(-8&-7$(./C+%6(8(/3&
&&!#*45,$9%(#DE9(3&
!! XML Schema uma
&&&!#*4*(FG(-5(3&
&H111I&
alternativa ao DTD
&&!#*4(%($(-8&-7$(./',,/3&
!! Oferece mais
&&&!#*45,$9%(#DE9(3&
recursos
&&&&!#*4788)+CG8(&-7$(./J(/&G*(./)(FG+)(J/3&
&&&&&!#*4*+$9%(DE9(3&
!! Usa sintaxe XML
&!#*4)(*8)+58+,-&C7*(./#*4*8)+-=/3&
!! Exemplo (trecho do
&&!#*4(-G$()78+,-&'7%G(./KLM/&:3&
&&!#*4(-G$()78+,-&'7%G(./MNO/&:3&
XML Schema para
&&!#*4(-G$()78+,-&'7%G(./NKP/&:3&
o bilhete de vo)
&&!#*4(-G$()78+,-&'7%G(./BQP/&:3&
&!:#*4)(*8)+58+,-3&
&&&&&!:#*4*+$9%(DE9(3&
&&&&!:#*4788)+CG8(3&H111I&
&!:#*4(%($(-83&
!:#*4*56($73&
46
X100
Helder da Rocha
(helder@argonavis.com.br)
SAX ou DOM?
! SAX
! Gasta menos memria: no precisa carregar o documento inteiro
! Ideal para aplicaes simples que no precisam manipular com toda a
rvore de objetos (ex: busca simples)
! Programao em nvel mais primitivo: foco em eficincia
! Pode-se usar SAX para montar uma rvore DOM
! No um 'padro'; mais uma tcnica de processamento que uma API;
h vrias alternativas similares: StAX (Java), SAX2, etc.
! DOM
!
!
!
!
!
! Em Java
! Pacotes nativos: javax.xml (parsers), org.w3c.dom, org.w3c.sax
! Microsoft .NET
! PHP
! xml_parser_create() (SAX, desde PHP3)
! new DomDocument (DOM, desde PHP5)
! Python
! Pacotes nativos: xml.sax e xml.dom
W3C DOM
! Document Object Model API padro
! Padres do W3C: DOM Level 1, DOM Level 2
! Usado tambm por HTML
SAX
! Simple API for XML
! Tcnica de processamento que dispara eventos
durante processamento do documento
! Exemplos de eventos
! inicio e fim do documento
! incio e fim do elemento (pode-se descobrir qual)
! n de caractere
! n de comentrio
! ...
6
10
! Criao
Attr
CharacterData
Text
CDATASection
Comment
Document
DocumentFragment
DocumentType
Element
Entity
EntityReference
Notation
ProcessingInstruction
(atributo)
(classe abstrata)
(n de texto)
(seo CDATA)
(comentrio)
(documento inteiro)
(sub-rvore)
<!DOCTYPE>
(elemento)
(valor da entidade - contedo)
(nome da varivel)
(valor de uma notao)
(instruo de processamento)
12
Text
CDATASection
CharacterData
Attr
Node
Comment
Element
DocumentType
NodeList
Notation
NamedNodeMap
Entity
EntityReference
ProcessingInstruction
13
Tipo
valor
)!*+,+-. )
)/)
! 0%%1234%!&$'(! )
)0..5 )
)6)
! %!7%&$'(!)
)%+8. )
)9)
! :(0%0&;!:%2'$&$'(! )
):(0%0;+<.=>-)
)?)
! !$%2%@&1!A!1!$:!&$'(! )
)!-.=.B1+C+5+-<+ )
)D)
! !$%2%@&$'(! )
)!-.=.B)
)E)
):>,,+-. )
)L)
! (':4#!$%&$'(!)
)(><J,+-. )
)M)
! (':4#!$%&%@F!&$'(! )
)(><J,+-.%BN+)
)/O)
! (':4#!$%&A10G#!$%&$'(!)
)(><J,+-.A5PI,+-.)
)//)
! $'%0%2'$&$'(!)
)$>.P.=>- )
)/6)
14
Node
appendChild(Node)
Node
cloneNode(boolean)
NamedNodeMap getAttributes()
NodeList
getChildNodes()
boolean
hasAttributes()
boolean
hasChildNodes()
Node
insertBefore(Node, Node)
Node
removeChild(Node)
Node
replaceChild(Node, Node)
Node
getFirstChild()
Node
getLastChild()
Node
getNextSibling()
Node
getPreviousSibling()
String
getNodeName()
short
getNodeType()
String
getNodeValue()
Document getOwnerDocument()
Node
getParentNode()
attributes
childNodes
atalhos!
firstChild
lastChild
nextSibling
previousSibling
nodeName
nodeType
nodeValue
ownerDocument
parentNode
15
item(int)
getNamedItem(String)
nextNode()
reset()
getLength()
length
! NodeList
! Node
! Node
! void
! int
item(int)
nextNode()
reset()
getLength()
length
16
Interface Element
!
!
!
!
!
!
!
!
!
!
!
!
!
String
String
Attr
Attr
NodeList
NodeList
String
boolean
boolean
void
void
void
void
getAttribute(String)
getAttributeNS(String, String)
getAttributeNode(String)
getAttributeNodeNS(String, String)
getElementsByTagName(String)
getElementsByTagNameNS(String, String)
getTagName()
tagName
hasAttribute(String)
hasAttributeNS(String, String)
removeAttribute(String)
removeAttributeNS(String, String)
setAttribute(String, String)
setAttributeNS(String, String, String)
17
getName()
getOwnerElement()
getValue()
setValue(String)
name
ownerElement
value
! Text e CharacterData
! void
! String
! int
! void
! void
! void
appendData(String)
getData()
data
getLength()
length
insertData(int, String)
replaceData(int, int, String)
setData(String)
18
19
Interface Document
!
!
!
!
!
!
!
!
!
!
Attr
createAttribute(String)
Attr
createAttributeNS(String, String)
Element
createElement(String)
Element
createElementNS(String, String)
Text
createTextNode(String)
DocumentType getDocType()
docType
Element
getDocumentElement()
documentElement
Element
getDocumentById(String)
NodeList
getElementsByTagName(String)
NodeList
getElementsByTagNameNS(String, String)
20
20
#$%&'()*"
+%,-*,."
/0('()*"
carta := document.createElement("carta")
+'()1,2('."
/0('()*"
mens := document.createElement("mensagem")
3$'"45,6"
! Atributos
+%,-*,"5489:9."
7*-5)2"
carta.setAttribute("id", "1")
21
! 3. rvore completa
#$%&'()%$*"
mens.appendChild(texto)
!"
+,$"-.(/"
#0(12(".-3454*"
! 2. Sub-rvore <carta>
#$%&'()%$*"
#0(12(".-3454*"
carta.appendChild(mens)
#$%&'()%$*"
+,$"-.(/"
document.appendChild(carta)
+,$"-.(/"
22
24
25
26
27
!"#$%&'()(*+,-('()(*+6,2,3!"#$%&'()(*+,-4,55"#$%&'(),
*67(>O6.#G/+9:;<-5;072P>(B/6P?<,(..6.:,N(..4,6QR(B+S+T*7(K:U?@,
5('()(*+6,/77L90'7:5!"#$%&'()(*+,('()(*+80+9!/)(:;<=<??@
! Gravao de XML
!"A/+/,-K)'A/+/,2,5"#$%&'()*
#$%A/+/80+9M=+06*>:!"#$%!67(G.(++VG.0*+?@,,,,,
5K)'A/+/,W.0+(X6O0'(:;<.(>C'+/76JK)'<,/+6)0B/''V:Y&"?4@,,
28
X100
Helder da Rocha
(helder@argonavis.com.br)
Apresentao do XML
!! Por que apresentar os dados?
!! Impresso
!! Web
!! Verificao
!! Edio
!! Solues
!! Cascading Style Sheets (CSS)
!! Document Style Semantics and Specification Language
(DSSSL)
!! eXtensible Stylesheet Language Transformations (XSLT):
transforma em qualquer coisa: PDF, SVG, XSL-FO, etc.
!! Comum em
!! processadores de texto (Word: .DOT)
!! DTP (Framemaker: .FOS, Ventura Pub: .STY)
!! portabilidade maior
!! maior facilidade para gerar vises diferentes dos dados
!! facilita manuteno e promove reutilizao
CSS e XSL
!! Principais linguagens de folhas de estilo disponveis para XML
!! CSS
!! utiliza a estrutura existente do documento
!! regras informam ao browser como ele deve formatar cada
elemento da rvore
!! interpretada em tempo de execuo (no pode guardar o
resultado da transformao)
!! Em XML
!! Dar forma a elementos que no tm forma predefinida
!! Soluo para a Web (browsers que suportam XML e CSS)
!! Suporte: depende do visualizador (nem tudo que funciona
para HTML em um browser funciona para XML)
!! Aplicaes como SVG e XHTML definem em especificao
suporte formal a recursos do CSS (suporte parcial em SVG)
5
!"-!()*&+./1=&=2>!2+8?!3=:)'(9@+>!AB-)/7)+$)="0-7!
!! Instrues:
!:.;-&'%!
!:;#/.0!
!:-07#!
!:8&+%<80=#!
!:=>0'"#%!
!:+&;#!
Seletores
!! Identifica um ou mais elementos
!! Um elemento identificado por ID (xml:id ou id definido
pel DTD da aplicao SVG, XHTML, XSL-FO, HTML, etc.)
!! Um ou mais elementos determinados por
!! nome do elemento
!! atributos que contm
!! valores dos atributos
!! padres encontrados nos valores dos atributos (predicados)
!! contexto hierrquico
!! contexto de posio no documento
!! modificador (pseudo-classe)
!! atributo de classe (vale para SVG, HTML e XHTML)
!! Exemplo de seletores
!"#$!"#$#$%&!'()*#$+,-&%./*&0'1234567-4*$89:';('<$0:.+;=$
Seletores elementares
!! Os seletores mais simples so nomes de elementos
!! Definem estilo para todos os elementos
identificados com o mesmo nome
!"#"$%&!'(&%&)*!+%$,-!!
!!!!!!!!.&/"01#2,*!345"-6!
!5!'!",7"0#/8,/"*!9:;,<!=#<5&)">/"!6!!
"8?!%#?!$%!'!.&/"*!935"!1>/101,)#.6!!
">+%,!'!.&/"01#2,*!3@5"!6!!
!A!'.&/"01#2,*!3B5"6!CA!1,%,"&)!$/#D,)1>%AC!
Resoluo de conflitos
!! Ao importar folhas de estilo, definir novas regras,
pode haver conflitos de precedncia
!! Regras bsicas
10
Predicados
!! Usam valor do atributo para identificar elemento
!! Exemplos
!!
!!
!!
!!
!!
!"#$!%&'"
" " " " " " " " "()*+*,-",&./"
!"#$!%&"0"12$2)2*3.!34!52$!1'" "()*+*,-",&./"
!"#$!%&"60"14!52$!1'" " " " "()*+*,-",&./"
!"#$!%&"70"12$2)2*31'""" " " "()*+*,-",&./"
!"#$!%&'#8,&9601%&:;2<&=)*%1'"" "()*+*,-",&./"
11
IDs
!! Atributos especificados na DTD, ou no esquema,
ou por xml:id, como sendo do tipo ID
!! Podem ser referenciados diretamente usando o
identificador do elemento no documento
!! Sintaxe
!! !"!#!$%&'()!$%(*(+,)&-..
!! '()!$%(*(+,)&(recomendada)
!! Exemplo:
!! /)(0.()12*-!)23.444./5)(03.
!! '*-!).6+&"&-7.8-!!$9..
12
13
14
Pseudo-classes
!! Pseudo-classes permitem selecionar elementos
marginais e acrescentar texto antes ou depois de um
elemento.
!! Uma pseudo-classe liga-se ao nome de um elemento
atravs de :
!! !"#$%"&!'()%*+,-(.*."#,/"0012,,
34,5$0!5,6"%70%".,8!+9,43,
!! 6#:0$."0,-(.1!01!#,;8+%<,(*5&&=>65"5/"5$.>9;2,
6#5$!0",-(.1!01!#,;83+%<9;2,
!! 5&&?1!.#$%"&!'()%*+#:0$."0,,
,,,,,,,,-(.1!01!#,;@&&?1!.&#,;A,$.1!#,:.*+2,
15
Classes
!! Classes permitem agrupar vrios elementos
!! Depende de suporte formal por parte da aplicao XML: requer a
definio de um atributo class (logo no funcionam com qualquer XML)
!! So suportadas por XHTML (e HTML) e SVG
16
@import
!! Importa outra folha de estilos
!! Implementa a cascata
!! Regras podem ser herdadas ou sobrepostas
!! Regras mais especficas persistem
!! Exemplo: !"#$%&!'&()*(#!+'&!+"#$%&,
!! Aplicar estilo em "#$%:
,"#$%,-.#/#01,0)$2
!! Exemplo
!! 345'#0(,6)7(4/#8.779:,
!! 345'#0(,6;(('1++<<<8)7(4/#78#0=+)7(4/#8.779:,
17
@font-face
!! Descreve uma fonte para uso na pgina
!! !"#$%&"'()*!""
""""#$%&'#()*+,-"./0(1&21.3""
""""415-"61+7.0&&8-994*&29#$%&4950(1&21.:"
";""
!"#$%&"'()*!""
"""#$%&'#()*+,-".<=*44">?@.3""
"""415-"61+74=*44>?@A8#1:3"9B"<=*44">?@"B9""
;""
!! "
&*&6+$""""!"#$%&'#()*+,-".<=*44">?@.C"4(%4'421*#";""
8(1(D1(#$"!"#$%&'#()*+,-"./0(1&21.C"421*#";""
18
@page e @media
controla a aparncia de mdia paginada
!&%'(#)define estilos diferentes para mdias diferentes
!! !"#$%
!!
19
Propriedades de estilo
!! Atributos que alteram a aparncia dos dados, e que so
aplicados aos seletores
!! Sempre dependem de suporte da aplicao XML e do processador
!! Aplicar propriedades CSS em um XML genrico qualquer poder
funcionar em um browser que saiba como aplic-las
!! Aplicar propriedades em um XML que especifica formalmente suporte a
CSS deve funcionar em um visualizador compatvel
!! Sintaxe de declaraes
20
Propriedades de classificao
!! display
!! muda o papel do elemento
!! bloco, tabela, lista, inline, invisvel
!! essencial para formatar XML genrico em um browser,
pois elementos no tm estrutura default
!! white-space
!! definem a forma de tratamento de espaos
!! list-style-*
!! content
!! substitui seletor por outro contedo
21
Fontes
!! font-*
!! Alteram propriedades relativas a fontes
!! font-family
!! famlia (tipo)
!! font-size
!! font-weight
!! peso: +,-.#$-'/0"#$122#$322#$444$#$522$
!! font-style
!! estilo de grifo: '"6-'%#$,+-'78*$
!! font-variant
!! variao9$:&6--;%6!:$
!! font-stretch
!! expande ou condensa a fonta
!! font
22
Atributos de texto
!! text-transform
!! !"#$%"&$'()*+##(,!"-()*&./(,!"-(*
!! text-decoration
!! +01(,&$0()*.2(,&$0()*3&$04)*&$0(5%6,.+76*
!! text-align
!! &(8%)*,$76%)*9+-%$8:)*!(0%(,*
!! vertical-align
!! 3"-(&$0()*%.#)*%(;%5%.#)*<$11&()*3.%%.<)*%(;%53.%%.<*
!! -+3)*-+#(,*
!! #.,!(0%"7(<*
!! text-indent
!! valor ou porcentagem para endentar primeira linha*
!! line-height
!! letter-spacing e word-spacing
!! valor
23
Cores
!! Unidades
!!
!!
!!
!!
!"#$%&&'%&&'%&&()
!"#$*++,'*++,'*++,()
-!!""##)
./0123124/!)
!! color
!! cor do texto
!! background-color
!! cor do fundo (para qualquer elemento)
!! default:)5!6.786!1.5)
Background
!! background-image
!! !"#$%&'()&*+
!! !"#$,--./001112%&'()3425"(0%&'()&2(%6*+
!! background-repeat
!! Como tratar a imagem de fundo
!! ").)'-7+").)'-897+").)'-8:7+358").)'-+
!! packground-position
!! background-attachment
!! 6%9)> - preso janela
!! 4<"5## - preso pgina
!! background (atalho)
25
Blocos
!! Caixa do elemento
!! Posies
26
!! -"1&$%'()!*+-"1&$%',)(()-*+-"1&$%'./0(*+-"1&$%'1$&2(+
!! border-color
!! ,)1#/1'()!'3).)1*+,)1#/1',)(()-'3).)1*+,)1#/1'./0('
3).)1*+,)1#/1'1$&2('3).)1+
!! border-style
!! ,)1#/1'()!'4(5./*+,)1#/1',)(()-'4(5./*+,)1#/1'./0('
4(5./*+,)1#/1'1$&2('4(5./+
!! border-width
!! ,)1#/1'()!'6$#(2*+,)1#/1',)(()-'6$#(2*+,)1#/1'./0('
6$#(2*+,)1#/1'1$&2('6$#(2+
!! border (atalho)
27
!! height
!! altura do elemento
!! float
!! clear
!! quando quebrar linha quando vizinho de bloco ,+"-*%
!! !"!#$%+#,*$%&'()*%ou ."*)%
!! visibility
!! )'//#!%ou 0'1'.+#%
28
Posicionamento
!! position
!! !"#$%&'(:
pgina)
!! )(%!'*+(:
!! top
!! coordenada y (0 canto superior)
!! left
!! z-index
!! coordenada z (layers)
29
X100
Helder da Rocha
(helder@argonavis.com.br)
XLink
!! Coleo de atributos, do namespace http://
www.w3.org/1999/xlink usado para oferecer
recursos de hipertexto a documentos XML
!! Tipos de links disponveis
!! links simples (como os que j existem em HTML)
!! links estendidos com capacidade de
!! apontar para vrios destinos ao mesmo tempo
!! ser destino e fonte ao mesmo tempo
!! ser vrtice de um grafo e controlar toda uma teia de
navegao
XPointer
!! Funo e sintaxe para apontar para pedaos de um
documentos XML
!! XPointer usa a linguagem XPath para representar
elementos e conjuntos de elementos.
!! Possui funes para navegar no interior dos elementos e
apontar para caracteres individuais de texto
!! Pode selecionar uma faixa de valores, com base nas
coordenadas individuais
!! Pode ser ou no destino de um XLink
!! Aplicaes no s na Web
!! Atributos:
!! !"#$%=!"#$%&'!(!')*'+,',!(!&-./*-0!(!!
!!!!!!!!!!/0.!(!*#*&'!(!0'"-10.'!
!! &'$(%=!a URI destino do vnculo
!! )&*+%=!+'2!(!0'%&/.'!(!'$3',!(!-*4'0!(!+-+'!
!! ,-!.,!$%=!-+5-/,!(!-+6'71'"*!(!-*4'0!(!+-+'!
!! !/!0$ = descrio detalhada
!! '*0$ = papel / contexto do vnculo
!! 0,1$0 = descrio sucinta (para exibio)
Contedo ser
embutido no
documento...
#$&*'+)(.41,-:%H:=-##
#$&*'+)>?/@>/:,-!"#!$%-0C##
... quando o
documento for
carregado.
XPointer
!! Funo que recebe uma expresso XPath
!! Serve para apontar para um recurso ou parte do
documento
X100
Helder da Rocha
(helder@argonavis.com.br)
Atualizado em Jan 2003
Esquema (universo de
documentos vlidos)
Documento
fora da
especificao
"!
<!ELEMENT contato
(nome, email, telefone)>
<!ATTLIST contato
codigo NMTOKEN #REQUIRED>
XML Schema
<xsd:schema
xmlns:xsd=".../XMLSchema">
<xsd:element name="contato">
<xsd:complexType>
<xsd:attribute name="codigo"
use="required">
!! XML Schema
!! tudo so tipos de dados; grande controle sobre tipos
!! estruturas so tipos; tipos podem ser estendidos, criados e
redefinidos
!! no h suporte para entidades gerais
!! suporte completo a namespaces
name="href" type="xs:anyURI"/>
name="id" type="xs:ID"/>
name="nome" type="xs:string"/>
name="diametrokm" type="xs:decimal"/>
<xs:complexType name="imagemType">
<xs:attribute ref="href" use="required"/>
</xs:complexType>
<xs:complexType name="astroType">
<xs:sequence>
<xs:element ref="imagem" minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="id" use="required"/>
<xs:attribute ref="nome" use="required"/>
<xs:attribute ref="diametrokm"/>
</xs:complexType>
</xs:schema>
Elementos
Atributos
Definio de
tipos de dados
Atributo sempre
associado a elemento
Elementos
Atributos
CDATA
#REQUIRED >
id
ID
#REQUIRED >
nome
CDATA
#REQUIRED >
diametrokm NMTOKEN #IMPLIED >
Raiz e namespace
!! Um documento XML Schema tem a seguinte
estrutura mnima
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
... definies de elementos, atributos, tipos
</xs:schema>
10
Namespaces
!! Schemas estimulam o uso de namespaces.
!! Os exemplos abaixo mostram uso com namespaces
!! Esquema principal
<xs:schema
targetNamespace="http://cosmos.org.br"
xmlns:cm="http://cosmos.org.br/com"
xmlns:st="http://cosmos.org.br/sat"
xmlns="http://cosmos.org.br"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
!! Instncia
<se:sistemaEstelar xmlns:se="http://cosmos.org.br"
xmlns:sat="http://cosmos.org.br/sat"
xmlns:cmt="http://cosmos.org.br/com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://cosmos.org.br
sistema.xsd
http://cosmos.org.br/sat
satelites.xsd
http://cosmos.org.br/com
cometas.xsd">
11
Principais elementos
!! possvel gerar um esquema a partir de um DTD
!! Ferramentas criam elementos e atributos
12
<element>
!! Define um elemento
!! Deve estar associado a um tipo de dados
<xs:complexType name="cometaType">
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="nome" type="xs:string" use="required"/>
<xs:attribute name="planetas" type="xs:IDREFS"/>
</xs:complexType>
ou
<xs:element name="cometa">
<xs:complexType>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="nome" type="xs:string" use="required"/>
<xs:attribute name="planetas" type="xs:IDREFS"/>
</xs:complexType>
</xs:element>
13
<attribute>
!! Define um atributo
!! Pode estar embutido na definio de um tipo ou
globalmente acessvel (para reutilizao)
<xs:attribute name="raio" type="xs:decimal"/>
<xs:complexType name="sateliteType">
<xs:complexContent>
<xs:extension base="astroType">
<xs:attribute ref="raio" use="required"/>
<xs:attribute name="anoDesc" type="xs:int"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
14
<simpleType>
!! Tipo que apenas pode conter texto
!! possvel criar novos tipos a partir de derivao dos
tipos existentes (globalmente acessveis)
<xs:simpleType name="astroID">
<xs:restriction base="xs:ID">
<xs:pattern value="\c\d.*"/>
</xs:restriction>
</xs:simpleType>
Expresso regular
15
dateTime
base64binary
time
date
hexbinary
NOTATION
gYearMonth
double
gYear
gMonth
anyURI
gDay
QName
float
boolean
string
decimal
normalizedString
nonPositiveInteger
integer
token
negativeInteger
long
language
Name
NCName
NMTOKEN
NMTOKENS
int
short
nonNegativeInteger
positiveInteger
unsignedLong
unsignedInt
byte
ID
IDREF
IDREFS
ENTITY
ENTITIES
unsignedShort
unsignedByte
16
<complexType>
!! Tipo que pode conter outros elementos ou atributos
<xs:complexType name="imagemType">
<xs:attribute name="href" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="astroType">
<xs:sequence>
<xs:element ref="imagem" minOccurs="0"/>
<xs:element name="satelite" type="sateliteType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="astroID" use="required"/>
<xs:attribute name="nome" type="xs:token" />
<xs:attribute name="diametrokm" type="xs:decimal"/>
</xs:complexType>
17
<simpleContent>
!! Modelo de contedo simples
!! Determina o tipo dos dados contido em um
elemento que pode possuir atributos
<xs:complexType name="imagemType">
<xs:simpleContent>
<xs:restriction base="xs:string">
<xs:attribute name="href"
type="xs:anyURI"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
18
<complexContent>
!! Modelo de contedo complexo
!! Determina a organizao dos elementos filho (se
uma lista de opes, uma seqncia, etc.
<xs:complexType name="estrelaType">
<xs:complexContent>
<xs:extension base="astroType">
<xs:sequence>
<xs:element name="satelite"
type="sateliteType"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="cor" type="xs:token"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
19
<restriction> e <extension>
!! Permite restringir um tipo ou estend-lo
!! Podem tambm ser usados em modelos de contedo
complexos para derivar tipos de outros existentes
<xs:simpleType name="isbn">
<xs:restriction base="xs:NMTOKEN">
<xs:length value="10"/>
<xs:pattern value="[0-9]{9}[0-9X]"/>
</xs:restriction>
</xs:simpleType>
20
<sequence>
!! Permite definir uma seqncia de elementos
!! Equivalente ao modelo de contedo (a, b, c) no DTD
<xs:element name="sistemaEstelar">
<xs:complexType>
<xs:sequence>
<xs:element name="centro" type="centroType"/>
<xs:element name="orbita" type="orbitaType"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="cometa" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<choice>
!! Permite escolher um elemento de um conjunto
!! Ou mais, caso maxOccurs seja "unbounded"
name="orbitaType">
name="estrela" type="estrelaType"/>
name="planeta" type="sateliteType"/>
name="asteroide" type="sateliteType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
<xs:attribute name="raioMedUA" type="xs:decimal"/>
</xs:complexType>
<import>
!! Permite importar sub-esquemas
!! preciso definir o namespace usando xmlns no
elemento raiz
!! Namespace deve coincidir com namespace definido
nos sub-schemas
<xs:import
namespace="http://www.cosmos.org.br/satelites"
schemaLocation="satelites.xsd"/>
<xs:import
namespace="http://www.cosmos.org.br/cometas"
schemaLocation="cometas.xsd"/>
23
X100
Helder da Rocha
(helder@argonavis.com.br)
O que XPath
!! XPath uma linguagem usada para localizar
informaes em um documento XML
!! Serve para navegar pelos ns e localizar dados
!! usada por vrias outras tecnologias do XML, como
XSLT, Xquery, Xpointer, XML Schema, bancos de dados e
linguagens que fazem mapeamento com XML
Exemplo de XPath
!! Uma expresso XPath um caminho na rvore-fonte
que resulta em um
!! valor (nmero, texto, booleano),
!! objeto (elemento, atributo, n de texto) ou
!! conjunto de objetos
! Caminhos absolutos
!"#$%&%#!'"#()*#+
33
++!"#$%&%#!%,-,.#$,!'%)/#+
Severino Severovitch
++!"#$%&%#!%,-,.#$,!$01,2#!%,3%45+
bill@norte.com.br
celular
11
9999 4321
Modelo de dados
!! XPath trata um documento XML como uma rvore
de ns (similar, mas no igual, rvore DOM)
!! DOM opera sobre o documento XML cru, e pode
representar entidades e blocos CDATA
Tipos e valores
!! Cada n, ao ser processado, produz um valor que
tem um tipo
!! O contedo de um n processado pode ser
representado pelo contedo de texto do n
!! Todos os ns de texto que no estiverem em atributos
elemento
!! Exemplos:
!! !"#$%!&'&(&)*+!,$'-+!)&*+.:
!!
filho
primo
neto
neto
primo
primo
primo
Passos
!! Um caminho contm uma seqncia de passos
!! Cada passo pode ter trs partes
!! um eixo: descreve a direo a ser tomada, e se
representa um namespace, atributo ou elemento
!! ancestor, sibling, descendant, child, etc.
!! attribute, namespace
!! Sintaxe
!! !"#$!!%!&%!"'(!)"*+)$#$
8
Eixos
!! H treze eixos
!! 11 para navegar entre elementos
!! 1 para navegar por atributos
!! 1 para navegar por namespace
Atalhos
!! Pode-se usar smbolos em vez dos nomes de alguns
eixos mais comuns
!! !"#$"%!&%'()*(#"+,-!! #"+,-!! .&*"%'-!! &''*/01'"--2
!! $3/+!--
!!"
#"
##"
$"
(ausncia de eixo)
!! Ex:
Testes (eixo::teste)
!! Um teste restringe os resultados de um eixo
!! !"#$%%&$'!()*
!! !"#$%%+*
!! !"#$%%nome
11
Testes (2)
!! !"#$%%&!#&'()
!! qualquer n de texto
!! !"#$%%*$++!,&'()
!! qualquer n de comentrio
!! !"#$%%-.$*!//",01",/&.2*&"$,'()
!! qualquer instruo de processamento
!! !"#$%%-.$*!//",01",/&.2*&"$,'3456$3()
!! instruo <?alvo ... ?>
12
Predicados
!! Expresso XPath entre colchetes, com resultado booleano
!! Usada para filtrar resultado de um passo
!!
!!
!!
!!
!!
!!
!!
14
(2)
(3)
(4)
!! !"#$%&''(!)*++*,-%./0-1+-%.''!"#".#")*2
!! 33!)*++*,-%./0-1+-%.''!"#".#")*2
!! 4$05$%4"%&/*#/0$+)''5"!-&6+*7!*0-&-*%89:;<!2
22222222222222225=-+4''0$5"*7!*0-&-*%89:><!2
2222222222225=-+4''!"#".#")*7!*0-&-*%89:;<2
!! !!5"!-&6+*7;<!0$5"*7><!!"#".#")*7;<2
!! 0$+)''$+$?$%&*2@24$05$%4"%&''$+$?$%&*2
!! AA$+$?$%&*22
!! 4$05$%4"%&/*#/0$+)''$+$?$%&*2
!! !5=-+4''56#0*0!2
25=-+4''56#0*!2
25=-+4''&*!-5*0!2
25=-+4''-&$?7!*0-&-*%89:B<2
!! !56#0*0!56#0*!&*!-5*0!-&$?7B<2
15
igualdade
diferena
a menor que b*
a maior que b*
a menor ou igual a b*
a maior ou igual a b*
16
E lgico
OU lgico
Negao
verdadeiro
falso
17
Funes de node-set
!! !"#$%!"#$%&'%()*
!! conta o nmero de elementos de um conjunto
!! exemplos:
!! !"#$%&'()*$%++,!! !"#$%&!./01++,-
!! 0(2%&-3
!! Retorna o nmero com a posio do ltimo elemento do
conjunto de ns correntes
!! '"2/%/"$&-3
!! o nmero com a posio do n corrente dentro do
conjunto de ns correntes
18
Funes do n de contexto
!! !"#$!"$%&
!! retorna um identificador unvoco para o n de contexto.
!! '()*'+,*-.#%&
!! o nome local (sem o prefixo) do n de contexto
!! ,*-.#%&
!! o nome qualificado (com prefixo de namespace)
!! ,*-./0*).+12!#%&
!! URI do namespace do n de contexto
19
Expresses numricas
!!
!!
!!
!!
!!
!!
!!
!!
!!
!"#"$
!"%"$
!"&"$
!"!"#$$
!"%&!$$
'&()!'()*+(,,-./
*+&&''()*+(,,-./
,-"+").'()*+(,,-./
/(%'!0"$0"1110"2/"
soma
subtrao
multiplicao
diviso
resto
arredondamento
piso (arr. p/ baixo)
teto (arr. p/ cima)
somatrio
20
Expresses de string
!! !"#!$%!"#$%&'"#$(&')))&'"#$*+'
!! concatena vrios strings
!! &'(&%)*#+!"#$&',*,-,.&'/,0+'
!! retorna um fragmento do string procurado
!! &'(&%)*#+,$-%.)!"#$&'"#$123"-45.+'
!! comea no fim de str e termina depois de str_buscado
!! &'(&%)*#+,(.-").!"#$&'"#$123"-45.+'
!! comea no incio de str e termina antes de str_buscado
21
!! Retornam inteiro
!! !"$',-%./,-"()!"#$%")"
23
X100
Helder da Rocha
(helder@argonavis.com.br)
Fundamentos de transformao
! A transformao XSLT realizada sobre a rvore de um
documento-fonte
! A localizao dos ns feita com XPath
* Para uma abordagem mais profunda de XSLT, veja o curso e tutorial X300, que explora os
temas abordados aqui na prtica e em mais profundidade com carga-horria de 24 horas)
Servidor
XML
CSS
HTML
XSL
Cliente
Pgina
CSS
CSS
XML
XML
XSL
XSL
Browser
Pgina
3
Transformao standalone
! Para fazer uma transformao permanente,
gerando um arquivo de resultados, pode-se usar um
processador XSLT como o Saxon, Xalan, libxslt
! xalan.apache.org
! saxon.sourceforge.net
! O Saxon ou Xalan pode ser embutido em projetos que
usam linguagens de programao para processar XML
Fonte XML
Processador
XSLT
Resultado
(XML, HTML, Texto)
Estilo XSLT
5
! Faa a transformao
4;4$5)28"$6.!"#$%&'()='').&#-/0''
Transformao XSLT em C#
! Importe System.Xml.XPath e System.Xml.Xsl
!"#$%&'(")*+,-+./&
!"#$%&'(")*+,-+.,-"./&
!"#$%&'(")*+,-+.,-01)2/&&
! Realize a transformao
!"#$%&'"()",341$"564+9-'./()$!C&$!..C&+",!)":/&
! Faa a transformao
! !."#*&$/('-%$!"#78,.9&*F/.5G/)HI1!(')*+",$22$
! Realize a transformao
,&)-"#.-*!.#(EFF#21(2#0.300(6&)(*+"+*!"#$%&'(+*A=GG:,*
! Resultado em string
&3/)9*4$33&,*-*75#,*57(*#07<(3*-*H,*
!.#(1/I0J0.K#(B%1()57<654$33&,+*L#07<(3+*,&)-"#+*&)(*+":,*
A11()57<9*,&)$+(6!".-*;A11()57<*.()57<M5(381()57<@4$33&,..
..............................07&%?57<@A1=B4C1()57<>7&%?57<D,*
! Libere os objetos
N)0064$33&,:,*!.#(4)001(2#0.300(6&)(*+":,*
!"#4)00$%&6,&)-"#:,*!"#4)00$%&6!"#$%&'(:,*
!.#(8#0/7KFO#%P/#.6:,!"#8#0/7KF'/).0)6:,*
* Apple Store rejeita dylibs importados: preciso baixar os fontes e recompilar
! Exemplo de uso
!"#"$$%&'$(")*+,-./!"0$+.1/(2/(")*+/30"+(2*04$%1$$$$$5$
$$ $%(62*+1./)47$%)(76.(187*/)(7$%*60.(971":*/-147$
10
Hello World
! Suponha que seu documento-fonte contenha o
seguinte:
!"#$%&"'#()*+,-./01,2(
(((!%$)3#4(5"$6)*"+,789:;,2<)%(*#(="&#)$%!>%$)3#42(
(((!*#?6)&%2@"%(-"AB%!>*#?6)&%2(
!>"#$%&"'#2(
(-./01(
(<)%(*#(="&#)$%(
(789:;(
! >"#$%&"'#>*#?6)&%(
(@"%(-"AB%(
11
12
O resultado
! O resultado ser
!"#$%!&'()*&+'!,'!#('-./)!!
!!!!01234!,'5)6)7!
!!!!,'!8.)!,'!9&*'.()!:;!!
!!!!<=>?!
!!!!@'*,)!5)A)!,';@.*)!)!&'()#)(@)!,'!!!!!
!!!!B&)!0&76)C"D#$!!
13
!"##$%#&
!"#$%&'%#()%*)+,-$#.&(
! Padro:
!/*)01/*&2()$"&1%2)01,-$#.&(
! Na rvore ao lado, se o n de
contexto for 34&11#)15(
!"##$%&
!"##$%&
!"##$%&
'$("&
'$("&
'$("&
01.%'$&
)*+,%'$&
-"./,%'$&
Exemplos de padres/caminhos
! Atributos XSLT match, recebem padres para
instanciar templates:
! !"#$%&'()$*&'+!"#$%,-*.&/0-1+222+
! !"#$%&'()$*&'+!"#$%,-$340/55)*637*89:;-1+222+
15
Cabealho e <xsl:stylesheet>
! Todos os elementos de uma folha de estilos so
definidos dentro de <xsl:stylesheet>
! O esqueleto bsico para uma folha de estilos
!"#$%&'()*+,-./012/&(-3,4+-5./6789:/";&
!"#$%#&'$(#)((&**
*****"+$,#%"#$-.)&&/%0011121324560788809:;0<5=,#>45+.**
*****?(5#@4,-.72A.B*
!0"#$%#&'$(#)((&B*
16
pessoas
&&&&!#*%<=($@%H=(&$H=3?./@(**,H*/;&
&&&&&&&&!=);!#*%<H@@%>9=($@%H=(*&A;!A=);&
&&&&!A#*%<=($@%H=(;&
&&&&!#*%<=($@%H=(&$H=3?./@(**,H/;&
&&&&&&&&!=4;!#*%<H@@%>9=($@%H=(*&A;!A=4;&
&&&&!A#*%<=($@%H=(;&
!A#*%<*=>%(*?((=;&
pessoa
pessoa
17
Outro exemplo
! O processador ir navegar pela rvore
!"#$%#&'$(#)((&*+(,#-./012341*
****"5$/#%"#$01)&&6%778883893.,:72;;;7<=>7?,@/#A.,51*
****"5$/#01)&&6%778883893.,:7?B7")&5$27#&,-C&1D*
!!!!"#$%&'()*%+'(!)+',-./0/1!
!!!!!!!!"-')%1!
!!!!!!!!!!!!"23451!
!!!!!!!!!!!!!!!!"#$%&+**%56'()*%+'($!01!
!!!!!!!!!!!!"023451!
!!!!!!!!"0-')%1!
!!!!"0#$%&'()*%+'(1!
!!!!"#$%&'()*%+'(!)+',-./*(4743/1!
!!!!!!!!"4781"#$%&+**%56'()*%+'($!01"04781!
!!!!"0#$%&'()*%+'(1!
!!!!"#$%&'()*%+'(!)+',-./'3'+%/1!
!!!!!!!!"*193'+%!43!:(4743&!"#$%&8+%;(63<!$(%(,'./=/01"0*1!
!!!!"0#$%&'()*%+'(1*
!7"#$%#&'$(#)((&D*
/
pedido
total
18
!"#$%&'()*+,-./012/&(-3,4+-5./6789:/";&
!#*%<*=>%(*?((=&#$%-*<#*%./?==@<AABBB1BC1,)5A0DDDAEFGA7)H-*I,)$/&&
&&&&&&&&&&&&&&&&'()*+,-./012/;&
O n pessoas, que no
&&&&!#*%<=($@%H=(&$H=3?./A/;&
tem um template
&&&&&&&&!J,4>;!#*%<H@@%>9=($@%H=(*&A;!AJ,4>;& tambm ser
&&&&!A#*%<=($@%H=(;&
processado!
&&&&!#*%<=($@%H=(&$H=3?./@(**,H/;&
&&&&&&&&!@;!#*%<H@@%>9=($@%H=(*&A;!A@;&
&&&&!A#*%<=($@%H=(;&
&&&&!#*%<=($@%H=(&$H=3?./%K5H)/&A;&
pessoa
/
pessoas
lugar
Todo contedo da
rvore lugar ser
omitido!
19
Contexto "/"
&&&&!#*%<=($@%H=(&$H=3?./@(**,H/;&
&&&&&&&&!@;!#*%<H@@%>9=($@%H=(*&A;!A@;&
&&&&!A#*%<=($@%H=(;&
!A#*%<*=>%(*?((=;&
20
22
3. Processamento de texto
!"#$%&'()$*&'++
++++++(*&,-./)>;,'##?@A5?@#&>:,&?;@671,;(('@&67/23
23
<xsl:attribute>
! O elemento <xsl:attribute> permite criar atributos
na rvore-resultado
!"#$%&'()*%+'(!)+',-./%012/3!
!!!!"+3!
!!!!"#$%&'(()*+,(-!.'/-012)-314!
!!!!!!!!"#$%&4+%5(678!$(%(,'./9:(8/!;3!!!!!
!!!!"5#$%&'(()*+,(-4!
!!!!"#$%&4+%5(678!$(%(,'./</!;3!
!!!!";+3!
!!";#$%&'()*%+'(3!
! Resultado
"+!-:(8./<<<!,71'(=>7!>(!9:(8!<<</3!!
!!!!!!!!!<<<!,71'(=>7!>(!%012!<<<!";+3!
24
<xsl:element>
! Assim como possvel criar atributos, possvel criar
elementos, usando <xsl:element>:
!"#$%&'()*%+'(!)+',-./,01$+/2!
!!!!"#$%&(%()(3'!3+)(./(%()(3'0/2!
!!!!!!!!"#$%&4+%5(607!$(%(,'./8/!92!!!!!
!!!!"9#$%&(%()(3'2!
"9#$%&'()*%+'(2!
! Resultado:
!"(%()(3'02!888!"9(%()(3'02!
26
<xsl:sort>
! Ordenao
Criao de comentrios
! !"#$%&'(()*+,-+)"+'-!."#$%&'(()*+,-
! Insere um comentrio
! !"#$%/0'&)##1*231*#+04&+1'*-*5()675$8'7,---&'*+)9:'-!."#$%/0'&)##1*231*#+04&+1'*,-
28
29
!0"#$%#&'$(#)((&B*
30
Exemplos de <xsl:if>
!"#$%&'()$*&'+(*&,-./!"!#!$%&/0+
+++!"#$%12+&'#&./34*153'$'('6&7321$-78)7#1&1769:++
++++++++++++++++++++++++.+$*#&9:+74+;*&&48<.=*$&*=>>/0+++++
++++++!"#$%?*$@'A72+#'$',&+/;*&41BCD7C'$'('6&7/+30+
+++!3"#$%120+
!3"#$%&'()$*&'0+
!"#$%12+&'#&./9E+FG&H+I:+*6D+67&9J+F$&H+K::/0+
++++<<<<+
!3"#$%120+
!"#$%12+&'#&./#&*4&#AL1&-9;67('M+=N4*<+=:/0+
+++<<<+
!3"#$%120+
!"#$%12+&'#&./67&933'$'('6&7:/0+
+++<<<+
!3"#$%120+
32
33
! 'false'
! true()
! Exemplo
N de contexto
35
<xsl:for-each> e <xsl:sort>
! <xsl:sort> pode ser usado dentro de <xsl:for-each> para
ordenar os elementos de acordo com um campo
! O atributo select uma expresso que retorna o valor associado ao n
corrente que ser usado como critrio de ordenao
! !"#$%&'()$*&'+(*&,-./!"#!$%/0+
++++!"#$%1234'*,-+#'$',&./&''(")*/0+ Ns correntes
++++++++,-'./'*0)+'%.%$)123#%4%52+67+
++++++++!"#$%5*$6'421+#'$',&./3#%4%5/+70+
++++++++!"#$%&'"&0%+!7"#$%&'"&0+
++++++++!"#$%5*$6'421+#'$',&./8/+70+
assunto
++++!7"#$%1234'*,-0+
!7"#$%&'()$*&'0+
@dewey
N de contexto
indice
assunto
@dewey
texto
005.133
texto
920.4
36
Variveis <xsl:variable>
! Podem ser
! Locais: definidas dentro do escopo de uma uma regra de template,
bloco <xsl:for-each>, etc.
! Globais: definidas no primeiro nvel, como filhas de
<xsl:stylesheet>
! Uma vez que tenham valor, tornam-se constantes
! Podem conter qualquer tipo (node-set, string, boolean ou number)
! Para definir
!"#$%&'()'*$+,-'.+/0!"#01$%#&'(!"!2"#$%&'()'*$+1,
!"#$%&'()'*$+,-'.+/0)%*(0,#+$+34/0)%*(+,-0,21,
! Para usar
!"#$%&'$5+678,#+$+34/0.)%*(0,21,
!',9(+8/0/.!"#00,1!2'1,
37
38
39
40
Parmetros <xsl:param>
! Parmetros so quase o mesmo que variveis
!!"#$%&'&("#$%&'(#)%&*("+&,&-.'(&/01(2"
!!"#$%&'&("#$%&'(#)%&3(2444!5/+,60$1$%2"
444"
!/+,67$,8&9):"+&,&-.'(;#)%&*("52"
!$"#$%&'(<=;#)%&3>(2!5$2"
42
<xsl:param> e <xsl:with-param>
! <xsl:with-param> permite definir parmetros em um template
que so repassados ao template que cham-lo
! Chamada de um template:
!"#$%&'(%%)*+,-%(*+!.(,+/0!"#$%&%#01!
!!!!"'()*+,&-./%#%$0.(,+/0%120!$+%+'*/0234+.*0!51!
"5#$%&'(%%)*+,-%(*+1!
! Valores default
! Um <xsl:param> pode definir um valor default que ser usado caso a
chamada no envie um valor novo
! Template destino:
!"#$%&*+,-%(*+!.(,+/0!"#$%&%#01!
!!!"'()*/%#%$0.(,+/0%120!$+%+'*/05$+673'8$54+9(:%*$5(;'051!
!!!"#$%&7(%:+)89!$+%+'*/0<(;'0!51!
"5#$%&*+,-%(*+1!
43
44
<xsl:call-template> recursivo
!"#$%&'()$*&'+,*('-./*$/0$*123&*$.4!
+++!"#$%)*1*(+,*('-./*()3#501*/*3.+64++
+++!"#$%)*1*(+,*('-.#'70,83#.+64+
+++!"#$%)*1*(+,*('-.9*$31:,;.+#'$'/&-.<.+64+
+++!"#$%)*1*(+,*('-./3,&*831.+#'$'/&-.=.+64!
!!!"#$%&'()*(+%,!-(.,/0121(%3,45-62$07!
!!!!!!"#$%&8922$,7!
!!!!!!!!!":;;!3,!,$1,!<2)!2!=%1*.2>!6,'2%'(!(!$2.(!62!'(%2)!*-*8*(%!?!$,45-62$!;;7!
!!!!!!!!!"#$%&@9,-!1,$1/0A8(.B2$C5)(8(2DA82-1(62)!/!%($1EFG07!
!!!!!!!!!!!!"#$%&'(%5,;2<!$,%,81/0A'(%2)H-*!?!>#'70,83#0!I7!
!!!!!!!!!"I#$%&@9,-7!
!!!!!!!!!":;;!J($2!82-1)K)*2>!B($$,!2!121(%!82.2!'(%2)!*-*8*(%>!*-8),.,-1,!2!
!!!!!!!!!!!!!!82-1(62)!,!89(.,!,$1,!1,.B%(1,!-2'(.,-1,!82.!-2'2$!B()(.,1)2$!;;7!
!!!!!!!!!!"#$%&219,)@*$,7!
++++++++++++++!"#$%/*$$?&'()$*&'+,*('-./*$/0$*123&*$.4+
++++++++++++++++++!"#$%@;&A?)*1*(+,*('-./*()3#501*/*3.+#'$'/&-.>/*()3#501*/*3.+64+
++++++++++++++++++!"#$%@;&A?)*1*(+,*('-./3,&*831.+#'$'/&-.>/3,&*831+B+=.+64+
++++++++++++++++++!"#$%@;&A?)*1*(+,*('-.9*$31:,;.+#'$'/&-.>9*$31:,;+B+>#'70,83#.+64+
++++++++++++++!6"#$%/*$$?&'()$*&'4!
!!!!!!!!!!"I#$%&219,)@*$,7!
!!!!!!"I#$%&8922$,7!
!!!"I#$%&'()*(+%,7!
!!!":;;!L!65)(MN2!121(%!,.!$,45-62$!O!),12)-(6(!(P5*!;;7!
!!!"#$%&'(%5,;2<!$,%,81/0A121(%3,45-62$0I7!
"I#$%&1,.B%(1,7!
45
Debugging e <xsl:message>
! O elemento <xsl:message> pode ser usado para imprimir na
tela durante a execuo do processador
! uma boa ferramenta para debugging
! Pode-se us-la para imprimir valores esperados enquanto se testa a
aplicao
! Exemplo
!"#$%&'()$*&'+,*('-./*$/0$*123&*$.4+
++++!"#$%)*1*(+,*('-./*()3#.+54+
++++!"#$%)*1*(+,*('-./3,&*631.+#'$'/&-.7.+54+
!!!!"#$%&'($$)*(+"#$%&,)%-(./0!$(%(123451)'6/$!751/82)9/:;4<+"<#$%&'($$)*(++
++++!"#$%8*19*:$'+,*('-.&3&*$;'<0,63#.4+
+++++++++!"#$%/=33#'4!"#$%>=',+&'#&-.???.4???!5"#$%>=',4+
+++++++++++++!"#$%3&='1>9#'4+
+++++++++++++++++!"#$%/*$$@&'()$*&'+,*('-./*$/0$*123&*$.4???!5"#$%/*$$@&'()$*&'4+
+++++++++++++!5"#$%3&='1>9#'4+
+++++++++!5"#$%/=33#'4+
+++++!5"#$%8*19*:$'4+
!5"#$%&'()$*&'4+
46
n inicial
!"#$%3&45&6$+-7&,+/0("(0---------------#+$+.*/0!"#$%&'()*,./%0*23410-12-!"#$%&''$()*+,'$&*+#-#+$+.*/05("(1,+7815*+,012--
47
Fuso de documentos-fonte
! possvel, com document(), gerar um resultado a partir de
02-A%6/*+"#$%&
mltiplos documentos de entrada
!"#$%&%'($)*+,-%#*.&
!"#$%&%'($)*067#*.&
&&/(0121,&3&
&&/(0121,&9&
!4"#$%.&
!4"#$%.&
("#$%&
!"#$%&
!"#$%&%'($)*+,-%#*.&
!"#$%&%'($)*067#*.&
&&/(0121,&5&
&&/(0121,&8&
!4"#$%.&
!4"#$%.&
'"#$%&
)"#$%&
!,6A71B(%.&
&&!"#$%&%'($)*+,-%#*.&
&&&&/(0121,&3&
&&!4"#$%.&
===&
&&!"#$%&%'($)*067#*.&
&&&&/(0121,&8&
&&!4"#$%.&
!4,6A71B(%.&
!:,;#.&
&&!+(-<#6.3=>?-!4+(-<#6.&
&&!+(-<#6.9=>?-!4+(-<#6.&
&&!+(-<#6.5=>?-!4+(-<#6.&
&&!+(-<#6.8=>?-!4+(-<#6.&
!4:,;#.&
8#-%9-6:%2-;226&"""<&
8#-%91/0=/>%2&5/$2?@<(2%@&&
&&&&&&&&&&&&&&-2%2,6?@*+,A$256.4:,;#4+(-<#67@&B<&
&&8#-%962$C%/62&$/6,;?@4@<&
&&&&&8/0DA=1+-<8#-%94+032/,;&-2%2,6?@@<(2%@<&
*+,-"#$%&./01+0234+5627&
&&&&&&&8#-%9,+C:3+4&-2%2,6?@"@&B<&
&&&&&8B#-%94+032/,;<8B/0DA=1+-<&
&&8B#-%962$C%/62<&
$20E2"#-%& 8B#-%9-6:%2-;226<&
48
generate-id(expresso)
! uma funo XPath do XSLT (extenso)
! Gera um id unvoco para um conjunto de ns.
! Cada vez que generate-id() for chamado em um n, gera
sempre o mesmo id.
! Pode receber como parmetro a expresso XPath ou
aplicar-se ao n do contexto se estiver vazio
! Exemplos:
!"#$%&'$()*+,-#)$)./01!"#"$%&"'()*+#,-".2-34!"#$%/)56$'/)-5'/.7018+5)24-!"#$%&'$()*+,-#)$)./01!"#"$%&"'()*.2-34!3"#$%/)56$'/)4!'-8'5)09/!"#"$%&"'()*0.194!3'4-
49
! Exemplos
! !"#$%&'()*+,'-.3$+*'0+#.),+012-.3$+*'0+.)))
)))))) )7#'-.!"#$%.)98)
! !"#$%&'()*+,'-.+#05/#.))
)))))) ),+012-.3$+*'0+:+#0'5/;4':#+0'$;0'.))
)))))) )7#'-.!&'($%)*#+$.)98)
50
! Exemplo. Se houver um
./0123$4,!'#$5671'!$8'06,#'8()5671'!$8'6,,
, ,,,,,90$56:!"#$6,;<,
a chamada
3$4=>71'!$8'0>+,>?97-8$@>A,,
Desafio: agrupamento
! Como ordenar o documento-fonte abaixo por grupos?
! Agrupar por rea, ordenar reas, ordenar cursos (cdigos) por rea
!"#$#%&'&()
))))!"*+,&)"&-.'&/012340)#+5#/01#6#0(78$5+9+.,5)1#6#):5#8,!;.$5<()
))))!"*+,&)"&-.'&/0=2440)#+5#/0=>?0(@"#%#A%5)B5"$&+)C+#9D.",!;.$5<()
))))!"*+,&)"&-.'&/0=EF40)#+5#/0=>?0(=>?)@"D5<#!;.$5<()
))))!"*+,&)"&-.'&/0GH440)#+5#/0G5A0(1#6#@"+.9$!;"*+,&()
!;"#$#%&'&()
52
53
54
Mais XSLT
! Foge do escopo deste curso introdutrio uma abordagem mais
profunda do XSLT
! Mesmo assim, alguns elementos abaixo so comuns e devem ser
investigados: explore-os e analise os exemplos fornecidos
! !"#$%&'()'(*+,(-&./0-(+$1"+$1(,"(0*23.,3(/0(4',0*56*
55
X100
Helder da Rocha
(helder@argonavis.com.br)
Hello World
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
Este o "<head>"
do XSL-FO
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-body/>
Ligao entre as
</fo:simple-page-master>
regras de layout e
</fo:layout-master-set>
o contedo afetado
<fo:page-sequence master-name="p1">
<fo:flow flow-name="xsl-region-body">
<fo:block color="blue" font-size="20pt">Hello!</fo:block>
<fo:flow>
</fo:page-sequence>
Este o "<body>"
do XSL-FO
</fo:root>
<root>
!! Raiz do documento XSL-FO
!! Define o namespace
!! !""#$%%&&&'&(')*+%,---%./0%1)*23"4
!! Uso tpico
!"#$%##&''
()*+,$"#-./&&0$112223243#%516777189:1;#%)<&.='
333'
!1"#$%##&='
Estrutura do documento
!! O elemento <root> deve conter:
!! 1) Um <layout-master-set>
Cabealho
!! Cabealho mnimo
!"#$%&'($)*+,'-*./+-.*0!
!!!"#$%&'()*+,)-.+,(-&/+0!(-&/+0,1-(+23)435!
!!!!!!!!!"#$%0+.'$1,6$7895!
!!!!!"9#$%&'()*+,)-.+,(-&/+05!
!!!"1#$%&'($)*+,'-*./+-.*0!
!!"#$%-2,3&.+3'4.+,'-*./!(-&/+0,1-(+23)43!
!!!!!!!!!!!!!,'/425+*$36789:;,7!!,'/425+<$**$,67=;,7!
!!!!!!!!!!!!!,'/425+&.#*67=9:;,7!,'/425+/24>*6789:;,7!
!!!!!!!!!!!!!3'4.+?2@*>67=8;,7!!!3'4.+>.24>*67=A9B;,70!
!!!!!999!/.42C.-!'#.*'@'-!999!
!!"1#$%-2,3&.+3'4.+,'-*./0!
Cinco regies
!! !"#$%&'()&*+,-.,
!! obrigatria
!! rea de contedo principal da pgina
!! define um ID implcito (fixo): /01("#$%&'()&*+, para
uso por elementos de contedo de fluxo ou esttico.
!! !"#$%&'(023"2,-.,e !"#$%&'(#'*,-.,
!! !"#$%&'()#4&"#,-.,e !"#$%&'(342#",-.,
Margens e regies
!>%2=9#(=8$#(28>-#"4+
28"$%'(-&=+
!! Margens do <simple-page-master>
limitam a rea de impresso
!"#$%&'()#*&"#+34+
!"#$%&'(8*-#"+34+
28"$%'("%$<-+
!"#$%&'()&57+34+
!"#$%&'(#'5+34+
!"#$%&'(>-8"-+34+
28"$%'(9#*-+
!"#$%&'()&57+28"$%'(9#*-./0:;12/+++++++++++
+++++++++++28"$%'("%$<-./6:012/+++
+++++++++++28"$%'()&--&2./0:612/+
+++++++++++28"$%'(-&=./0:012/+34++
28"$%'()&--&2+
XSLT
!! Layout geralmente permanece fixo em folha XSLT+FO
!"#$%&'()$*&'+(*&,-./0/1!
!!"#$%&$$'!()*+,%#$-./''0%112223243$&516777189:1;$&)<'.=!
!!!"#$%*<>$?'@)<,'A&@,A'=!
!!!!!!"#$%,B)0*A@0<5A@)<,'A&!)<,'A&@+<)A-.06.=!
!!!!!!!!!"#$%&A5B$+@CA#$&A!A('A+'-.DE).1=!
!!!!!!!!!"#$%&A5B$+@A+F!A('A+'-.6E).1=!
!!!!!!!!!"#$%&A5B$+@<#'A&!A('A+'-.637E).1=!
!!!!!!!!!"#$%&A5B$+@,'<&'!A('A+'-.D3GE).1=!
!!!!!!!!!"#$%&A5B$+@C$F>!)<&5B+@*A#'-.D3HE).!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)<&5B+@&B5/'-.63DE).!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)<&5B+@C$''$)-.D36E).!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)<&5B+@'$0-.D3DE).!1=!!!!!!!!!
!!!!!!"1#$%,B)0*A@0<5A@)<,'A&=!
!!!"1#$%*<>$?'@)<,'A&@,A'=!
!!!!!!!!"#$%0<5A@,AI?A+EA!)<,'A&@+<)A-.06.=!
+++++++++++!"#$%*))$23&'()$*&'#+01!
!!!!!!!!"1#$%0<5A@,AI?A+EA=!
!!"1#$%&$$'=!
!0"#$%&'()$*&'1+
Contedo
!! O contedo do documento pode estar
!! Em sees <flow>, que criam nova pgina quando o
texto preenche o espao disponvel na atual
!! Em sees <static-content>, que so repetidos em
todas as pginas da seqncia.
!! Regies
!! Cada bloco de contedo deve estar associado a uma
regio existente atravs do atributo flow-name:
!"#$%&'&()*)#+&,+&-!"#$%&'()*+,-"%.)/0#&%-1'.1+.-///!"#$"0#1-!"#$%&'()*+,-"%.)/0#&%2#34+.-///-
!! Blocos
!! Dentro de <flow> ou <static-content>, contedo
deve estar em blocos: <block>, <list-block>,
<table>, etc.
10
Blocos de contedo
<fo:page-sequence master-name="p1" font-size="8pt">
<fo:static-content flow-name="xsl-region-after">
<fo:block>
Este bloco de
<fo:leader leader-pattern="rule"
contedo esttico est
leader-length="16cm" />
associado com
</fo:block>
<fo:block text-align="end">pgina
<fo:page-number/>
</fo:block>
</fo:block>
</fo:block>
</fo:static-content>
region-after
Este bloco de
contedo de fluxo est
associado com
region-body
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="serif" font-size="11pt">
Texto que pode atravessar pginas.
</fo:block>
</fo:flow>
</fo:page-sequence>
11
Blocos
!! Os elementos <flow> e <static-content> devem
conter elementos de bloco
!! <block>
!! <list-block>
!! <table>
Propriedades
!! Propriedades de estilo podem ser aplicadas em <flow>,
<static-content> e em quaisquer elementos descendentes
!! Propriedades so atributos XML
!! Maior parte das propriedades so iguais e tm mesma sintaxe
que as propriedades do CSS
!!"#$%&#'()"#*+,"-./&012+-3#.-4)5-*5,567/"2)))))))))))
) ) )))"#*+,5/86129:;+2))
)))))))))'#ᯗ<%=:>>4)?>4)?>@2)
))))))))).-7</*,+#;129'.2))
)))))))))"#*+,A6/<3+12%#&B2))
)))))))))+6C+,-&/<*12'6*+672D"#$!!"#$/*&/*6)
'#ˈ%&E62D%&'($!F"#$/*&/*6D))*!+*,+-!!F"#$%&#'(D)
13
<table>
<fo:table>
<fo:table-header>
<fo:table-cell>
<fo:block font-family="tahoma, sans"
font-weight="bold">Coluna 1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="tahoma, sans"
font-weight="bold">Coluna 2</fo:block>
</fo:table-cell>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block font-family="monospace">clula 1.1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="monospace">clula 1.2</fo:block>
</fo:table-cell>
</fo:table-row>
...
<fo:table-row> ... </fo:table-row>
</fo:table-body>
</fo:table>
14
<list-block>
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block font-size="20pt" color="red">
•
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="70pt">
<fo:block>
Item um
</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item> ... </fo:list-item>
...
</fo:list-block>
15
<external-graphic>
!! Permite incluir uma imagem na pgina
!! Objeto inline
!! !"#$%&#'()*
****!"#$+,-+./0&12.0345'*6.'789#+:25"8;)*
!;"#$%&#'()**
!! !"#$%&#'()*
****!"#$+,-+./0&12.0345'**
************6.'784--3$;;<<<:,:'#9;9#+:25"8;)*
!;"#$%&#'()*
16
<basic-link>
!! Vnculo de hipertexto
!! Vincula uma referncia de ID a um ID
!! Geralmente, quando o documento gerado via XSLT, o
ID obtido do elemento ao qual se quer vincular ou via
alguma varivel
!! Exemplo (gerao de link usando XSLT):
!"#$%&'()*+,)-.!)-/01-',+20(/)-'/)$-34!"#$%4!
!!!!!!!!!!!!!!!/05/+20*$1'/)$-346-201,)-04!
!!!!!!!!!!!!!!!*$,$134&,6047!
&&&&&&&&'()*+,-*./012&)/*/3456"31$#71689&
!"8#$%&'()*+,)-.7!
17
<instream-foreign-object>
!! Permite embutir outra linguagem XML na pgina
!"#$%&'()*+,-.#$*+&/'.$01+2)3!
!!!"(4/%(4/!!
!!!!!!!5-6'(%(4/789)):%;;<<<=<>=$*/;?@@@;(4/8!!
!!!!!!!<&A)978>@@8!9+&/9)78>@@8!!
!!!!!!!4&+<0$578@!@!>@@!>@@83!
!!!!!!!"(4/%2&*26+!()B6+78#&66%!/*++'8!!
!!!!!!!!!!!!!!!!!!!*78C@8!2578DC@8!2B78DC@8!;3!!
!!!";(4/%(4/3!
";#$%&'()*+,-.#$*+&/'.$01+2)3!
18
Visualizao
!! XSL-FO uma linguagem de descrio de pgina
!! Pginas podem ser geradas por um programa que construa o
documento na memria (como faz o browser com HTML e CSS)
ou que gere um arquivo
!! PostScript, PDF: Apache FOP, RenderX XEP, REXP
!! RTF (MS-Word): JFOR, RenderX
!! Visualizao em browser: IBM XFC
19