Revista Do Linux  
EDIÇÃO DO MÊS
 Programação
 CD do mês
 Corporativo
 Entrevista
 Capa
 Estudo de Caso
 Produto
 Distro
 Flagship
 Interbase
 Gerenciadores
 RPM
 Wine
 XML
 

Por trás dos documentos
Muitos escritores técnicos vêm acompanhando com atenção o desenvolvimento das linguagens de documentação, porque no futuro todas as empresas dependerão de bibliotecas eletrônicas

Ultimamente, fala-se muito sobre XML e sobre como esse novo conceito pode ajudar no desenvolvimento e na manutenção de sistemas grandes e complexos. O objetivo deste artigo é introduzir esse novo conceito de trabalho aplicado ao Cocoon (xml.apache.org/cocoon), uma ferramenta de código aberto desenvolvida pelo grupo Apache — o mesmo que desenvolve o servidor Web.

O Cocoon foi criado em janeiro de 1999 por Stefano Mazzocchi. Ele começou como um servlet para a aplicação de estilos XSL estáticos, mas tem se tornado cada vez mais poderoso conforme novas características são adicionadas.

Diferentemente de PHP e JSP, o Cocoon permite a separação de conteúdo, apresentação e lógica em áreas distintas. Isso quer dizer que os redatores podem se preocupar apenas com o conteúdo; os designers e engenheiros de conteúdo com a apresentação; e os programadores com a lógica a ser aplicada no site. Esse novo conceito traz como grande vantagem o fato de uma pessoa não prejudicar o trabalho da outra, além de evitar o retrabalho que em geral ocorre quando um documento tem de ser convertido para HTML com o estilo do site, ou mesmo quando programadores têm de alterar várias páginas HTML para inserir códigos nelas. Como resultado final, o Cocoon se encarrega de gerar as devidas páginas HTML num site para serem exibidas num navegador da Internet.

Esse novo conceito permite o planejamento, o desenvolvimento e a manutenção das três áreas independentemente. Com isso é possível a reutilização cada vez maior do trabalho realizado entre essas diferentes áreas, o que permite atualizações muito mais rápidas e diminuindo bastante o tempo total de desenvolvimento.

Entretanto, o Cocoon não se restringe apenas a HTML. Ele é capaz de gerar, por exemplo, um arquivo pdf ou mesmo o par XML/XSL, para os navegadores que suportem, ou ainda WML para telefones celulares, utilizando sempre a mesma fonte de conteúdo.

Em termos práticos, no contexto do Cocoon, é possível associar conteúdo a XML, apresentação a XSL e lógica a XSP. XML e XSL são recomendações W3C (www.w3.org/). A XSP ainda está sendo especificada pelo grupo Apache, porém o objetivo é submetê-la ao W3C para que também se torne uma recomendação W3C.

XML

XML lembra muito HTML: é uma linguagem que usa tags para definir conteúdo.

O trecho abaixo mostra um exemplo de arquivo XML.

Quadro 1

XML1 ––(XSL1/Tranformação1)––> XML2 ––(XSL2/Tranformação2)––> HTML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?cocoon-format type="text/xml"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="meuestilo.xsl" type="text/xsl"?>
<meudocumento>
<título>meu título</título>
<conteúdo>Conteúdo 1</conteúdo>
<conteúdo>Conteúdo 2
<conteúdo>Conteúdo 2.1</conteúdo>
<conteúdo>Conteúdo 2.2</conteúdo>
</conteúdo>
<conteúdo>Conteúdo 3</conteúdo>
</meudocumento>

Diferentemente do HTML, as tags XML podem ser criadas para expressar com precisão o conteúdo de um documento. Já o HTML define tags para dizer como mostrar graficamente esse conteúdo (informação de layout).

Outras diferenças do XML em relação ao HTML são:

  • O XML é sensível à maiúsculas/minúscolas: <título/> é diferente de <TÍTULO/>
  • Toda tag deve ser fechada e na ordem correta:

No HTML


<br>
<p><b>texto</p></b>
é permitido
No XML
<br/>
<p><b>texto</b></p>
é obrigatório

XSL

O XSL pode ser utilizado para transformar um arquivo XML. Nesse caso ele é chamado de XSLT (XSL Transformation). O Cocoon usa a informação contida em arquivos XSL para aplicar a informação de layout no conteúdo descrito por um arquivo XML. Porém, um arquivo XML também pode ser transformado em outro arquivo XML sem informação de layout. De fato, um arquivo XML pode passar por sucessivas transformações antes de ser gerado HTML. Isso é útil para capturar dados externos que utilizam tags que não são entendidas. Através das transformações intermediárias, esses dados externos são facilmente "traduzidos" para uma estrutura conhecida (quadro 1).

Vários sites já exportam conteúdo através de XML.

