As stylesheets apresentadas representam a interpretação do autor relativamente à estrutura e aparência dos 4 tipos de outputs aqui apresentados.
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.
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|
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
|
Ínicio|
Abertura|
Prólogo|
Índice| Conclusão|
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.
Estrutura final do schema do trabalho.
| Í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.
| Í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.
| Í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> |
| Í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> |
| Í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> |
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.