Você está na página 1de 132

XML: uma introduo prtica

<xml:introduo />
Helder da Rocha www.argonavis.com.br
1

Objetivos
Oferecer uma viso geral da tecnologia XML Responder s questes Como implementar solues de gesto de informaes usando XML? Quando e como usar as tecnologias e linguagens que viabilizam o compartilhamento de informaes? Apresentar Breve introduo ao XML e tecnologias relacionadas. Recursos para manipular informaes representadas em XML: ferramentas, linguagens e tecnologias
2

Assuntos abordados
Por que XML? Onde usar XML? Como produzir documentos XML Documentos vlidos: DTD e XML Schema Manipulao via programao em DOM e SAX Transformao: XSLT e XPath Localizao e extrao: XLink, XQuery e XPointer Visualizao: XSL-FO e SVG Demonstrao: gerao de HTML, RTF e PDF Ferramentas e Concluses
3

O que XML?
eXtensible Markup Language: padro W3C Uma maneira de representar informao no uma linguagem especfica no define vocabulrio de comandos no define uma gramtica, apenas regras mnimas Exemplo: documento XML
usuario_33.xml

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

elemento atributo "n" de texto

XML versus HTML


HTML mostra como apresentar

<h1>Severino Severovitch</h1> <h2>bill@norte.com.br</h2> <p> <b>11</b> <i>9999 4321</i> </p> <nome>Severino Severovitch</nome> <email>bill@norte.com.br</email> <telefone> <ddd>11</ddd> <numero>9999 4321</numero> </telefone>

XML mostra o que significa

Anatomia de um documento XML


Documentos XML so documentos de texto Unicode uma hierarquia de elementos a partir de uma raiz Menor documento tem um elemento (vazio ou no):
<nome> </nome>

Menor documento contendo elemento vazio


<nome></nome>

Elemento raiz

<nome/>

Menor documento contendo elemento e contedo texto


<nome> </nome>
Etiqueta inicial Contedo do Elemento Etiqueta final

Partes de um documento
elemento raiz declarao 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 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> <telefone tipo="residencial" > <ddd>21</ddd> elementos <numero>2313011</numero> </telefone> </cartao-simples>

/
cartao-simples cartao-simples

n raiz elemento raiz

rvore XML
email email

nome nome
Alberto Santos Dumont

dumont@14bis.com.br

endereco endereco logotipo logotipo telefone telefone


Rua do Encanto, 22 2o. andar - Centro - 25600-000 Petrpolis - RJ

href href

numero numero tipo tipo


2313011 residencial

ddd ddd

/imagens/logo14bis.gif

LEGENDA

21

n de elemento n de atributo n de texto

XML Namespaces
Limita o escopo de elementos Evita conflitos quando duas linguagens se cruzam no mesmo documento Consiste da associao de um identificador a cada

elemento/atributo da linguagem, que pode ser


herdado atravs do escopo de uma sub-rvore atribudo explicitamente atravs de um prefixo

Exemplo

prefixo

identificador

<cadastro xmlns:firma="01.234.567/0001-99"> <nome>Severino Severovitch</nome> <firma:nome>Sibria Informtica Ltda.</firma:nome> <email>bill@norte.com.br</email> </cadastro> Este elemento <nome> pertence a outro namespace

Por que usar XML para compartilhar dados?


Porque um padro aberto Facilidade para converter para formatos proprietrios Porque texto Fcil de ler, fcil de processar, menos incompatibilidades Porque promove a separao entre estrutura,

contedo e apresentao
Porque permitir semntica na Web Elementos HTML no carregam significado, apenas dicas de formatao: mecanismos de busca ficam prejudicados Soluo com XML depender de suporte dos clientes
10

Facilita gerao de dados para visualizao dinmica Evita repetio de informao / simplifica manuteno

Onde usar XML?


Dados armazenados em XML podem ser facilmente

transformados em outros formatos


texto "custom" <xml> XML <xml> WML VoiceXML Web HTML CSS JavaScript

<xml> <xml> <xml>

VRML

XSLT

W
DOM SAX XSL-FO
PDF PDF PDF RTF TeX SGML PDF e PostScript

SGBD

Grficos SVG Imagens 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 Severino Severovitch bill@norte.com.br celular 11 9999 4321

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

12

Documentos XML bem formados


Para que possa ser manipulado como uma rvore,

um documento XML precisa ser bem formado


Documentos que no so bem formados no so

documentos XML

Documentos bem-formados obedecem as regras de

construo de documentos XML genricos Regras incluem


Ter um, e apenas um, elemento raiz Valores dos atributos estarem entre aspas ou apstrofes Atributos no se repetirem Todos os elementos terem etiqueta de fechamento Elementos estarem corretamente aninhados
13

