Vous êtes sur la page 1sur 132

XML: uma introdução prática

<xml:introdução />

Helder da Rocha
www.argonavis.com.br
1
Objetivos

§ Oferecer uma visão geral da tecnologia XML


§ Responder às questões
§ Como implementar soluções de gestão de
informações usando XML?
§ Quando e como usar as tecnologias e linguagens
que viabilizam o compartilhamento de informações?
§ Apresentar
§ Breve introdução ao XML e tecnologias
relacionadas.
§ Recursos para manipular informações representadas
em XML: ferramentas, linguagens e tecnologias

2
Assuntos abordados

Por que XML? Onde usar XML?


Como produzir documentos XML
Documentos válidos: DTD e XML Schema
Manipulação via programação em DOM e SAX
Transformação: XSLT e XPath
Localização e extração: XLink, XQuery e XPointer
Visualização: XSL-FO e SVG
Demonstração: geração de HTML, RTF e PDF
Ferramentas e Conclusões
3
O que é XML?

§ eXtensible Markup Language: padrão W3C


§ Uma maneira de representar informação
§ não é uma linguagem específica
§ não define vocabulário de comandos
§ não define uma gramática, apenas regras mínimas
§ Exemplo: documento XML
usuario_33.xml

<contato codigo="33">
<nome>Severino Severovitch</nome>
elemento
<email>bill@norte.com.br</email>
<telefone tipo="celular">
<area>11</area>
atributo
<numero>9999 4321</numero>
</telefone>
"nó" de texto
</contato>
4
XML versus HTML

HTML mostra <h1>Severino Severovitch</h1>


como <h2>bill@norte.com.br</h2>
apresentar <p>
<b>11</b>
<i>9999 4321</i>
</p>

XML mostra <nome>Severino Severovitch</nome>


o que <email>bill@norte.com.br</email>
<telefone>
significa <ddd>11</ddd>
<numero>9999 4321</numero>
</telefone>

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>

§ Menor documento contendo elemento vazio Elemento raiz

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

§ Menor documento contendo elemento e conteúdo texto

<nome> Ñåâåðèíî Ñåâåðîâè÷ </nome>

Etiqueta Conteúdo do Etiqueta


inicial Elemento final
6
Partes de um documento
elemento raiz declaração XML nó raiz ( / )

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


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> elementos
<numero>2313011</numero>
</telefone>
</cartao-simples>

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

§ Limita o escopo de elementos


§ Evita conflitos quando duas linguagens se cruzam no
mesmo documento
§ Consiste da associação de um identificador a cada
elemento/atributo da linguagem, que pode ser
§ herdado através do escopo de uma sub-árvore
§ atribuído explicitamente através de um prefixo
§ Exemplo prefixo identificador

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

§ 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 permitirá semântica na Web
§ Elementos HTML não carregam significado, apenas dicas
de formatação: mecanismos de busca ficam prejudicados
§ Solução com XML dependerá de suporte dos clientes
10
Onde usar XML?
§ Dados armazenados em XML podem ser facilmente
transformados em outros formatos
texto "custom" <xml> Web
XML <xml> WML
VoiceXML
HTML
CSS
<xml> VRML JavaScript
<xml>
<xml> XSLT
W

XSL-FO PDF RTF


DOM PDF
PDF TeX
SAX
SGML
Gráficos SVG
Imagens PDF e
SGBD PostScript
JPG e PNG 2000 2001
11
Como produzir XML

§ Criando um documento de texto Unicode a partir


de qualquer editor de textos
<contato codigo="33">
<nome>Severino Severovitch</nome>
<email>bill@norte.com.br</email>
<telefone tipo="celular">
<area>11</area>
<numero>9999 4321</numero>
</telefone>
</contato>

§ Gerando um documento a partir de uma árvore


montada dinamicamente
33 <contato codigo="33">
<nome>Severino Severovitch</nome>
Severino Severovitch <email>bill@norte.com.br</email>

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

§ 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
§ 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
13
XML válido
§ Um XML bem construído pode não ser válido em
determinada aplicação
§ Aplicação típica pode esperar que
§ elementos façam parte de um vocabulário limitado,
§ certos atributos tenham valores e tipos definidos,
§ elementos sejam organizados de acordo com uma
determinada estrutura hierárquica, etc.
§ É preciso especificar a linguagem!
§ Esquema: modelo que descreve todos os elementos,
atributos, entidades, suas relações e tipos de dados
§ Um documento XML é considerado válido em relação a
um esquema se obedecer todas as suas regras

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

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


