GCAPAPER
Transformação de GCAPAPER para HTML e LaTeX
10 de Dezembro de 2003
Nuno Eduardo Salazar Pais Lopes
26210
Engenharia de Sistemas e Informática
Ricardo Manuel Caessa Pereira Pires
22719
Engenharia de Sistemas e Informática

Abstract
O GCAPAPER é um formato pré-definido para publicação de papers de conferências em XML. Este trabalho consisite na criação de Style Sheets para efectuar a sua transformação em HTML e LaTeX. Como extra, ainda transformámos o DTD fornecido num Schema.
Índice

O que é o GCAPAPER?
Definição geral
O GCAPAPER é um formato pré-definido de XML, criado especialmente para a submissão de artigos na conferência XML Europe. Nesta conferência, todas as submissões de artigos, tinham que ser no formato GCAPAPER, na altura definido apenas com um DTD. A utilização do DTD para a definição do formato, garantiu que todos os artigos respeitassem a mesma estrututa, facilitando o tratamento dos mesmos.
Foram disponibilizadas ferramentas para a geração destes documentos, desde editores de XML, até extensões para o Microsoft Word.
A estrutura do GCAPAPER
O GCAPAPER é composto por 3 partes distintas, sendo elas: front, body e rear. De seguida apresentamos uma breve descrição destas 3 partes, explicando a função e conteúdo de cada uma delas.
Front
Esta secção é destinada ao cabeçalho do documento, onde se inclui o título, subtítulo, autor(es), biografia dos mesmos, assim como outros dados pessoais. O resumo (abstract) é também incluído nesta secção.
Body
Esta é a secção onde se encontra toda a informação do paper, desde texto a imagens, passando por tabelas, referências, blocos de código, vários tipos de listas, etc. Tudo isto separado em secções e suas respectivas sub-secções.
Rear
A secção Rear apenas contém os agradecimentos e a bibliografia.
Schema do GCAPAPER
A geração do Schema do GCAPAPER foi efectuada baseando-nos nas técnicas aprendidas nas aulas de Processamento Estrututado de Documentos,
Tabela de Índices
Transformação em HTML
Cascading Style Sheets
O Cascading Style Sheets(css) é uma adição ao html. No html é nos possível definir as cores e tamanhos de texto e tabelas, mas caso queiramos alterar algumas destas definições, teremos de precorrer grande parte do documento por forma a localizar o que pretendemos alterar, uma ou mais vezes.
No css podemos definir as cores e tamanhos mas como estilos, o que permite que em vez de definirmos fontes e cores cada vez que começamos um novo atributo, podemos definir um estilo e apenas nos referimos a este fazendo com que a alteração de um estilo afecte todo o site ou documento gerado, necessitando apenas de ser carregado uma única vez, o que permite um carregamento mais rápido das páginas ou documentos a utilizar.
Com o css é nos possível separar o layout da página do seu conteúdo, permitindo-nos também definir o layout de uma melhor e independente forma.
As vantagens que nos são proporcionádas pelo css são:
Como nada é perfeito, o css possui uma única desvantagem, a de que é apenas suportado pelos browsers com a versão 4 ou superior, mas 95% dos browsers possuem esta versão ou posterior.
Para se ter uma ideia de como o css funciona, vamos de seguida apresentar um exemplo.
Exemplo 1
h1.title {
	 text-align: center;
 	 font-size: 1.6em;
  	 font-weight: bold;
  	 margin-top: 2em;
  	 margin-bottom: 2em;
  	 color:green
}
A sintaxe para que define um selector é do tipo:
#IDSelector {Property:Value;} 
No exemplo acima definimos um estilo para o elemento h1, mais propriamente para os títulos deste elemento. Desta forma é nos possível definir para o elemento h1 várias formas de fomatação, dependendo do aspecto que lhe desejamos dar, isto é, a sua cor, posicionamento do texto, tamanho, entre outros atributos. Definido tudo isto, resta saber como se utiliza esta tag por forma a produzir o efeito desejado. Para isso basta colocar o atributo class de h1 igual a title:
Exemplo 2
<h1 class="title"> Isto é um título </h1>
Transformação de XML para HTML
De forma a se proceder à transformação do xml para html, é necessário se recorrer ao xsl. Para esse efeito foi criáda uma style sheet que gera uma página htlm que exprime o conteúdo de documento xml, tendo este de obdecer ao dtd disponibilizado pelo docente da cadeira. O dtd é constituído por um conjunto de declarações que no seu todo permitem especificar um tipo de documento.
Através da style sheet, é nos possível efectuar travessias sendo assim possível efectuar a transformação desejada para um determinada elemento e, no caso desse elemento ter filhos, invocamos a template específica dos filhos. A invocação das templates especificas de cada elemento é feita recorrendo a xsl:call-template.
Inicialmente começámos por efectuar uma travessia por forma a obter os dados que compõem a primeira parte do artigo(front): o título, sub-título, keywords, identificações dos autores com uma breve bibliografica destes e o abstract. Um exemplo desta travessia é nos apresentado no código abaixo:
Exemplo 3
<xsl:template match="author">
    <meta name="author">
        <xsl:attribute name="content">
     	      <xsl:apply-templates select="fname|surname|suffix"/>
    	  </xsl:attribute>
    </meta>