XML vlido
Um XML bem construdo pode no ser vlido em

determinada aplicao Aplicao tpica pode esperar que elementos faam parte de um vocabulrio limitado, certos atributos tenham valores e tipos definidos, elementos sejam organizados de acordo com uma determinada estrutura hierrquica, etc. preciso especificar a linguagem! Esquema: modelo que descreve todos os elementos, atributos, entidades, suas relaes e tipos de dados Um documento XML considerado vlido em relao a um esquema se obedecer todas as suas regras
14

Esquema
Documentos que aderem especificao (vlidos)

O esquema representa uma classe Os documentos so instncias

Documento fora da especificao

Esquema (universo de documentos vlidos)

Como definir esquemas:

DTD - Document Type Definition W3C XML Schema

15

DTD vs. XML Schema


Um esquema essencial para que haja comunicao

usando XML
Pode ser estabelecido "informalmente" (via software) Uso formal permite validao usando ferramentas

genricas de manipulao de XML


Solues

DTD
<!ELEMENT contato (nome, email, telefone)> <!ATTLIST contato codigo NMTOKEN #REQUIRED>

XSchema
<xsd:schema xmlns:xsd=".../XMLSchema"> <xsd:element name="contato"> <xsd:complexType> <xsd:attribute name="codigo" use="required">

Simples mas no XML No suporta namespaces Limitado quando a tipos de dados

XML, porm mais complexo Suporta namespaces Permite definio de tipos

16

Visualizao em um browser
Folha de estilo: conjunto de regras para formatar ou

transformar as informaes de um documento XML CSS - Cascading Style Sheets


XSLT - eXtensible Stylesheet Language Transformao em texto, HTML ou outro formato Aplicao em tempo real ou prvia (no servidor) Se no estiver associado a uma folha de estilo, o
Transformao visando apresentao visual Aplicao do estilo em tempo de execuo no cliente

documento XML no tem uma "aparncia" definida


Internet Explorer e outros mostram a rvore-fonte XML Netscape mostra apenas os ns de texto
17

Como manipular XML?


H duas APIs padro 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 Implementaes disponveis em vrias linguagens SAX oferece mtodos que respondem a eventos

produzidos durante a leitura do documento


DOM monta uma rvore, que permite a
notifica quando um elemento abre, quando fecha, etc.

navegao 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 seqncia 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 informaes desejadas


19

Criao de documentos com DOM (1)


Criao dos elementos
/ Document

Obter objeto do tipo Document (raiz) (dependente de processador): doc


carta = doc.createElement("carta") mens = doc.createElement("mensagem") texto = doc.createTextNode("Bom dia!")

<carta>

Element Element String

<mensagem> Bom dia!

Atributos
<mensagem id="1">

mens.setAttribute("id", "1")

20

Criao de documentos com DOM (2)


Montagem da rvore passo-a-passo
1. Sub-rvore <mensagem>
<mensagem id="1">

3. rvore completa
/

mens.appendChild(texto)
Bom dia!

<carta>

2. Sub-rvore <carta>
<mensagem id="1"> <carta>

carta.appendChild(mens)
<mensagem id="1">

Bom dia!

doc.appendChild(carta)
Bom dia!

21

XPath
Linguagem usada para navegar na rvore XML Uma expresso XPath um caminho* na rvore que

resulta em um valor (nmero, texto, booleano), objeto (elemento, atributo, n de texto) ou conjunto de objetos Caminhos absolutos
33 Severino Severovitch bill@norte.com.br 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()

Expresses XPath so usadas dentro de atributos XML Usadas em XSLT, XLink, XQuery e XPointer
* pode tambm ser padro 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 criao de documentos que contm regras de transformao para documentos XML Documentos escritos em XSLT so chamados de folhas de estilo e contm
Elementos XSLT: <template>, <if>, <foreach>, ... Expresses XPath para localizar ns 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 Rio de Janeiro @partida <destino> Itabuna 08:15

<origem>

rvore-fonte

24

XSLT: folha de estilos (2)


O seguinte template (parte de uma folha de estilos XSLT)

pode extrair os dados do documento-fonte

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

documento-fonte (em azul - XPath)

Elementos XSLT geralmente so usados com um prefixo

associado ao seu namespace: <xsl:elemento> para evitar conflitos com o documento-resultado.


25

XSLT: documento-resultado (3)


Aps a transformao, 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 especificao W3C que permite definir vnculos

entre documentos XML


Funcionalidade mnima igual ao <a href> do HTML Funcionalidade estendida permite vnculos bidirecionais, arcos,

