Argonavis XML 2007

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

Transcript of Argonavis XML 2007

Page 1: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 1/298

1

Helder da Rocha

 XMLuma introdução prática

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

Page 2: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 2/298

2

Objetivos

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

Page 3: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 3/298

3

 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)

Page 4: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 4/298

4

Formato

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

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

Page 5: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 5/298

5

 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

Page 6: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 6/298

6

Sobre material avulso e alterações

!! O material didático distribuído refere-se ao roteiro usado comoreferê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 mesmotratar superficialmente outro assunto, caso isto traga benefíciosao curso de uma forma geral

Page 7: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 7/298

7

Sobre ferramentas usadas no curso

!!  As ferramentas e aplicações usadas em sala tem acima de tudoum 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 aversão fornecida (a menos que o instrutor indique outra alternativa)

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

Page 8: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 8/298

8

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/

Page 9: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 9/298

9

Fontes

[1] World Wide Web Consortium (W3C). eXtensible Markup Language.http://www.w3.org/XML/. Ponto de partida e principal fonte sobre XML e suastecnologias "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 elinks para o plug-in SVG da Adobe (Win/Mac).

[4] IBM Developerworks. http://www-106.ibm.com/developerworks/. Diversos tutoriaise 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 eDTD, XSLT, XLink e XPointer (os dois últimos baseados em especificações draft).

Page 10: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 10/298

10

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!

[email protected]

Page 11: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 11/298

1

Introdução a XML   X100

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

Page 12: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 12/298

2

O que é XML? 

!! e X tensible 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 XMLusuario_33.xml

 <contato codigo="33"> 

 <nome> Severino Severovitch </nome> 

 <email>  [email protected] </email> 

 <telefone tipo="celular"> 

 <area> 11 </area>  <numero> 9999 4321 </numero> 

 </telefone> 

 </contato> 

elemento

atributo

"nó" de texto

Page 13: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 13/298

3

 XML versus HTML

HTML mostra

como 

apresentar

XML mostra

o que 

significa

 <nome> Severino Severovitch </nome> 

 <email>  [email protected] </email> 

 <telefone> 

 <ddd> 11 </ddd>  <numero> 9999 4321 </numero> 

 </telefone> 

 <h1> Severino Severovitch </h1> 

 <h2>  [email protected] </h2> 

 <p> 

 <b> 11 </b> 

 <i> 9999 4321 </i> 

 </p> 

Page 14: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 14/298

4

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

!!  Menor documento contendo elemento vazio

!!  Menor documento contendo elemento e conteúdo texto

 <nome> !"#"$%&' !"#"$'#%(  </nome> 

 <nome> !"#"$%&' !"#"$'#%(  </nome> 

Etiquetainicial

Conteúdo doElemento

Etiqueta final

Elemento raiz

 <nome/>   <nome></nome>  =

Page 15: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 15/298

5

 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,-$.)*+

++!7(&#$'*+

!7"#$%&'(')*+ !"#$%&'(')+:$&/"+112%;#<77'..=(&#$'2*+

++!,-$.)+%/#0'0-12"-3%/0)"2*456!7,-$.)*+

++!1+(&#$'*+

++++!1+,-$.)*(8%9)")!71+,-$.)*+++++!,-$.)+%/#0'0-128);'"2*>?@!7,-$.)*+