</xsl:template>
					
Este identifica como meta informação o nome do autor, isto para que futuras procuras na internet com o nome do autor venham a localizar este documento, e vai procurar os elementos que compõem o nome do autor.
Seguidamente começámos por desenvolver a segunda parte do artigo(o body). Esta é composta inicialmente pelo índice, sendo este resultado de uma travessia em modo índice. A formatação deste é dependente de um atributo secnumbers definido no elemento gcapaper. O índice é constítuido por todos os titulos e subtítulos que fazem parte do artigo.
Posteriormente é gerado o corpo do artigo. Este é composto por texto, figuras, tabelas, notas, citações,... De notar que no texto podem existir referências para outros locais deste ou mesmo referências web, permitindo assim um melhor exclarecimento em certas situações. Existem ainda partes do artigo cujo texto é colocado num fundo em tom de azul claro, correspondendo este a código fonte que o autor decidiu disponibilizar. Na xsl definimos o tratamento deste elemento desta forma:
Exemplo 4
<xsl:template match="code.block">
    <pre class="codeBlock">
       <xsl:apply-templates/>
    </pre>
</xsl:template>
Com este extracto de código podemos verificar a utilização da tag pre. Esta irá permitir preservar os caracteres especiais e o espaçamento dando um aspecto diferente ao bloco de código. Tendo em conta as vantagens do css, aqui esta de novo um exemplo da sua utilização, por forma a dar um aspecto diferente ao layout
Para finalizar a geração do artigo são tratados os elementos acknowl e bibliog que correspondem às secções referêntes á bibliografia do artigo e a acknowledgements.
Exemplo 5
<xsl:template match="acknowl">
  <h2 class="acknowlHeader">
    <a id="Acknowledgements">Acknowledgements</a>
  </h2>
  <div class="acknowl">
    <xsl:apply-templates/>
  </div>
</xsl:template>

<xsl:template match="acknowl/title">
  <h3 class="acknowlTitle">
    <xsl:apply-templates/>
  </h3>
</xsl:template>
No exemplo acima exposto é nos possível verificar como é tratado o elemento acknowl .Neste começamos por invocar o css de modo a dar um aspecto visual diferente ao título desta secção. De seguida vem o identificador que identifica o link do índice, isto é, o link entre o índice e esta secção. Posteriormente são tradados os elementos filhos.
Desta forma obtivemos a style sheet que permitiu criar a transformação desejada.
Tabela de Índices
Transformação de GCAPAPER para Latex
Transformação
Como já foi visto anteriormente, o formato GCAPAPER é um formato destinado a publicação de papers. O LaTeX também tem um formato pré-definido chamado originalmente de article. Esta parte do trabalho pode ter 2 abordagens diferentes: a primeira consiste em traduzir directamente o XML para LaTeX, simplesmente traduzindo as tags; a segunda consiste na adaptação do GCAPAPER ao article do LaTeX. A abordagem adoptada foi a segunda, por acharmos ser a mais adequada a este trabalho. Como se pode ver neste capítulo, tomar esta decisão implicou descartar alguma informação que tem lugar no GCAPAPER mas não no LaTeX.
A estrutura de um documento LaTeX é relativamente simples. A primeira linha é sempre
\documentclass{}
com o tipo do documento. Para dizer ao processador de LaTeX que o documento se trata de um article, é necessário começar com a linha
\documentclass{article}
Desde esta declaração até à de begin, temos as instrucções de pré-processamento, ou o cabeçalho, onde inserimos o título
\title{}
e o nome do autor
\author{}
Como não utilizamos mais instrucções no cabeçalho, podemos começar o corpo do documento com a instrucção
\begin{document}
e no final teremos naturalmente um
\end{document}
Em relação à conversão em si, utilizamos no cabeçalho do documento as instruções xsl:call-template para gerar o título e o autor. No caso do GCAPAPER podem ser vários autores, enquanto que no LaTeX, existe a tag \and que permite a utilização de vários autores, mas não notámos nenhuma alteração na formatação à saída. A única coisa que se notava na utilização desta tag foi a utilização de alguns espaços a separar os vários nomes. No caso do autor, o formato article do LaTeX não suporta um sub-titulo, por isso concatenamos tudo na mesma String com um separador para melhor compreensão. O código utilizado foi:
\title{<xsl:call-template name="title"/>}
\author{<xsl:call-template name="author"/>}

<xsl:template name="title">
  <xsl:value-of select="./front/title"/>
</xsl:template>

<xsl:template name="author">
  <xsl:for-each select="./front/author">
    <xsl:choose>
		<xsl:when test="count(./preceding-sibling::author)>0"> \and</xsl:when>
	</xsl:choose>
    <xsl:value-of select="fname"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="surname"/>
    </xsl:for-each>