vrios nveis de semntica, etc. uma coleo de atributos, com namespace prprio, que podem ser usados em elementos de qualquer linguagem XML.
XPointer: aponta para partes de documentos XML Identificador (ID) colocado no destino, accessvel atravs de fragmento de URL: xlink:href="#identificador" Caminho resultante de expresso 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 descrio de pgina com os mesmos recursos que PostScript ou PDF Descreve o layout preciso de texto e imagens Possui centenas de elementos, atributos e propriedades (que so semelhantes s propriedades do CSS) Pginas so facilmente convertidas para PDF e PostScript Ideal para gerar documentos para impresso (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/> Ligao entre as </fo:simple-page-master> regras de layout e </fo:layout-master-set> o contedo afetado <fo:page-sequence master-name="p1"> <fo:flow flow-name="xsl-region-body"> <fo:block color="blue" font-size="20pt"> Hello 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>Pgina XHTML</title></head> <body> <h1>Pgina XHTML</h1>

XHTML

eXtensible HTML Linguagem XML de descrio de pgina Web Mesmos elementos do HTML 4.0 Strict Elementos descrevem somente a estrutura dos componentes da pgina.
A forma precisa ser especificada usando CSS: no h

elementos/atributos para mudar cor, alinhamento, etc.


Pode ser misturada (estendida) com outras linguagens

Normalmente gerada via XSLT


XML

XML (MathML, SVG, linguagens proprietrias)


XSLT
XML XML

Processador XSLT

Documento Fonte

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 Grficos vetoriais em XML Plug-ins para principais browsers: concorre com Flash Suporta animaes, links, JavaScript, CSS Produzido por ferramentas como Adobe Ilustrator Pode ser embutido no cdigo 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


MathML WML VoiceXML
Classe oper(): void oper2(): int
1 *

Classe2 oper(): void oper2(): int

XMI

Classe3 oper(): void oper2(): int

Web Services

SOAP WSDL UDDI

XML-RPC

CML
33

ebXML

Demonstrao
Exemplo de transformao XML
<xslt> FO PDF

FOP

<xml>

(1)

<xsl:fo>

(1.a) (1.b)

Xalan
<xslt> Texto

(3)

<xslt> SVG

JFOR

(4) (2)
<xslt> HTML HTML
2000 2001

Texto texto texto texto texto texto texto texto texto

SVG

34

Ferramentas
Para programao 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 edio (de XML genrico) XML Spy Suite Framemaker / ArborText JEdit com plug-ins para XML, XSLT e XPath Veja mais em www.w3.org/XML/
35

Concluses
XML uma tima soluo para compartilhar dados Para implementar solues em gesto de

informaes usando XML, pode-se usar


DTD ou XSchema para especificar o modelo de dados e validar

as informaes As APIs DOM ou SAX para extrair dados dos documentos, gerar documentos, ler e gravar em bancos de dados XSLT e XPath para transformar os dados em outros formatos XLink, XPointer e XQuery para criar vnculos lgicos entre os documentos e localizar seus componentes XSL-FO ou XHTML para formatar os dados para impresso ou visualizao na tela (PDF, Word ou Web) SVG para gerar informaes em forma de grfico vetorial
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 "satlite". Contm ltimas especificaes 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. SVG Tutorial. http://www.adobe.com/svg/. Contm tutorial sobre SVG e

http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/index.html.
[3] Adobe. [4]

links para o plug-in SVG da Adobe (Win/Mac).

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. OReilly & Associates, 2001. Explora XSLT com aplicaes Rusty Harold. XML Bible, Second Edition, 2001. Aborda todas as

prticas em Java.
[6] Elliotte [7] Erik

principais tecnologias W3C. 5 captulos em http://cafeconleche.org/books/bible2/

T. Ray. Learning XML. OReilly & Associates, 2001. Introduo ao XML e 37

DTD, XSLT, XLink e XPointer (os dois ltimos baseados em especificaes draft).

helder@ibpinet.net

www.argonavis.com.br
38

XML: uma introduo prtica

<xml:fundamentos />
Helder da Rocha www.argonavis.com.br

Como criar um documento XML


XML no estabelece nenhum vocabulrio mas

apenas regras mnimas de estrutura Para criar o menor arquivo XML possvel:
Abra um editor de textos Salve o arquivo com extenso .xml Escreva um elemento raiz vazio

<x/>
Salve o arquivo Abra no Internet Explorer

Um dos menores documentos XML

<nome> Fulano de Tal </nome>


Elemento raiz

Um elemento

<nome> Fulano de Tal </nome>


Etiqueta inicial Contedo do Elemento Etiqueta final

Elemento vazio

<nome></nome>

<nome/>

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 ns, raiz, galhos e folhas Prlogo Comentrios Instrues de processamento Elementos Atributos Ns de texto Entidades
6

Estrutura XML
Um documento XML pode ser representado como uma

rvore. A estrutura formada por vrios ns.

<?xml version="1.0" encoding="iso-8859-1" ?> <!-- Isto um comentrio --> informaes usadas pelo processador XML <cartao-simples> <logotipo href="/imagens/logo14bis.gif" /> <nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> um "n" pode ser ... <telefone tipo="residencial" > um elemento, <ddd>21</ddd> um atributo, um bloco de texto, <numero>2313011</numero> um comentrio, </telefone> uma instruo, </cartao-simples> uma declarao,

uma entidade, ... 7

Prlogo Declarao XML Comentrio Instruo de processamento Declarao de tipo de documento


<?xml version="1.0" encoding="iso-8859-1" ?> <!-- Isto um comentrio --> <?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 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> <telefone tipo="residencial" > <ddd>21</ddd> <numero>2313011</numero> </telefone> </cartao-simples>

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 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> <telefone tipo="residencial" > <ddd>21</ddd> elementos elementos <numero>2313011</numero> </telefone> </cartao-simples>

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 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> <telefone tipo="residencial" > <ddd>21</ddd> <numero>2313011</numero> </telefone> atributos </cartao-simples>

10

Ns de texto
No podem ter descendentes (so as folhas da rvore)
<?xml version="1.0" encoding="iso-8859-1" ?> <cartao-simples> <logotipo href="/imagens/logo14bis.gif" /> <nome>Alberto Santos Dumont</nome> <endereco>Rua do Encanto, 22 - 2o. andar Centro - 25600-000 - Petrpolis - RJ</endereco> <email>dumont@14bis.com.br</email> <telefone tipo="residencial" > <ddd>21</ddd> <numero>2313011</numero> ns de </telefone> texto </cartao-simples>

11

Entidades
So constantes associadas a um valor de texto Podem aparecer em qualquer lugar do documento Substitudas 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
Substitudas durante o processamento do documento Sintaxe: &#CDIGO_16b_decimal; &#xCDIGO_16b_hexadecimal; Exemplo: &#x0020; ou &#32; Um espao em Unicode Veja em www.unicode.org/charts/

13

Elementos e atributos
Regras bsicas Etiqueta inicial e final tm que ter o mesmo nome (considerando diferena de maiscula e minscula) No pode haver espao depois do < nas etiquetas iniciais nem depois do </ nas finais Atributos tm sempre a forma nome="valor" ou nome = 'valor':
aspas podem ser usadas entre apstrofes e apstrofes podem

ser usados entre aspas aspas e apstrofes no podem ser neutralizados mas sempre podem ser representados pelas entidades &apos; e &quot;

No pode haver atributos na etiqueta final


14

Elementos e atributos (2)


Elementos mal formados <Profisso>Arquiteto</profisso> <TR><TD>item um</td></tr> <>139.00</> H vrias maneiras de representar a mesma

informao 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


Questo de design Elementos geralmente referem-se a coisas que tm atributos Atributos geralmente so caractersticas dessas coisas que podem ser descritas com poucas palavras Questo de suporte tecnolgico Atributos no podem conter subelementos Atributos so mais fceis de serem validados num DTD

16

Identificadores
Nomes de atributos e elementos Podem conter qualquer caractere alfanumrico ou ideograma . (ponto) - (hfen) _ (sublinhado) No podem comear com ponto, hfen ou nmero

17

Identificadores
Elementos bem formados
< >
</ >

< xml:lang='ru'> <> </> < ="1799" ="1837"> </> </> <_1_/> <cdd:gen.inf cdd:cod="005">Introduo a XML</cdd:gen.inf>

Elementos mal formados


<3-intro>Fundamentos</3-intro> <carto de crdito>1234567887654321</carto de crdito>

18

Contedo misto
<trecho> <secao>2</secao> <paragrafo>A unidade de informao dentro de um documento XML o <definicao>elemento</definicao>. Um elemento formado por duas <definicao>etiquetas</definicao> que atribuem algum significado ao contedo. </paragrafo> </trecho>

19

Seo CDATA
Ignora efeitos especiais dos caracteres
<titulo>Curso de XML</titulo> <exemplo>Considere o seguinte trecho de XML: <![CDATA[ <empresa> <nome>Joo & Maria S/A</nome> </empresa> ]]> </exemplo>

20

Instrues de processamento
Instrues dependentes do processador Funcionam como comentrios para os processadores

que no a conhecem
<?nome-do-alvo rea de dados ?> <?query-sql select nome, email from agenda where id=25 ?>

21

Comentrios
Iguais aos comentrios HTML
<!-- Isto um comentrio --> <!-isto um erro -- srio! -->

22

Declarao 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 maisculos e minsculos so diferentes) elementos bem aninhados valores de atributos entre aspas ou apstrofes atributos no repetidos identificadores vlidos para elementos e atributos comentrios no devem aparecer dentro das etiquetas sinais < ou & nunca devem ocorrer dentro dos valores dos atributos ou nos ns de texto do documento.