Um exemplo é o slashdot, que exporta os títulos de suas notícias em www.slashdot.org/slashdot.rdf

Pegar esses dados com o Cocoon e mostrar numa página com o estilo do seu site é bastante fácil, e uma vez feito é igual para várias outras fontes de dados que utilizam o mesmo formato.

O XSL é uma linguagem bastante poderosa que define tags para capturar elementos de fontes XML e também para manipulá-los. Abaixo estão listados alguns elementos dessa linguagem:

  • xsl:choose
  • xsl:copy
  • xsl:for-each
  • xsl:if
  • xsl:value-of
  • xsl:variable

Em geral, num site, XMLs são transformados em HTML. O trecho abaixo mostra um arquivo XSL simples que pode ser usado para transformar o XML do exemplo anterior:


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet mlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="meudocumento">
<html>
<head>
<title><xsl:value-of select="título"/></title>
</head>
<body bgcolor="white">
<p>Demonstração de XSL</p>
<table border="1">
<tr>
<td>Título:</td>
<td><xsl:value-of select="título"/></td>
</tr>
<tr>
<td>Meu conteúdo:</td>
<td><xsl:apply-templates select="conteúdo"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="conteúdo">
<ul><li><xsl:apply-templates/></li></ul>
</xsl:template>
</xsl:stylesheet>

Esse XSL aplicado no XML do exemplo anterior pelo Cocoon gera a seguinte página HTML:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>meu t&;iacute;tulo</title>
</head>
<body bgcolor="white">
<p>Demonstra&;ccedil;&;atilde;o de estilo para arquivos XML</p>
<table border="1">
<tr><td>T&;iacute;tulo:</td><td>meu t&;iacute;tulo
</td></tr>
<tr><td>Meu conte&;uacute;do:</td>
<td><ul><li>Conte&;uacute;do 1</ul>
<ul><li>Conte&;uacute;do 2
<ul><li>Conte&;uacute;do 2.1</ul>
<ul><li>Conte&;uacute;do 2.2</ul>
</ul><ul><li>Conte&;uacute;do 3</ul></td>
</tr>
</table>
</body>
</html>

O arquivo de transformação XSL pode ser genérico o suficiente para acomodar arquivos XML com diferentes tipos de informação, fazendo com que a geração de várias páginas com o mesmo layout seja uma brincadeira. Da mesma forma, outro arquivo XSL poderia ser desenvolvido para prover o mesmo conteúdo, ou uma versão reduzida, em WML para telefones celulares.

XSP

O XSP é usado para colocar conteúdos dinâmicos. O trecho a seguir mostra o XML do primeiro exemplo com uma tag XSP para indicar o horário no servidor (quadro 2).

O Cocoon é capaz de substituir a tag XSP com o código desenvolvido para ela, que é executado e gera como saída o horário do servidor. Esse modo permite que programadores desenvolvam uma biblioteca de tags para ser utilizada pelos redatores de conteúdo de maneira muito fácil.

Considerações finais

Para páginas estáticas, é possível trabalhar com o par XML/XSL no desenvolvimento de páginas HTML e gerá-las previamente. Isso permite utilizar todo o poder oferecido por esse novo conceito sem a necessidade de ter que instalar o Cocoon no servidor Web. Esse modo de trabalho é bastante interessante para alguns, já que nem todos podem executar ou instalar programas nesses servidores.

Para facilitar ainda mais, o Cocoon vem com algumas bibliotecas de tags XSP. Essas bibliotecas permitem trabalhar com o resultado de Forms HTML, sessões, cookies, etc. Uma biblioteca que vale a pena mencionar é a de SQL. O Cocoon tem uma biblioteca só para trabalhar com banco de dados SQL. Com ela é possível executar queries e receber o resultado como um conjunto de tags XML.

O Cocoon já é poderoso, mas vai ficar ainda mais.

O pessoal do Cocoon tem trabalhado bastante na versão 2.0, que vai apresentar algumas boas novidades em relação à versão atual.

quadro 2


<?xml version="1.0" encoding="ISO-8859-1"?>
<?cocoon-format type="text/xml"?>
<?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="meuestilo.xsl" type="text/xsl"?>
<xsp:page language="java"
xmlns:xsp="http://www.apache.org/1999/XSP/Core"
xmlns:util="http://www.apache.org/1999/XSP/Util"
>
<meudocumento>
<título>meu título</título>
<conteúdo><util:time format="dd/MM/yyyy"/></conteúdo>
<conteúdo>Conteúdo 1</conteúdo>
<conteúdo>Conteúdo 2
<conteúdo>Conteúdo 2.1</conteúdo>
<conteúdo>Conteúdo 2.2</conteúdo>
</conteúdo>
<conteúdo>Conteúdo 3</conteúdo>
</meudocumento>
</xsp:page>

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux