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>
<email>[email protected]</email>
<telefone tipo="celular">
<area>11</area>
<numero>9999 4321</numero>
</telefone>
</contato>
elemento
atributo
"nó" de texto
4
XML versus HTML
HTML mostra
como
apresentar
XML mostra
o que
significa
<h1>Severino Severovitch</h1>
<h2>[email protected]</h2>
<p>
<b>11</b>
<i>9999 4321</i>
</p>
<nome>Severino Severovitch</nome>
<email>[email protected]</email>
<telefone>
<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
<nome></nome>
=
Elemento raiz
<nome/>
§ Menor documento contendo elemento e conteúdo texto
<nome> Ñåâåðèíî Ñåâåðîâè÷ </nome>
Etiqueta
inicial
Conteúdo do
Elemento
Etiqueta
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>[email protected]</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
[email protected]
nome
nome
endereco
endereco
Alberto
Santos
Dumont
logotipo
logotipo
numero
numero
ddd
ddd
tipo
tipo
21
2313011
residencial
href
href
/imagens/logo14bis.gif
LEGENDA
telefone
telefone
Rua do Encanto, 22 2o. andar - Centro
- 25600-000 Petrópolis - RJ
nó de elemento
nó de atributo
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>[email protected]</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>
XML <xml>
<xml>
<xml>
<xml>
WML
VoiceXML
Web
HTML
CSS
JavaScript
VRML
XSLT
W
DOM
SAX
SGBD
Gráficos SVG
Imagens
JPG e PNG
XSL-FO
2000 2001
PDF
PDF
PDF
RTF
TeX
SGML
PDF e
PostScript
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>[email protected]</email>
<telefone tipo="celular">
<area>11</area>
<numero>9999 4321</numero>
</telefone>
</contato>
§ Gerando um documento a partir de uma árvore
montada dinamicamente
33
Severino Severovitch
[email protected]
celular
11
9999 4321
<contato codigo="33">
<nome>Severino Severovitch</nome>
<email>[email protected]</email>
<telefone tipo="celular">
<area>11</area>
<numero>9999 4321</numero>
</telefone>
</contato>
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 à
especificação (válidos)
Documento
fora da
especificação
§ O esquema representa uma classe
§ Os documentos são instâncias
Esquema (universo de
documentos válidos)
Como definir esquemas:
DTD - Document Type Definition
W3C XML Schema
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
<!ELEMENT contato
(nome, email, telefone)>
<!ATTLIST contato
codigo NMTOKEN #REQUIRED>
• Simples mas não é XML
• Não suporta namespaces
• Limitado quando a tipos de dados
XSchema
<xsd:schema
xmlns: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
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
<carta>
Obter objeto do tipo Document (raiz)
(dependente de processador): doc
Element
<mensagem>
Bom dia!
Element
String
carta = doc.createElement("carta")
mens = doc.createElement("mensagem")
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
33
Severino Severovitch
[email protected]
celular
11
9999 4321
/contato/@codigo
/contato/telefone/@tipo
/contato/telefone/numero/text()
• Relativos ao contexto /contato:
@codigo (ou ./@codigo)
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">
<td><xsl:value-of select="." /></td>
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
fonte.xml
Documento
Fonte
Processador XSLT
Xalan, TrAX, Saxon
Netscape, I. Explorer
Documento
Resultado
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>
§ Árvore-fonte
Rio de Janeiro
@partida
<destino>
08:15
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">
<fo:region-body/>
XSL-FO
§ XSL Formatting Objects
§ Linguagem XML de descrição de página com os
mesmos recursos que PostScript ou PDF
§ Descreve o layout preciso de texto e imagens
§ Possui centenas de elementos, atributos e propriedades
(que são semelhantes às propriedades do CSS)
§ Páginas são facilmente convertidas para PDF e PostScript
§ Ideal para gerar documentos para impressão (livros, etc.)
§ Normalmente gerada via XSLT
XML
XSLT
XML
Fonte
Processador
XSLT
XML
Documento
XSLFO
FOP
Documento
PDF
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/>
Ligação entre as
</fo:simple-page-master>
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>
<h1>Página XHTML</h1>
XHTML
§ eXtensible HTML
§ Linguagem XML de descrição de página Web
§ Mesmos elementos do HTML 4.0 Strict
§ Elementos descrevem somente a estrutura dos
componentes da página.
§ A forma precisa ser especificada usando CSS: não há
elementos/atributos para mudar cor, alinhamento, etc.
§ Pode ser misturada (estendida) com outras linguagens
XML (MathML, SVG, linguagens proprietárias)
§ Normalmente gerada via XSLT
XML
XSLT
XML
Documento
Fonte
XML
Processador XSLT
Documento
XHTML
30
<svg>
<circle style="fill: red" cx="3cm" cy="3cm" r="2.5cm" />
<rect style="fill: blue" x="6cm" y="6cm"
height="2.5cm" width="1.5cm" />
SVG
§ 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!')">
CSS
<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" /></g>
<g onclick="alert('Clicou no grupo 2!')">
<circle style="fill: green; opacity: 0.5"
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>
XLink
32
Algumas outras linguagens XML
Classe
oper(): void
oper2(): int
MathML
WML
VoiceXML
1
XMI
*
Classe2
oper(): void
oper2(): int
Classe3
oper(): void
oper2(): int
Web Services
SOAP
WSDL
UDDI
XML-RPC
CML
ebXML
33
Demonstração
§ Exemplo de transformação XML
PDF
FOP
<xslt>
FO
(1)
<xml>
(1.b)
Xalan
<xslt>
Texto
<xsl:fo>
(1.a)
(3)
<xslt>
SVG
JFOR
W
(4)
(2)
Texto texto
texto texto
texto texto
texto texto
texto
<xslt>
HTML
HTML
2000 2001
SVG
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
[email protected]
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
inicial
Conteúdo do
Elemento
Etiqueta
final
3
Elemento vazio
<nome></nome>
<nome/>
4
Elementos podem conter elementos
fulano_de_tal.xml
<contato>
<nome>Fulano de Tal</nome>
<email>[email protected]</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
pelo processador XML
<cartao-simples>
<logotipo href="/imagens/logo14bis.gif" />
<nome>Alberto Santos Dumont</nome>
<endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrópolis - RJ</endereco>
<email>[email protected]</email>
um "nó" pode ser ...
<telefone tipo="residencial" >
• um elemento,
<ddd>21</ddd>
• um atributo,
• um bloco de texto,
<numero>2313011</numero>
• um comentário,
</telefone>
• uma instrução,
</cartao-simples>
• uma declaração,
• uma entidade, ... 7
Prólogo
Declaração XML
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>[email protected]</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>[email protected]</email>
<telefone tipo="residencial" >
<ddd>21</ddd>
elementos
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>[email protected]</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>[email protected]</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
<cartao>
Esta URI
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>[email protected]</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">
URI padrão
<ct:nome>Fulano
<ct:nome>Fulano de
de Tal</ct:nome>
Tal</ct:nome>
XHTML
<nome>Contabilidade</nome>
<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á
substituído...
xlink:href="#end"
.. 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
no documento...
xlink:href="12345.jpg"
.. quando o
xlink:show="embed"
documento for
carregado.
xlink:actuate="onLoad" />
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
fonte.xml
Documento
Fonte
Processador XSLT
Xalan, TrAX, Saxon
Netscape, I. Explorer
Documento
Resultado
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
XML
CSS
CSS
Cliente
HTML
Página
XSL
§ No cliente
Servidor CSS
CSS
XML
XML
XSL
XSL
Cliente
Página
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>
§ Árvore-fonte
Rio de Janeiro
@partida
<destino>
08:15
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
pessoas
diferentes se a expressão for um
caminho ou um padrão
§ Caminho: [contexto atual]/nome
§ Padrão: [quaisquer ancestrais]/nome
§ Na árvore ao lado, se o nó de
contexto for <pessoas>
§ o caminho devolverá um conjunto vazio
§ o padrão devolverá um conjunto de três nós
pessoa
pessoa
pessoa
nome
nome
nome
Fulano Sicrano Beltrano
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/>
Ligação entre as
</fo:simple-page-master>
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" pageheight="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-after />
margin-bottom
margin-right
<region-body />
<region-end />
<region-start />
margin-left
<region-before />
• Margens do <simple-page-master>
limitam a área de impressão
• <region-body> ocupa todo o espaço
restante
• Outras regiões opcionais podem ser
definidas sobre <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"
margin-bottom="2.1cm"
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>
</fo:block>
</fo:static-content>
Este bloco de
conteúdo de fluxo está
associado com
region-body
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="serif" font-size="11pt">
Texto que pode atravessar 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
Attr
Comment
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
ATTRIBUTE_NODE
Attr
TEXT_NODE
Text
CDATA_SECTION_NODE
CDATASection
ENTITY_REFERENCE_NODE
EntityReference
ENTITY_NODE
Entity
PROCESSING_INSTRUCTION_NODE ProcessingInstruction
COMMENT_NODE
Comment
DOCUMENT_NODE
Document
DOCUMENT_TYPE_NODE
DocumentType
DOCUMENT_FRAGMENT_NODE
DocumentFragment
NOTATION_NODE
Notation
1
2
3
4
5
6
7
8
9
10
11
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>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
</CD>
</CATALOG>
<html>
<body>
<xml id="cdcat"
src="cd_catalog.xml"></xml>
<table border="1"
datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html>
Fonte: www.xml101.com
cd_catalog.xml
16
Download

html http