24

XML Namespaces
Permite que elementos de mesmo nome de diferentes

aplicaes sejam misturados sem que haja conflitos Um namespace (universo de nomes) declarado usando atributos reservados
xmlns="identificador" (namespace default)

associa o identificador com todos os elementos que no

possuem prefixo. Ex: <nome>


xmlns:prefixo="identificador"

nome local precedido do prefixo. Ex <prefixo:nome> O prefixo arbitrrio e s existe dentro do documento O identificador (geralmente uma URI) deve ser reconhecido pela aplicao

associa o identificador com os elementos e atributos cujo

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 - Petrpolis - RJ</ct:endereco> <ct:email>dumont@14bis.com.br</ct:email> <ct:telefone tipo="residencial"> <ct:ddd>21</ct:ddd> <ct:numero>2313011</ct:numero> </ct:telefone> </ct:cartao> 26

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 padro <ct:nome>Fulano de Tal</ct:nome> <ct:nome>Fulano de Tal</ct:nome> XHTML <nome>Contabilidade</nome> <nome>Contabilidade</nome> <endereco>Rua Projetada, 33</endereco> <endereco>Rua Projetada, 33</endereco> <html:a href="web.html"> <html:a href="web.html"> <html:strong>link negrito HTML</html:strong> <html:strong>link negrito 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 introduo prtica