usando XML
§ Pode ser estabelecido "informalmente" (via software)
§ Uso formal permite validação usando ferramentas
genéricas de manipulação de XML
§ Soluções
DTD XSchema
<!ELEMENT contato <xsd:schema
(nome, email, telefone)> xmlns:xsd=".../XMLSchema">
<!ATTLIST contato <xsd:element name="contato">
codigo NMTOKEN #REQUIRED> <xsd:complexType>
<xsd:attribute name="codigo"
use="required">

• Simples mas não é XML • É XML, porém mais complexo


• Não suporta namespaces • Suporta namespaces
• Limitado quando a tipos de dados • Permite definição de tipos
16
Visualização em um browser

§ Folha de estilo: conjunto de regras para formatar ou


transformar as informações de um documento XML
§ CSS - Cascading Style Sheets
§ Transformação visando apresentação visual
§ Aplicação do estilo em tempo de execução no cliente
§ XSLT - eXtensible Stylesheet Language
§ Transformação em texto, HTML ou outro formato
§ Aplicação em tempo real ou prévia (no servidor)
§ Se não estiver associado a uma folha de estilo, o
documento XML não tem uma "aparência" definida
§ Internet Explorer e outros mostram a árvore-fonte XML
§ Netscape mostra apenas os nós de texto
17
Como manipular XML?

§ Há duas APIs padrão para manipular (interpretar,


gerar, extrair dados e tratar eventos) arquivos XML:
§ W3C Document Object Model (W3C DOM)
§ Simple API for XML (SAX)
§ Servem a finalidades diferentes
§ Implementações disponíveis em várias linguagens
§ SAX oferece métodos que respondem a eventos
produzidos durante a leitura do documento
§ notifica quando um elemento abre, quando fecha, etc.
§ DOM monta uma árvore, que permite a
navegação na estrutura do documento
§ propriedades dos objetos podem ser manipuladas
18
Leitura de XML com SAX

§ Se um processador SAX receber o documento ...


<carta>
<mensagem id="1">Bom dia!</mensagem>
</carta>
§ ... ele irá disparar a seguinte seqüência de eventos:
startDocument()
startElement("carta", [])
startElement("mensagem", [Attribute("id","1")])
characters("Bom dia!")
endElement("mensagem")
endElement("carta")
endDocument()
§ Programador deve implementar um objeto "ouvinte" para
capturar os eventos e extrair as informações desejadas
19
Criação de documentos com DOM (1)

§ Criação dos elementos


/ Document Obter objeto do tipo Document (raiz)
(dependente de processador): doc
<carta> Element carta = doc.createElement("carta")

<mensagem> Element mens = doc.createElement("mensagem")

Bom dia! String texto = doc.createTextNode("Bom dia!")

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

carta.appendChild(mens) Bom dia!

<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

celular • Relativos ao contexto /contato:


11 @codigo (ou ./@codigo)
9999 4321 telefone/@tipo (ou ./telefone/@tipo)
telefone/numero/text()

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


§ Usadas em XSLT, XLink, XQuery e XPointer
* pode também ser padrão de busca 22
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="livro/titulo"> XSLT
<td><xsl:value-of select="." /></td>

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

§ Considere o seguinte documento-fonte:


<aeronave id="PTGWZ">
<origem partida="08:15">Rio de
Janeiro</origem>
<destino>Itabuna</destino>
</aeronave>

/
<aeronave>
@id PTGWZ

<origem> Rio de Janeiro

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

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


<p>A aeronave de prefixo
PTGWZ decolou
de Rio de Janeiro às
8:15
tendo como destino o aeroporto de
Itabuna.</p>

§ Para obter outros resultados e gerar outros formatos


com os mesmos dados, deve-se criar folhas de estilo
adicionais

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

§ XSL Formatting Objects