</xsl:template>
No formato article não encontramos um lugar próprio para incluir a biografia dos autores, por isso descartamos essa parte. Todas as outras, mantemos mudando apenas a tag utilizada. Felizmente não tivemos o trabalho extra de gerar o indice com tabelas de hash como no HTML, porque o LaTeX gera-as automaticamente. Para isso apenas temos que usar a tag section, subsection e subsubsection . Para as secções de código utilizamos a tag "verbatim". Todos os links são tratados como citações com a tag cite.
Estas foram as partes mais importantes da conversão. Muitas outras foram utilizadas, mas estas achamos importante incluír no relatório.
Limitações
Em relação às dificuldades sentidas nesta parte do trabalho, encontram-se a dificuldade de encontrar a definição do formato article, e da utilização da ferramenta latex que gerou muitos erros mesmo em tags standard do LaTeX. Não percebemos o porquê destas mensagens de erro, mas a conversão é feita apesar dos erros.
Esta transformação tem várias limitações, dadas as limitações naturais do formato LaTeX, e do próprio XSL.
A primeira limitação é relativa às imagens, que no GCAPAPER podem ser de vários formatos diferentes, enquanto que em LaTeX estamos limitados à escolha entre 2 formatos apenas. Como assim estaríamos a descriminar à partida qual o formato quer sería aceite em detrimento de outro, e como apenas conseguiriamos passar para o LaTeX parte das imagens, decidimos não passar qualquer imagem, tendo para isso a transformação em HTML que suporta todos os formatos utilizados.
A segunda limitação, é em relação a outra limitação do LaTeX que precisa de cuidados especiais com os seguintes caracteres:
 # $ % & ~ _ ^ \ { } 
Estes caracteres têm que levar uma "\" antes deles para que o LaTeX os reconheça. Como o XSL não permite o tratamento de caracteres isolados, sería necessária a criação de uma script Perl por exemplo, para que, entre a geração do texto LaTeX e a utilização da ferramenta latex, estes caracteres fossem tratados. Como a criação de uma script não fazia parte da descrição do trabalho, foi decidido aceitar este defeito como uma limitação do LaTeX e do XSL.
Em terceiro lugar, temos o problema das tabelas, que em LaTeX nos pareceu ter muitas limitações, principalmente em termos de formatação. Em HTML podemos ter um número de colunas indeterminado nas várias linhas, em LaTeX somos forçados a definir a formatação das colunas antes da definição das mesmas, o que implica um número constante de colunas em toda a tabela.
Tabela de Índices
Conclusões
Projecto
Este projecto foi muito importante para nos dar a conhecer o mundo do XML e dos seus derivados. Antes deste trabalho, tinhamos a noção de que o XML não era muito complexo, o que se veio a revelar uma noção errada. Agora concluimos que o XML pode ser bastante fácil de utilizar, mas em projectos de grande envergadura torna-se necessário um investimento muito grande na construção da estrutura ( no Schema ), para que mais tarde seja possível trabalhar o XML sem se perder a noção de onde no documento se está.
Consideramos que atingimos os objectivos a que nos propusemos, tendo efectuado com sucesso a três partes do projecto, Schema, HTML e LaTeX.
Apesar de termos atingido os objectivos, tivemos inicialmente alguma dificuldade ao trabalhar com o DTD dada a sua dimensão e complexidade, e mais tarde na transformação em LaTeX devido à nossa inexperiência com esta linguagem/ferramenta. A conversão em HTML foi mais trabalhosa do que dificil, dada a vasta documentação disponível tanto na Internet como na Biblioteca.
Trabalho futuro
Como trabalho futuro, ou mesmo trabalho que ficou por realizar, salienta-se o facto de não termos apurado a geração de LaTeX devido à enorme variedade de packages disponível para optimizar a aparência final. A conversão em LaTeX ainda tem limites devido aos caracteres que o LaTeX não aceita em usar a "\". Para isso, teríamos que fazer uma script em Perl para que acrescente a "\" a esses caracteres antes da sua transformação.
Queriamos ainda criar a stylesheet que transforma o relatório no formato LaTeX, mas não nos foi possível, dado o tempo dispendido com o resto do projecto. Dessa forma, teriamos a possibilidade de disponibilizar este mesmo relatório num formato com melhores resultados de impressão.
Tabela de Índices
Bibliografia
[CSS1] World Wide Web Concortium Recommendation, "Cascading Style Sheets 1(CSS1)", (http://www.w3.org/TR/1998/REC-CSS2-19980512), 17-December-1996.
[CSS2] World Wide Web Concortium Recommendation, "Cascading Style Sheets 2(CSS2)", (http://www.w3.org/TR/1998/REC-CSS2-19980512), 12-May-1998.
[Meg98] David Megginson, "Structuring XML Documents", Prentice-Hall , 1998.
[XML] , "eXtended Markup Language (XML)", http://www.xml.com , .
[JCR] José Carlos Ramalho, "Anotação Estrutural de Documentos e sua Semântica", Departamento de Informática, Braga, 2000.
[MEY] Eric A. Meyer, "CSS - Pocket Reference", O'Reilly, May, 2001.
[TTT] The Tutorial Team, "On-line Tutorial on LaTeX", Indian TeX Users Group, May, 2000.
Tabela de Índices
Apêndices
Tabela de Índices