<xml:links />
Helder da Rocha www.argonavis.com.br
1

XLink uma coleo de atributos


Namespace: http://www.w3.org/1999/xlink Sete atributos: type = simple | extended | locator | arc | title | resource href = a URI destino do vnculo show = new | replace | embed | other | none actuate = onLoad | onRequest | other | none title = descrio detalhada role = papel / contexto do vnculo label = descrio sucinta (para exibio) Exemplo de uso tpico
<elemento xlink:href="http://lugar.com" />

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


<p xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" Contedo ser substitudo... xlink:href="#end" .. quando o xlink:show="replace" usurio solicitar. xlink:actuate="onRequest">link</p> <img xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" Contedo ser embutido no documento... xlink:href="12345.jpg" .. quando o xlink:show="embed" documento for carregado. xlink:actuate="onLoad" />
3

XPointer
Funo que recebe uma expresso XPath Serve para apontar para um recurso ou parte do documento Para apontar para um recurso descoberto por uma

expresso XPath
xpointer(expresso)

Quando h campos marcados com ID no documento

destino, pode-se usar um ponteiro


#ponteiro xpointer(expresso)#ponteiro

XML: uma introduo prtica

<xml:transformao/>
Helder da Rocha www.argonavis.com.br

Esta aula
Introduo a XSLT fundamentos: principais elementos passo-a-passo: como transformar Fundamentos de XPath linguagem para manipular rvores XSLT outros elementos Fundamentos de XSL-FO Exerccios Gerao de HTML, XHTML, XML, XSL-FO, texto, ...

Por que transformar


Converter para um formato mais til Atualizar documentos escritos em uma aplicao XML obsoleta Devolver resultados adequados para o cliente que ir uslos Gerar formatos para exibio depurao edio transmisso

XSLT
XSL Transformations Linguagem (XML) para criao de documentos que contm regras de transformao para documentos XML Documentos escritos em XSLT so chamados de folhas de estilo e contm
Elementos XSLT: <template>, <if>, <foreach>, ... Expresses XPath para localizar ns da rvore-fonte Texto ou XML a ser gerado no documento-resultado
fonteToHtml.xslt

Processador XSLT
Folha de estilos
fonte.xml

Documento Fonte

Processador XSLT Xalan, TrAX, Saxon Netscape, I. Explorer

Documento Resultado

Transformao XSL
A transformao XSL pode ocorrer em vrias etapas,

no cliente e/ou no servidor No servidor, h maior flexibilidade:


Arquivos XML podem ser mesclados Informaes podem ser extradas de vrios arquivos para

incluso em outro arquivo


Por exemplo: um ndice

Arquivo resultante pode ser XML, HTML, RTF ou

qualquer outro formato Browser no precisa suportar XML