§ Linguagem XML de descrição de página com os
mesmos recursos que PostScript ou PDF
§ Descreve o layout preciso de texto e imagens
§ Possui centenas de elementos, atributos e propriedades
(que são semelhantes às propriedades do CSS)
§ Páginas são facilmente convertidas para PDF e PostScript
§ Ideal para gerar documentos para impressão (livros, etc.)
§ Normalmente gerada via XSLT
XML
XSLT XML
Processador Documento Documento
FOP
XML XSLT XSLFO PDF
Fonte
28
XSL-FO: menor documento
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
Este é o "<head>"
<fo:layout-master-set> do XSL-FO
<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 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" />

§ W3C Scalable Vector Graphics


§ 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 +
31
Exemplo de SVG

JavaScript

<svg width="10cm" height="10cm">


<g onclick="alert('Clicou no grupo 1!')">
<circle style="fill: red" CSS
cx="3cm" cy="3cm" r="2.5cm" />
<rect style="fill: blue" x="6cm" y="6cm"
height="2.5cm" width="1.5cm" /></g>
<g onclick="alert('Clicou no grupo 2!')">
<circle style="fill: green; opacity: 0.5" XLink
cx="5cm" cy="5cm" r="2cm" /></g>
<a xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="http://www.w3.org/Graphics/SVG">
<text style="color: black; font-family: tahoma;
font-size: 12pt" x="3cm" y="8cm">
SVG é XML</text></a>
</svg>
32
Algumas outras linguagens XML
Classe Classe2
oper(): void oper(): void
oper2(): int 1 * oper2(): int
MathML
WML XMI Classe3
oper(): void
VoiceXML oper2(): int

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

§ XML é uma ótima solução para compartilhar dados


§ Para implementar soluções em gestão de
informações usando XML, pode-se usar
§ DTD ou XSchema para especificar o modelo de dados e validar
as informações
§ As APIs DOM ou SAX para extrair dados dos documentos,
gerar documentos, ler e gravar em bancos de dados
§ XSLT e XPath para transformar os dados em outros formatos
§ XLink, XPointer e XQuery para criar vínculos lógicos entre os
documentos e localizar seus componentes
§ XSL-FO ou XHTML para formatar os dados para impressão ou
visualização na tela (PDF, Word ou Web)
§ SVG para gerar informações em forma de gráfico vetorial
36
Fontes
[1] World Wide Web Consortium (W3C). eXtensible Markup Language.
http://www.w3.org/XML/. Ponto de partida e principal fonte sobre XML e suas
tecnologias "satélite". Contém últimas especificações de XML, XPath, XSchema, XSLT,
XSL-FO, XQuery, XLink, XPointer, SVG, XHTML, CSS.
[2] Eric Armstrong et al. Working with XML. Aborda DOM, SAX e XML com Java.
http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/index.html.
[3] Adobe. SVG Tutorial. http://www.adobe.com/svg/. Contém tutorial sobre SVG e
links para o plug-in SVG da Adobe (Win/Mac).
[4] IBM Developerworks. http://www-106.ibm.com/developerworks/. Diversos tutoriais
e artigos sobre XML, XSLT, DOM e SAX usando geralmente Java.
[5] Doug Tidwell. XSLT. O’Reilly & Associates, 2001. Explora XSLT com aplicações
práticas em Java.
[6] Elliotte Rusty Harold. XML Bible, Second Edition, 2001. Aborda todas as
principais tecnologias W3C. 5 capítulos em http://cafeconleche.org/books/bible2/
[7] Erik T. Ray. Learning XML. O’Reilly & Associates, 2001. Introdução ao XML e
DTD, XSLT, XLink e XPointer (os dois últimos baseados em especificações draft).
37
helder@ibpinet.net

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

§ XML não estabelece nenhum vocabulário mas


apenas regras mínimas de estrutura
§ Para criar o menor arquivo XML possível:
§ Abra um editor de textos
§ Salve o arquivo com extensão .xml
§ Escreva um elemento raiz vazio
<x/>
§ Salve o arquivo
§ Abra no Internet Explorer

2
Um dos menores documentos XML

<nome> Fulano de Tal </nome>

Elemento raiz
§ Um elemento

<nome> Fulano de Tal </nome>

Etiqueta Conteúdo do Etiqueta


inicial Elemento final

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

