Académique Documents
Professionnel Documents
Culture Documents
<xml:introdução />
Helder da Rocha
www.argonavis.com.br
1
Objetivos
2
Assuntos abordados
<contato codigo="33">
<nome>Severino Severovitch</nome>
elemento
<email>bill@norte.com.br</email>
<telefone tipo="celular">
<area>11</area>
atributo
<numero>9999 4321</numero>
</telefone>
"nó" de texto
</contato>
4
XML versus HTML
5
Anatomia de um documento XML
§ Documentos XML são documentos de texto Unicode
§ É uma hierarquia de elementos a partir de uma raiz
§ Menor documento tem um elemento (vazio ou não):
<nome> Ñåâåðèíî Ñåâåðîâè÷ </nome>
<nome></nome> = <nome/>
7
nó raiz
/ Árvore XML
elemento raiz
cartao-simples
cartao-simples email
email
dumont@14bis.com.br
nome
nome
endereco
endereco
Alberto
Santos logotipo
logotipo
Dumont Rua do Encanto, 22 -
2o. andar - Centro
telefone
telefone - 25600-000 - href
href
Petrópolis - RJ
numero
numero ddd
ddd /imagens/logo14bis.gif
tipo
tipo
LEGENDA
21 nó de elemento
2313011
nó de atributo
residencial nó de texto 8
XML Namespaces
<cadastro xmlns:firma="01.234.567/0001-99">
<nome>Severino Severovitch</nome>
<firma:nome>Sibéria Informática Ltda.</firma:nome>
<email>bill@norte.com.br</email>
</cadastro>
Este elemento <nome> pertence a outro namespace
9
Por que usar XML para compartilhar dados?
bill@norte.com.br
<telefone tipo="celular">
<area>11</area>
<numero>9999 4321</numero>
</telefone>
celular </contato>
11
9999 4321
12
Documentos XML bem formados
14
Esquema
Documentos que aderem à
§ O esquema representa uma classe
especificação (válidos)
§ Os documentos são instâncias
Esquema (universo de
documentos válidos)
Documento
Como definir esquemas:
fora da
especificação DTD - Document Type Definition
W3C XML Schema
15
DTD vs. XML Schema
§ Atributos
<mensagem id="1"> mens.setAttribute("id", "1")
20
Criação de documentos com DOM (2)
Montagem da árvore passo-a-passo
1. Sub-árvore <mensagem>
3. Árvore completa
<mensagem id="1">
/
mens.appendChild(texto)
Bom dia!
<carta>
2. Sub-árvore <carta>
<mensagem id="1">
<carta>
<mensagem id="1">
doc.appendChild(carta)
Bom dia!
21
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
• Caminhos absolutos
/contato/@codigo
33 /contato/telefone/@tipo
Severino Severovitch /contato/telefone/numero/text()
bill@norte.com.br
§ XSL Transformations
§ 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 e contêm
§ Elementos XSLT: <template>, <if>, <foreach>, ...
§ Expressões XPath para localizar nós da árvore-fonte
§ Texto ou XML a ser gerado no documento-resultado
§ Processador XSLT
fonteToHtml.xslt
Folha de
estilos Processador XSLT
Documento
fonte.xml Xalan, TrAX, Saxon
Resultado
Netscape, I. Explorer
Documento
Fonte
23
XSLT: documento-fonte (1)
/
<aeronave>
@id PTGWZ
@partida 08:15
§ Árvore-fonte <destino> Itabuna
24
XSLT: folha de estilos (2)
§ O seguinte template (parte de uma folha de estilos XSLT)
pode extrair os dados do documento-fonte documento-fonte
(em azul - XPath)
<xsl:template match="aeronave">
<p>A aeronave de prefixo
documento <xsl:value-of select="@id" /> decolou
resultado de <xsl:value-of select="origem" /> às
(em preto)
<xsl:value-of select="origem/@partida" />
tendo como destino o aeroporto de
<xsl:value-of select="destino" />.</p>
</xsl:template> elementos XSLT
(em vermelho, com prefixo xsl)
§ Elementos XSLT geralmente são usados com um prefixo
associado ao seu namespace: <xsl:elemento> para evitar
conflitos com o documento-resultado.
25
XSLT: documento-resultado (3)
26
XLink, XPointer e XQuery
§ XLink: é uma especificação W3C que permite definir vínculos
entre documentos XML
§ Funcionalidade mínima é igual ao <a href> do HTML
§ Funcionalidade estendida permite vínculos bidirecionais, arcos,
vários níveis de semântica, etc.
§ É uma coleção de atributos, com namespace próprio, que
podem ser usados em elementos de qualquer linguagem XML.
§ XPointer: aponta para partes de documentos XML
§ Identificador (ID) colocado no destino, accessível através de
fragmento de URL: xlink:href="#identificador"
§ Caminho resultante de expressão XPath: xpointer(/livro/id)
§ XQuery: linguagem para pesquisar documentos XML
§ Exemplo: FOR $b IN document("usuario_33.xml")/contato
WHERE nome="Severino Severovitch"
RETURN $b
27
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="p1"> XSL-FO
<fo:region-body/>
<fo:page-sequence master-name="p1">
<fo:flow flow-name="xsl-region-body">
<fo:block color="blue" font-size="20pt">
Hello PDF!
</fo:block>
</fo:flow>
Este é o "<body>"
</fo:page-sequence>
do XSL-FO
</fo:root> 29
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Página XHTML</title></head>
<body> XHTML
<h1>Página XHTML</h1>
§ eXtensible HTML
§ Linguagem XML de descrição de página Web
§ Mesmos elementos do HTML 4.0 Strict
§ Elementos descrevem somente a estrutura dos
componentes da página.
§ A forma precisa ser especificada usando CSS: não há
elementos/atributos para mudar cor, alinhamento, etc.
§ Pode ser misturada (estendida) com outras linguagens
XML (MathML, SVG, linguagens proprietárias)
§ Normalmente gerada via XSLT
XML
XSLT XML
Documento
Processador XSLT
XML XHTML
Documento
Fonte 30
<svg>
<circle style="fill: red" cx="3cm" cy="3cm" r="2.5cm" />
<rect style="fill: blue" x="6cm" y="6cm" SVG
height="2.5cm" width="1.5cm" />
Zoom +
Zoom +
31
Exemplo de SVG
JavaScript
Web Services
SOAP
WSDL XML-RPC
UDDI CML
ebXML
33
Demonstração
§ Exemplo de transformação XML
PDF
<xslt> FOP
FO
(1.a)
(1) <xsl:fo>
<xml>
(1.b)
<xslt> JFOR W
Xalan (3) SVG
<xslt>
Texto
(4)
(2)
2000 2001
<xslt> HTML
Texto texto
texto texto
SVG
texto texto
HTML
texto texto
texto
34
Ferramentas
§ Para programação
§ Parsers-validadores: Xerces, Crimson, MSXML 4.0
§ Validadores: MSV (Sun)
§ Transformadores XSL: TrAX, Xalan, Xt, Saxon
§ APIs: JDOM, JAX (P, B, M, R, RPC), SAX e DOM
§ Veja mais em xml.apache.org e
www.alphaworks.ibm.com
§ Para edição (de XML genérico)
§ XML Spy Suite
§ Framemaker / ArborText
§ JEdit com plug-ins para XML, XSLT e XPath
§ Veja mais em www.w3.org/XML/
35
Conclusões
www.argonavis.com.br
38
XML: uma introdução prática
<xml:fundamentos />
Helder da Rocha
www.argonavis.com.br
1
Como criar um documento XML
2
Um dos menores documentos XML
Elemento raiz
§ Um elemento
3
Elemento vazio
<nome></nome>
<nome/>
4
Elementos podem conter elementos
fulano_de_tal.xml
<contato>
<nome>Fulano de Tal</nome>
<email>fulano@site.com.br</email>
<telefone>
<ddd>11</ddd>
<numero>8765 4321</numero>
</telefone>
</contato>
5
Componentes de um documento
§ Árvore XML
§ nós,
§ raiz,
§ galhos e
§ folhas
§ Prólogo
§ Comentários
§ Instruções de processamento
§ Elementos
§ Atributos
§ Nós de texto
§ Entidades
6
Estrutura XML
§ Um documento XML pode ser representado como uma
árvore. A estrutura é formada por vários nós.
<?xml version="1.0" encoding="iso-8859-1" ?>
<!-- Isto é um comentário --> informações usadas
<cartao-simples> pelo processador XML
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar -
Centro - 25600-000 - Petrópolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
um "nó" pode ser ...
<telefone tipo="residencial" > • um elemento,
<ddd>21</ddd> • um atributo,
<numero>2313011</numero> • um bloco de texto,
• um comentário,
</telefone> • uma instrução,
</cartao-simples> • uma declaração,
• uma entidade, ... 7
Declaração XML Prólogo
Comentário
Instrução de processamento
Declaração de tipo de documento
<?xml version="1.0" encoding="iso-8859-1" ?>
<!-- Isto é um comentário -->
<?comando tipo="simples" parametro ?>
<!DOCTYPE cartao-simples SYSTEM "cartoes.dtd">
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar -
Centro - 25600-000 - Petrópolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
<numero>2313011</numero>
</telefone>
</cartao-simples>
8
Nó raiz e elementos
elemento raiz nó raiz ( / )
<?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>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
elementos
<ddd>21</ddd> elementos
<numero>2313011</numero>
</telefone>
</cartao-simples>
9
Atributos
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar -
Centro - 25600-000 - Petrópolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
<numero>2313011</numero>
</telefone> atributos
</cartao-simples>
10
Nós de texto
§ Não podem ter descendentes (são as folhas da árvore)
<?xml version="1.0" encoding="iso-8859-1" ?>
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar -
Centro - 25600-000 - Petrópolis - RJ</endereco>
<email>dumont@14bis.com.br</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
<numero>2313011</numero>
nós de
</telefone>
texto
</cartao-simples>
11
Entidades
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="valor" ou nome =
'valor':
§ aspas podem ser usadas entre apóstrofes e apóstrofes podem
ser usados entre aspas
§ aspas e apóstrofes não podem ser neutralizados mas sempre
podem ser representados pelas entidades ' e "
§ Não pode haver atributos na etiqueta final
14
Elementos e atributos (2)
§ Elementos mal formados
<Profissão>Arquiteto</profissão>
<TR><TD>item um</td></tr>
<ÄÅÍÃÈÉ>139.00</äåíãèé>
§ Há várias maneiras de representar a mesma
informação em XML
<data>23/02/1998</data>
<data dia="23" mes="02" ano="1998" />
<data>
<dia>23</dia>
<mes>02</mes>
<ano>1998</ano>
</data>
15
Quando usar elementos/atributos
§ 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
§ Questão de suporte tecnológico
§ Atributos não podem conter subelementos
§ Atributos são mais fáceis de serem validados num DTD
16
Identificadores
17
Identificadores
18
Conteúdo misto
<trecho>
<secao>2</secao>
<paragrafo>A unidade de informação
dentro de um documento XML é o
<definicao>elemento</definicao>. Um
elemento é formado por duas
<definicao>etiquetas</definicao> que
atribuem algum significado ao conteúdo.
</paragrafo>
</trecho>
19
Seção CDATA
<titulo>Curso de XML</titulo>
<exemplo>Considere o seguinte trecho de
XML:
<![CDATA[
<empresa>
<nome>João & Maria S/A</nome>
</empresa>
]]>
</exemplo>
20
Instruções de processamento
21
Comentários
22
Declaração XML
<?xml version="1.0"
encoding="iso-8859-1"
standalone="yes" ?>
23
Documento bem formado
§ ter um único elemento raiz
§ etiquetas iniciais e finais combinam (levando em conta que
caracteres maiúsculos e minúsculos são diferentes)
§ elementos bem aninhados
§ valores de atributos entre aspas ou apóstrofes
§ atributos não repetidos
§ identificadores válidos para elementos e atributos
§ comentários não devem aparecer dentro das etiquetas
§ sinais < ou & nunca devem ocorrer dentro dos valores dos
atributos ou nos nós de texto do documento.
24
XML Namespaces
§ Permite que elementos de mesmo nome de diferentes
aplicações sejam misturados sem que haja conflitos
§ Um namespace (universo de nomes) é declarado usando
atributos reservados
§ xmlns="identificador" (namespace default)
§ associa o identificador com todos os elementos que não
possuem prefixo. Ex: <nome>
§ xmlns:prefixo="identificador"
§ associa o identificador com os elementos e atributos cujo
nome local é precedido do prefixo. Ex <prefixo:nome>
§ O prefixo é arbitrário e só existe dentro do documento
§ O identificador (geralmente uma URI) deve ser reconhecido
pela aplicação
25
Exemplo
Vale para todo
o elemento Esta URI
<cartao> está associada a
este prefixo
<ct:cartao
xmlns:ct="01.234.567/0001-89/cartoes">
<ct:nome>Alberto Santos Dumont</ct:nome>
<ct:endereco>Rua do Encanto, 22 - Centro
25600-000 - Petrópolis - RJ</ct:endereco>
<ct:email>dumont@14bis.com.br</ct:email>
<ct:telefone tipo="residencial">
<ct:ddd>21</ct:ddd>
<ct:numero>2313011</ct:numero>
</ct:telefone>
</ct:cartao>
26
Exemplo com 3 namespaces
<departamento
<departamento
Namespace
xmlns:ct="01.234.567/0001-89/cartoes"
xmlns:ct="01.234.567/0001-89/cartoes" default
xmlns="01.234.567/0001-89/empresa"
xmlns="01.234.567/0001-89/empresa"
xmlns:html="http://www.w3.org/1999/xhtml">
xmlns:html="http://www.w3.org/1999/xhtml">
<ct:nome>Fulano
<ct:nome>Fulano de
de Tal</ct:nome>
Tal</ct:nome> URI padrão
<nome>Contabilidade</nome> XHTML
<nome>Contabilidade</nome>
<endereco>Rua
<endereco>Rua Projetada,
Projetada, 33</endereco>
33</endereco>
<html:a
<html:a href="web.html">
href="web.html">
<html:strong>link
<html:strong>link negrito
negrito HTML</html:strong>
HTML</html:strong>
</html:a>
</html:a>
<urgencia><ct:numero>2313011</ct:numero></urgencia>
<urgencia><ct:numero>2313011</ct:numero></urgencia>
</departamento>
</departamento>
27
XML: uma introdução prática
<xml:links />
Helder da Rocha
www.argonavis.com.br
1
XLink é uma coleção de atributos
§ Namespace: http://www.w3.org/1999/xlink
§ Sete atributos:
§ type = simple | extended | locator |
arc | title | resource
§ href = a URI destino do vínculo
§ show = new | replace | embed | other | none
§ actuate = onLoad | onRequest | other | none
§ title = descrição detalhada
§ role = papel / contexto do vínculo
§ label = descrição sucinta (para exibição)
§ Exemplo de uso típico
<elemento xlink:href="http://lugar.com" />
2
Exemplos: link "tipo <a href>" e "<img>"
<p xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" Conteúdo será
xlink:href="#end" substituído...
.. quando o
xlink:show="replace" usuário solicitar.
xlink:actuate="onRequest">link</p>
<img xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" Conteúdo será embutido
xlink:href="12345.jpg" no documento...
.. quando o
xlink:show="embed" documento for
xlink:actuate="onLoad" /> carregado.
3
XPointer
4
XML: uma introdução prática
<xml:transformação/>
Helder da Rocha
www.argonavis.com.br
1
Esta aula
§ Introdução a XSLT
§ fundamentos: principais elementos
§ passo-a-passo: como transformar
§ Fundamentos de XPath
§ linguagem para manipular árvores
§ XSLT
§ outros elementos
§ Fundamentos de XSL-FO
§ Exercícios
§ Geração de HTML, XHTML, XML, XSL-FO, texto, ...
2
Por que transformar
3
XSLT
§ XSL Transformations
§ 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 e contêm
§ Elementos XSLT: <template>, <if>, <foreach>, ...
§ Expressões XPath para localizar nós da árvore-fonte
§ Texto ou XML a ser gerado no documento-resultado
§ Processador XSLT
fonteToHtml.xslt
Folha de
estilos Processador XSLT
Documento
fonte.xml Xalan, TrAX, Saxon
Resultado
Netscape, I. Explorer
Documento
Fonte
4
Transformação XSL
5
Transformação XSL no cliente
6
Transformação XSLT
§ No servidor
§ No cliente
8
XSLT: documento-fonte (1)
/
<aeronave>
@id PTGWZ
@partida 08:15
§ Árvore-fonte <destino> Itabuna
9
XSLT: folha de estilos (2)
§ O seguinte template (parte de uma folha de estilos XSLT)
pode extrair os dados do documento-fonte documento-fonte
(em azul - XPath)
<xsl:template match="aeronave">
<p>A aeronave de prefixo
documento <xsl:value-of select="@id" /> decolou
resultado de <xsl:value-of select="origem" /> às
(em preto)
<xsl:value-of select="origem/@partida" />
tendo como destino o aeroporto de
<xsl:value-of select="destino" />.</p>
</xsl:template> elementos XSLT
(em vermelho, com prefixo xsl)
11
<template>
<xsl:template match="elem/filho">
[[[<xsl:value-of select="." />]]]
</xsl:template>
Caminho relativo
12
<value-of>
13
<text>
§ Imprime texto
§ Preserva espaços, novas-linhas e tabuações
§ Útil para controlar forma de impressão do texto
<xsl:template match="x">
<xsl:text>Quebra linha depois
</xsl:text>
</xsl:template>
<xsl:template match="y">
<xsl:text>Não quebra
linha</xsl:text>
</xsl:template>
§ Atributo disable-output-escaping="yes" evita
substituição de entidades
14
<output>
15
<apply-templates>
<xsl:template match="filho1">
[<xsl:apply-templates />]
</xsl:template>
<xsl:template match="filho2">
(<xsl:apply-templates />)
</xsl:template>
16
Regras nativas
§ 1. Processamento da raiz
§ <xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
§ 2. Processamento de todos os elementos
§ <xsl:template match="*">
<xsl:apply-templates />
</xsl:template>
§ 3. Processamento de texto
§ <xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
17
Namespace
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
18
XPath
19
Expressões XPath
§ Os tipos de expressão são
§ operações sobre nós da árvore-fonte (caminhos)
§ operações sobre texto
§ operações booleanas
§ operações com resultado numérico
§ Cada tipo de expressão devolve um resultado que
pode ser um tipo de dados
§ um conjunto de nós (node set)
§ um texto (string)
§ um valor booleano (boolean)
§ um número (number)
20
Caminhos
21
Padrões de combinação
22
Caminhos vs. Padrões
23
Onde usar padrões/caminhos
24
<if>
§ Bloco condicional
§ Executa se expressão XPath passada retornar true
§ <xsl:if test="/raiz/elemento/filho">
<xsl:value-of select "@atrib_do_filho" />
</xsl:if>
§ <xsl:if test="(5 > 3) and not(9 < 4))">
....
</xsl:if>
§ <xsl:if test="starts-with(@nome, 'Sra. ')">
...
§ </xsl:if>
25
<choose> <when> <otherwise>
§ Condicional tipo case (if-then-else)
§ <xsl:choose>
<xsl:when test="../carro[@novo='true']">
...
</xsl:when>
<xsl:when test="../casa">
...
</xsl:when>
<xsl:when test="../salario/text() > 10000">
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
26
<sort>
§ Ordenação
§ Aplica-se a cada nó do conjunto de nós do contexto. Use
dentro de <apply-templates>
§ <xsl:apply-templates>
<xsl:sort select="@codigo" />
<xsl:value-of select="." />
</xsl:apply-templates>
27
Looping com <for-each>
28
<for-each> e <sort>
29
XSL Formatting Objects
30
Hello World
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
Este é o "<head>"
do XSL-FO
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-body/>
</fo:simple-page-master> Ligação entre as
regras de layout e
</fo:layout-master-set> o conteúdo afetado
<fo:page-sequence master-name="p1">
<fo:flow flow-name="xsl-region-body">
<fo:block color="blue" font-size="20pt">Hello!</fo:block>
<fo:flow>
</fo:page-sequence> Este é o "<body>"
do XSL-FO
</fo:root>
31
<root>
32
Estrutura do documento
33
Cabeçalho
§ Cabeçalho mínimo
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
§ <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 de conteúdo
<page-sequence> possam referenciá-lo
§ Atributos típicos (ID e dimensões da página)
<fo:simple-page-master master-name="p1"
margin-top="1.5cm" margin-bottom="2cm"
margin-left="2.5cm" margin-right="1.5cm"
page-width="21cm" page-
height="29.7cm">
... regiões afetadas ...
</fo:simple-page-master> 34
Regiões
§ Há cinco regiões
§ <region-body />
§ obrigatória
§ área de conteúdo principal da página
§ define um ID implícito (fixo): xsl-region-body, para uso por
elementos de conteúdo de fluxo ou estático.
§ <region-start /> e <region-end />
§ Em documentos de linguagem ocidental, start é a margem
esquerda e end é margem direita.
§ IDs: xsl-region-start e xsl-region-end
§ <region-before /> e <region-after />
§ before é a margem superior, after é a margem inferior.
§ IDs: xsl-region-before e xsl-region-after.
35
Margens e regiões
<simple-page-master>
margin-top
<region-end />
definidas sobre <region-body>
margin-right
margin-left
36
XSLT
<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>
39
Blocos
§ Os elementos <flow> e <static-content> devem conter
elementos de bloco
§ <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> Código XML embutido (SVG, por
exemplo)
§ <leader> Linhas e outros decoradores
40
Propriedades
§ Propriedades de estilo podem ser aplicadas em <flow>,
<static-content> e em quaisquer elementos descendentes
§ Propriedades são atributos
§ Maior parte das propriedades são iguais e têm mesma
sintaxe que as propriedades do CSS
§ <fo:block font-family="tahoma, sans-serif" font-size="12pt"
color="rgb(255, 45, 45)" margin-top="1cm"
font-weight="bold" text-align="center">
Uma <fo:inline color="blue">linha</fo:inline> de texto
</fo:block>
§ Algumas propriedades CSS são elementos em XSL-FO
§ Alguns seletores CSS são atributos em XSL-FO
§ Suporte às propriedades depende do processador
41
<table>
<fo:table>
<fo:table-header>
<fo:table-cell>
<fo:block font-family="tahoma, sans"
font-weight="bold">Coluna 1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="tahoma, sans"
font-weight="bold">Coluna 2</fo:block>
</fo:table-cell>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block font-family="monospace">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> 42
<list-block>
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block font-size="20pt" color="red">
•
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="70pt">
<fo:block>
Item um
</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item> ... </fo:list-item>
...
</fo:list-block>
43
<external-graphic>
44
<basic-link>
§ Vínculo de hipertexto
§ Vincula uma referência de ID a um ID
§ Geralmente, quando o documento é gerado via XSLT, o
ID é obtido do elemento ao qual se quer vincular ou via
alguma variável
§ Exemplo:
<fo:basic-link internal-destination="{@id}"
text-decoration="underline"
color="blue">
<xsl:value-of select="@codigo"/>
</fo:basic-link>
45
<instream-foreign-object>
46
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) 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
§ Para rodar o FOP (arquivo .bat em c:\xml)
§ fop arquivo.fo arquivo.pdf
§ Para rodar o JFOR (arquivo .bat em c:\xml)
§ jfor arquivo.fo arquivo.doc
47
XML: uma introdução prática
<xml:sax.dom />
Helder da Rocha
www.argonavis.com.br
1
Programação com XML
§ Há duas APIs padrão para manipular (interpretar, gerar,
extrair dados e tratar eventos) arquivos XML:
§ Document Object Model (DOM)
§ Simple API for XML (SAX)
§ As duas APIs 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.
§ DOM vai além e 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
2
SAX ou DOM?
§ SAX
§ Gasta menos memória
§ Mais simples – menos recursos disponíveis
§ Ideal para aplicações simples que não precisam manipular
com toda a árvore de objetos
§ DOM
§ Em grandes documentos e hierarquias profundas exige
mais recursos
§ Fornece funções que permitem ter muito controle sobre
os dados
§ É a única opção para manipulação no cliente
§ APIs disponíveis em várias linguagens
§ Java, VB, C, JavaScript (apenas DOM)
3
DOM
4
SAX
5
SAX vs. DOM
6
SAX: operações
§ Leitura
§ Passo 1: carregar o documento e identificar os tokens
§ Passo 2: identificar elementos e outros nós (pode usar SAX)
§ Passo 3: montar a árvore (pode ser feito durante o passo 2)
§ Alteração
§ 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, coloca nós
de texto em elementos, coloca elementos filho em
elementos pai, coloca elemento raiz na raiz
9
DOM: tipos de dados
§ Coleções: NodeList, NamedNodeMap
§ Raiz da hierarquia de nós: Node. Subclasses:
§ 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)
10
DOM: Hierarquia
DocumentFragment
Document
Text CDATASection
CharacterData
Comment
Attr
Element
Node
DocumentType NodeList
Notation NamedNodeMap
Entity
EntityReference
ProcessingInstruction
11
DOM: navegação
Fonte: www.xml101.com 15
Ilhas de dados (2) - só MSXML
§ Dados em XML podem ser vinculados a valores em
tabelas, por exemplo, ou manipulados via
JavaScript/VBScript <?xml version="1.0" ?>
<CATALOG>
<CD>
<html> <TITLE>Empire Burlesque</TITLE>
<body> <ARTIST>Bob Dylan</ARTIST>
<xml id="cdcat" </CD>
<CD>
src="cd_catalog.xml"></xml> <TITLE>Hide your heart</TITLE>
<table border="1" <ARTIST>Bonnie Tyler</ARTIST>
datasrc="#cdcat"> </CD>
</CATALOG>
<tr>
<td><span datafld="ARTIST"></span></td> cd_catalog.xml
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html>
Fonte: www.xml101.com 16