Transformao XSL no cliente


Em browsers que suportam XML e XSL, a

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

Alm da transformao XSL, no servidor ou cliente, a

pgina pode ainda ser formatada com CSS.

Transformao XSLT
No servidor
Servidor XML CSS XSL CSS HTML Pgina Cliente

No cliente
Servidor CSS XML XSL CSS XML XSL Pgina
7

Cliente

Fundamentos de transformao
A transformao XSLT realizada sobre a rvore de um

documento-fonte Todos os ns do documento so acessveis. Tipos de n disponveis:


Elemento Atributo Texto Comentrio Instruo de processamento Namespace Raiz

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 Rio de Janeiro @partida <destino> Itabuna 08:15

<origem>

rvore-fonte

XSLT: folha de estilos (2)


O seguinte template (parte de uma folha de estilos XSLT)

pode extrair os dados do documento-fonte

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

documento-fonte (em azul - XPath)

Elementos XSLT geralmente so usados com um prefixo

associado ao seu namespace: <xsl:elemento> para evitar conflitos com o documento-resultado.


10

XSLT: documento-resultado (3)


Aps a transformao, 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 transformao recursiva Atributo match: contm expresso XPath para localizao de padro (no caminho) N de contexto: dentro do <template>, todas as expresses XPath so relativas ao n corrente e lista de ns correntes
Padro para combinao

<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 contedo 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 espaos, novas-linhas e tabuaes til para controlar forma de impresso do texto <xsl:template match="x"> <xsl:text>Quebra linha depois </xsl:text> </xsl:template> <xsl:template match="y"> <xsl:text>No quebra linha</xsl:text> </xsl:template> Atributo disable-output-escaping="yes" evita

substituio de entidades

14

<output>
Para produzir resultados diferentes de XML e definir