++!71+(&#$'*+

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

Escopo do namespace vale para elemento <clima> eherdado por todos os seusdescendentes

Escopo do namespace vale

 para descendentes de<simulacao> qualificados

com o prefixo 'w'

Nos dois casos, elementos <tempo> significam coisas diferentes, mas não há conflito porque pertencem a namespaces diferentes (um deles não tem namespace)  

Page 16: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 16/298

6

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

Page 17: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 17/298

7

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 !$(#3!$(#&!! Deve ser !$(%#3!$(%#& ou

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

Page 18: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 18/298

8

 XML válido

!! Um XML bem construído pode não ser válido emdeterminada 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

Page 19: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 19/298

9

Esquema

!! O esquema representa uma classe

!! Os documentos são instâncias

Esquema (universo dedocumentos válidos)

Documentos que aderem à

especificação (válidos)

Documento

 fora da

especificação

!! Como definir esquemas:

!! DTD - Document Type Definition

!! W3C XML Schema

Page 20: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 20/298

10

DTD vs. XML Schema

!!Um esquema é essencial para que hajacomunicaçã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 XML Schema!"#$#%#&'()*+,-,*((((((((((((.+*/01(0/-231(,0304*+056(!"7''$89'()*+,-,*(

(((((((((()*:2;*(&%'<=#&(>?#@A8?#B6(

!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

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

Page 21: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 21/298

11

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

Page 22: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 22/298

12

Como produzir XML

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

!! Gerando um documento a partir de uma árvore

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

''!$#/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"#$%&%#.'

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

''!$#/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"#$%&%#.'

celular

11

9999 4321

33

Severino [email protected]

Page 23: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 23/298

13

Visualização em um browser

!! Folha de estilo: conjunto de regras para formatar outransformar 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

Page 24: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 24/298

14

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

Page 25: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 25/298

15

Processamento XML

PDFPDF

PDF

2000 2001

SGBD

<xml><xml>

<xml>

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

Web

XML paraSGBD

e vice-versa

HTMLCSS

JavaScriptVRML

PDF ePostScript

Gráficos SVGImagens

JPG e PNG

WMLVoiceXML

"custom"XML

DOMSAX

texto

RTFTeX

SGML

Page 26: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 26/298

16

 XPath

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

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

celular 

11

9999 4321

33Severino Severovitch

[email protected] 

•! Caminhos absolutos !"#$%&%#!'"#()*#+

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

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

•! Relativos ao contexto !"#$%&%#+:++'"#()*#+!"#$6!'"#()*#%$

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

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

Page 27: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 27/298

17

 XLink, XPointer e XQuery

!! XLink: especificação W3C que define vínculos (de diversostipos) entre documentos XML!! Funcionalidade mínima é igual ao <a href> do HTML

!! É uma coleção de atributos, com namespace próprio, que podem serusados 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 dequeries 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#/>',000000009HJK9=0:;0

Page 28: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 28/298

18

 XSL

!!e X tensible 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!""#$%%&&&'&(')*+%!"#$%&'%()*"("$+%!,'(#$-$.*"+/

Page 29: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 29/298

19

 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 

Processador XSLT 

 Xalan, TrAX, Saxon

Firefox, I. Explorer, etc.

Folha de

estilos

Documento

Resultado

Documento

Fonte

 fonteToHtml.xslt

 fonte.xml

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

Page 30: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 30/298

20

 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

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

+,-./$

0$

1"%$

12(*3"%($

4(&*#)(5&6$

4#*"7&86$

4%&93")#6$

:;<=>$

?@#$:(AB#$

Page 31: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 31/298

21

 XSLT: folha de estilos (2)

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

!"#$%&'()$*&'+(*&,-./*'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 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 

documento-fonte

(em azul - XPath)

documento

resultado(em preto)

elementos XSLT 

(em vermelho, com prefixo xsl)

Page 32: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 32/298

22

 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 estiloadicionais

Page 33: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 33/298

23

 XSL-FO

!! XSL F ormatting 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 

Processador

 XSLT 

 XSLT Documento

 XSLFOFonte

FOP Documento

PDF 

 XML

 XML

 XML

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

Page 34: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 34/298

24

 XSL-FO: menor documento

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

'''!"#$)*+#,&-.*/&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('

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

''''''''''C0))#'DEFG'

'''''''!:"#$8)#<?('''''!:"#$")#=('

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

!:"#$%##&('

Este é o "<body>"

do XSL-FO

Este é o "<head>"

do XSL-FO

Ligação entre as

regras de layout e

o conteúdo afetado

Page 35: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 35/298

25

 XHTML

!! e X tensible 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 mudarcor, alinhamento, etc.

!! Pode ser misturada (estendida) com outras linguagens XML

(MathML, SVG, linguagens proprietárias)

!! Normalmente gerada via XSLT 

Processador XSLT 

 XSLT 

Documento

 XHTMLDocumento

Fonte

 XML

 XML

 XML

 <html xmlns="http://www.w3.org/1999/xhtml"> 

 <head><title>Página XHTML</title></head> 

 <body> 

 <h1>Página XHTML</h1> 

Page 36: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 36/298

26

SVG 

!! Scalable V ector 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 +

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

Page 37: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 37/298

27

Exemplo de SVG 

!"#$%&'()*+,-./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%%!H"#$2%%

CSS

 JavaScript

 XLink

Page 38: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 38/298

28

Outras aplicações populares do XML

Classe

oper(): voidoper2(): int

 MathML

SOAP

WSDL

UDDI

ebXML

CML

Web Services

 XML-RPC

 XMI

1 *

WML

VoiceXML

Classe3

oper(): void

oper2(): int

Classe2

oper(): voidoper2(): int

TEI 

DocBook 

Page 39: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 39/298

29

Demonstração

!!Exemplo de transformação XML

Saxon

FOP

 JFOR 

Texto texto

texto textotexto texto

texto textotexto

 <xslt> 

FO 

 <xslt> 

HTML

PDF

2000 2001

 <xml> 

HTML

 <xsl:fo> (1)

(2)

 <xslt> 

SVG(3)

 <xslt> 

Texto (4)

(1.a)

(1.b)

SVG

Page 40: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 40/298

30

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ãoou visualização na tela (PDF, Word ou Web)

!! SVG para gerar informações em forma de gráfico vetorial

Page 41: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 41/298

1

 XML: uma introdução prática  X100

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

Page 42: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 42/298

2

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

Page 43: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 43/298

3

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

Page 44: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 44/298

4

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> 

 <email> [email protected] </email> 

 <telefone tipo="residencial" > 

 <ddd> 21 </ddd>  <numero> 2313011 </numero> 

 </telefone> 

 </cartao-simples> 

informações usadas

 pelo processador XML

um "nó" pode ser ...

•!um elemento,

•! um atributo,•! um bloco de texto,

•! um comentário,

•! uma instrução,

•! uma declaração,

•! uma entidade, ...

Page 45: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 45/298

5

 Árvore XML

www.argonavis.com.br5

2313011

residencial

21

/imagens/logo14bis.gif

 Alberto

SantosDumont

[email protected]

Rua do Encanto, 22 -

2o. andar - Centro

- 25600-000 -

Petrópolis - RJ 

/nó raiz

elemento raiz do

documento

cartao-simples

telefone

numero

tipo

ddd 

logotipo

href

nome

email

endereco

nó de elemento

nó de atributo

nó de texto   L   E   G   E   N   D   A

Page 46: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 46/298

6

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

Page 47: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 47/298

7

Prólogo

 <?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>[email protected]</email>  <telefone tipo="residencial" > 

 <ddd>21</ddd>  <numero>2313011</numero> 

 </telefone>  </cartao-simples> 

Declaração XML

Comentário (pode aparecer em qualquer lugar)

Instrução de processamento

Declaração de tipo de documento

Page 48: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 48/298

8

Nó raiz e elementos

nó raiz

( / ) elemento raiz do

documento

elementos

elementos

 <?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 - Petrópolis - RJ  </endereco> 

 <email> [email protected] </email> 

 <telefone tipo="residencial" > 

 <ddd> 21 </ddd> 

 <numero> 2313011 </numero> 

 </telefone> 

 </cartao-simples> 

Page 49: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 49/298

9

 Atributos

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

atributos 

 <?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 - Petrópolis - RJ  </endereco> 

 <email> [email protected] </email> 

 <telefone tipo="residencial" > 

 <ddd>21</ddd> 

 <numero>2313011</numero> 

 </telefone> 

 </cartao-simples> 

Page 50: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 50/298

10

Nós de texto

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

nós 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 - Petrópolis - RJ  </endereco> 

 <email> [email protected] </email> 

 <telefone tipo="residencial" > 

 <ddd> 21 </ddd> 

 <numero> 2313011 </numero> 

 </telefone> 

 </cartao-simples> 

Page 51: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 51/298

11

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:!! !*$() )que corresponde a +)

!! !,$() )que corresponde a -)

!! !'./() )que corresponde a !)

!! !012$())que corresponde a 3)

!! !'/24())que corresponde a 5))

Page 52: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 52/298

12

Entidades de caracteres

!!Também são substituídas durante o processamentodo 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)

Page 53: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 53/298

13

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

Page 54: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 54/298

14

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 ounós de texto do documento

Page 55: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 55/298

15

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

Page 56: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 56/298

16

Quando usar elementos ou atributos? 

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

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

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

!"#$#%-

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

-!123%)&!(123%-

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

!("#$#%--

Page 57: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 57/298

17

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

Page 58: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 58/298

18

Identificadores de elementos e atributos

!!Nomes de atributos e elementos!! Podem conter!! qualquer caractere alfanumérico ou ideograma!! ! (ponto)!! " (hífen)!!  #$(sublinhado)

!! Não podem começar com!! ponto!! hífen!! número

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

especial, definido em especificação (ex: xmlns, xml:lang)

Page 59: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 59/298

19

Identificadores de elementos e atributos

!!Elementos bem formados

!! Elementos mal 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'

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

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

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

Page 60: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 60/298

20

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

!-"#$%&'())

Page 61: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 61/298

21

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&'(!!

Page 62: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 62/298

22

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

"+''

Page 63: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 63/298

23

Comentários

!!Iguais aos comentários HTML!"##$%&'($)$*+$,(+-.'/01($##2$

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

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

&)01("$##2$

Page 64: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 64/298

24

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;&,-(./<(*/!#=!!

Page 65: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 65/298

25

 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

Page 66: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 66/298

26

Exemplo

 <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> [email protected] </ct:email> 

 <ct:telefone tipo="residencial"> 

 <ct:ddd> 21 </ct:ddd> 

 <ct:numero> 2313011 </ct:numero>  </ct:telefone> 

 </ct:cartao> 

Esta URI

está associada a

este prefixo

Vale para todo o

elemento <cartao>

Page 67: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 67/298

27

Exemplo com 3 namespaces

 <departamentoxmlns:ct="urn:B1-01.234.567/cartoes"

xmlns="emp:E2-3349.9.0001-89/empresa"

xmlns:html="http://www.w3.org/WD/REC-HTML/Strict"> 

 <ct:nome> Fulano de Tal </ct:nome>   <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> 

URI padrão XHTML

Namespace

default

Page 68: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 68/298

28

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 incluiruma  !   final faz diferença

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

Page 69: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 69/298

1

 XML: uma introdução prática  X100

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

Page 70: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 70/298

2

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

Page 71: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 71/298

3

 XML válido

!! Um XML bem construído pode não ser válido emdeterminada 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 umadeterminada 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

Page 72: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 72/298

4

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 ouum XML Schema? 

D f

Page 73: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 73/298

5

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

E

Page 74: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 74/298

6

Esquema

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

Esquema (universo de

documentos válidos)

Documentos que aderem à

especificação (válidos)

Documento

 fora da

especificação

!! Como definir esquemas:!! DTD - Document Type Definition

!! W3C XML Schema

D álid

Page 75: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 75/298

7

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

O d fi

Page 76: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 76/298

8

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)

O é DTD?

Page 77: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 77/298

9

!! Um DTD ( Document T  ype 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 )> Elementos que só podem conter texto

web  pode conter ou um email ou um website

nome tem um  prenome , seguido

de zero ou mais inicial 

e um sobrenome

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

O que é um DTD? 

D álid d DTD

Page 78: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 78/298

10

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> 

 <inicial>F</inicial><inicial>R</inicial> 

 <sobrenome>Bruno</sobrenome></nome> 

 <web><email>[email protected]</email></web> 

 <telefone>1199343232</telefone> 

 <telefone>1134999992</telefone> 

 </ pessoa> 

 < pessoa>  <nome>< prenome>Giordano</ prenome> 

 <sobrenome>Bruno</sobrenome></nome> 

 <web><website>www.site.com</website></web> 

 <telefone>1199343232</telefone> 

 </ pessoa> 

D i álid d DTD

Page 79: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 79/298

11

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> 

 <telefone>1199343232</telefone> 

 <telefone>1134999992</telefone> 

 <web><email>[email protected]</email></web> 

 </ pessoa> 

 < pessoa> 

 <nome>< prenome>Giordano</ prenome>  <sobrenome>Bruno</sobrenome></nome> 

 <web><website>www.site.com</website> 

 <email>[email protected]</email></web> 

 <telefone>1199343232</telefone> 

 </ pessoa> 

DTD p lid i tâ i

Page 80: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 80/298

12

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>  

P í i d lid ã

Page 81: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 81/298

13

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

UM p í l DTD

Page 82: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 82/298

14

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

U DTD lh

Page 83: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 83/298

15

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

Elementos de m DTD XML 1 0

Page 84: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 84/298

16

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

Elemento <!DOCTYPE>

Page 85: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 85/298

17

Elemento <!DOCTYPE>

!! 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 !! Como vincular um documento XML a um DTD

!"#$%&'()*+,-./012/&(-3,4+-5./6789::;<90/&"=&

!>!"#$%&'(

3?)@?,9*+$A%(*&)%)$'*(

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

&&&!-,$(=&B111C&

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

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

nome do elemento

raiz do documento

onde buscar validação:

SYSTEM ou PUBLIC

URI ou

identificador

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

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

DTD Interno

Page 86: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 86/298

18

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

DTD incompleto

Page 87: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 87/298

19

DTD incompleto

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

é definido localmente

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

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

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

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

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

D:*

DTD: exemplo

 zero ou uma

Page 88: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 88/298

20

DTD: exemplo

 <!ELEMENT cartao-simples ( logotipo?,

nome, endereco,

email*,

telefone+ ) >  

 <!ELEMENT logotipo EMPTY >  

 <!ATTLIST logotipo

href CDATA #REQUIRED >   <!ELEMENT nome ( #PCDATA ) > 

 <!ELEMENT endereco ( #PCDATA ) > 

 <!ELEMENT email ( #PCDATA ) >  

 <!ELEMENT telefone ( ddd, numero ) > 

 <!ATTLIST telefone

tipo ( residencial | comercial ) "residencial" 

codigo-pais NMTOKEN #IMPLIED >  

 <!ELEMENT ddd ( #PCDATA ) >  

 <!ELEMENT numero ( #PCDATA ) > 

ocorrência exatamente uma

ocorrência cada

 zero ou mais

ocorrências

uma ou mais

ocorrências

não pode conter outros nós

(exceto atributos)

definição de

elemento

lista de

atributos

atributo obrigatório

contém "C haracter DATA"

atributo opcional

contém nome ou número

um ou

o outro valor default

Elemento <!ELEMENT>

Page 89: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 89/298

21

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

Conteúdo #PCDATA

Page 90: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 90/298

22

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

Conteúdo Seqüência

Page 91: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 91/298

23

Conteúdo Seqüência

!! O conteúdo deve ter uma lista de elementos

separados por vírgula!! Indica que os elementos filho que podem aparecer dentro

do elemento declarado

!! Define uma ordenação dos elementos filho

!! Podem ter sufixos indicando multiplicação!! ! zero ou mais

!! " um ou mais

!! # zero ou um

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

((((((((((((((((((-,3405.(6-784/-9:(;(

!! !"#$#%#&'('&*+))0+<+,+/4=3.(=3>+-85:(;((

Conteúdo lista de opções

Page 92: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 92/298

24

Conteúdo lista de opções

!! Lista de elementos separada por |!! Indica que um dentre os elementos filho listados pode ser

usado como conteúdo do elemento declarado

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

Conteúdo misto

Page 93: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 93/298

25

Conteúdo misto

!! !"#$%&'&()(*+*,-()(...()(*+*,/01(!! Permite conteúdo de elementos, conteúdo de texto ou

elementos misturados com texto

!! Conteúdo misto não admite outra sintaxe

!! "#$%&'&(tem que ser o primeiro elemento

!! O * no final é obrigatório

!! Não é possível controlar o número ou ordem dos filhos

!! Exemplo: a seguinte declaração em DTD!"#$%$&$'(!2345*()*+,-.(.!/!*/245*012!

permite o seguinte conteúdo(62345*7.!34567!897!6*/245*77:768*/245*7(:79!;<=!3=>!5!897!6*/245*77:568*/245*7(=9?>9@682345*7(

Conteúdo Vazio e Any

Page 94: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 94/298

26

Conteúdo Vazio e Any

!! Elementos que não podem conter nada devem ser

declarados como EMPTY 

!! !"#$#%#&'()*+,(!"#$%-(!! Elementos EMPTY podem conter atributos

!! !".''$/0'()*+,(12,)*+,(34.'.(56#78/6#4-(!! A declaração acima permite elementos como

!! !)*+,(12,)*+,9:;*<=:(>-(!! ANY : use para elementos que podem conter

qualquer coisa!! !"#$#%#&'(?*@*<(&'%-(

Elemento <!ATTLIST>

Page 95: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 95/298

27

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

<<<(:(

Exemplos

Page 96: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 96/298

28

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!

Tipos de dados

Page 97: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 97/298

29

Tipos de dados

!"#$#%

&'$()*&%

&'$()*&+%

Lista de opções

,"%

,"-*.%

,"-*.+%

*&$,$/%

*&$,$,*+%

&($#$,(&%

Tipo CDATA e NMTOKEN

Page 98: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 98/298

30

Tipo CDATA e NMTOKEN

!!CDATA (character data) representa qualquer textoarbitrário!! Pode conter espaços, pontuação, etc.

!!NMTOKEN (name token). É semelhante a umnome de elemento ou atributo!! Caracteres alfanuméricos apenas!! Não pode conter espaços nem pontuação

!!NMTOKENS representa um ou mais NMTOKENseparados por espaços.

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

Tipo lista de opções

Page 99: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 99/298

31

Tipo lista de opções

!! Uma lista de NMTOKENS dentre os quais pode-

se escolher o valor do atributo.

!! As escolhas são separadas por |:!"#$%%&'(%!)**!+,-,!./0121342(567!8/096'/05:!!

!"#$%%&'(%!;<-=*!+>-?*@*!.@?,2A*?B>7!CA*?B>C:!!

!! Elementos não podem conter espaços ou outros

caracteres não-alfanuméricos

!! O tipo de cada opção é NMTOKEN!

Tipo ID

Page 100: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 100/298

32

Tipo ID

!! Atributos do tipo ID tem que conter um nome (e não

NMTOKEN) que seja unívoco no documento.!! Nome tem mesmas regras que identificador XML

(caracteres alfanuméricos, não começa com número, etc.)

!! Não se pode usar um número como conteúdo de um

atributo declarado como ID.!! A solução é colocar um prefixo antes do número que seja ou

uma letra ou um sublinhado.

!! Elementos só podem ter um tipo ID!! Não pode haver outro elemento na mesma página com o

mesmo ID!! Exemplos

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

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

Tipo IDREF

Page 101: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 101/298

33

Tipo IDREF 

!! IDREF é referência para um ID. Exemplo:

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

!! Aplicação

".89,),9-,7!

!!":,,!/,0*;,<=#'()*=7!>>>!"?:,,7!

!!":,,!/,0*;,<=#'+,-=7!>>>!"?:,,7!

!!")*+,-,!@AB89,<=.(=!.+,/.0,<=#'()*=7!!

!!!>>>!"?)*+,-,7!

!!")*+,-,!@AB89,<=.)=!.+,/.0,<=#'+,-=7!!

!!!>>>!"?)*+,-,7!

"?.89,),9-,7!

Tipo IDREFS

Page 102: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 102/298

34

Tipo IDREFS

!! Lista de elementos IDREF . Exemplo:

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

!! Aplicação (codigo e numero são IDs)

!".89,),9-,7!!

!! !":,,!/,0*;,<=#()*+

=7!>>>!"?:,,7!!!! !":,,!/,0*;,<=#(,-.=7!>>>!"?:,,7!!

!! !")*+,-,!!@AB89,<=&*=!!

!! ! ! ! ! !.+,/.0,<=#(,-.'#()*+=7!!

!! !>>>!"?)*+,-,7!!

!"?.89,),9-,7!

Valores default

Page 103: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 103/298

35

Valores default

!! #REQUIRED: força o autor do documento a definir

um valor explícito ao atributo.

!! #IMPLIED: o atributo é opcional.

!! #FIXED: o atributo tem um valor fixo, constante!! Valor não pode ser mudado

!! Autor não precisa definir atributo e, se o fizer, não podemudar o valor.

!! Exemplo:

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

!! Valor inicial, entre aspas

!! Autor não precisa definir atributo, mas pode mudá-lo!"#$$%&'$(),,(4,.5*678*(9:;(<(=>?((,-('3((

 !"#$$%&'$(/60/-/4,(5*8@(12#$#((./0123(3(

Elemento <!NOTATION> e tipo NOTATION

Page 104: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 104/298

36

Elemento <!NOTATION> e tipo NOTATION

!!  Associa URI a um nome

!! Usado frequentemente para associar valores !"#$#%a &'$()*& 

(mesmo onde não há URIs)

!! Exemplos

%+,!"#$#%"!&-.-/01%232$*'%45667899:::;-.-/01;<0.4=%%

%+,!"#$#%"!&>-?1@A%232$*'%45667899:::;>1;<0.4=%%

!! Tipo &($#$B(&%de +,#$$CB2$=%é útil em situações onde

não se pode usar !"#$# 

%+,#$$CB2$%>00D%%%%%%%%%%%%A60?@%!"#$#%"!&E-.-/01%F%>-?1@AG%HI*JKBI*"=%%

!! Assim pode-se limitar melhor valores dos atributos%+>00D%[email protected]/014%9=%

Elemento <!ENTITY>

Page 105: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 105/298

37

Elemento !ENTITY

!! Há vários tipos de !"#$%&%'()

!! Definem entidades: variáveis usadas nos DTDs e documentos XML!! Entidades de parâmetro ( *+,-./ ): usadas apenas no DTD

!! internas – contém texto declarado localmente no DTD

!! externas – contém conteúdo de arquivos externos (sub DTDs)

!! Entidades gerais ( 0+,-./ ): usadas apenas no XML

!! internas (são sempre processadas)

!! caractere – código Unicode: &#333; &#x3AB4;

!! globais – cinco entidades: &lt; &gt; &amp; &quot; e &apos;

!! definidas pelo usuário – contém texto declarado no DTD

!! externas (carregam dados de arquivos externos)

!! processadas – incluem texto de arquivos externos no XML; o processador

resolve as entidades e blocos CDATA se houver

!! não-processadas – incluem formatos binários (ex: imagens); o processador

ignora o conteúdo e não processa (usado em atributos apenas)

Entidades gerais internas

Page 106: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 106/298

38

Entidades gerais internas 

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

!! Exemplos:!"#$%&'&(!,+31,4/()*+,$!'-./01234!54678!!!!

!!!!!!!!!!!!!!!!!!!+96:2;39!.<!+93040!=>*>)?!

"#$%&'&(!5*361789:()"14@A<?!

"12?!!!!"1.?+97B23CD1!5EFGG*H!IGGG"J1.?!

"J12?!

"J14@A<?)?!

!! Uso

!"1<F19?!K3031<!4!;,+31,4/<!43-.4!D9L<#>!!"J1<F19?!

!!".3M?!;5*361789:<("J.3M?!!

Entidades gerais externas 

Page 107: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 107/298

39

t dades ge a s e te as

!! Carregam texto de arquivos externos ao XML

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

!! !"#$%&'&(!)*+,!4567'8!/9:2/!/012/3!

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

!! Uso!*5*)*+786(

;+,)0<=0:>!

!*5*)*+786(

!! Conteúdo de menu.xml:!)*+,6(

%*478(

!1)*+,6(

!! Resultado

!*5*)*+786(

((!)*+,6(

((((%*478(((!1)*+,6(

!1*5*)*+786(

Entidades gerais externas não processadas

Page 108: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 108/298

40

g p

!! Usadas para carregar dados que não podem ser

 processados (que não são texto) através de atributos

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

!! Depende de uma declaração NOTATION!! Neste caso típico usada para informar tipo de dados

!! Exemplo de uso no DTD!"#$%&'&(%$!:2;!)*)&+,!-./01231.4-5!!

!"#+$&(&*!<*:*!)*)&+,!-671781.4-!%34&4!:2;5!!

!! Atributos podem declarar receber tipo ENTITY 

!"#'&&9()&!2+6:,+!;*)5,!$%&'&(!:;+<=(;+>5! !! Uso no XML:

!"2+6:,+!;*)5,?-<*:*-5!!

Esta entidade geral logo é usada

apenas em atributos A sintaxe é diferente: seria &logo;

se fosse uma entidade processada

Entidades de parâmetro internas

Page 109: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 109/298

41

p

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

!! Variáveis declaradas e usadas apenas dentro do DTD

!! Em vez de repetir!"#$%$&$'(!)**!+,!!!-.$/!0!/12!0!1.3!0!141!0!56378!"#$%$&$'(!)**!9:;:!-.$/!0!/12!0!1.3!0!141!0!56378!

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

Entidades de parâmetro externas

Page 110: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 110/298

42

p

!! Carregam fragmentos de DTDs externos

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

!! Exemplo!"#$%&'&(!)(627-32()()&$*!+1++89:6:+,!

!! É preciso chamar a entidade dentro do DTD.!! Uso!"#$%&'&(!---,!!)627-32;(!"#$.$*$%&!---,!!---!!

!! Conteúdo de voos.dtd:!"#$%&'&(!/!01!!+2345367+,!!!"#$%&'&(!/!89:!+3'35);7+, 

•! Resultado"#$%&'&(!---,!!"#$%&'&(!/!01!!+2345367+,!!"#$%&'&(!/!89:!+3'35);7+,!"#$.$*$%&!---,!

Condicionais

Page 111: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 111/298

43

!! À primeira vista parecem inúteis!! Servem para construir DTDs configuráveis e modulares

!! Módulos permitem segmentação e reuso!! São usados por aplicações como XHTML 1.1, SVG 1.1

!! Bloco IGNORE: ignora o conteúdo

!"#$!"#$%&'

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

998!

!! Bloco INCLUDE: declara que o texto deve serinterpretado!"#$!#()*+&'$!!!!"#%&%'%()!*+,-./+0!123456)678!

998!

Utilidade de blocos condicionais

Page 112: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 112/298

44

!! Se texto "IGNORE" OU "INCLUDE" for atribuído a entidades de

 parâmetro, pode-se "ligar" ou "desligar" declarações!! Exemplo: no DTD importado

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

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

!"./0123415670586(.(

(((!"#9#:#$%(;73<=<(>?@ABC%CD-(

EE-(

!"./01234156705073<(.(

(((!"#9#:#$%(6=3<;73<=<(>?@ABC%CD-(

EE-(

!! Blocos acima são "desligados" por default

!! Em um DTD local, pode-se "ligar" o que se deseja usar(!"#$%&%'(!"#$%&'$()*#(+)")&$A9FB#)-(

!!  Agora elemento <coisas> faz parte do DTD!

Validação: além do DTD

Page 113: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 113/298

45

ç

!! DTD!! vantagem: é simples

!! desvantagens: (1) não usa sintaxe XML; (2) é limitado.

!! XML Schema!! vantagem: (1) é XML; (2) permite especificação muito

mais precisa e detalhada.!! desvantagem: é muito mais complicado que DTD

!! Schema ainda não resolve todos os problemas!! Outras alternativas: Trax, RELAX, Schematron

!! XML Schema é extensível e permite usar essas linguagens

 para completar a validação!! Em certos casos ainda pode ser preciso realizar validação

adicional usando alguma linguagem (Python, Java)

 XML Schema

Page 114: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 114/298

46

!!  XML Schema é uma

alternativa ao DTD!! Oferece mais

recursos

!! Usa sintaxe XML

!! Exemplo (trecho do

 XML Schema para

o bilhete de vôo)

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

!#*4*56($7&#$%-*4#*./68894::;;;1;<1,)=:>220:?@AB56($7/3&&!#*4(%($(-8&-7$(./C+%6(8(/3&

&&!#*45,$9%(#DE9(3&

&&&!#*4*(FG(-5(3&

&H111I&

&&!#*4(%($(-8&-7$(./',,/3&

&&&!#*45,$9%(#DE9(3&

&&&&!#*4788)+CG8(&-7$(./J(/&G*(./)(FG+)(J/3&

&&&&&!#*4*+$9%(DE9(3&

&!#*4)(*8)+58+,-&C7*(./#*4*8)+-=/3&

&&!#*4(-G$()78+,-&'7%G(./KLM/&:3&

&&!#*4(-G$()78+,-&'7%G(./MNO/&:3&

&&!#*4(-G$()78+,-&'7%G(./NKP/&:3&

&&!#*4(-G$()78+,-&'7%G(./BQP/&:3&

&!:#*4)(*8)+58+,-3&

&&&&&!:#*4*+$9%(DE9(3&&&&&!:#*4788)+CG8(3&H111I&

&!:#*4(%($(-83&

!:#*4*56($73&

 XML: uma introdução prática  X100

Page 115: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 115/298

1

ç p

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

Programação com XML

Page 116: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 116/298

2

g ç

!  Há duas maneiras populares para manipular (interpretar, gerar,

extrair dados e tratar eventos) arquivos XML:!  Document Object Model ( DOM ) – representação em árvore

!  Simple API for XML ( SAX  ) – representação sequencial

!  As duas técnicas servem a finalidades diferentes.

!  SAX é mais simples. Oferece métodos que respondem a

eventos produzidos durante a leitura do documento!  Notifica quando um elemento abre, quando fecha, etc.

!  Permite ler dados enquanto XML carrega

!  DOM monta uma estrutura hierárquica de objetos, em forma

de árvore, que permite a navegação na estrutura do documento!  Propriedades dos objetos podem ser manipuladas

!  Viabiliza scripting em aplicações como XHTML e SVG 

!  Oferece suporte a várias APIs que usam XPath para extrair dados,

 permitindo maior produtividade e eficiência

SAX ou DOM? 

Page 117: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 117/298

3

!  SAX !  Gasta menos memória: não precisa carregar o documento inteiro!  Ideal para aplicações simples que não precisam manipular com toda a

árvore de objetos (ex: busca simples)!  Programação em nível mais primitivo: foco em eficiência!  Pode-se usar SAX para montar uma árvore DOM!  Não é um 'padrão'; é mais uma técnica de processamento que uma API;

há várias alternativas similares: StAX (Java), SAX2, etc.!  DOM

!   Mais novo (linguagens mais antigas suportam apenas SAX)!  Baseado em objetos e mais fácil de usar (API de nível mais alto)!  Há uma API padrão do W3C (há outras APIs similares: JDOM, etc.)!  É a única opção para manipulação no cliente (via scripts)!  Permite validação e busca sofisticada combinado com XPath

!  APIs disponíveis em várias linguagens!   Java, VB, C/C++, Objective-C, C#, Python, Ruby, JavaScript (DOM)

Bibliotecas e APIs populares

Page 118: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 118/298

4

!  Em C e C++ (parsers, SAX e DOM)

!  libxml2 (projeto Gnome): http://www.xmlsoft.org!   Apache Xerces C++: http://xerces.apache.org/xerces-c

!  Em Java!  Pacotes nativos: javax.xml (parsers), org.w3c.dom, org.w3c.sax 

!  Microsoft .NET !   XmlTextReader (navegação na árvore), XmlReader (SAX)

!   XmlDocument (DOM), XPathNavigator

!  PHP!   xml_parser_create() (SAX, desde PHP3)

!  new DomDocument (DOM, desde PHP5)

!  Python!  Pacotes nativos: xml.sax e xml.dom

!  Objective-C na plataforma Apple!   Mac OS X: NSXML (SAX) NSXMLDocument (similar a DOM)

!  iOS 4: NSXML (SAX) – DOM somente usando bibliotecas de terceiros

W3C DOM

Page 119: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 119/298

5

!  Document Object Model – API padrão!  Padrões do W3C: DOM Level 1, DOM Level 2

!  Usado também por HTML

!  Objetivo da especificação: oferecer uma interface

de programação uniforme, independente de

 plataforma e linguagem, para aplicações quemanipulam XML

!  Serve para!  criar um novo documento XML

! navegar na árvore XML

!  modificar, remover ou adicionar nós (elementos,

atributos, texto, comentários, PIs, etc.)

SAX 

Page 120: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 120/298

6

!  Simple API for XML

!  Técnica de processamento que dispara eventos

durante processamento do documento!  eventos representam componentes lidos e podem ser

capturados por objetos ouvintes cadastrados

!  ações podem ser tomadas em cada situação!  Exemplos de eventos

!  inicio e fim do documento

!  início e fim do elemento (pode-se descobrir qual)

!  nó de caractere

!  nó de comentário!  ...

Como escolher entre SAX e DOM

Page 121: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 121/298

7

!  Não são concorrentes – são complementares!  DOM é ideal para manipular a árvore XML recursivamente

e fundamental para scripting!  SAX é ideal para ler o documento seqüencialmente!  DOM requer carga de todo o documento antes de iniciar o

 processamento: consome mais memória!  SAX não "lembra" de tarefas realizadas: não serve para

validar referências cruzadas!  Em aplicações típicas, havendo suporte a DOM, use-o!

!  É muito mais produtivo, moderno e fácil de entender!  Use SAX quando precisar de eficiência

!  Use SAX quando não puder ter o XML inteiro na memória(ex: extração seletiva, busca, processos paralelos, etc.)

SAX: exemplo do funcionamento

Page 122: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 122/298

8

!  Se um processador SAX receber o documento ...

!"#$%&$'!!!"()*+$,)(!-./010'23(!.-$4"5()*+$,)('!

"5#$%&$'!

!  ... ele irá disparar os seguintes eventos:

! !"#$"%&'()*+",-.! !"#$"/0*)*+",1'#$"#12.34-.! !"#$"/0*)*+",1)*+!#5*)12.36""$78("*,179121:1-4-.! ';#$#'"*$!,1<&).97#=1-.

! *+9/0*)*+",1)*+!#5*)1-.! *+9/0*)*+",1'#$"#1-.

! *+9%&'()*+",-.!  Programador deve implementar um objeto "ouvinte" para

capturar os eventos e extrair as informações desejadas

Como usar SAX em Java

Page 123: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 123/298

9

!  Crie classe ouvinte estendendo !"#$%&'$()*$+,-)./01)23/,"4

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

!  Implemente os métodos de evento desejados nessa classe

!  Crie outra classe para inicializar o parser e processar o

documento XML

!  Importe as classes 789:)"(,";)'0!"6, 789:)"(," e 95<=,)3," de !"#$%&'$()*4

6789(2)*2:(&,;2<')!0'='6789(2)*2:(&,;2<4-*>?-),(-&*@AB'

6789(2)*2')!'=')!04-*>6789(2)*2@AB'

8CDE*(.*2'2*(.*2'=')!4F*,8CDE*(.*2@AB'

2*(.*24)*,G;-,*-,1(-.$*2@2,%4567)*1)23/,">?AB'HH'2*F%),2;'.*'%-,*20(&*'

2*(.*24!(2)*@I3!'.@,20!$*@/JAB'

Exemplo em Java: handlers de eventos

Page 124: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 124/298

10

!"#$%&'()%*'!"#$#!%&$'+&,-./0'&,1'%23'43-.31'%23'$5263,7'8'

''9).'+%23'%':'43-.3;'%'<'$5263,;'%==7'8'

''''>?435@A)"3A!.%23$2+&,/%07;'''B'

B'

!"#$%&'()%*''%#$%()&*&+%+>3.%26'".%1'>3.%26'$)&-$C-@51'

'''''''''''''''''''''''''>3.%26'DC-@51'E33.%#"354'-337'8'

''>?435@A)"3A!.%23+F<F'='DC-@57;'

''9).'+%23'%':'G;'%'<'-33A653H5263,+7;'%==7'8'''''>?435@A)"3A!.%23+F'F'='-33A653IC-@5+%7'='F:JF'

'''''''''''''''''''''''''='-33A653K-$"5+%7'='FJF7;'

''B'

''>?435@A)"3A!.%23$2+FLF7;'

B'

!"#$%&'()%*'&+,()&*&+%+>3.%26'".%1'>3.%26'$)&-$C-@51''''''''''''''''''''''''''''''''''''>3.%26'DC-@57'8'

''>?435@A)"3A!.%23$2+F<MF'='DC-@5'='FLF7;'

B'

Processamento XML com DOM

Page 125: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 125/298

11

!  Leitura do documento (pode usar SAX)!  Passo 1: carregar o documento e identificar os tokens!  Passo 2: identificar elementos e outros nós

!  Passo 3: montar a árvore (pode ser feito durante passo 2)

!  Alteração (com a árvore na memória)! 

Localiza o nó de referência!  Remove, altera, muda posição, cria nó antes ou depois.

!  Criação!  Cria raiz; cria elemento raiz; cria elementos filho e

atributos; cria nós de texto

!  Monta árvore! coloca atributos em elementos, nós de texto em elementos,

elementos filho em elementos pai, elemento raiz na raiz

W3C DOM (padrão): tipos de dados

Page 126: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 126/298

12

!  Coleções: NodeList, NamedNodeMap

!  Raiz da hierarquia de nós: Node!  Subclasses de Node

!   Attr (atributo)

!  CharacterData (classe abstrata)

!  Text (nó de texto)

!  CDATASection (seção CDATA)

!  Comment (comentário)

!  Document (documento inteiro)

!  DocumentFragment (sub-árvore)

!  DocumentType <!DOCTYPE>

!  Element (elemento)

!  Entity  (valor da entidade - conteúdo)

!  EntityReference (nome da variável)

!  Notation (valor de uma notação)

!  ProcessingInstruction (instrução de processamento)

W3C DOM: Hierarquia

Page 127: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 127/298

13

DocumentFragment

Document

CharacterData

Text

Comment

CDATASection

 Attr

Element

DocumentType

 Notation

Entity

EntityReference

ProcessingInstruction

 Node NodeList

 NamedNodeMap

W3C DOM: tipos de nó

Page 128: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 128/298

14

!  DOM usa constantes para identificar tipos de nó (nodeType)

Constante* (opcional) 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)

!  F1':!;;2$G&2$;%14:%2'$&$'(! )F5><+HH=-I2-H.5J<.=>- )K)

!  :'##!$%&$'(! ) ) ) ) ) ):>,,+-. ) ) ) ) )L)

!  (':4#!$%&$'(!) ) ) ) ) )(><J,+-. ) ) ) ) )M)

!  (':4#!$%&%@F!&$'(! ) ) ) )(><J,+-.%BN+) ) ) )/O)

!  (':4#!$%&A10G#!$%&$'(!) ) )(><J,+-.A5PI,+-.) ) )//)

!  $'%0%2'$&$'(!) ) ) ) ) )$>.P.=>- ) ) ) ) )/6)

* Nomes das constantes às vezes variam, conforme a implementação

 Alguns métodos da interface Node

Page 129: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 129/298

15

!  Node appendChild(Node)

!  Node cloneNode(boolean)

!  NamedNodeMap getAttributes() attributes!  NodeList  getChildNodes() childNodes

!  boolean hasAttributes()

!  boolean hasChildNodes()

!  Node insertBefore(Node, Node)

!  Node removeChild(Node)

!  Node replaceChild(Node, Node)!  Node  getFirstChild()  firstChild

!  Node  getLastChild() lastChild

!  Node  getNextSibling() nextSibling

!  Node  getPreviousSibling()  previousSibling

!  String  getNodeName() nodeName

!  short  getNodeType() nodeType!  String  getNodeValue() nodeValue

!  Document  getOwnerDocument() ownerDocument

!  Node  getParentNode()  parentNode

atalhos!

 Métodos para listas e mapas

Page 130: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 130/298

16

!  NamedNodeMap!  Node item(int)!  Node  getNamedItem(String)

!  Node nextNode()

!  void reset()

!  int  getLength() length

!  NodeList!  Node item(int)

!  Node nextNode()

!  void reset()

!  int  getLength() length

Interface Element

Page 131: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 131/298

17

!  String  getAttribute(String)

!  String  getAttributeNS(String, String)!  Attr  getAttributeNode(String)

!  Attr  getAttributeNodeNS(String, String)

!  NodeList  getElementsByTagName(String)

!  NodeList  getElementsByTagNameNS(String, String)

!  String  getTagName()  tagName !  boolean hasAttribute(String)

!  boolean hasAttributeNS(String, String)

!  void removeAttribute(String)

!  void removeAttributeNS(String, String)

!  void  setAttribute(String, String)!  void  setAttributeNS(String, String, String)

Interfaces Attr e Text

Page 132: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 132/298

18

!  Attr!  String  getName() name!  Element  getOwnerElement() ownerElement

!  String  getValue()  value

!  void  setValue(String)

! Text e CharacterData!  void appendData(String)

!  String  getData() data

!  int  getLength() length

!  void insertData(int, String)

!  void replaceData(int, int, String)!  void  setData(String)

W3C DOM 2.0 com namespaces

Page 133: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 133/298

19

!  Use métodos que levam em conta o namespace!  É necessário para acessar elementos e atributos que

usam namespaces (ex: xlink)!  É necessário quando se usa XML com namespaces (ex:

quando usado junto com SVG, XHTML, XSL-FO, etc.)! 

Em vez de getAttribute, getElement, etc.!  Use getAttributeNS, getElementNS, etc.!  Exemplo usando Java

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

!"#$%&'89$%:*!'+',-""./0011121324#&0;<<<089$%:,7'

*4=>'?$#?9>'+'=4?2?#>@">A9>B>%"*!C()&*!D,?$#?9>,E7'?$#?9>2(>"F""#$GH">*!C%H99D,?8,DI66E7'

?$#?9>2(>"F""#$GH">*!C%H99D,?J,DI66E7'

?$#?9>2(>"F""#$GH">*!C89$%:*!D',-#>K,D',-""./001112@0?4B,E7'

Interface Document

Page 134: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 134/298

20

!  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

Exemplo criação de árvore

Page 135: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 135/298

21

!  Usando interfaces do W3C DOM padrão

!  Atributos

!" #$%&'()*"

+%,-*,." /0('()*"

+'()1,2('." /0('()*"

3$'"45,6" 7*-5)2"

texto := document.createTextNode("Bom dia!")

 mens := document.createElement("mensagem")

carta := document.createElement("carta") 

Obter objeto do tipo Document

(depende de processador): document

+%,-*,"5489:9." carta.setAttribute("id", "1") 

DOM: montagem da árvore

Page 136: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 136/298

22

!  Usando interface DOM padrão!  1. Sub-árvore <mensagem>

!  2. Sub-árvore <carta>

!  3. Árvore completa

!"

#$%&'()%$*"

+,$"-.(/"

 mens.appendChild(texto)

carta.appendChild( mens) 

document.appendChild(carta) 

+,$"-.(/"

#0(12(".-3454*"

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

#0(12(".-3454*"

#$%&'()%$*"

Como obter o document

Page 137: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 137/298

23

!  Para usar DOM é preciso obter uma referência a um

elemento do tipo Document!  Em C#, use classes do System.XML

!  Em Java, inicialize um processador (pacote javax.xml e objetoDocumentBuilder ) e use a API DOM em org.w3c.dom

!  Em PHP 5, crie um DomDocument

!  Em aplicações XML que rodam no browser (XHTML,SVG) há um objeto pre-definido document !  Em browsers HTML, o objeto document pode ser usado em

scripts (ex: document.getElementById('nome') )!  Nas implementações de visualizadores SVG o objeto default

também se chama document

Obtenção do Document em Java

Page 138: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 138/298

24

!  Use os pacotes javax.xml.parsers.* e org.w3c.dom.*

!  Para obter um Document!  Crie um javax.xml.parsers.DocumentBuilder!"#$%&'()*%+,-'./0$)#.1!20$)#.1!3!!!!!!!!!!!!!!!!!!!!!!"#$%&'()*%+,-'./0$)#.14('56(7)0($'89:!!

!"#$%&'()*%+,-'.!!"#$%&'(3!20$)#.14('5"#$%&'()*%+,-'.89:!!  Chame builder.newDocument() para obter um elemento

raiz de um documento vazio ( org.w3c.dom.Document )!"#$%&'()!%)*"+&,-!3!;%+,-'.4('5"#$%&'()89:!

!  Ou chame builder.parse("documento.xml") para obter o

elemento raiz de um documento XML existente!"#$%&'()!%)*"+&,-(3!;%+,-'.4<0.7'8=-#$%&'()#4>&,=9:!!

!  Exemplo de uso de DOM com Java!  ?,'&'()!','&'()#!3!%)*"+&,-4@')?,'&'()*16-8=7'$0#=9:!!  ','&'()#40<<'(-AB+,-8%)*"+&,-4$.'0)'?,'&'()8=<=99:!

 Java: gravação em XML

Page 139: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 139/298

25

!  Uma vez criada a árvore DOM, ela pode ser

 serializada para XML (arquivo de texto)!  Solução padrão é usar XSLT (javax.transform)

!  javax.xml.transform.*

!  javax.xml.transform.dom.DOMSource;

!  javax.xml.transform.stream.StreamResult;

!  O trecho abaixo imprime o documento XML contido

em document na saída padrão (System.out)

TransformerFactory tFactory = TransformerFactory.newInstance(); ! Transformer transformer = tFactory.newTransformer(); !! DOMSource source = new DOMSource(document); !! StreamResult result = new StreamResult(System.out); !! transformer.transform(source, result);

Exemplo de DOM com .NET (C#)

Page 140: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 140/298

26

!  Use a biblioteca System.XML!"#$%&'(")*+,-./0&

!  Para criar um Document vazio (e obter a referência

 para o seu elemento raiz):-+1234!+*$)&!"#$%&'()5&$*6&-+1234!+*$)780&

! Para processar um documento existente-+1234!+*$)&!"#$%&'()5&$*6&-+1234!+*$)780&

934!+*$),13:9-+17;<=*""3:><$3+*>,,,<?=*""3:>;80&

!  Exemplo de uso de DOM com C#@1*+*$)&*1*+*$)3&5&!"#$%&'(,%*)@1*+*$)A(B97;"*4:3;80&

*1*+*$)3,:==*$9CD#197!"#$%&'(,4E*:)*@1*+*$)7;=;880&

!  Para gravar em texto em arquivo934!+*$),':F*7;4GHHE*"!1):93,I+1;80&

Exemplo de DOM em PHP 5

Page 141: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 141/298

27

!  Para obter o Document de uma árvore nova:$document = new DomDocument;

!  Para processar um documento XML existente e obter

seu Document:$document = new DomDocument;

$document->load('arquivo.xml');

!  Exemplo de uso de DOM em PHP$elemento = $document.getElementById("secao");

$elemento->appendChild($document->createElement("p")); !  Para gravar a árvore novamente em XML (imprimindo

na saída padrão)!  print $document->saveXML();

Exemplo em Objective-C (Mac OS)

Page 142: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 142/298

28

!  Para criar um Document novo

!"#$%&'()(*+,-./01,2,,3!"#$%&'()(*+,-45!"#$%!67(,('()(*+80+9!/)(:;<=(>>6/<?@,

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

55!"#$%A6BC)(*+,/''6B?,0*0+80+9D66+&'()(*+:./01?@,

!  Para obter o Document de um documento existente!"ED%,-FC.',2,5!"ED%,F0'(ED%80+9G/+9:;</.HC0I6JK)'<?@,

!"#$%A6BC)(*+,!"#$%&'()*2,55!"#$%A6BC)(*+,/''6B?,,,

,,,,,0*0+80+9L6*+(*+>MFED%:FC.',,,,,,,,,,,,,,,,,,,,,6=+06*>:!"#$%!67(G.(>(.I(890+(>=/B(,,,,,,,,,,,,,

,,,,,,,,,,,,,,,,,,,,,(..6.:N(..?@,

!  Exemplo de uso (não usa interfaces DOM padrão)!"#$%&'()(*+,-('()(*+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!/)(:;<=<??@ 

!  Gravação 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@,,

DOM padrão: usar o não usar

Page 143: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 143/298

29

!  Em linguagens de script, que rodam no browser, use

sempre DOM padrão W3C !  Usar soluções proprietárias em aplicações que rodam no

cliente não é recomendado

!  Em aplicações no servidor ou standalone, escolha a

solução mais adequada à sua aplicação!  Use as soluções nativas se existirem

!  Escolha entre soluções de acordo com recursos desejados,

eficiência, etc (ex: várias APIs DOM diferentes para Mac

OS e iPhone)

!  Java oferece APIs mais fáceis de usar que são alternativasao DOM padrão com JDOM e DOM4J

 XML: uma introdução prática  X100

Page 144: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 144/298

1

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

 Apresentação do XML

Page 145: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 145/298

2

!! Por que apresentar os dados? !! Impressão!! Web

!! Verificação

!! Edição

!! Soluções!! 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.

O que é uma folha de estilos? 

Page 146: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 146/298

3

!! Conjunto de regras para formatar!! um documento!! vários documentos

!! Comum em!! processadores de texto (Word: .DOT)

!! DTP (Framemaker: .FOS, Ventura Pub: .STY)

!! Separa estrutura e conteúdo da apresentação!! portabilidade maior

!! maior facilidade para gerar visões diferentes dos dados

!! facilita manutenção e promove reutilização

!! Veja exemplos (HTML + CSS)

CSS e XSL

Page 147: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 147/298

4

!! Principais linguagens de folhas de estilo disponíveis 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 execução (não pode guardar o

resultado da transformação)

!!  XSL (XSLT + XSL-FO)!! altera a estrutura do documento (transforma)

!! regras informam ao processador elementos e atributos que devem

ser substituídos

!!  formatação estilo-CSS via especificação XSL-FO

!! interpretada em tempo de execução ou previamente (pode guardar o resultado da transformação)

Por que usar CSS? 

Page 148: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 148/298

5

!! Em HTML!! Alterar a forma original determinada pelo estilo do browser!! Separar conteúdo da forma de apresentação

!! Simplificar a manutenção de um grande site

!! Ter grande controle sobre cores, fontes, layout

!! Tornar as páginas mais leves e o site mais rápido

!! Em XML!! Dar forma a elementos que não têm forma predefinida

!! Solução 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)

!! Aplicações como SVG e XHTML definem em especificação

suporte formal a recursos do CSS (suporte é parcial em SVG)

Como usar CSS

Page 149: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 149/298

6

!! Em XML (inclusive XHTML)!! Folha de estilos externa!"#$%&'()*&+(,++)!)*-+./)+$)01((/!,2+3./45161((/!#7!

!! Em HTML (e também XHTML)!! Folha de estilos externa (use dentro de ",+487 )"&9:;!2+&./()*&+(,++)/!)*-+./)+$)01((/!!

!!!!!!!!!!!!!!!!!!!!!!!,2+3./45161((/7!!! Folha de estilos embutida (use dentro de ",+487 )!"()*&+7!!

! !-!<1=&=2>!2+8?!3=:)'(9@+>!AB-)C!!

!"0()*&+7!

!!CSS aplicado em elementos individuais!"-!()*&+./1=&=2>!2+8?!3=:)'(9@+>!AB-)/7)+$)="0-7!

CSS essencial: regras

Page 150: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 150/298

7

!! Uma folha de estilo CSS é um conjunto de regras. Cada regra

tem a forma!"#$#%&'()!***)!"#$#%&'+!,!-'&-'.#/0/#1!20$&'3!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!***3!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!-'&-'.#/0/#1!20$&'!!

!!!!!!!!!!!!!!!!!!!!!!!!4!

!!  Alem das regras, uma folha de estilos CSS pode ter

!! Comentários:!56!"#$#%&'!.7+&'0/&!,8&+%1!(9-%4!!65!

!! Instruções:!:.;-&'%!

!:;#/.0!

!:-07#!!:8&+%<80=#!

!:=>0'"#%!

!:+&;#!

Seletores

Page 151: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 151/298

8

!! Identifica um ou mais elementos!! Um elemento identificado por ID (  xml:id ou id definido

 pel DTD da aplicação SVG, XHTML, XSL-FO, HTML, etc.)

!! Um ou mais elementos determinados por!! nome do elemento

!! atributos que contém

!! valores dos atributos!! padrões encontrados nos valores dos atributos (predicados)

!! contexto hierárquico

!! contexto de posição no documento

!! modificador (pseudo-classe)

!!atributo de classe (vale para SVG, HTML e XHTML)

!! Exemplo de seletores!"#$!"#$#$%&!'()*#$+,-&%./*&0'1234567-4*$89:';('<$0:.+;=$

Seletores elementares

Page 152: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 152/298

9

!! Os seletores mais simples são nomes de elementos

!! Definem estilo para todos os elementosidentificados 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!

!! Estilo aplicado é herdado pelos elementos filho

Resolução de conflitos

Page 153: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 153/298

10

!! Ao importar folhas de estilo, definir novas regras,

 pode haver conflitos de precedência!! Regras básicas

!! Estilos mais específicos predominam: ser mais específico

é mais importante que chegar depois

!!Propriedades não sobrepostas são herdadas

!! Elementos filho herdam propriedades dos pais!! exceto quando filhos definem suas propriedades (mesmo que

antes das dos pais): vale a regra do 'mais específico'

!! Regra aplicada via * (seletor universal) é considerada

mais específica que uma regra herdada pela estrutura!! O seletor mais específico de todos é o ID

Predicados

Page 154: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 154/298

11

!! 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'"" "()*+*,-",&./"

!! Podem ser aplicados no eletor universal!! Exemplo: todos os elementos que tenham atributo name

com valor "coisa"

>#$!%&"0"1)*2;!1'""

IDs

Page 155: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 155/298

12

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

Seleção por contexto hierárquico

Page 156: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 156/298

13

!! Dois ou mais nomes correspondem a um seletor

!! Relação ancestral-descendente!! !"#$%&'!()*$%#$"*$"&$)+#,(,'-)'$*.)

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

!! /,*2)4)567)+/,'*$'835*&9-):4;.)

!! Descendência direta, do tipo pai-filho!! $($6$"&,<4!5)=)$($6$"&,<>5(9,)+#,(,'-)'$*.)!! &!/($)=)&')=)&*)+#,(,'-)/(1$.)

!! Outra forma (há pelo menos um elemento entre

ancestral e descendente):!! !"#$%&'!()?)*$%#$"*$"&$)+#,(,'-)7'!2.)

Seleção por contexto de posição

Page 157: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 157/298

14

!! Pode-se selecionar um elemento com base no seu

vizinho anterior usando-se o símbolo “+”.!! O elemento vizinho anterior (preceding-sibling) é um

elemento irmão

!! Exemplo:!! !"#$%&'()*+),-.-$!'$/$0"-12"3"/4-536$7-!! seleciona o elemento 8$!'$/$2"9-que está no mesmo

nível de 8!"#$-&'()*+)9-e imediatamente após o

mesmo.

Pseudo-classes

Page 158: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 158/298

15

!! Pseudo-classes permitem selecionar elementos

marginais e acrescentar texto antes ou depois de umelemento.

!! Uma pseudo-classe liga-se ao nome de um elemento

através 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,

!! Em HTML, pseudo-classes alteram elemento <a>!! 5#<%&%!0+B,5#*%1CB,5#5(!%<0B,5#).<0",,

Classes

Page 159: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 159/298

16

!! Classes permitem agrupar vários elementos!!

Depende de suporte formal por parte da aplicação XML: requer adefinição de um atributo class (logo não funcionam com qualquer XML)

!! São suportadas por XHTML (e HTML) e SVG 

!! Exemplo usando classes em XHTML:

!! Para dar a cada parágrafo de um mesmo personagem (mesma classe)

os mesmos atributos de estilo, usa-se:

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

!"#!"#$$%&+),"-&$3()*'45-+#+&#51+#'()*'45-+/#+#64)+#7#

,&(#+#8489+''+#(5)(''+&:.(#(;#<4)*;!2"$##!"#!"#$$%&.,$'-&$=;#8489+''+>#%5)(''4-+#(;#<4)*;>#!2"$##

!"#!"#$$%&'#()*&$%5)(''4-+#<4)*5-+/#?(59+'#@*."+/#A&/#

4&/#4&/#51+#.4B(>#!2"$##

#/+),"-0C#8+<+'D#;4'++5#E###/'#()*0C#8+<+'D#B<48F#E##

#/.,$'-0C#8+<+'D#54GH#E#

@import

Page 160: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 160/298

17

!! Importa outra folha de estilos

!! Implementa a cascata!! Regras podem ser herdadas ou sobrepostas

!! Regras mais específicas persistem!! Exemplo: !"#$%&!'&()*(#!+'&!+"#$%&,

!! Aplicar estilo em "#$%:

,"#$%,-.#/#01,0)$2 afeta ' somente se ' já não tiver estilo definido

!! Exemplo!! 345'#0(,6)7(4/#8.779:,!! 345'#0(,6;(('1++<<<8)7(4/#78#0=+)7(4/#8.779:,

@font-face

Page 161: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 161/298

18

!! Descreve uma fonte para uso na página!! !"#$%&"'()*!""""""#$%&'#()*+,-"./0(1&21.3""

""""415-"61+7.0&&8-994*&29#$%&4950(1&21.:"

";""

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

"""#$%&'#()*+,-".<=*44">[email protected]""

"""415-"61+74=*44>?@A8#1:3"9B"<=*44">?@"B9"";""

!! "&*&6+$""""!"#$%&'#()*+,-".<=*44">[email protected]"4(%4'421*#";""

8(1(D1(#$"!"#$%&'#()*+,-"./0(1&21.C"421*#";""

@page e @media

Page 162: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 162/298

19

!! !"#$% controla a aparência de mídia paginada

!! !&%'(#)define estilos diferentes para mídias diferentes!! Opções: all, aural, braille, embossed, handheld, print,

 projection, screen, tty, tv 

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

!!!!!!!!2$3%)/+!0)/!4!!

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

!!!!!!!!2$3%)/+!5-.92!4!!

!"2&:)$!;$/:;&<:!'!

!!!"#$%&!'!

!!!!!!()*&+!056#=!056#=1!

!!!!!!2$3%)/+!.#=1!

!!!4!!!!#!'>?/@A()*&+!,#@14!

4!

Propriedades de estilo

Page 163: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 163/298

20

!!  Atributos que alteram a aparência dos dados, e que são

aplicados aos seletores!! Sempre dependem de suporte da aplicação XML e do processador

!!  Aplicar propriedades CSS em um XML genérico 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 compatível

!! Sintaxe de declarações!! Quando usadas dentro de folhas de estilos

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

!! Quando usadas em atributos -./*% de aplicações XML que o suportam

(XHTML, SVG, etc.)0%*%$%".#'-./*%12"#$%&'()*#+23'

!! Valores válidos dependem de suporte da aplicação!! Para browsers, aplicações XHTML e SVG, valores válidos incluem

nomes, unidades, porcentagens, cores, URIs, etc.

Propriedades de classificação

Page 164: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 164/298

21

!! display

!! muda o papel do elemento!! bloco, tabela, lista, inline, invisível

!! essencial para formatar XML genérico em um browser,

 pois elementos não têm estrutura default

!! white-space!! definem a forma de tratamento de espaços

!! list-style-*!! marcadores, números, etc.

!! estilos para listas de tópicos

!! content!! substitui seletor por outro conteúdo

Fontes

Page 165: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 165/298

22

!!  font-*!!  Alteram propriedades relativas a fontes

!!  font-family!!  família (tipo)

!!  font-size!! tamanho, em várias unidades: !"#$%&#$'(#$!)#$*&#$*)#$!%$

!!  font-weight

!!  peso: +,-.#$-'/0"#$122#$322#$444$#$522$!!  font-style

!! estilo de grifo: '"6-'%#$,+-'78*$

!!  font-variant!! variação9$:&6--;%6!:$

!! font-stretch!! expande ou condensa a fonta

!!  font!! atalho para especificar várias propriedades de uma vez

 Atributos de texto

Page 166: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 166/298

23

!! 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!! leading (valor ou porcentagem)

!! letter-spacing e word-spacing!! valor

Cores

Page 167: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 167/298

24

!! Unidades!!

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

!! color!! cor do texto

!! background-color!! cor do fundo (para qualquer elemento)

!! default:)5!6.786!1.5)

!! CSS 2 suporta também RGBA (transparência)

!!SVG usa fill e stroke para preenchimento de objetos etraços, em vez de color

Background

Page 168: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 168/298

25

!! background-image!! !"#$%&'()&*+!! !"#$,--./001112%&'()3425"(0%&'()&2(%6*+

!! background-repeat!! Como tratar a imagem de fundo!! ").)'-7+").)'-897+").)'-8:7+358").)'-+

!!  packground-position!!

Posicionamento da imagem de fundo!! ;'<=("5!3>8.54%-%53/+.54?,+.54?@+!! .54?,/+@'#5"7+A+5!+#)6-7+<)3-)"7+"%(,-+!! .54?@/+@'#5"7+A+5!+-5.7+<)3-)"7+;5--5&+

!! background-attachment!! 6%9)> - preso à janela

!!4<"5## - preso à página

!! background (atalho)

Blocos

Page 169: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 169/298

26

!! Caixa do elemento

!! Posições

Blocos: propriedades (1)

Page 170: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 170/298

27

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

!! margin (margem externa)!! -"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)

Blocos: propriedades (2)

Page 171: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 171/298

28

!! width

!! largura do elemento!! height

!! altura do elemento

!! float!! flutua para esquerda ou direita (resto do conteúdo flui)!! !"!#$%&'()*$%+#,*%

!! clear!! quando quebrar linha quando vizinho de bloco ,+"-*%

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

!! visibility!! )'//#!%ou 0'1'.+#%

Posicionamento

Page 172: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 172/298

29

!! position

!! !"#$%&'(: relativo ao contexto (absoluto se contexto for a página)

!! )(%!'*+(: relativo à posição anterior

!! #'!'*,: relativo ao texto da página

!! top!! coordenada y (0 é canto superior)

!! left!! coordenada x (0 é canto esquerdo)

!! z-index 

!! coordenada z (layers)

 XML: uma introdução prática  X100

Page 173: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 173/298

1

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

 XLink

Page 174: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 174/298

2

!! Coleção de atributos, do namespace http:// 

 www.w3.org/1999/xlink usado para oferecerrecursos de hipertexto a documentos XML

!! Tipos de links disponíveis!! links simples (como os que já existem em HTML)

!!links estendidos com capacidade de!! apontar para vários destinos ao mesmo tempo

!! ser destino e fonte ao mesmo tempo

!! ser vértice de um grafo e controlar toda uma teia de

navegação

!!Combinado com XPointer e XPath pode apontar para partes de um documento ou até caracteres

individuais.

 XPointer

Page 175: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 175/298

3

!! Função e sintaxe para apontar para pedaços de um

documentos XML!! XPointer usa a linguagem XPath para representar

elementos e conjuntos de elementos.

!! Possui funções 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 não destino de um XLink

!! Aplicações não só na Web!!

também em interfaces de processamento de texto!

 XLink é coleção de atributos

Page 176: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 176/298

4

!! Namespace:

!! http://www.w3.org/1999/xlink!! Atributos:

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

!! &'$(%=!a URI destino do vínculo

!! )&*+%=!+'2!(!0'%&/.'!(!'$3',!(!-*4'0!(!+-+'!!! ,-!.,!$%=!-+5-/,!(!-+6'71'"*!(!-*4'0!(!+-+'!

!! !/!0$ = descrição detalhada

!! '*0$ = papel / contexto do vínculo

!! 0,1$0 = descrição sucinta (para exibição)

!! Exemplo de uso típico!! !8'&'$'+*-!20/345&'$(9:4**%;<<&1=/0>.-$:!<?!

Exemplos de link "tipo <a href>" e "<img>"

Page 177: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 177/298

5

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

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

#$&*'+).5:;,-<:'=-##

#$&*'+)(.41,-5:"&>?:-##

#$&*'+)>?/@>/:,-4'A:B@:(/-C&*'+!0"C##

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

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

#$&*'+).5:;,-7D3EF2G"6-##

#$&*'+)(.41,-:%H:=-##

#$&*'+)>?/@>/:,-!"#!$%

-0C#

# ... quando o

documento for 

carregado.

Conteúdo será substituído... 

...quando o usuário

solicitar. 

Conteúdo será

embutido no

documento... 

 XPointer

Page 178: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 178/298

6

!! Função que recebe uma expressão XPath

!! Serve para apontar para um recurso ou parte dodocumento

!! Para apontar para um recurso descoberto por uma

expressão XPath!! xpointer(expressão)

!! Quado há campos marcados com ID no documento

destino, pode-se usar um ponteiro de referência!! !"#$%&'()'!"('**+#,-"#%&'$(#.!! -"#%&'$(#.

 XML: uma introdução prática   X100

Page 179: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 179/298

Helder da Rocha([email protected])

 Atualizado em Jan 2003

O que é um Esquema XML? 

!! O esquema representa uma classeDocumentos que aderem à

Page 180: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 180/298

 2

q p

!! Os documentos são instâncias

Esquema (universo de

documentos válidos)

especificação (válidos)

Documento

 fora da

especificação

"! Como definir esquemas:"! DTD - Document Type Definition

"! W3C XML Schema

DTD vs. XML Schema

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

Page 181: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 181/298

3

! Um esquema é essencial para que haja comunicação usando XML!! Pode ser estabelecido "informalmente" (viasoftware)!! Uso formal permite validação usando ferramentas

 genéricas de manipulação de XML!! Soluções padrão do W3C 

DTD XML Schema <!ELEMENT contato 

(nome, email, telefone)> 

 <!ATTLIST contato

codigo NMTOKEN #REQUIRED> 

 <xsd :schemaxmlns:xsd =".../XMLSchema"> 

 <xsd :element name="contato"> 

 <xsd :complexType> 

 <xsd :attribute name="codigo"use="required"> 

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

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

W3C XML Schema

P d l d XML d l í l

Page 182: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 182/298

4

!! Padrão para validação XML, modular, extensível, com

amplo suporte a tipos de dados!! DTD

!! foco na estrutura

!! poucos recursos para controle de tipos de dados

!! baseado em sintaxe SGML

!! não suporta namespaces

!! XML Schema!! tudo são tipos de dados; grande controle sobre tipos

!! estruturas são tipos; tipos podem ser estendidos, criados e

redefinidos!! não há suporte para entidades gerais

!! suporte completo a namespaces

Exemplo: design plano - objetos globais

Page 183: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 183/298

 5

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

 <xs:element name="astro" type="astroType" /> 

 <xs:element name="imagem " type="imagemType"/>  

 <xs:attribute name="href" type="xs:anyURI"/>  

 <xs:attribute name="id " type="xs:ID"/>  

 <xs:attribute name="nome" type="xs:string"/>  

 <xs:attribute 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> 

Definição de

tipos de dados

Elementos

 Atributos

Compare com um DTD

<astro id="p5" nome="Jupiter">Exemplo de documento válido

Page 184: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 184/298

6

 Atributos

Elementos <!ELEMENT astro  (imagem *) > 

 <!ELEMENT imagem   EMPTY > 

 <!ATTLIST imagem  href  CDATA #REQUIRED > 

 <!ATTLIST astro  id   ID #REQUIRED > 

 <!ATTLIST astro  nome  CDATA #REQUIRED > 

 <!ATTLIST astro  diametrokm   NMTOKEN #IMPLIED > 

Tipos de dados simples

(somente para atributos)

 Modelo de conteúdo

(tipo de dados complexo)

 Atributo sempre

associado a elemento

 <astro id  p5 nome Jupiter > 

 <imagem  href="jup31.jpg" /> 

 <imagem  href="jup32.jpg" />  </astro> 

p

em relação a este DTD

Exemplo: design "boneca russa"

Page 185: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 185/298

7

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

 <xs:element name="astro"> 

 <xs:complexType>   <xs:sequence>  

 <xs:element name="imagem "  minOccurs="0">  

 <xs:complexType>  

 <xs:attribute name="href" type="xs:anyURI"/>  

 </xs:complexType>  

 </xs:element> 

 </xs:sequence>   <xs:attribute name="id " type="xs:ID" use="required "/>  

 <xs:attribute name="nome" type="xs:string"/>  

 <xs:attribute name="diametrokm " type="xs:decimal"/> 

 </xs:complexType>  

 </xs:element> 

 </xs:schema> 

 Apenas um elemento (o elemento raiz) é visívelTipos não podem ser reutilizados

Pode haver elementos de mesmo nome em contexto diferente

Fundamentos XML Schema: Tipos

Há d lid d d i

Page 186: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 186/298

8

!! Há duas qualidades de tipos

!! Tipos  simples representam tipos de dados básicoscomo texto, números, tokens, booleanos!! Fazem parte do namespace do XML Schema (requerem

 prefixo associado ao identificador do namespace), por

exemplo: xs:int, xs:string

!! Tipos complexos representam estruturas do

documento como entidades, atributos, etc.!! Podem fazer parte do namespace default do próprio

documento (e não necessitar de prefixo) se definidos

localmente

Fundamentos: Modelos de conteúdo

D fi t t d tip pl

Page 187: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 187/298

9

!! Definem a estrutura de tipos complexos

!! Modelos de conteúdo podem ser simples oucomplexos

!! São simples quando elemento é vazio ou quando

contém apenas texto!! Modelo de conteúdo simples pode conter atributos

!! São complexos quando elemento contém outros

elementos!! Elementos podem ser definidos localmente

!! Elementos globais podem ser reutilizados

Raiz e namespace

U d t XML S h t i t

Page 188: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 188/298

10

!! Um documento XML Schema tem a seguinte

estrutura mínima

!! Para usá-lo, a sub-árvore a ser validada (instância)

deve ter a seguinte assinatura. Exemplo:

 <xs:schema 

xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

... definições de elementos, atributos, tipos

 </xs:schema> 

 <sistemaEstelar 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:noNamespaceSchemaLocation="sistemaEstelar.xsd "> 

... 

Namespaces

! S h ti l d p

Page 189: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 189/298

11

!! Schemas estimulam o uso de namespaces.!! Os exemplos abaixo mostram uso com namespaces

!! Esquema principal

!! Instância

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

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

Principais elementos

! É p í l p ti d DTD

Page 190: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 190/298

12

!! É possível gerar um esquema a partir de um DTD!! Ferramentas criam elementos e atributos

!! Um esquema simples contém definições deelementos de atributos

!! Elementos típicos em um esquema simples!! <schema> 

- elemento raiz!! <element>  !! <attribute>  !! <simpleType> ou <complexType> !! <simpleContent> ou <complexContent> !! <restriction> ou <extension> !! <enumeration> , <union> , <list> !! <sequence> , <choice> , <all> 

<element>

! Define um elemento

Page 191: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 191/298

13

!! Define um elemento

!! Deve estar associado a um tipo de dados

ou

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

 <xs:element name="cometa" type="cometaType" /> 

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

<attribute>

! Define um atributo

Page 192: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 192/298

14

!! Define um atributo

!! Pode estar embutido na definição de um tipo ou globalmente acessível (para reutilização)

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

<simpleType>

! Tipo que apenas pode conter texto

Page 193: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 193/298

15

!! Tipo que apenas pode conter texto

!! É possível criar novos tipos a partir de derivação dostipos existentes (globalmente acessíveis)

 <xs:simpleType name="astroID">  

 <xs:restriction base="xs:ID">   <xs:pattern value="\c\d.*"/>  

 </xs:restriction>  

 </xs:simpleType> 

Expressão regular

Tipos simples do XML Schema

anySimpleType

Page 194: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 194/298

16

duration dateTime time date gYearMonth gYear gMonth gDay

string

normalizedString

token

language Name NMTOKEN

  NCName NMTOKENS

ID IDREF ENTITY

IDREFS ENTITIES

decimal

integernonPositiveInteger nonNegativeInteger

negativeInteger  positiveIntegerlong

int

short

 byte

unsignedLong

unsignedInt

unsignedShort

unsignedByte

 boolean

 base64binary hexbinary

float

double anyURI QName NOTATION

<complexType>

! Tipo que pode conter outros elementos ou atributos

Page 195: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 195/298

17

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

<simpleContent>

! Modelo de conteúdo simples

Page 196: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 196/298

18

!! Modelo de conteúdo simples

!! Determina o tipo dos dados contido em umelemento 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> 

<complexContent>

! Modelo de conteúdo complexo

Page 197: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 197/298

19

!! Modelo de conteúdo complexo

!! Determina a organização dos elementos filho (seuma lista de opções, uma seqüência, 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> 

<restriction> e <extension>

! Permite restringir um tipo ou estendê-lo

Page 198: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 198/298

 20

!! Permite restringir um tipo ou estendê-lo

!! Podem também ser usados em modelos de conteúdocomplexos 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> 

<sequence>

! Permite definir uma seqüência de elementos

Page 199: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 199/298

 21

!! Permite definir uma seqüência de elementos

!! Equivalente ao modelo de conteúdo (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> 

Equivalente, em DTD, a (centro, orbita*, cometa*)

<choice>

! Permite escolher um elemento de um conjunto

Page 200: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 200/298

22

! Permite escolher um elemento de um conjunto!! Ou mais, caso maxOccurs seja "unbounded"

!! Equivalente ao modelo de conteúdo (a | b | c) no DTD

 <xs:complexType name="orbitaType">  

 <xs:choice> 

 <xs:element name="estrela" type="estrelaType"/>  

 <xs:element name=" planeta" type="sateliteType"/>   <xs:element name="asteroide" type="sateliteType" 

 minOccurs="0" maxOccurs="unbounded "/>  

 </xs:choice> 

 <xs:attribute name="raioMedUA " type="xs:decimal"/>  

 </xs:complexType> 

Equivalente a (estrela | planeta | asteroide*)

<import>

! Permite importar sub-esquemas

Page 201: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 201/298

23

! Permite importar sub esquemas!! É preciso definir o namespace usando xmlns noelemento 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 "/>  

 XML: uma introdução prática  X100

Page 202: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 202/298

1

Helder da Rocha ([email protected])

 Atualizado em outubro de 2005

O que é XPath

! XPath é uma linguagem usada para localizar

Page 203: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 203/298

2

! XPath é uma linguagem usada para localizar

informações em um documento XML!! Serve para navegar pelos nós e localizar dados!! É usada por várias outras tecnologias do XML, como

 XSLT, Xquery, Xpointer, XML Schema, bancos de dados elinguagens que fazem mapeamento com XML

!! XPath opera sobre o XML processado!! O arquivo-fonte usado pelo XPath não tem entidades (por

exemplo: &atilde;) ou blocos CDATA!! O processador resolve todas as entidades antes do

 processamento com XPath, e todas as entidades e seçõesCDATA são convertidas em XML e texto

Exemplo de XPath

! Uma expressão XPath é um caminho na árvore-fonte

Page 204: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 204/298

3

! Uma expressão XPath é um caminho na árvore fonte

que resulta em um!! valor (número, texto, booleano),

!! objeto (elemento, atributo, nó de texto) ou

!! conjunto de objetos

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

celular 

11

9999 4321

33Severino Severovitch

[email protected] 

•! Caminhos absolutos !"#$%&%#!'"#()*#+

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

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

•! Relativos ao contexto !"#$%&%#+:++'"#()*#+!"#$6!'"#()*#%$

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

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

 Modelo de dados

! XPath trata um documento XML como uma árvore

Page 205: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 205/298

4

! XPath trata um documento XML como uma árvore

de nós (similar, mas não igual, à àrvore DOM)!! DOM opera sobre o documento XML cru, e pode

representar entidades e blocos CDATA

!! Os nós usados pelo XPath podem ser de sete tipos!! Raiz (só há um desses)

!! Elemento

!! Atributo

!! Texto

!! Namespace

!!Instrução de processamento

!! Comentário

Tipos e valores

! Cada nó, ao ser processado, produz um valor que

Page 206: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 206/298

5

! Cada nó, ao ser processado, produz um valor que

tem um tipo!! O conteúdo de um nó processado pode ser

representado pelo conteúdo de texto do nó!! Todos os nós de texto que não estiverem em atributos

!!O valor do nó pode conter um dos quatro* tipos deconteúdo a seguir!! uma estrutura de outros nós ( node-set )

!! um escalar numérico ( number )

!! um string (  string )

!! um valor booleano ( boolean )* A abordagem de XPath neste curso está restrita a XPath 1.0; XPath 2.0

suportará muito mais tipos (todos os tipos do XML Schema).

Expressões XPath 1.0

! Os tipos de expressão suportadas por XPath são

Page 207: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 207/298

6

! Os tipos de expressão suportadas por XPath são

relacionados aos tipos de dados!! operações sobre nós da árvore-fonte (caminhos)

!! operações sobre texto

!! operações booleanas

!! operações numéricas

!! E cada tipo de expressão devolve um resultado que pode ser um dos quatro tipos de dados!! um conjunto de nós (node-set)

!! um texto (string)

!!um valor booleano (boolean)

!! um número (number)

Caminhos (location paths)

!! Um caminho é uma seqüência de passos de navegação na

Page 208: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 208/298

7

q p g ç

árvore-fonte (documento-fonte)!! Todo caminho resulta em um nó ( node ) ou conjunto de nós ( node-set )

!! O resultado de um caminho produz um contexto!! O nó de contexto: expressões seguintes relativas ao contexto

!! Se for um node-set, o processamento de cada nó do conjunto também

introduz um contexto: o nó corrente

!!Todo contexto tem um tamanho e uma posição

!! Caminhos podem ser absolutos ou relativos!! absolutos: começam no nó raiz (iniciam com "/")

!! relativos: começam no nó do contexto (context node)

!! Exemplos:!! !"#$%!&'&(&)*+!,$'-+!)&*+.: contexto é node-set 'neto',

que tem tamanho 2!! //!//!0"$(+123.: caminho relativo a 'neto', nó corrente é

elemento <primo> na posição 3 (node-set tem tamanho 4)

 /

elemento

 filho

 primoneto

neto

 primo

 primo

 primo

Passos

!! Um caminho contém uma seqüência de passos

Page 209: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 209/298

8

U q p

!! Cada passo pode ter três partes!! um eixo: descreve a direção a ser tomada, e se

representa um namespace, atributo ou elemento!! ancestor, sibling, descendant, child, etc.

!! attribute, namespace

!! um teste: que seleciona um conjunto de nós!! nome do nó, tipo do nó

!! um predicado opcional: que reduz o conjunto com base

em características dos nós!! atributos, valores de atributos, posição

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

Eixos

!! Há treze eixos

Page 210: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 210/298

9

!! 11 para navegar entre elementos

!! 1 para navegar por atributos

!! 1 para navegar por namespace

!! Eixos que representam elementos!! ancestor, ancestor-or-self 

!!child, self, parent

!! descendant, descendant-or-self 

!! following, preceding

!! following-sibling, preceding-sibling

!! Eixo que representa um atributo!! attribute

!! Eixo que representa um namespace!! namespace

 Atalhos

!! Pode-se usar símbolos em vez dos nomes de alguns

Page 211: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 211/298

10

g

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

!! #"+,--   #"

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

!! &''*/01'"--2   $"

!! $3/+!-- (ausência de eixo)

!! Ex:!! %&'()**+'(&,"é a mesma coisa que +'(&, ou #!+'(&,"

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

!! ).-%./)2/34,54-.(+**/.3,"é o mesmo que !!/.3,"

!! 2335'673.**')"é o mesmo que $')"

!! 825./3**/,).01!+'(&,"é o mesmo que ##!+'(&,"

Testes (eixo::teste)

!! Um teste restringe os resultados de um eixo

Page 212: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 212/298

11

g!! !"#$%%&$'!()*!! qualquer nó (inclusive comentários, nós de texto e

instruções de processamento)

!! !"#$%%+*!! qualquer elemento, atributo ou namespace

!! Ex: ,--."/0-!%%+*(qualquer atributo)

!! !"#$%%nome!! Onde nome é o nome de um elemento, atributo ou

namespace

!!Ex:

12"3'%%-,/3!*(o elemento filho table)

!! Ex: 4!35%%-,/3!*(o elemento corrente é table)

!! Ex: 6,.!&-%%-,/3!*(o elemento pai é table)

Testes (2)

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

Page 213: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 213/298

12

'(!!

qualquer nó de texto!! !"#$%%*$++!,&'()

!! qualquer nó de comentário

!! !"#$%%-.$*!//",01",/&.2*&"$,'()!! qualquer instrução de processamento

!! !"#$%%-.$*!//",01",/&.2*&"$,'3456$3()!! instrução <?alvo ... ?>

!! Nem todos os eixos podem ser usados com estes

testes (ex: parent ou attribute não podem) 

Exemplos de passos simples

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

Page 214: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 214/298

13

*+ *+

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

!! ./0)'1&&)$)3)'1(  

!! 4)$5&&'(%)*+ ou 2  

!! !"#$%&&!(33)'1*+ ou !(33)'1*+,

!! .0)!)%#'674#8$#'6&&-,!! 5($$(9#'674#8$#'6&&'(%)*+,!! 5($$(9#'6&&)$)3)'1(,!! /'!)41(07(074)$5&&)$)3)'1(,

inclui elementos,comentários, etc.

apenas elementos

Predicados

!! Expressão XPath entre colchetes, com resultado booleano

Page 215: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 215/298

14

!! Usada para filtrar resultado de um passo!! Opera no contexto do node-set do passo

!! !"#$%&&'()*+,!"#$%&&+*-#)'./ ou '()*+,+*-#)'./!! Predicado será true() se existir astro/orbita

!! 0*+%1)+,20*3!+4567885./!! true() se produto tiver atributo preco contendo 1.99

!!0*+%1)+,'))*#-1)3&&9+:34;$#<*+;.='))*#-1)3&&0*3!+//!!  predicado restringe node-set produto (primeiro passo)

!! expressão (caminho de dois passos) retorna atributo preco

!! !"#$%&&>,0+(#)#+9?@/A4/$'()?@./!! 0*3!3%#9B&&9+%3?@,6./!! 0'*39)&&$#<*+,2#%#+:'450)5/C/2#%#+:'45395./!!

0'*39)&&9+%3?@,77=1('%+(.=!"#$%&&$#<*+,23-++D.,2#%4;EF8;./!!  predicado duplo (restrição do tipo 'and') no segundo passo

!!  pai de <livro> precisa estar dentro de um bloco <usados>

Exemplos de caminhos equivalentes

(1)

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

Page 216: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 216/298

15

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

!! 4$05$%4"%&/*#/0$+)''5"!-&6+*7!*0-&-*%89:;<!222222222222222225=-+4''0$5"*7!*0-&-*%89:><!22222222222225=-+4''!"#".#")*7!*0-&-*%89:;<2

!! !!5"!-&6+*7;<!0$5"*7><!!"#".#")*7;<2(3)

!! 0$+)''$+$?$%&*2@24$05$%4"%&''$+$?$%&*2!! AA$+$?$%&*22!! 4$05$%4"%&/*#/0$+)''$+$?$%&*2

(4)

!! !5=-+4''56#0*0!225=-+4''56#0*!225=-+4''&*!-5*0!225=-+4''-&$?7!*0-&-*%89:B<2

!! !56#0*0!56#0*!&*!-5*0!-&$?7B<2

Expressões booleanas (1)

!! Operadores de comparação

Page 217: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 217/298

16

p p ç!!!"#"$ igualdade

!! !"%#"$ diferença

!! !"&'()"$ a menor que b*

!! !"*"$"ou !"&+()"$ a maior que b*

!! !"&'()#"$ a menor ou igual a b*

!! !"*#"$ ou !"&+()#"$ a maior ou igual a b*

* Se não forem usadas dentro de um documento XML, as expressões podem ser escrita sem os escapes: a < b, a > b, a <= b, a >= b

Expressões booleanas (2)

!! Operadores booleanos

Page 218: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 218/298

17

!!!"#$%&'()&!"#$* E lógico

!! !"#$%&&+$&!"#$* OU lógico

!! (+,&-!"#$!..'+/ Negação

!! ,$0!-/& verdadeiro

!! 1'2.!-/& falso

Funções de node-set

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

Page 219: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 219/298

18

!! conta o número de elementos de um conjunto

!! exemplos:!! !"#$%&'()*$%++,- retorna 1 (um pai)

!! !"#$%&!./01++,- retorna no. de filhos

!! 0(2%&-3!! Retorna o número com a posição do último elemento do

conjunto de nós correntes

!! '"2/%/"$&-3!! o número com a posição do nó corrente dentro do

conjunto de nós correntes

Funções do nó de contexto

!! !"#$!"$%&

Page 220: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 220/298

19

!!retorna um identificador unívoco 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

Expressões numéricas

!! !"#"$   soma

Page 221: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 221/298

20

!! !"%"$   subtração!! !"&"$   multiplicação

!! !"!"#$$ divisão

!! !"%&!$$  resto

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

!! *+&&''()*+(,,-./ piso (arr. p/ baixo)

!! ,-"+").'()*+(,,-./   teto (arr. p/ cima)

!! /(%'!0"$0"1110"2/" somatório

Expressões de string

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

Page 222: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 222/298

21

!! concatena vários strings!! &'(&%)*#+!"#$&',*,-,.&'/,0+'

!! retorna um fragmento do string procurado

!! &'(&%)*#+,$-%.)!"#$&'"#$123"-45.+'!! começa no fim de str e termina depois de str_buscado

!! &'(&%)*#+,(.-").!"#$&'"#$123"-45.+'!! começa no início de str e termina antes de str_buscado

Expressões de string (2)

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

Page 223: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 223/298

22

!!remove espaços em branco desnecessários e removeespaços antes e depois (trim)

!! .#%!+&%.)!"#$'&"#$()*"+,-.'&"#$("*)"#/#%&!! troca todas as ocorrencias de str_buscado com

 str_substit em str

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

!! retorna um string contendo num, formatado de acordo

com a máscara (e opcionalmente de acordo com o

locale especificado)

Expressões de teste de string

!! Retornam valor booleano

Page 224: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 224/298

23

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

!! Retornam inteiro

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

 XML: uma introdução prática  X100

Page 225: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 225/298

1

Helder da Rocha ([email protected])

 Atualizado em março de 2007

Fundamentos de transformação

!  A transformação XSLT é realizada sobre a árvore de um

documento fonte

Page 226: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 226/298

2

documento-fonte!   A localização dos nós é feita com XPath

!  Todos os nós do documento são acessíveis

!  Pode-se transformar qualquer documento-fonte XML em outro

tipo de documento!  HTML ou texto

!   XML (qualquer formato)!  XSLT é uma linguagem de programação completa

!  Ou seja, é complexa e não se aprende em um dia

!  Este curso apresentará fundamentos* do XSLT e exemplos

!  A transformação XSLT pode acontecer dinamicamente ao

carregar um documento XML com um XSL vinculado!  Pode também ser usada para gerar um arquivo independente

* Para uma abordagem mais profunda de XSLT, veja o curso e tutorial X300, que explora os

 temas abordados aqui na prática e em mais profundidade com carga-horária de 24 horas)

 Alternativas para geração de HTML ou SVG 

!  Geração prévia no servidor

Page 227: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 227/298

3

!  Geração durante carga no browser (limitado)

Servidor  Cliente

 XML

 XSL

HTML

CSS

Página 

CSS

Servidor  Browser 

 XML

 XSL

 XML

 XSL

CSS

Página 

CSS

Uso de um XSLT no browser

!  Para que o documento seja transformado ao ser carregado,

vincule o a uma folha de estilos XSL com <?xml stylesheet>

Page 228: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 228/298

4

vincule-o a uma folha de estilos XSL com <?xml-stylesheet>

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

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

,,,,,,,,,,,,,,,,,()7*23(*#(8#'%3,+.*923'0%:;<=>?:5#'%3,"@,

!*+*;($<=*;(%<):&

&&&&!3(-;),:&&&&&&&&&!+$<5($&>)(?./*@-15+?/&A:&

&&&&&&&&!(*;)(%<&-,$(./B,%/&4+<$(;),C$./0D92222/&A:&

&&&&!A3(-;),:&

&&&&!,)E+;<&)<+,F(4GH./21D7I/:&

&&&&&&&&!J%<-(;<&+4./J0/&-,$(./F()3K)+,/&4+<$(;),C$./L7I9/:&

&&&&&&&&&&&&!+$<5($&>)(?./$()3@)M1NJ5/&A:&

&&&&&&&&!AJ%<-(;<:&&&&&!A,)E+;<:&

111&

Transformação standalone

!  Para fazer uma transformação permanente,

Page 229: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 229/298

5

 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 programação para processar XML

Processador 

XSLT

Fonte XML

Estilo XSLT

Resultado

(XML, HTML, Texto)

Transformação XSLT em Java* (TrAX)

!  Inicialize o ambiente (DocumentBuilder, pacotes, etc.) 

! Carregue o arquivo-fonte em uma árvore DOM

Page 230: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 230/298

6

  Carregue o arquivo fonte em uma árvore DOM

!  Inicialize a árvore DOM do arquivo resultado

!  Crie os objetos (e crie um InputStream com a folha XSLT)

!  Inicialize o transformador XSL

!  Faça a transformação

!  A árvore DOM resultante está em resDocument

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

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

7$5)28"$6&$95%4"$:'48'('7$5)28"$6&$95%4"$:;)&*<)245)%&./0'7$5)28"$6&$'4'('48;)&*7$5)28"$6&$.!.#$-0#)/0''

4;4$5)28"$6.!"#$%&'()='').&#-/0''

+"%#6&)4'+%(&"),-''''('>#?3@&$;A5$2&.B8?3&CDDD8")4&;E63B/0'''

+"%#6&)4'')./%(&"),-'('>#?3@&$;)&*+"%#6&)4./0'''

* Veja código completo em exemplos/Java/TransformaXSLT.java 

Transformação XSLT em C#

!  Importe System.Xml.XPath e System.Xml.Xsl

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

Page 231: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 231/298

7

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

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

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

!  Inicialize o processador com a folha de estilos-".341$"564+&!"#$%&'"()"*7&$*8&-".341$"564+9:/&

!"#$%&'"()",;61<9=*")#.6,>".=:/&

!  Inicialize fluxo de saída-+.3*>)?4#)*4&+",!)"*7&&

&&&&&&&&$*8&-+.3*>)?4#)*49=4*"!.)1<6,"@%=:/&

!  Obtenha fontes para transformar-01)2A6B!+*$)&-'./()$!*7&$*8&-01)2A6B!+*$)9=56$)*,>+.=:/&

!  Realize a transformação

!"#$%&'"()",341$"564+9-'./()$!C&$!..C&+",!)":/&

Transformação XSLT em PHP5

!  Inicialize o processador!"# % &'( )*+,-./0'**/.123

Page 232: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 232/298

8

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

!  Crie um objeto DOM para o documento da folha de estilos eimporte para o processador!"#$%&'%$&'($4/54/065'&,3$

!"#$%&'78+/9:1;'*,<+/="*+;23$!"#78<5#/.,>,?+'*@'',1!"#$%&'23$

!  Crie um objeto DOM para o XML fonte!(')*+",$-%$&'($4/54/065'&,3$!(')*+",$78+/9:1;9.A6<B/="5+;23$

!  Passe parâmetros se precisar!  !"#78*',-9.95','.1;#9.95C;D$;B9+/.;23$!  !"#78*',-9.95','.1;#9.95E;D$;B9+/.;23$

!  Faça a transformação!  !."#*&$/('-%$!"#78,.9&*F/.5G/)HI1!(')*+",$22$

!  O documento resultante está em $resultado

Transformação XSLT em Objective-C 

!  Importe as bibliotecas libxml2.2.dylib e libxslt.dylib*

!  Inicialize o processador

Page 233: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 233/298

9

p

!"#$%&'()*!"#$%&'(+*&)(*+"+*,&)-"#,*&)(*+"...-*!.#('/).01(2#0.300(45#066&%7.(*!"#83/)*9:*

;/0&)(*+"12)+0.&1()57<=.57<>7&%?57<@*A1=B4C1()57<>7&%?57<D:,*

!"#$%&'(.-*!"#'/).045#066&%7.(*!"#83/)*9:*

;/03"'(&12%+0..&1()57<=.57<>7&%?57<@*A1=B4C1()57<>7&%?57<D:,*

!  Realize a transformação,&)-"#.-*!.#(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 objetosN)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

Como rodar o processador

!  Para este curso podemos processar XSLT de duas formas

! Através da ferramenta usada no curso (Eclipse Oxygen XML Spy JEdit)

Page 234: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 234/298

10

!   Através da ferramenta usada no curso (Eclipse, Oxygen, XML Spy, JEdit)

!   Através de linha de comando (usando Saxon ou outro processador)

!  Saxon 9: baixe em saxon.sourceforge.net (use saxon9he.jar)

!  Voce deve ter um ambiente Java habilitado para execução de aplicações

em linha de comando

!  Exemplo de uso!"#"$$%&'$(")*+,-./!"0$+.1/(2/(")*+/30"+(2*04$%1$$$$$5$

$$ $%(62*+1./)47$%)(76.(187*/)(7$%*60.(971":*/-147$

!  Para passar parâmetros

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

$$ $$$ $%(62*+1./)47$%)(76.(187*/)(7$%*60.(971":*/-147$$$5$

$ $$$$$'"0"4;<=#"7*0;=$$$$5$

$$$$$$$'"0"4><=#"7*0>=$$$$$

Hello World

!  Suponha que seu documento-fonte contenha o

Page 235: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 235/298

11

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

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

(((!*#?6)&%2@"%(-"AB%!>*#?6)&%2(

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

! Nós para seleção em XPath!  >"#$%&"'#>C)* ( ( ( ( ( (-./01(

!  >"#$%&"'#>%$)3#4 ( ( ( ( (<)%(*#(="&#)$%(

!  >"#$%&"'#>%$)3#4>C5"$6)*" ( (789:;(

!  >"#$%&"'#>*#?6)&%( ( ( ( (@"%(-"AB%(

Uma regra de template

!  O seguinte template poderia extrair seus dados

Page 236: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 236/298

12

!"#$%&'()*%+'(!)+',-./+(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!

O resultado

!  O resultado será

Page 237: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 237/298

13

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

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

!!!!<=>?!

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

!!!!B&)!0&76)C"D#$!!

Caminhos vs. Padrões

!  Templates usam padrões XPath ( match ) no lugar

Page 238: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 238/298

14

de caminhos (  select )!  Caminho:!"#$%&'%#()%*)+,-$#.&(

!  Padrão:!/*)01/*&2()$"&1%2)01,-$#.&(

!  Na árvore ao lado, se o nó de

contexto for 34&11#)15(!  o caminho devolverá um conjunto vazio

!  o padrão devolverá um conjunto de três nós

!"##$%#&

!"##$%&

'$("&

!"##$%&

'$("&

!"##$%&

'$("&

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

Exemplos de padrões/caminhos

!  Atributos XSLT match, recebem padrões para

Page 239: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 239/298

15

instanciar templates:!  !"#$%&'()$*&'+!"#$%,-*.&/0-1+222+!  !"#$%&'()$*&'+!"#$%,-$340/55)*637*89:;-1+222+

!  Atributos XSLT  select e test, usados dentro dos

templates, recebem caminhos:!  !"#$%4*$.'</=+&'('$#,-225$340/5&3&.$/-+51+!  !"#$%=/0<'*>?+&'('$#,-@7.('0/-+1+222+!  !"#$%3=+#'&#,-7/&A&3&.$/B-1+222++

Cabeçalho e <xsl:stylesheet>

!  Todos os elementos de uma folha de estilos são

Page 240: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 240/298

16

definidos dentro de <xsl:stylesheet>!  O esqueleto básico para uma folha de estilos é

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

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

*****"+$,#%"#$-.)&&/%0011121324560788809:;0<5=,#>45+.*******?(5#@4,-.72A.B*

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

<xsl:template> e uma folha de estilos básica

!  Uma folha de estilos básica possui um ou mais

Page 241: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 241/298

17

templates!  Boa prática é ter um template para cada nó que envolver

transformação: divide a complexidade!"#$%&'()*+,-./012/&(-3,4+-5./6789:/";&

!#*%<*=>%(*?((=&#$%-*<#*%./?==@<AABBB1BC1,)5A0DDDAEFGA7)H-*I,)$/&

'()*+,-./012/;&

&&&&!#*%<=($@%H=(&$H=3?./A/;&

&&&&&&&&!=HJ%(;!#*%<H@@%>9=($@%H=(*&A;!A=HJ%(;&

&&&&!A#*%<=($@%H=(;&

&&&&!#*%<=($@%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#*%<*=>%(*?((=;&

 pessoas

 pessoa pessoa

 /

Outro exemplo

!  O processador irá navegar pela árvore!  Deve haver um template para cada nó a ser transformado!

Page 242: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 242/298

18

! Não é necessário que haja um template para cada nó (senão houver, ele é executado por default sem transformação)

!"#$%#&'$(#)((&*+(,#-./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

Uso do template com <xsl:apply-templates>

!  <xsl:apply-templates /> processa todos os filhos(inclusive nós de texto)

Page 243: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 243/298

19

(inclusive nós de texto)!  Se algum elemento filho combinar com o match de um

template existente, esse template será processado!  Se algum template não tiver um <xsl:apply-templates> o

 processamento da árvore irá terminar

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

!#*%<*=>%(*?((=&#$%-*<#*%./?==@<AABBB1BC1,)5A0DDDAEFGA7)H-*I,)$/&&&&&&&&&&&&&&&&&&'()*+,-./012/;&

&&&&!#*%<=($@%H=(&$H=3?./A/;&

&&&&&&&&!J,4>;!#*%<H@@%>9=($@%H=(*&A;!AJ,4>;&

&&&&!A#*%<=($@%H=(;&

&&&&!#*%<=($@%H=(&$H=3?./@(**,H/;&

&&&&&&&&!@;!#*%<H@@%>9=($@%H=(*&A;!A@;&

&&&&!A#*%<=($@%H=(;&

&&&&!#*%<=($@%H=(&$H=3?./%K5H)/&A;&

Todo conteúdo daárvore lugar seráomitido!

O nó pessoas, que nãotem um templatetambém seráprocessado!

 /

 pessoas

 pessoa lugar

<xsl:apply-templates> com select

!  O atributo select pode ser usado para o <xsl:apply-

 templates> pular a outro nó da árvore fonte

Page 244: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 244/298

20

p p f!   As expressões XPath dentro dos elementos select são consideradas no

contexto dos nós selecionados pelo match do template onde ocorrem

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

!#*%<*=>%(*?((=&#$%-*<#*%./?==@<AABBB1BC1,)5A0DDDAEFGA7)H-*I,)$/&

'()*+,-./012/;&

&&&&!#*%<=($@%H=(&$H=3?./A/;&

&&&&&&&&!J,4>;!#*%<H@@%>9=($@%H=(*&*(%(3=./@(**,H*A@(**,HK&A;!AJ,4>;&

&&&&!A#*%<=($@%H=(;&

&&&&!#*%<=($@%H=(&$H=3?./@(**,H*/;&

&&&&&&&&!4+';!#*%<H@@%>9=($@%H=(*&A;!A4+';&

&&&&!A#*%<=($@%H=(;&

&&&&!#*%<=($@%H=(&$H=3?./@(**,H/;&

&&&&&&&&!@;!#*%<H@@%>9=($@%H=(*&A;!A@;&&&&&!A#*%<=($@%H=(;&

!A#*%<*=>%(*?((=;&

Contexto é "/"

Geração de texto com <xsl:value-of>

! <xsl:value-of> pode ser usado para gerar texto a

Page 245: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 245/298

21

 partir de dados do documento-fonte!  Converte todo o conteúdo para texto

!  Expressão XPath é relativa ao nó corrente.

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

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

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

!  No exemplo acima, select seleciona qualquer nó que

contenha o string contxt/elemento

!  Use "." para valor de elemento corrente

!  Use "/" para usar caminhos absolutos

Criação de texto com <xsl:text>

! <xsl:text> pode ser usado para gerar texto

Page 246: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 246/298

22

estático, formatar a saída, etc.!  Preserva espaços, novas-linhas e tabuações!  Útil para controlar forma de impressão do texto

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

!!!! ! !"#$%&'(#'012(34+!%56-+!7(*85$!

"9#$%&'(#'0!!

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

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

!!!! ! !"#$%&'(#'0;<8!=2(34+!%56-+"9#$%&'(#'0!!

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

Regras de template nativas

!  Várias regras de template estão embutidas! Pode-se re-declará-las localmente para mudar o

Page 247: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 247/298

23

  Pode se re declará las localmente para mudar o

comportamento default

!  1. Processamento da raiz e todos os elementos

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

!  2. Processamento de atributos e nós de texto++ +!"#$%&'()$*&'+(*&,-./&'"&67180/3+++++ +!"#$%9*$:'5;<+#'$',&./=/23++ +!2"#$%&'()$*&'3 

!  3. Processamento de texto

!"#$%&'()$*&'++++++++(*&,-./)>;,'##?@A5?@#&>:,&?;@671,;(('@&67/23 

<xsl:attribute>

!  O elemento <xsl:attribute> permite criar atributos

Page 248: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 248/298

24

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!

 Attribute value templates

!  Em vez de usar <xsl:attribute> para criar os

Page 249: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 249/298

25

atributos dinâmicamente, é possível usar umasintaxe especial!  !"#$%"&&'()*

!  Sintaxe chamada de “atrribute value templates”

!  As chaves consideram o valor da expressão resolvida!  É usada dentro de atributos 

*+#&,-."/$,0."*/0.1234,56748*

****+0*2%"934!:%"9"48*

****+#&,-;0,<"=(9*&","1.34>4*?8+?08*

**+?#&,-."/$,0."8*

<xsl:element>

!  Assim como é possível criar atributos, é possível criar

<xsl:element>

Page 250: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 250/298

26

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!

<xsl:sort>

! Ordenação!

Page 251: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 251/298

27

!  Aplica-se a cada nó do conjunto de nós docontexto. Use dentro de <xsl:apply-templates>

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

...!"#$%#/0*.#+$+1*2341/567/3.8-.

...!"#$%9&$:+)/;.#+$+1*23<3.8-.!8"#$%&''$()*+,'$&*+#-.

! Para ordenar números use o atributo 5&*&)

*('+23=:,>+03.(default é ordem alfabetica)

Criação de comentários

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

Page 252: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 252/298

28

! Insere um comentário

!  !"#$%/0'&)##1*231*#+04&+1'*-*5()675$8'7,----&'*+)9:'-!."#$%/0'&)##1*231*#+04&+1'*,-

!  Insere uma instrução de processamento

Cópia rasa <xsl:copy>

! <xsl:copy>!  Usado para copiar o nó corrente (no contexto do template)

Page 253: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 253/298

29

 para o documento-resultado!  Não copia atributos, filhos

!  Copia apenas elemento e namespace

!  Para copiar árvore inteira, precisa ser chamado

recursivamente via <xsl:apply-templates>

!"#$%#&'$(#)((&*"+$,#%"#$-.)&&/%0011121324560788809:;0<5=,#>45+.******************?(5#@4,-.72A.B*

****!"#$%&(+/$=&(*+=&C)-.0*D*E.B*********!"#$%C4/'B*************!"#$%=//$'F&(+/$=&(#*0B*

********!0"#$%C4/'B*****!0"#$%&(+/$=&(B*

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

Oferece controle sobre o

que deve ser incluído na

cópia (no match dotemplate)

Cópia completa <xsl:copy-of>

!  <xsl:copy-of select=“expressão”>!  Copia coisas (árvores, texto) para a árvore resultado

Page 254: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 254/298

30

p ( , ) p

!  Se o select identifica um nodeset, todos os nós do nodeset

são copiados para a árvore resultado

!  O nó é copiado por completo (inclusive com atributos,

instruções de processamento, etc.)

!  Exemplo: XSLT que copia a entrada na saída:!"#$%#&'$(#)((&*"+$,#%"#$-.)&&/%0011121324560788809:;0<5=,#>45+.**

****************?(5#@4,-.72A.B*

****!"#$%&(+/$=&(*+=&C)-.0.B*

********!"#$%C4/'D4>*#($(C&-.2.0B*

****!0"#$%&(+/$=&(B*

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

Não controla o que deve ser

incluído na cópia (copia o nó

inteiro)

Blocos condicionais: <xsl:if> e <xsl:choose>

!  Há dois tipos de blocos condicionais em XSLT 

Page 255: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 255/298

31

!  <xsl:if> processa o conteúdo se a expressão resultar true()

!  <xsl:choose> é um bloco do tipo “case” ou “if-elseif-else”

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

!"#$%+,--#.*-

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

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

------,-

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

---.&#/0*!2"(17#"+-,-.5&#/0*!2"(17#"+-

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

Exemplos de <xsl:if>

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

+++!"#$%12+&'#&./34*153'$'('6&7321$-78)7#1&1769:++

++++++++++++++++++++++++.+$*#&9:+74+;*&&48<.=*$&*=>>/0+++++

Page 256: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 256/298

32

9: ; 8 >>++++++!"#$%?*$@'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+

Exemplo com <xsl:choose>

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

Page 257: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 257/298

33

+++++!"#$%,')-+.)#./0112&344(56-(7(/8.49)8:0*++111+

+++++!2"#$%,')-*+

+++++!"#$%,')-+.)#./0112&3#30*+

+111+

+++++!2"#$%,')-*+

+++++!"#$%,')-+.)#./0112#3$34;(2.)".<=+>?.@+ABBBB0*++111+

+++++!2"#$%,')-*+

+++++!"#$%(.')4,;#)*+

+111+

+++++!2"#$%(.')4,;#)*+

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

Valores booleanos em XPath

!  Em XPath:!   true   elemento chamado true (ou child::true )

Page 258: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 258/298

34

!  'false' string contendo o texto ‘false’!   true() valor booleano true

!  É fácil cometer erros primários!"#$%&'()*#)+,!"#$,-.!/"#$%&'-(

! O bloco somente é processado se existir um elemento <true> nocontexto do teste ( nodeset vazio = false() )

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

!  O bloco sempre é processado porque o string 'false' tem mais de

 zero caracteres ( string vazio = false() )!"#$%&'()*#)+,

!"#$)*+123(

,%&'($,+45(

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

!  O bloco sempre é processado porque o valor booleano true() éverdadeiro e o string 'false' não é vazio

Looping com <xsl:for-each>

!  Permite processar um conjunto de nós dentro da mesma regra

de template (sem recursão)

Page 259: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 259/298

35

!  !"#$%&'()*+,-.#*$*,/01*"2(*##3'14..555.!6&'()*+,-4.

!  O atributo select recebe uma expressão XPath que retorna um

node-set.!  O node-set é a lista de nós correntes

! O nó sendo processado a cada repetição é o nó corrente

!  O conteúdo de <xsl:for-each> está no contexto do nó corrente

!  Exemplo.. .!"#$%/*72$+/*.7+/,-01!"#$%14..... .&'(!)*%$+,-./0(,!,.123.-4"15!%36.

........ .!"#$%8+$9*)'&.#*$*,/014%("1"%7891.64.

........ .!"#$%/*"/45.!6"#$%/*"/4.

........ .!"#$%8+$9*)'&.#*$*,/011"15!%1.64.

0000 0&:'(!)*%$+,-./6.. .!6"#$%/*72$+/*4.

Node-set com nós correntes

Nó de contexto

Nó dentro docontexto do nócorrente

Posição do nó

corrente dentroda lista de nóscorrentes

<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

Page 260: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 260/298

36

!  O atributo select é uma expressão que retorna o valor associado ao nócorrente que será usado como critério de ordenação

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

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

++++++++,-'./'*0)+'%.%$)123#%4%52+67+

++++++++!"#$%5*$6'421+#'$',&./3#%4%5/+70+

++++++++!"#$%&'"&0%+!7"#$%&'"&0+++++++++!"#$%5*$6'421+#'$',&./8/+70+

++++!7"#$%1234'*,-0+

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

!  Pode haver mais de um <xsl:sort>,

com outro select, para ordenar

 por outros campos associados aonó corrente

assunto

@dewey

indice

assunto

@dewey

texto texto

Nós correntesNó de contexto

String usadona ordenação

005.133 920.4

Variáveis <xsl:variable>

!  Podem ser!  Locais: definidas dentro do escopo de uma uma regra de template,

Page 261: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 261/298

37

bloco <xsl:for-each>, etc.!  Globais: definidas no primeiro nível, 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,

Exemplos com <xsl:variable>

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

****!"#$%-./0.1$(*2.3(45&0&6$75,8($.&9/07*:(*#(/-0;7#*</(#&.:7#!="#$%-./0.1$(,*

****!"#$%-./0.1$(*2.3(45$7>7&0<75,)&&<%==???+.+@73=03.>(3=$7>7+<2>!="#$%-./0.1$(,*****!"#$%-./0.1$(*2.3(45@##5,/($.&7/07AB@##+"3$!="#$%-./0.1$(,*

Page 262: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 262/298

38

****!"#$%&(3<$.&(*3.&@)45=5,*

********!)&3$,*

************!)(.:,!&0&$(,C/>7*D.-0#%*!"#$%-.$6(E7F*#($(@&45G&0&6$75=,!=&0&$(,*****************!"#$%@7<'E7F*#($(@&45:7@63(2&HG@##I5=,*

************!=)(.:,*

************!17:',*

****************!03>*#/@45JG$7>7&0<7K5*=,*

****************!)A,!"#$%-.$6(E7F*#($(@&45G&0&6$75=,!=)A,**!"""!

*!"#$%&(3<$.&(*3.&@)4502&(/-.$75,*

********!"#$%-./0.1$(*2.3(45&7&.$5*#($(@&45GF03*E*G020@075*=,*

********!"#$%-./0.1$(*2.3(45)7/.#5*#($(@&45F$77/HG&7&.$*:0-*LMI5*=,*********!"#$%-./0.1$(*2.3(453026&7#5*#($(@&45G&7&.$*E*HG)7/.#*N*LMI5*=,*

********!<,O2&(/-.$7%*!"#$%-.$6(E7F**

**************************#($(@&45@72@.&HF7/3.&E2631(/HG)7/.#P*QMMQIP**

*****************************************Q%QP*******************************************F7/3.&E2631(/HG3026&7#P*QMMQII5*=,!=<,*****!="#$%&(3<$.&(,!

<xsl:variable> é uma constante

!   Apesar do nome do elemento sugerir o contrário, não é possível mudar o valor

de uma variável. Isto não funciona:

Page 263: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 263/298

39

!   A solução é realizar operações dentro de <xsl:variable> que produzam ovalor final em um <xsl:value-of>. Por exemplo:

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

!!!!!"#$%&'()'*$+,-'.+/0.+-#'1+.0,#+$+45/02.+-#'1+-#267(5818+#023!

"7#$%&'(6!

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

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

"7#$%&'(6!

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

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

!!!!!!!!"#$%&8/%9*:;(!$*%*<)+,7.*0$/1*0$74;=)919*$,76!

!!!!"7#$%&'(6!

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

!!!!!!!!"#$%&8/%9*:;(!$*%*<)+,7.*0$/1*0$7'01%*$,76!

!!!!"7#$%&'(6!

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

Exemplos com <xsl:variable>

"01'(23+%4!)0%%0$./;OPEQEEQQ/!=5!

Page 264: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 264/298

40

!"#$%&'()*%+'(!)+',-./01'(23+%4/5!!!!!!!!!"#$%&3+20+6%(!1+)(./$(78194$/!$(%(,'./:)0%%0$!903!;<<</!!=5!

!!!!!!!!">?!@42)+'+!--&))&$$!+!*+2'02!9(!'()*4!()!$(78194$!AA5!

!!!!!!!!"#$%&3+20+6%(!1+)(./@42)+'+94/5!

!!!!!!!!!!!!"#$%&3+20+6%(!1+)(./')*B42+/!$(%(,'./C$(78194$!903!DE<</!=5!

!!!!!!!!!!!!"#$%&3+20+6%(!1+)(./-42+/!$(%(,'./@%442FC')*B42+G/!=5!

!!!!!!!!!!!!"#$%&3+20+6%(!1+)(./')*H01/!$(%(,'./FC')*B42+!A!C-42+G!I!E</!=5!!!!!!!!!!!!!"#$%&3+20+6%(!1+)(./)018'4/!$(%(,'./@%442FC')*H01G/!=5!

!!!!!!!!!!!!"#$%&3+20+6%(!1+)(./$(78194/!!!!!!!!!!!!!!!!!!!!!!!!!!!!$(%(,'./@%442F!FC')*H01!A!C)018'4G!I!E<G/!=5!

!!!!!!!!!!!!"#$%&3+%8(A4@!$(%(,'./,41,+'F@42)+'A18)6(2FC-42+J!K<<KGJ!K&KJ!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@42)+'A18)6(2FC)018'4J!K<<KGJ!K&KJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@42)+'A18)6(2FC$(78194J!K<<KGG/!=5!

!!!!!!!!"=#$%&3+20+6%(5!

!!!!!!!!"*5L82+MN4&!"#$%&3+%8(A4@!$(%(,'./C@42)+'+94/!=5"=*5!

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

Subrotinas com <xsl:call-template>

!  Templates podem ser usados como subrotinas!!  Ao definir um <xsl:template>, em vez do atributo match,

b

Page 265: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 265/298

41

use o atributo name:!"#$%&'()$*&'+!"#$%&'()#"*")&,+

---+.'/.*#+)*.*+01.(*&*.+

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

!  Templates sem match não são chamados automaticamente

durante o processamento de nós!  Templates com name podem ser chamados de dentro de

outros templates, de definições de variáveis, etc.

!  O valor retornado pelo template substitui a chamada

!  Use <xsl:call-template> para realizar a chamada

de templates pelo nome!  !"#$%+",,-*$#.,"*$/3*('45'()#"*")5+2,+

Parâmetros <xsl:param>

!  Parâmetros são quase o mesmo que variáveis

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

Page 266: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 266/298

42

!!"#$%&'&("#$%&'(#)%&3(2444!5/+,60$1$%2"

444"

!/+,67$,8&9):"+&,&-.'(;#)%&*("52"

!$"#$%&'(<=;#)%&3>(2!5$2"

!  São semelhantes a variáveis, mas diferem um pouco:!  <xsl:variable> recebe o valor (resultante da expressão XPath) como

constante (não aceita outro valor); o select ausente (e elemento vazio)

equivale a um string vazio.

!  O select de <xsl:param> é opcional pois pode ser atribuído através de

chamadas <xsl:call-template> e <xsl:with-param> ou, se for global, através de parâmetros passados externamente.

<xsl:param> e <xsl:with-param>

!  <xsl:with-param> permite definir parâmetros em um template

que são repassados ao template que chamá-lo

! Ch d d l

Page 267: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 267/298

43

!  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 não 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!

Exemplos com <xsl:call-template>

!!!"

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

++++++++!"#$%)*0*(+,*('-.&1('5&01,6.+74+#$%%"&&'(('))"%%*"

Page 268: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 268/298

44

""""""""#+),'-./0.1,2"3.(245&6/.5""

" """""" ")2,27845)91)8/03:%12;6/2<=80(2>8/03:?"@'@A5"B*"

""""""""#+),'-./0.1,2"3.(2458(CD03>275""

" " ")2,27845)91)8/03:%.;82/<=80(2>8/03:?"@'@A5"B*"""""""""#+),'-./0.1,2"3.(245(039865""

" " ")2,27845)91)8/03:%12;6/2<=8(CD03>27?"@'@A5"B*"

""""""""#+),'-./0.1,2"3.(245)2:93E65""

" " ")2,27845)91)8/03:%.;82/<=8(CD03>27?"@'@A5"B*"

""""""""#+),'-.,92%6;")2,27845=&6/."F"GHII"J"=(03986"F"HI"J"=)2:93E65"B*"

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

#+),'-./0.1,2"3.(245)2:93E6)5*"

+++++++!"#$%8*$$9&'()$*&'+,*('-.,/0(*$12'31('.4+++++++++++++!"#$%:1&;9)*0*(+,*('-.&1('5&01,6.+#'$'8&-.8*()/#.+74+

+++++++!7"#$%8*$$9&'()$*&'4"

#B+),'-./0.1,2*"

!!!"

<xsl:call-template> recursivo

!"#$%&'()$*&'+,*('-./*$/0$*123&*$.4!+++!"#$%)*1*(+,*('-./*()3#501*/*3.+64++

+++!"#$%)*1*(+,*('-.#'70,83#.+64++++!"#$%)*1*(+,*('-.9*$31:,;.+#'$'/&-.<.+64+

! $ . & 8 . $ & .=. 64

Page 269: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 269/298

45

+++!"#$%)*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!

Debugging e <xsl:message>

!  O elemento <xsl:message> pode ser usado para imprimir natela durante a execução do processador

! É

Page 270: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 270/298

46

!  É uma boa ferramenta para debugging!  Pode-se usá-la para imprimir valores esperados enquanto se testa a

aplicação!  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+

Carregar arquivos externos com document()

!  Função XPath (extensão XSLT): document(uri)!  carrega um documento XML externo e retorna um node-set contendo a

i d d t

Page 271: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 271/298

47

raiz do documento!  Seleção de um documento externo

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

)*+&,!&-./%0*10-12--

!  Constante para representar documento

!"#$%3&45&6$+-7&,+/0("(0----------------#+$+.*/0!"#$%&'()*,./%0*23410-12--

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

!  Seleção de nó em documento encontrado em nó de arquivo-fonte!"#$%&''$()*+,'$&*+#----

--------------#+$+.*/0!"#$%&'()4,4611"9:&/;<=>0-12-!  XSLT 1.1 possui <xsl:document> com recursos adicionais

nó inicial

Fusão de documentos-fonte

!  É possível, com document(), gerar um resultado a partir demúltiplos documentos de entrada

!"# % %'( *+,-%#*. !"# % %'( *06 #*.

!,6A71B(%.&

' *+ - *

02-A%6/*+"#$%&

Page 272: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 272/298

48

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

&&/(0121,&3&

!4"#$%.&

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

&&/(0121,&5&

!4"#$%.&

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

&&/(0121,&8&

!4"#$%.&

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

&&/(0121,&9&

!4"#$%.&

!"#$%&

'"#$%&

("#$%&

)"#$%&

!:,;#.&

&&!+(-<#6.3=>?-!4+(-<#6.&

&&!+(-<#6.9=>?-!4+(-<#6.&&&!+(-<#6.5=>?-!4+(-<#6.&

&&!+(-<#6.8=>?-!4+(-<#6.&

!4:,;#.&

*+,-"#$%&./01+0234+5627&

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%@<&

&&&&&&&8#-%9,+C:3+4&-2%2,6?@"@&B<&&&&&&8B#-%94+032/,;<8B/0DA=1+-<&

&&8B#-%962$C%/62<&8B#-%9-6:%2-;226<&$20E2"#-%&

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

&&&&/(0121,&3&&&!4"#$%.&

===&

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

&&&&/(0121,&8&

&&!4"#$%.&!4,6A71B(%.&

 generate-id(expressão)

!  É uma função XPath do XSLT (extensão)!  Gera um id unívoco para um conjunto de nós.

Page 273: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 273/298

49

!  Cada vez que generate-id() for chamado em um nó, gerasempre o mesmo id.

!  Pode receber como parâmetro a expressão XPath ouaplicar-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-

Indexação por chave unívoca <xsl:key>

!  Define um índice com três atributos

!  Sintaxe

Page 274: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 274/298

50

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

!  name: nome do índice

!  match – expressão XPath que descreve os nós a serem

indexados

! use – expressão XPath que define a propriedade usada paracriar o índice.

!  Exemplos!  !"#$%&'()*+,'-.3$+*'0+#.),+012-.3$+*'0+.))))))))) )7#'-.!"#$%.)98)

!  !"#$%&'()*+,'-.+#05/#.)))))))) ),+012-.3$+*'0+:+#0'5/;4':#+0'$;0'.)))))))) )7#'-.!&'($%)*#+$.)98)

 Acesso a chave unívoca: key()

!  Função XSLT que referencia uma relação definida com um

elemento <xsl:key> 

! Sintaxe:

Page 275: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 275/298

51

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

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

retorna um node-set que contém todos os elementos

<planeta> do documento que tenha um atributo nome igual

a Jupiter

Desafio: agrupamento

!  Como ordenar o documento-fonte abaixo por grupos? !   Agrupar por área, ordenar áreas, ordenar cursos (códigos) por área

!"#$#%&'&()

!"*+,& "&-.'&/012340 #+5#/01#6#0(78$5+9+.,5 1#6# :5#8,!;.$5<(

Page 276: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 276/298

52

!  Este é resultado esperado. Como fazer? 

))))!"*+,&)"&-.'&/ 1234 )#+5#/ 1#6# (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$!;"*+,&()

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

!IJ<%)65+,.&8/0EK40)58"&-.8'/0LMNOP0I()

!-%()

))))!-$(1#6#!;-$()

)))) )!--(1234Q)78$5+9+.,5)1#6#):5#8,!;--()

))))!-$(G5A!;-$()

)))) )!--(GH44Q)1#6#@"+.9$!;--()

))))!-$(=>?!;-$()

)))) )!--(=EF4Q)=>?)@"D5<#!;--()

)))) )!--(=244Q)@"#%#A%5)B5"$&+)C+#9D.",!;--()

!;-%()

Como agrupar um item por grupo

!   XSLT 1.0 não oferece uma solução simples (existe em XSLT 2.0)

!  Esta é melhor técnica em XSLT 1.0 ("método Münch"): 

1 Crie uma chave <xsl:key> para indexar o item que será agrupado com

Page 277: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 277/298

53

1.  Crie uma chave <xsl:key> para indexar o item que será agrupado, combase no grupo (elemento ou atributo usado para agrupar o item )

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

 2.  Crie um <xsl:for-each> com a seguinte expressão select:

4,-&.01&#&2$)&345657!'!1&#&2$)&3456!8&966()*+&6:!/012370;<!7<!

3.  IDs gerados do mesmo nó são sempre idênticos. A expressão compara o

nó corrente (.) com o primeiro item do grupo , logo a lista de nós

correntes do <xsl:for-each> inclui apenas um item de cada grupo

4.  Em um segundo <xsl:for-each> aninhado selecione cada item da

chave (é um node-set) que pertença ao grupo:

!!!!8&966()*+&6:!/01237!

Solução: ordenação com agrupamento

!"#$%#&'$(#)((&*"+$,#%"#$-.)&&/%0011121324560788809:;0<5=,#>45+.*

****************?(5#@4,-.72A.B*

**!"#$%C('*,=+(-.D=&EC('.*+=&D)-.DF5#4.*F#(-.G=5(=.*0B*

Page 278: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 278/298

54

**!"#$%&(+/$=&(*+=&D)-.D=&=$464.B*

*****!H$B!"#$%>45I(=D)**

***#($(D&-.DF5#4J6(,(5=&(I@HK2L*-***

***********************6(,(5=&(I@HKC('KMD=&EC('MN*G=5(=LJ7OLO.B*

************!"#$%#45&*#($(D&-.G=5(=.*0B*

************!"#$%>45I(=D)*#($(D&-.C('KMD=&EC('MN*G=5(=L.B*

****************!"#$%#45&*#($(D&-.GD4H@64.*0B*****************!"#$%@>*&(#&-./4#@&@4,KL*-*7.B*

********************!H&B!"#$%?=$F(I4>*#($(D&-.G=5(=.*0B!0H&B*

****************!0"#$%@>B*

****************!HHB!"#$%?=$F(I4>*#($(D&-.GD4H@64.*0B%**

********************!"#$%?=$F(I4>*#($(D&-.2.*0B!0HHB*

************!0"#$%>45I(=D)B*

*****!0"#$%>45I(=D)B!0H$B*

**!0"#$%&(+/$=&(B*

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

 Mais XSLT 

!  Foge do escopo deste curso introdutório uma abordagem mais

 profunda do XSLT ! 

Mesmo assim alguns elementos abaixo são comuns e devem ser

Page 279: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 279/298

55

 Mesmo assim, alguns elementos abaixo são comuns e devem serinvestigados: explore-os e analise os exemplos fornecidos

!  Método de geraçao de saída (muito usado)!  !"#$%&'()'(*+,(-&./0-(+$1"+$1(,"(0*23.,3(/0(4',0*56*

!  Política de espaços e geração de texto (organiza a saída)!  !"#$%)4,#,47,8#)9:,*,$,+,3(#/0)4,;*:&.,06!!  !"#$%#(42)8#)9:,*,$,+,3(#/0<06*

!  atributo .2#9=$,8&'()'(*,#:9)23>*de !"#$%(,"(6*

!  Recursos de extensão e compatibilidade (essencial se você usa

extensões, XSLT 2.0 e ainda quer funcionar em browsers)!  !"#$%?9$$=9:@6*!  !"#$%39+,#)9:,89$29#6*

!  Formatação default para números (essencial para trocar pontodecimal por vírgula)!  !"#$%.,:2+9$8?&4+9(6*,*?'3AB&*?&4+9(83'+=,4CD*

 XML: uma introdução prática  X100

Page 280: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 280/298

1

Helder da Rocha ([email protected])

 Atualizado em setembro de 2001

 XSL Formatting Objects

!! Aplicação XML para descrever o layout preciso detexto e imagens em uma páginaEl

Page 281: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 281/298

2

!! Elementos representam!! Regras para formatação de várias páginas!! Layout de páginas individuais, margens, rodapés!! Hifenação, alinhamento, fontes, cores, leading!! Imagens, gráficos, tabelas, listas, links

!! Isoladamente, XSL-FO não é folha de estilo!! É formato final, com estrutura que visa a apresentação

(como XHTML) – linguagem de descrição de página(como PDF ou PostScript)

!! Típicamente, se cria um XSLT que gera FO a partir deuma fonte XML

Hello World

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

<fo:layout-master-set>

Este é o "<head>"

do XSL-FO

Page 282: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 282/298

3

<fo:layout-master-set><fo:simple-page-master master-name="p1">

<fo:region-body/>

</fo:simple-page-master>

<  /fo:layout-master-set>

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

</fo:root>

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

Ligação entre as

regras de layout e

o conteúdo afetado

<root>

!! Raiz do documento XSL-FO

!! Define o namespace! !""#$%%&&& &( )*+%,---%./0%1)*23"

Page 283: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 283/298

4

! !""#$%%&&&'&(')*+%,---%./0%1)*23"4!! Uso típico

!"#$%##&''

()*+,$"#-./&&0$112223243#%516777189:1;#%)<&.='

333'

!1"#$%##&='

!! Normalmente, documentos FO são gerados com XSLT !(,*$&>)0*<&>')<&?/-.1.='

444456)$*))"44

444447289:$6);<!""#$%%&&&'&(')*+%,---%./0%1)*23"<='

''''!(,*$<00*@A&>)0*<&>,'1='

44445%6)$*))"=4

!1(,*$&>)0*<&>='

Estrutura do documento

!! O elemento <root> deve conter:

!! 1) Um <layout-master-set>! contém "mestres de layout": templates reutilizáveis para

Page 284: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 284/298

5

!! contém mestres de layout : templates reutilizáveis para

layout de páginas

!! cada mestre possui um identificador que é usado para

associá-lo a um bloco de conteúdo

!! o tipo de mestre mais simples é <simple-page-master>

!! 2) Pelo menos um <page-sequence> !! onde fica o conteúdo

!! define uma seqüência de páginas em um documento

!! cada <page-sequence> deve estar associado a um

mestre de layout existente!! contém objetos <flow> e/ou <static-content>

Cabeçalho

!! Cabeçalho mínimo!"#$%&'($)*+,'-*./+-.*0!

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

"#$%0+.'$1,6$7895

Page 285: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 285/298

6

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

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

!! <simple-page-master> define margens, altura e

largura da página e contém pelo menos uma região

!! master-name do elemento é ID para que elementos deconteúdo <page-sequence> possam referenciá-lo

!!"#$%-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 regiões

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

! área de conteúdo principal da página

Page 286: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 286/298

7

! área de conteúdo principal da página!! define um ID implícito (fixo): /01("#$%&'()&*+, para

uso por elementos de conteúdo de fluxo ou estático.

!! !"#$%&'(023"2,-.,e !"#$%&'(#'*,-.,!!

Em documentos de linguagem ocidental, start é amargem esquerda e end é margem direita.

!! IDs: /01("#$%&'(023"2,e /01("#$%&'(#'*,

!! !"#$%&'()#4&"#,-.,e !"#$%&'(342#",-.,!! before é a margem superior, after é a margem inferior.

!! IDs: /01("#$%&'()#4&"#,e /01("#$%&'(342#".

 Margens e regiões

!!  Margens do <simple-page-master>

limitam a área de impressão

!!<region-body> ocupa todo o espaçorestante

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

28"$%'(-&=+

!>%2=9#(=8$#(28>-#"4+

Page 287: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 287/298

8

g y p p çrestante

!! Outras regiões opcionais podem ser

definidas sobre <region-body>

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

!"#$%&'(#'5+#,-#'-./612/34+

!!  Margens de <region-body> devem seriguais ou maiores que os extent das

regiões marginais

!"#$%&'()&57+28"$%'(9#*-./0:;12/+++++++++++

+++++++++++28"$%'("%$<-./6:012/+++

+++++++++++28"$%'()&--&2./0:612/+

+++++++++++28"$%'(-&=./0:012/+34++

!"#$%&'()&57+34+

!"#$%&'(8*-#"+34+

      !     "     #     $       %     &     '    (     #     '       5+

       3      4+

      !     "     #     $       %     &     '    (     >       -     8     "       -+

       3      4+

28"$%'()&--&2+

     2

     8     "     $       %     '    (     "       %     $       <       -+

     2

     8     "     $       %     '    (       9     #       *       -+

 XSLT 

!! Layout geralmente permanece fixo em folha XSLT+FO

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

!!"#$%&$$'!()*+,%#$-./''0%112223243$&516777189:1;$&)<'.=!"#$%*<>$?' )<,'A& ,A'=

Page 288: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 288/298

9

0 5!!!"#$%*<>$?'@)<,'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+

Conteúdo

!! O conteúdo do documento pode estar!! Em seções <flow>, que criam nova página quando o

texto preenche o espaço disponível na atual

Page 289: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 289/298

10

texto preenche o espaço disponível na atual!! Em seções <static-content>, que são repetidos em

todas as páginas da seqüência.

!! Regiões!! Cada bloco de conteúdo deve estar associado a uma

região existente através do atributo flow-name:!"#$%&'&()*)#+&,+&-!"#$%&'()*+,-"%.)/0#&%-1'.1+.-///-

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

!! Blocos!! Dentro de <flow> ou <static-content>, conteúdo

deve estar em blocos: <block>, <list-block>,

<table>, etc.

Blocos de conteúdo

 <fo:page-sequence master-name="p1" font-size="8pt"> 

 <fo:static-content flow-name="xsl-region-after"> 

 <fo:block> 

 <fo:leader leader-pattern="rule"16 /

Este bloco de

conteúdo estático está

Page 290: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 290/298

11

pleader-length="16cm " /> 

 </fo:block>  <fo:block text-align="end ">  página

 <fo:page-number/>  

 </fo:block> 

 </fo:block> 

 </fo:block>  </fo:static-content> 

 <fo:flow flow-name="xsl-region-body">  <fo:block font-family="serif" font-size="11pt">  

Texto que pode atravessar páginas.

 </fo:block>  

 </fo:flow> 

 </fo:page-sequence> 

associado comregion-after

Este bloco de

conteúdo de fluxo estáassociado com

region-body

Blocos

!! Os elementos <flow> e <static-content> devem

conter elementos de bloco! <block> Bloco de propósito geral

Page 291: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 291/298

12

! <block> Bloco de propósito geral

!! <list-block> Bloco que contém itens de lista

!! <table> Bloco que contém tabela

!! Blocos podem ter conteúdo misto, contendo texto e

elementos!! <inline> Trecho de propósito geral

!! <external-graphic> Imagem ou gráfico externo

!! <page-number> Número de página

!! <basic-link> Referência de hipertexto

!! <instream-foreign-object>  XML embutido (ex: SVG)!! <leader> Linhas e outros decoradores

Propriedades

!! Propriedades de estilo podem ser aplicadas em <flow>,

<static-content> e em quaisquer elementos descendentes

! Propriedades são atributos XML

Page 292: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 292/298

13

! Propriedades são atributos XML!!  Maior parte das propriedades são iguais e têm mesma sintaxe

que as propriedades do CSS!!"#$%&#'()"#*+,"-./&012+-3#.-4)5-*5,567/"2)))))))))))

) ) )))"#*+,5/86129:;+2)))))))))))'#&#7127<%=:>>4)?>4)?>@2)

))))))))).-7</*,+#;129'.2)))))))))))"#*+,A6/<3+12%#&B2))

)))))))))+6C+,-&/<*12'6*+672D"#$!!"#$/*&/*6)

'#&#712%&E62D%&'($!F"#$/*&/*6D))*!+*,+-!!F"#$%&#'(D)

!! Relação com CSS!!  Algumas propriedades CSS são elementos em XSL-FO

!!  Alguns seletores CSS são atributos em XSL-FO

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

Page 293: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 293/298

14

 </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"> célula 1.1 </fo:block> 

 </fo:table-cell>  <fo:table-cell>  <fo:block font-family="monospace"> célula 1.2 </fo:block> 

 </fo:table-cell>  </fo:table-row> 

... <fo:table-row> ... </fo:table-row> 

 </fo:table-body>  </fo:table> 

<list-block>

 <fo:list-block> 

 <fo:list-item> 

 <fo:list-item-label> 

 <fo:block font-size="20pt" color="red"> 

Page 294: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 294/298

15

p&#x2022;

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

<external-graphic>

!! Permite incluir uma imagem na página

!!Objeto inline! !"#$%&#'()

Page 295: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 295/298

16

Objeto inline!! !"#$%&#'()*****!"#$+,-+./0&12.0345'*6.'789#+:25"8;)*

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

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

************6.'784--3$;;<<<:,:'#9;9#+:25"8;)*!;"#$%&#'()*

<basic-link>

!! Vínculo de hipertexto

!! Vincula uma referência de ID a um ID! Geralmente quando o documento é gerado via XSLT o

Page 296: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 296/298

17

! Geralmente, quando o documento é gerado via XSLT, o

ID é obtido do elemento ao qual se quer vincular ou via

alguma variável

!! Exemplo (geração de link usando XSLT):!"#$%&'()*+,)-.!)-/01-',+20(/)-'/)$-34!"#$%4!

!!!!!!!!!!!!!!!/05/+20*$1'/)$-346-201,)-04!

!!!!!!!!!!!!!!!*$,$134&,6047!

&&&&&&&&'()*+,-*./012&)/*/3456"31$#71689&

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

<instream-foreign-object>

!! Permite embutir outra linguagem XML na página!"#$%&'()*+,-.#$*+&/'.$01+2)3!

!!!"(4/%(4/!!

Page 297: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 297/298

18

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

Visualização

!!  XSL-FO é uma linguagem de descrição de página

!! Páginas podem ser geradas por um programa que construa o

documento na memória (como faz o browser com HTML e CSS)

Page 298: Argonavis XML 2007

8/3/2019 Argonavis XML 2007

http://slidepdf.com/reader/full/argonavis-xml-2007 298/298

( f )ou que gere um arquivo!! PostScript, PDF: Apache FOP, RenderX XEP, REXP

!! RTF (MS-Word): JFOR, RenderX 

!! Visualização em browser: IBM XFC 

!! Ferramentas para desenvolver FO! HP FOA