§ Só podem conter um descendente (só 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>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

§ São constantes associadas a um valor de texto


§ Podem aparecer em qualquer lugar do documento
§ Substituídas durante o processamento do documento
§ Sintaxe:
§ &ENTIDADE;
§ Exemplo:
§ &data_de_hoje;
§ Entidades pré-definidas:
§ &lt; que corresponde a <
§ &gt; que corresponde a >
§ &amp; que corresponde a &
§ &quot; que corresponde a "
§ &apos; que corresponde a '
12
Entidades de caracteres

§ Substituídas durante o processamento do documento


§ Sintaxe:
§ &#CÓDIGO_16b_decimal;
§ &#xCÓDIGO_16b_hexadecimal;
§ Exemplo:
§ &#x0020; ou &#32;
§ Um espaço em Unicode
§ Veja em www.unicode.org/charts/

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 &apos; e &quot;
§ 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

§ 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 ou
§ número

17
Identificadores

§ Elementos bem formados


<α ρ ι σ τ ο τ ε λ ε σ > π ε ρ ι π ο ι η τ ι κ η σ </ α ρ ι σ τ ο τ ε λ ε σ >
<êíèãà xml:lang='ru'>
<íàçâàíèå>Åâãåíèé Îíåãèí</íàçâàíèå>
<àâòîð ðîæäåíèå="1799"
ñìåðòü="1837">Àëåêñàíäð Ñåðãååâè÷ Ïóæêèí</àâòîð>
</êíèãà>
<_1_/>
<cdd:gen.inf cdd:cod="005">Introdução a XML</cdd:gen.inf>

§ Elementos mal formados


<3-intro>Fundamentos</3-intro>
<cartão de crédito>1234567887654321</cartão de crédito>

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

§ Ignora efeitos especiais dos caracteres

<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

§ Instruções dependentes do processador


§ Funcionam como comentários para os processadores
que não a conhecem

<?nome-do-alvo área de dados ?>

<?query-sql select nome,


email
from agenda
where id=25 ?>

21
Comentários

§ Iguais aos comentários HTML

<!-- Isto é um comentário -->

<!-- isto é um erro -- sério! -->

22
Declaração XML

§ Opcional (exceto queno conjunto de


caracteres usado for diferente de UTF-8

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

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


§ Serve para apontar para um recurso ou parte do
documento
§ Para apontar para um recurso descoberto por uma
expressão XPath
xpointer(expressão)
§ Quando há campos marcados com ID no documento
destino, pode-se usar um ponteiro
#ponteiro
xpointer(expressão)#ponteiro

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

§ Converter para um formato mais útil


§ Atualizar documentos escritos em uma aplicação XML
obsoleta
§ Devolver resultados adequados para o cliente que irá usá-
los
§ Gerar formatos para
§ exibição
§ depuração
§ edição
§ transmissão

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

§ A transformação XSL pode ocorrer em várias etapas,


no cliente e/ou no servidor
§ No servidor, há maior flexibilidade:
§ Arquivos XML podem ser mesclados
§ Informações podem ser extraídas de vários arquivos para
inclusão em outro arquivo
§ Por exemplo: um índice
§ Arquivo resultante pode ser XML, HTML, RTF ou
qualquer outro formato
§ Browser não precisa suportar XML

5
Transformação XSL no cliente

§ Em browsers que suportam XML e XSL, a


transformação dos dados pode ser realizada no
cliente
§ Browser deve ser capaz de entender XML e XSL
§ O resultado gerado pode ser XML ou HTML 4.0 (para
maior suporte)
§ Além da transformação XSL, no servidor ou cliente, a
página pode ainda ser formatada com CSS.

6
Transformação XSLT
§ No servidor

Servidor CSS Cliente

XML CSS HTML


Página
XSL

§ No cliente

Servidor CSS CSS Cliente


XML XML
Página
XSL XSL
7
Fundamentos de transformação
§ A transformação XSLT é realizada sobre a árvore de um
documento-fonte
§ Todos os nós do documento são acessíveis. Tipos de nó
disponíveis:
§ Elemento
§ Atributo
§ Texto
§ Comentário
§ Instrução de processamento
§ Namespace
§ Raiz

8
XSLT: documento-fonte (1)

§ Considere o seguinte documento-fonte:


<aeronave id="PTGWZ">
<origem partida="08:15">Rio de
Janeiro</origem>
<destino>Itabuna</destino>
</aeronave>

/
<aeronave>
@id PTGWZ

<origem> Rio de Janeiro

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

§ Elementos XSLT geralmente são usados com um prefixo


associado ao seu namespace: <xsl:elemento> para evitar
conflitos com o documento-resultado.
10
XSLT: documento-resultado (3)

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


<p>A aeronave de prefixo
PTGWZ decolou
de Rio de Janeiro às
8:15
tendo como destino o aeroporto de
Itabuna.</p>

§ Para obter outros resultados e gerar outros formatos


com os mesmos dados, deve-se criar folhas de estilo
adicionais

11
<template>

§ Bloco para transformação recursiva


§ Atributo match: contém expressão XPath para
localização de padrão (não é caminho)
§ Nó de contexto: dentro do <template>, todas as
expressões XPath são relativas ao nó corrente e lista de
nós correntes
Padrão para combinação

<xsl:template match="elem/filho">
[[[<xsl:value-of select="." />]]]
</xsl:template>
Caminho relativo
12
<value-of>

§ Imprime o valor do nó indicado pelo seu atributo


"select"
§ Converte todo o conteúdo para texto
§ Caminho relativo ao nó corrente.
<xsl:template match="contxt">
<xsl:value-of select="elemento" />
</xsl:template>
§ No exemplo acima, select seleciona qualquer nó que
contenha o string contxt/elemento
§ Use "." para valor de elemento corrente
§ Use "/" para referir-se a caminhos absolutos

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>

§ Para produzir resultados diferentes de XML e definir


formato de dados de saída
§ texto
<xsl:output method="text" />
§ html
<xsl:output method="html" />
§ xml com DTD
<xsl:output method="xml"
doctype-public="-//PID//EN"
doctype-system="arquivo.dtd" />
§ Formatos diferentes de UTF-8
<xsl:output encoding="iso-8859-1" />

15
<apply-templates>

§ Faz chamada recursiva a próximo template (se não


tiver argumentos) ou indicado em atributo select
<xsl:template match="elemento">
Item 1: <xsl:apply-templates select="filho1"/>
Item 2: <xsl:apply-templates select="filho2"/>
</xsl:template>

<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

§ Como selecionar um ou mais nós da árvore-fonte?


§ Caminhos (location paths)
§ levam até um nó ou um conjunto de nós através de passos de
navegação na árvore de um documento.
§ Padrões de combinação (match patterns)
§ um tipo especial de caminho
§ levam até um nó ou conjunto de nós através de combinação
de padrões
§ não permite o uso de eixos ascendentes (..)

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

§ Seqüência de passos até um determinado conjunto


de nós (node set)
§ Exemplo:
§ /raiz/elemento/filho/neto
§ ../../primo[3]
§ Dois tipos
§ absolutos: começam no nó raiz (iniciam com "/")
§ relativos: começam no nó do contexto (context node)

21
Padrões de combinação

§ São traduzidos em caminhos


§ Usados para combinação
§ Exemplo: <xsl:template match="...">
§ Resolvidos da direita para a esquerda
§ Não podem conter eixos ascendentes
§ Não pode: ../elemento
§ Pode: //elemento ou /ancestral//elemento
§ Devem ser a mais simples expressão que localize
o(s) nó(s) desejado(s)

22
Caminhos vs. Padrões

§ A expressão "nome" terá resultados


diferentes se a expressão for um pessoas
caminho ou um padrão
§ Caminho: [contexto atual]/nome
§ Padrão: [quaisquer ancestrais]/nome pessoa pessoa pessoa

§ Na árvore ao lado, se o nó de nome nome nome


contexto for <pessoas>
§ o caminho devolverá um conjunto vazio Fulano Sicrano Beltrano
§ o padrão devolverá um conjunto de três nós

23
Onde usar padrões/caminhos

§ Atributos XSLT match, recebem padrões para


instanciar templates:
§ <xsl:template match="autor"> ...
§ <xsl:template match="livro//pagina[25]"> ...
§ Atributos XSLT select e test, usados dentro dos
templates, recebem caminhos:
§ <xsl:value-of select="../livro/titulo" />
§ <xsl:for-each select="@numero" > ...

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 &gt; 3) and not(9 &lt; 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() &gt; 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>

§ Permite processar um conjunto de nós dentro da


mesma regra de template (sem usar recursão)
§ <xsl:template match="livro">
<xsl:for-each select="capitulo">
<xsl:value-of select="position()" />
<xsl:text>. </xsl:text>
<xsl:value-of select="titulo" />
</xsl:for-each>
</xsl:template>

28
<for-each> e <sort>

§ <sort> pode ser usado dentro de <for-each> para


ordenar os elementos
§ <xsl:template match="indice">
<xsl:for-each select="assunto">
<xsl:sort select="@codigo_dewey" />
<xsl:value-of select="@codigo_dewey" />
<xsl:text>: </xsl:text>
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>

29
XSL Formatting Objects

§ Aplicação XML para descrever o layout preciso de


texto e imagens em uma página
§ 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)
§ Típicamente, se cria um XSLT que gera FO a partir de
uma fonte XML

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>

§ Raiz do documento XSL-FO


§ Define o namespace
§ http://www.w3.org/1999/XSL/Format
§ Uso típico
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
...
</fo:root>
§ Normalmente, documentos FO são gerados com XSLT
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:apply-templates />
</fo:root>
</xsl:template>

32
Estrutura do documento

§ O elemento <root> deve conter


§ Um <layout-master-set> que contém "mestres de
layout"
§ definem 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 (e o único atualmente
suportado pelos processadores) é <simple-page-master>
§ 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>

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-before /> • Margens do <simple-page-master>


limitam a área de impressão
• <region-body> ocupa todo o espaço
restante
<region-start />

• Outras regiões opcionais podem ser

<region-end />
definidas sobre <region-body>

margin-right
margin-left

<region-body /> <region-before extent="2cm"/>


<region-end extent="1cm"/>
• Margens de <region-body> devem ser
iguais ou maiores que os extent das
regiões marginais
<region-body margin-left="2.7cm"
margin-right="1.2cm"
<region-after /> margin-bottom="2.1cm"
margin-bottom margin-top="2.2cm" />

36
XSLT

§ Layout geralmente permanece fixo em folha XSLT+FO


<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-before extent="2cm"/>
<fo:region-end extent="1cm"/>
<fo:region-after extent="1.9cm"/>
<fo:region-start extent="2.5cm"/>
<fo:region-body margin-left="2.7cm"
margin-right="1.2cm"
margin-bottom="2.1cm"
margin-top="2.2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-name="p1">
<xsl:apply-templates />
</fo:page-sequence>
</fo:root>
</xsl:template>
37
Conteúdo

§ O conteúdo do documento pode estar


§ Em blocos <flow>, que criam nova página quando o
texto preenche o espaço disponível na atual
§ Em blocos <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:
§ <fo:static-content flow-name="xsl-region-start"> ...
§ <fo:flow flow-name="xsl-region-body"> ...
§ Blocos
§ Dentro de <flow> ou <static-content>, conteúdo deve
estar em blocos: <block>, <list-block>, <table>, etc.
38
Blocos de conteúdo
<fo:page-sequence master-name="p1" font-size="8pt">
<fo:static-content flow-name="xsl-region-after">
<fo:block>
Este bloco de
<fo:leader leader-pattern="rule" conteúdo estático está
leader-length="16cm" /> associado com
region-after
</fo:block>
<fo:block text-align="end">página
<fo:page-number/>
</fo:block>
</fo:block> Este bloco de
conteúdo de fluxo está
</fo:block> associado com
</fo:static-content> region-body

<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">
&#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>

43
<external-graphic>

§ Permite incluir uma imagem na página


§ Objeto inline
§ <fo:block>
<fo:external-graphic src="moe.gif"/>
</fo:block>
§ <fo:block>
<fo:external-graphic
src="http://www.x.com/moe.gif"/>
</fo:block>

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>

§ Permite embutir outra linguagem XML na página


<fo:instream-foreign-object>
<svg:svg
xmlns:svg="http://www.w3.org/2000/svg"
width="300" height="300"
viewbox="0 0 300 300">
<svg:circle style="fill: green"
r="50" cx="150" cy="150" />
</svg:svg>
</fo: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

§ Document Object Model


§ Objetivo: oferecer uma interface de programação
uniforme, independente de plataforma e linguagem,
para aplicações que manipulam XML
§ OMG IDL
§ Serve para
§ criar um novo documento XML
§ navegar na árvore XML
§ modificar, remover ou adicionar nós (elementos,
atributos, texto, comentários, PIs, etc.)

4
SAX

§ Simple API for XML


§ Baseada em eventos
§ Dispara eventos durante processamento do
documento
§ eventos podem ser capturados por 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
§ ...

5
SAX vs. DOM

§ Não são concorrentes


§ DOM é ideal para manipular a árvore XML
recursivamente
§ SAX é ideal para ler o documento seqüencialmente
§ DOM requer carga de todo o documento: consome mais
memória
§ SAX não "lembra" de tarefas realizadas: não serve para
validar referências cruzadas
§ Nos processadores Crimson e Xerces, SAX é usada
para montar a árvore DOM

6
SAX: operações

§ Se um processador SAX receber o documento ...


<carta>
<mensagem id="1">Bom dia!</mensagem>
</carta>
§ ... ele irá disparar a seguinte seqüência de eventos:
startDocument()
startElement("carta", [])
startElement("mensagem", [Attribute("id","1")])
characters("Bom dia!")
endElement("mensagem")
endElement("carta")
endDocument()
§ Programador deve implementar um objeto "ouvinte" para
capturar os eventos e extrair as informações desejadas
7
SAX: exemplo em Java (trecho)
public void characters(char[] ch, int start, int length) {
for (int i = start; i < length; i++) {
System.out.println(ch[i]);
}
}

public void startElement(String uri, String localName,


String qName, Attributes att) {
System.out.print("<" + qName);
for (int i = 0; i < att.getLength(); i++) {
System.out.print(" " + att.getQName(i) + "='"
+ att.getValue(i) + "'");
}
System.out.println(">");
}

public void endElement(String uri, String localName,


String qName) {
System.out.println("</" + qName + ">");
}
8
DOM: 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

§ DOM usa constantes para identificar tipos de nó


(nodeType)
§ Constante (opcional) Tipo valor
ELEMENT_NODE Element 1
ATTRIBUTE_NODE Attr 2
TEXT_NODE Text 3
CDATA_SECTION_NODE CDATASection 4
ENTITY_REFERENCE_NODE EntityReference 5
ENTITY_NODE Entity 6
PROCESSING_INSTRUCTION_NODE ProcessingInstruction 7
COMMENT_NODE Comment 8
DOCUMENT_NODE Document 9
DOCUMENT_TYPE_NODE DocumentType 10
DOCUMENT_FRAGMENT_NODE DocumentFragment 11
NOTATION_NODE Notation 12
12
Para usar DOM
§ É preciso obter uma instância do documento (forma de
fazer isto depende de processador)
§ Internet Explorer ≠ Netscape
§ Xerces ≠ JAXP ≠ JDOM ≠ IBM Parser ≠ MSXML
§ IE (data island): <xml id="xdoc"></xml>
Código pode manipular referência xdoc e obter raiz
xdoc.async = false; // desabilita threads
xdoc.load("arquivo.xml");
document = xdoc; // Este é o elemento raiz
ou
var xdoc = new ActiveXObject("Microsoft.XMLDOM");
xdoc.load("arquivo.xml")
§ Java JAXP
§ Criar uma instância a patir de DocumentBuilderFactory
13
Ilhas de dados XML (só MSXML)
§ Elemento HTML (Internet Explorer) que possibilita a
integração HTML-XML
§ Permite embutir em uma página HTML (gerada ou não
dinamicamente) um arquivo XML
§ Arquivo pode ainda ser transformado por XSLT no momento da
inclusão e receber formatação CSS
§ Sintaxe:
<xml id="identificador">
... código XML ..
</xml>
§ O identificador é necessário para possibilitar a
manipulação dos dados na página
§ O arquivo também pode ser importado
<xml id="identificador" href="arquivo.xml"></xml>
14
Ilhas de dados (exemplo) (1)

§ Pode-se inserir XML em HTML da seguinte forma


<xml id="note">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this
weekend!</body>
</note>
</xml>
§ Ou importando de um arquivo externo
<xml id="note" src="note.xml"> </xml>

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

Vous aimerez peut-être aussi