formato de dados de sada


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 prximo template (se no

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 ns da rvore-fonte? Caminhos (location paths)
levam at um n ou um conjunto de ns atravs de passos de

navegao na rvore de um documento.

Padres de combinao (match patterns) um tipo especial de caminho levam at um n ou conjunto de ns atravs de combinao de padres no permite o uso de eixos ascendentes (..)

19

Expresses XPath
Os tipos de expresso so operaes sobre ns da rvore-fonte (caminhos) operaes sobre texto operaes booleanas operaes com resultado numrico Cada tipo de expresso devolve um resultado que

pode ser um tipo de dados


um conjunto de ns (node set) um texto (string) um valor booleano (boolean) um nmero (number)

20

Caminhos
Seqncia de passos at um determinado conjunto

de ns (node set) Exemplo:


/raiz/elemento/filho/neto ../../primo[3]

Dois tipos absolutos: comeam no n raiz (iniciam com "/") relativos: comeam no n do contexto (context node)

21

Padres de combinao
So traduzidos em caminhos Usados para combinao Exemplo: <xsl:template match="..."> Resolvidos da direita para a esquerda No podem conter eixos ascendentes No pode: ../elemento Pode: //elemento ou /ancestral//elemento Devem ser a mais simples expresso que localize

o(s) n(s) desejado(s)

22

Caminhos vs. Padres


A expresso "nome" ter resultados

diferentes se a expresso for um caminho ou um padro


Caminho: [contexto atual]/nome Padro: [quaisquer ancestrais]/nome

pessoas

pessoa nome

pessoa nome

pessoa nome

Na rvore ao lado, se o n de

contexto for <pessoas>


o caminho devolver um conjunto vazio o padro devolver um conjunto de trs ns

Fulano Sicrano Beltrano

23

Onde usar padres/caminhos


Atributos XSLT match, recebem padres para

instanciar templates:
Atributos XSLT select e test, usados dentro dos
<xsl:template match="autor"> ... <xsl:template match="livro//pagina[25]"> ...

templates, recebem caminhos:


<xsl:value-of select="../livro/titulo" /> <xsl:for-each select="@numero" > ...

24

<if>
Bloco condicional Executa se expresso 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>
Ordenao Aplica-se a cada n do conjunto de ns 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 ns dentro da

mesma regra de template (sem usar recurso)


<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


Aplicao XML para descrever o layout preciso de

texto e imagens em uma pgina Elementos representam


Isoladamente, XSL-FO no folha de estilo formato final, com estrutura que visa a apresentao (como XHTML) Tpicamente, se cria um XSLT que gera FO a partir de uma fonte XML
30

Regras para formatao de vrias pginas Layout de pginas individuais, margens, rodaps Hifenao, alinhamento, fontes, cores, leading imagens, grficos, tabelas, listas, links

Hello World
<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/> Ligao entre as </fo:simple-page-master> regras de layout e </fo:layout-master-set> o contedo afetado
Este o "<head>" do XSL-FO

<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 tpico
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> ... </fo:root>

Normalmente, documentos FO so 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 contm "mestres de layout"
definem templates reutilizveis para layout de pginas cada mestre possui um identificador que usado para

associ-lo a um bloco de contedo o tipo de mestre mais simples (e o nico atualmente suportado pelos processadores) <simple-page-master>

Pelo menos um <page-sequence>, onde fica o contedo define uma seqncia de pginas em um documento cada <page-sequence> deve estar associado a um mestre de layout existente contm objetos <flow> e/ou <static-content>
33

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

pgina e contm pelo menos uma regio

master-name do elemento ID para que elementos de contedo

<page-sequence> possam referenci-lo Atributos tpicos (ID e dimenses da pgina) <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"> ... regies afetadas ... </fo:simple-page-master> 34

Regies
H cinco regies <region-body />
obrigatria rea de contedo principal da pgina define um ID implcito (fixo): xsl-region-body, para uso por

elementos de contedo de fluxo ou esttico.

<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

<simple-page-master>

Margens e regies
Margens do <simple-page-master> limitam a rea de impresso <region-body> ocupa todo o espao restante Outras regies opcionais podem ser definidas sobre <region-body>
<region-before extent="2cm"/> <region-end extent="1cm"/>

margin-top

<region-before />

<region-start />

<region-end />

<region-body />

margin-right

margin-left

Margens de <region-body> devem ser iguais ou maiores que os extent das regies marginais
<region-body margin-left="2.7cm" margin-right="1.2cm" margin-bottom="2.1cm" margin-top="2.2cm" />

<region-after />
margin-bottom

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

Contedo
O contedo do documento pode estar Em blocos <flow>, que criam nova pgina quando o texto preenche o espao disponvel na atual Em blocos <static-content>, que so repetidos em todas as pginas da seqncia. Regies Cada bloco de contedo deve estar associado a uma regio existente atravs do atributo flow-name:
<fo:static-content flow-name="xsl-region-start"> ... <fo:flow flow-name="xsl-region-body"> ...

Blocos Dentro de <flow> ou <static-content>, contedo deve estar em blocos: <block>, <list-block>, <table>, etc.
38

Blocos de contedo
<fo:page-sequence master-name="p1" font-size="8pt"> <fo:static-content flow-name="xsl-region-after"> <fo:block> Este bloco de <fo:leader leader-pattern="rule" contedo esttico est leader-length="16cm" /> associado com
region-after

</fo:block> <fo:block text-align="end">pgina <fo:page-number/> </fo:block> </fo:block> </fo:block> </fo:static-content>

Este bloco de contedo de fluxo est associado com region-body

<fo:flow flow-name="xsl-region-body"> <fo:block font-family="serif" font-size="11pt"> Texto que pode atravessar pginas. </fo:block> </fo:flow> </fo:page-sequence>

39

Blocos
Os elementos <flow> e <static-content> devem conter

elementos de bloco
<block> Bloco de propsito geral <list-block> Bloco que contm itens de lista <table> Bloco que contm tabela

Blocos podem ter contedo misto, contendo texto e

elementos

<inline> Trecho de propsito geral <external-graphic> Imagem ou grfico externo <page-number> Nmero de pgina <basic-link> Referncia de hipertexto <instream-foreign-object> Cdigo 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 so atributos Maior parte das propriedades so iguais e tm 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 so elementos em XSL-FO Alguns seletores CSS so 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">clula 1.1</fo:block> </fo:table-cell> <fo:table-cell> <fo:block font-family="monospace">clula 1.2</fo:block> </fo:table-cell> </fo:table-row> ... <fo:table-row> ... </fo:table-row> </fo:table-body> </fo:table>

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 pgina 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>
Vnculo de hipertexto Vincula uma referncia de ID a um ID Geralmente, quando o documento gerado via XSLT, o ID obtido do elemento ao qual se quer vincular ou via alguma varivel Exemplo:
<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 pgina


<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

Visualizao
XSL-FO uma linguagem de descrio de pgina Pginas podem ser geradas por um programa que construa o

documento na memria (como faz o browser com HTML e CSS) ou que gere um arquivo
PostScript, PDF: Apache FOP, RenderX XEP, REXP RTF (MS-Word): JFOR, RenderX Visualizao em browser: IBM XFC HP FOA

Ferramentas para desenvolver FO 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 introduo prtica

<xml:sax.dom />
Helder da Rocha www.argonavis.com.br
1

Programao com XML


H duas APIs padro 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 mtodos que respondem a

eventos produzidos durante a leitura do documento


Notifica quando um elemento abre, quando fecha, etc.

DOM vai alm e monta uma estrutura hierrquica de

objetos, em forma de rvore, que permite a navegao na estrutura do documento


Propriedades dos objetos podem ser manipuladas

SAX ou DOM?
SAX Gasta menos memria Mais simples menos recursos disponveis Ideal para aplicaes simples que no precisam manipular com toda a rvore de objetos DOM Em grandes documentos e hierarquias profundas exige mais recursos Fornece funes que permitem ter muito controle sobre os dados a nica opo para manipulao no cliente APIs disponveis em vrias linguagens Java, VB, C, JavaScript (apenas DOM)
3

DOM
Document Object Model Objetivo: oferecer uma interface de programao

uniforme, independente de plataforma e linguagem, para aplicaes que manipulam XML


OMG IDL

Serve para criar um novo documento XML navegar na rvore XML modificar, remover ou adicionar ns (elementos, atributos, texto, comentrios, PIs, etc.)

SAX
Simple API for XML Baseada em eventos Dispara eventos durante processamento do

documento
Exemplos de eventos inicio e fim do documento incio e fim do elemento (pode-se descobrir qual) n de caractere n de comentrio ...
eventos podem ser capturados por ouvintes cadastrados aes podem ser tomadas em cada situao

SAX vs. DOM


No so concorrentes DOM ideal para manipular a rvore XML recursivamente SAX ideal para ler o documento seqencialmente DOM requer carga de todo o documento: consome mais memria SAX no "lembra" de tarefas realizadas: no serve para validar referncias cruzadas Nos processadores Crimson e Xerces, SAX usada

para montar a rvore DOM

SAX: operaes
Se um processador SAX receber o documento ...
<carta> <mensagem id="1">Bom dia!</mensagem> </carta>

... ele ir disparar a seguinte seqncia 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 informaes 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 + ">"); }

