Relatorio trabalho prático PED

Schema e Stylesheets para a apresentação de curricum vitae

 

Relatório inserido nos trabalhos práticos da cadeira de PED do Mestrado em Informática 2002/03


Autor

José Luis Gonçalves

zeluis@ipb.pt

Orientadores

José C. L.Ramalho
jcr@di.uminho.pt - http://www.di.uminho.pt/~jcr/

Universidade do Minho
Departamento de Informática
http://www.di.uminho.pt

Julho de 2003





| Ínicio| Prólogo| Índice| Glossário| Bibliografia|





Prólogo

O trabalho apresentado contempla um schema, quatro stylesheets e a instância do schema em XML. A instância é dada como um exemplo para a demostração das transformações operadas pelas stylesheets.

As stylesheets apresentadas representam a interpretação do autor relativamente à estrutura e aparência dos 4 tipos de outputs aqui apresentados.

 

Resumo

Este documento foi realizado no âmbito da cadeira de Processamento Estruturado de Documentos, cadeira do curso de Mestrado em Informática na Universidade do Minho, Portual. O propósito deste trabalho é a produção de um Schema em XML ou DTD capaz de armazenar a informação necessária para a elaboração de um curriculum vitae e, adicionalmente, a produção de uma ou mais stulesheets capaz de transformar a informação contida no ficheiro XML em ficheiros html e latex com as formatações necessárias a produzir um curriculum vitae funcional ou cronologico.

Os documentos apresentados consistem em 2 stylesheets que produzem um curriculum vitae (funcional e cronologico), 2 stylesheets que produzem o curriculum vitae em latex (funcional e cronologico), o Schema XML, e uma instância do Schema e este mesmo documento.

 

Abstract

This document was produced in the scope of the Document Structured Processing discipline of a Master's course in informatics, lectured at the University of Minho, Portugal. The purpose of this work was to produce a XML Schema or DTD which could store all the information of a curriculum vitae and to produce one or more stylesheets to transform the XML data file in  HTML or Latex outputs of the curriculum vitae in a functional or chronologic style.

The documents presented consist of 2 stylesheets which produce a HTML curriculum vitae (functional and chronologic), 2 stylesheets which produce the 2 Latex curriculum vitae (functional and chronologic), a XML schema, XML instance of the schema and the this same document.



| Ínicio| Prólogo| Índice| Fecho| Glossário| Bibliografia|

 


 

Índice de Conteúdos

1. Acerca do Schema

2. Stylesheets

2.1. Ordenação Cronológica de vários tipos de nodos.

2.2. Ordenação cronológica de um tipo de nodo.

2.3. Geração de Latex

2.4. Geração de HTML

3. Conclusão

Bibliografia
 





| Ínicio| Abertura| Prólogo| Índice| Conclusão| Bibliografia|




1. Acerca do Schema

| Ínicio| Abertura| | Índice| Fecho| Glossário| Bibliografia|

 

O schema apresentado resultou de um processo de aperfeiçoamento que foi decorrendo naturalmente ao longo da realização do trabalho, a estrutura inicial era mais complexa e mais rígida, tendo sido definidas vários tipos de entidade, de forma a isolar o mais possivel os dados. Esta opção não se relevou muito eficiente dado que aumentou a complexidade no tratamento dos dados. Assim dos tipos definidos inicialmente definidos apenas restou o Tpessoa que como o próprio nome indica  serve para definir os dados de determinado individuo e o Tentidade que serve para registar as entidades que vão sendo mencionadas no curriculum,. Mesmo o tipo Tpessoa  seria dispensável uma vez que apenas é utilizado uma vez em cada curriculm. Alguns dos tipos eliminados foram: Tmorada (registar moradas, por nº, rua, codigo postal), Tartigo e Tprojecto (para representar um projecto realizado e um artigo publicado, respectivamente). A imagem seguinte representa o schema final do trabalho.

 

A definição do Schema

Estrutura final do schema do trabalho.



 

2. Stylesheets

| Ínicio| Abertura| | Índice| Fecho| Glossário| Bibliografia|


Foram desenvolvidas duas stylesheets para geração de documentos em Latex (funcional e cronológico) e duas para geração de documentos em HTML (funcional e cronológico).

As versão cronologica e funcional diferem essencialmente no template usado para a ordenação dos elementos por data. Foi definida a data de conclusão das actividades como elemento de ordenação.