DOM: operaes
Leitura Passo 1: carregar o documento e identificar os tokens Passo 2: identificar elementos e outros ns (pode usar SAX) Passo 3: montar a rvore (pode ser feito durante o passo 2) Alterao Localiza o n de referncia Remove, altera, muda posio, cria n antes ou depois. Criao Cria raiz; cria elemento raiz; cria elementos filho e atributos; cria ns de texto Monta rvore: coloca atributos em elementos, coloca ns de texto em elementos, coloca elementos filho em elementos pai, coloca elemento raiz na raiz
9

DOM: tipos de dados


Colees: NodeList, NamedNodeMap Raiz da hierarquia de ns: Node. Subclasses: Attr (atributo) CharacterData (classe abstrata) Text (n de texto) CDATASection (seo CDATA) Comment (comentrio) Document (documento inteiro) DocumentFragment (sub-rvore) DocumentType <!DOCTYPE> Element (elemento) Entity (valor da entidade - contedo) EntityReference (nome da varivel) Notation (valor de uma notao) ProcessingInstruction (instruo de processamento)

10

DOM: Hierarquia
DocumentFragment Document CharacterData Attr Element Node DocumentType Notation Entity EntityReference ProcessingInstruction
11

Text

CDATASection

Comment

NodeList NamedNodeMap

DOM: navegao
DOM usa constantes para identificar tipos de n

(nodeType) Constante (opcional)

Tipo

valor
1 2 3 4 5 6 7 8 9 10 11 12

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

12

Para usar DOM


preciso obter uma instncia do documento (forma de

fazer isto depende de processador)


IE (data island): <xml id="xdoc"></xml>
Internet Explorer Netscape Xerces JAXP JDOM IBM Parser MSXML

Cdigo pode manipular referncia xdoc e obter raiz ou


xdoc.async = false; // desabilita threads xdoc.load("arquivo.xml"); document = xdoc; // Este o elemento raiz var xdoc = new ActiveXObject("Microsoft.XMLDOM"); xdoc.load("arquivo.xml")

Java JAXP Criar uma instncia a patir de DocumentBuilderFactory

13

Ilhas de dados XML (s MSXML)


Elemento HTML (Internet Explorer) que possibilita a

integrao HTML-XML
Permite embutir em uma pgina HTML (gerada ou no

dinamicamente) um arquivo XML Arquivo pode ainda ser transformado por XSLT no momento da incluso e receber formatao CSS

Sintaxe:
<xml id="identificador"> ... cdigo XML .. </xml>

O identificador necessrio para possibilitar a

manipulao dos dados na pgina O arquivo tambm 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" ?>


<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
<CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> </CD> </CATALOG>

cd_catalog.xml

16