2.1. Ordenação Cronológica de vários tipos de nodos.

| Ínicio| Abertura| | Índice| Fecho| Glossário| Bibliografia|

 

Este template é usado na versão HTML e Latex das stylesheets que geram um curriculum cronológico:

<xsl:template name="ordenados">

<xsl:for-each select="//datafim">

       <xsl:sort order="ascending" select="../datafim"/>

      <xsl:apply-templates select=".."/>

</xsl:for-each>

</xsl:template>

Este template resultou de um processo de optimização significativo. Inicialmente a ordenação era feita com uma estrutura <xsl:key> sendo posteriormente testado cada noto quanto ao seu tipo e reordenado.

Com esta solução é construída uma arvore ordenada de todos os nodos e aplicado o template correspondente a cada um deles.

 

 

2.2. Ordenação cronológica de um tipo de nodo.

| Ínicio| Abertura| | Índice| Fecho| Glossário| Bibliografia|

 

O template a seguir apresentado é essencialmente uma variação do template anterior. Agora o ordenação é feita em cada tipo de nodo especifico (cursos neste caso). Existem nas stylessheets templates semelhantes para o processamento de outro tipo de nodos.

<xsl:template name="datas-cursos">

<xsl:for-each select="//cursos">

      <xsl:sort select="datafim" order="ascending"/>

      <xsl:apply-templates select="."></xsl:apply-templates>

</xsl:for-each>

</xsl:template>

 





2.3. Geração de Latex

| Ínicio| Abertura| | Índice| Fecho| Glossário| Bibliografia|

 

O template a seguir apresentado exemplifica o processamento de um nodo para geração do correspondente output em Latex, neste caso trata-se de um nodo do tipo produção-bibliográfica em que o campo autores pode ter vários elementos sendo inserida um ponto e virgula entre eles à excepção do último.

 

<xsl:template match="producao-bibliografica">

<xsl:text>\textit{</xsl:text>

<xsl:value-of select="titulo"/> (<xsl:value-of select="datafim"/>)}\\

<xsl:value-of select="descricao"/>\\

Keywords:

<xsl:for-each select="keywords">

<xsl:apply-templates/>

<xsl:if test="position() != last()">

<xsl:text> ; </xsl:text>

</xsl:if>

</xsl:for-each>\\

Autores:

<xsl:for-each select="autor">

<xsl:apply-templates/>

<xsl:if test="position() != last()">

<xsl:text>; </xsl:text>

</xsl:if>

</xsl:for-each>\\\\

</xsl:template>





2.4. Geração de HTML

| Ínicio| Abertura| | Índice| Fecho| Glossário| Bibliografia|

 

A geração do output faz-se através de templates idênticos ao a seguir apresentado, foi criada uma css para apoiar a formatação feita pela stylesheet em XSL.

<xsl:template match="producao-tecnica">

<br/>

<div class="item">

<xsl:value-of select="titulo"/><br/></div>

<xsl:value-of select="descricao"/>

<xsl:apply-templates select="entidade"/><br/>

Concluido em:

<xsl:value-of select="datafim"/><br/>

<xsl:for-each select="url">

<a>

<xsl:attribute name="href">

<xsl:value-of select="."/>

</xsl:attribute>

<xsl:apply-templates/>

</a>

</xsl:for-each><br/>

</xsl:template>

 




 

3. Conclusão

O processo de desenvolvimento deste trabalho foi algo caricato, uma vez que apesar de ter todas as funcionalidades implementadas, a sua estrutura era algo dificil de compreender. Resolvi então estudar soluções mais optimizadas, o que foi feito principalmente no que respeita ao ordenamento por datas dos nodos relevantes para o curriculum vitae cronológico.

A geração do output em latex foi algo trabalhosa uma vez que não estava habituado a trabalhar em Latex e as correcções que se iam fazendo na stylesheets implicava a geração do dvi correspondente para verificar o output.

A definição do schema para este tipo de documentos, está um pouco subjectiva à interpretação de cada um em relação ao que debe constar de um curriculum vitae.

 





Bibliografia



[ped02] - Ramalho, José C. L. , Apontamento da cadeira de PED 2002/03 , Dep. Informática - Univ. Minho , http://www.di.uminho.pt/~jcr/