XML Schema e Stylesheet para Curriculums Vitae

XML Schema e Stylesheet para Curriculums Vitae

Trabalho prático para a cadeira de Processamento Estruturado de Documentos (MICEI 03)


Autores

NunoPereira
npereira@dei.isep.ipp.pt - http://www.hurray.isep.ipp.pt/people/

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

Junho de 2003





| Ínicio| Abertura| Prólogo| Índice| Fecho| Glossário| Bibliografia|
(c) copyright 2003 - Nuno Pereira. Schema e Stylesheet do relatório pertença de Guilherme Teixeira (MICEI 02)







Dedicatória

Dedico este trabalho à minha família.

Agradecimentos

Agradecimentos ao professor José Carlos Ramalho por ter aberto as portas a este mundo do XML.

Muito obrigado aos alunos do MICEI 03, pelo companheirismo e excelente relacionamento.

Á empresa Altova por nos ter disponibilizado o software de trabalho, aos incógnitos que publicam conteúdos pedagógicos na net sobre XML, sem qualquer fim lucrativo.

assinatura

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





Prólogo

Este trabalho pretende servir como suporte para a criação de documentos do tipo Curriculum Vitae. Pretendeu-se elaborar uma estrutura típica de um currículo, que possibilite a representação de um leque alargado deste tipo de documentos.

Resumo

O tratamento de documentos anotados utilizado esta tecnologia possibilita um leque alargado de facilidades para a manipulação destes. A criação de documentos XML inclui um conjunto de regras para a sua boa formação, e podem ser validados com um schema que define a sua estruturação. As transformações possibilitadas pelas stylesheets adicionam as facilidades de representação sob diversos formatos a informação contida nos documentos devidamente anotados.

Neste trabalho é apresentado um XML schema permite a elaboração de Curriculums Vitae, sendo possível a representação destes sob diversas formas, utilizando as stylesheets providenciadas. Adicionalmente foram criadas duas instâncias que exemplificam os Curriculums Vitae que são passíveis de serem representados.

Abstract

The treatment of annotated documents using this technology provides a broad range of facilities for the manipulation of these. The creation of XML documents includes a set of rules to guarantee their good-formation and can be validated with a schema describing the documents structure. The document transformations enabled by the stylesheets add the facilities for the representation of the information in the documents under several formats.

This work presents a XML schema that enables the creation of Curriculums Vitae, giving the possibility of representation these documents under several formats, using the provided stylesheets. Additionally, two instances where created to exemplify the Curriculums Vitae that can be represented.

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






Índice de Conteúdos

1. Acerca do Schema

1.1. Tipos complexos

1.1.1. TdadosPessoais

1.1.2. Tcontacto

1.1.3. Tmorada

1.1.4. Tpara

1.1.5. Tactividade

1.1.6. TartigoCientifico

1.2. Tipos simples

1.2.1. Trealce

1.3. TnotaQuantitativa

1.4. TLinguagens

1.5. TtipoCurriculum

2. Descrição das Transformações

2.1. Suporte de vários idiomas

2.2. Utilização recorrente de estrutura e template e ordenação por data

2.3. Testes aos elementos facultativos

2.4. Geração de indíce de acesso rápido




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






1. Acerca do Schema

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

Para a elaboração do schema foram recolhidos alguns curriculums, de forma a determinar uma estrutura típica passível de ser representada, dentro do possível, qualquer um deste tipo de documentos. Alguns elementos utilizados foram inspirados em exercícios das aulas, com devidas adaptações sempre que necessário.

Na tentativa de possibilitar uma criação o mais flexível possível dos documentos, sempre que justificável, os elementos foram definidos como facultativos. Por esta razão, existe uma quantidade razoável de testes com a função xsl:if test="", por forma a verificar a existência destes ou não.

É também de salientar a possibilidade da representação dos currículos sob diversas estruturas: Cronológica, Funcional ou Institucional. Através da parametrização do atributo tipo do elementos raíz curriculumVitae. Esta parametrização tem influência sobre a forma como são apresentadas as diversas actividades (profissionais ou de formação).

Adicionalmente, é suportada de forma semelhante (parametrização do atributo ling do elemento curriculumVitae) a criação de currículos em português ou inglês.

Toda a documentação detalhada do schema, pode ser consultada no link seguinte: Documentação do schema . Toda a documentação do schema está anotada, de onde se poderá obter mais informações localizadas.

A imagem seguinte, apresenta apenas os primeiros elementos do schema. O elemento raiz é o curriculumVitae, caracterizado por 7 secções, das quais 4 são facultativas. Entre as secções obrigatórias, temos: os dados pessoais que incluem informação como nome, morada(s) e contactos do sujeito do curiculum vitae, a experiência profissional constituída por uma lista das actividades profissionais, a formação, que inclui as actividades de formação em que participou.

Fazem parte das secções facultativas a investigação onde temos os tópicos de interesse e eventuais artigos publicados, as competências que inclui a descrição das competências possuídas, os reconhecimentos da qual faz parte a descrição dos prémios e reconhecimentos obtidos, finalmente, temos os passatempos onde devem ser descritos os interesses e passatempos adicionais.

A definição do Schema

Estrutura inicial do schema do trabalho.






1.1. Tipos complexos

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

A utilização de tipos complexos simplifica bastante a definição do schema pois torna a estrutura mais abstracta podendo-se utilizar o mesmo tipo para diversos elementos. Para a elaboração deste schema foi utilizada a estratégia de definir tipos complexos para grande parte da definição da estrutura do documento, tendo sido utilizados tipos simples pontualmente.

Os tipos definidos são sempre denotados através da utilização de um "T" no início do seu nome.





1.1.1. TdadosPessoais

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

Este tipo é utilizado para a definição dos dados pessoais.

É possível incluir no documento várias moradas e vários contactos.

Adicionalmente, é possível incluir observações, caracterizadas por texto livre, um ou mais tipos de realce de texto e links.

TdadosPessoais

Estrutura do tipo complexo: TdadosPessoais.







1.1.2. Tcontacto

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

Este tipo serve para a inscrição de contactos.

Tcontacto

Estrutura do tipo complexo: Tcontacto.







1.1.3. Tmorada

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

Este tipo serve para a inscrição de moradas.

Tmorada

Estrutura do tipo complexo: Tmorada.







1.1.4. Tpara

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

Estrutura é utilizada ostensivamente ao longo do documento, para a inscrição de observações/anotações. Com esta estrutura é possível incluir texto livre, um ou mais tipos de realce de texto e links.

Tpara

Tpara utilizado numa secção de observações.







1.1.5. Tactividade

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

Esta estrutura é utilizada para descrever actividades profissionais, dentro da secção experienciaProfissional ou actividades de formação em formação. É assim caracterizada pelos elementos necessários para descrever uma actividade de forma abstracta.

Inclui o título do cargo ou título obtido, a designação da actividade, a entidade onde decorreu, a localização, a data de início e fim e, eventualmente algum tipo de avaliação (qualitativa ou quantitativa) e observações que permitem uma descrição mais pormenorizada da actividade.

Tactividade

Estrutura do tipo complexo: Tactividade.







1.1.6. TartigoCientifico

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

Com esta estrutura são descritos os artigos científicos publicados. Inclui uma lista dos autores do artigo, o título, e uma lista de locais onde o artigo foi publicado (publicações).

TartigoCientifico

Estrutura do tipo complexo: TartigoCientifico.








1.2. Tipos simples

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

Foram utilizados tipos simples essencialmente para definir tipos a partir de tipos já existentes, mas as quais pretendia-se adicionar restrições. Mais concretamente, de uma forma geral foram utilizados para criar enumerações de valores permitidos para diferentes casos.

Tal como para o caso dos tipos complexos, os tipos simples definidos são sempre denotados através da utilização de um "T" no início do seu nome.





1.2.1. Trealce

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

Enumeração dos tipos de realce de texto permitidos.

<xs:element name="realce">
  <xs:annotation>
    <xs:documentation>Realce de texto (negrito, itálico ou sublinhado)</xs:documentation>
  </xs:annotation>
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="tipo" type="Trealce" use="required" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

O codigo anterior apresenta a definição da enumeração dos tipos de realce permitidos.







1.3. TnotaQuantitativa

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

Esta é uma enumeração das notas quantitativas que podem ser utilizadas.

As notas podem ser numéricas: de 1 a 20 ou alfabéticas: de A a F.






1.4. TLinguagens

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

Enumeração das linguagens suportadas pela styleseet.

São suportadas as línguas Portuguesa e Inglesa.






1.5. TtipoCurriculum

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

Os tipos de curriculum suportados são enumerados por este tipo de dados.

São suportados currículos dos tipo: Cronológico, Funcional ou Institucional.







2. Descrição das Transformações

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

Nesta secção são apresentados os aspectos mais importantes das transformações executadas nas stylesheets deste trabalho.

Duas stylesheets que foram elaboradas: Uma para gerar um documento em formato html e outra que gera um documento em latex.





2.1. Suporte de vários idiomas

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

É suportada a criação de currículos em português ou inglês. Através da parametrização do atributo ling do elemento curriculumVitae.

A escolha do idioma do currículo influencia a transformação aquando da necessária inclusão de texto gerado por esta, como é o caso dos descritivos de cada secção.

Os elementos XSLTxsl: choose, foram muito úteis neste caso, a escolha entre várias opções, no caso os idiomas suportados.

De seguida é apresentado um excerto de código que exemplifica a utilização do atributo ling para a decisão do idioma a utilizar no descritivo de uma secção.

<xsl:choose>
	<xsl:when test="/curriculumVitae/@ling = 'pt'">
        	<h3>Dados Pessoais<hr/> </h3>
	</xsl:when>	
	<xsl:when test="/curriculumVitae/@ling = 'in'">
         	<h3>Personal Information<hr/> </h3>
	</xsl:when>	
</xsl:choose>

Assim, conforme o idioma parametrizado, aparecem os descritivos no respectivo idioma.






2.2. Utilização recorrente de estrutura e template e ordenação por data

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

Para descrever actividades profissionais, dentro da secção experienciaProfissional ou actividades de formação em formação foi utilizada uma estrutura única Tactividade. Isto permite o tratamento conjunto das suas secções, utilizando uma estrutura condicional para verificar qual o descritivo a colocar na secção através da função name().

No código seguinte é mostrada a escolha do descritivo da secção secção conforme descrito, tendo também em conta o idioma.

   <xsl:template match="experienciaProfissional | formacao">			
			<a name="#{name()}">			
			<xsl:choose>
				<xsl:when test="/curriculumVitae/@ling = 'pt' and name()='experienciaProfissional'">
				<h3>Experiência Profissional<hr/></h3>
				</xsl:when>	
				<xsl:when test="/curriculumVitae/@ling = 'pt' and name()='formacao'">
				<h3>Formação<hr/></h3>
				</xsl:when>	
				<xsl:when test="/curriculumVitae/@ling = 'in' and name()='experienciaProfissional'">
				<h3>Professional Experience<hr/></h3>
				</xsl:when>	
				<xsl:when test="/curriculumVitae/@ling = 'in' and name()='formacao'">
				<h3>Education<hr/></h3>
				</xsl:when>	
			</xsl:choose>
			</a>
			<xsl:apply-templates select="actividade">
				<xsl:sort select="dataInicio" data-type="data" order="descending"/>								</xsl:apply-templates>
    </xsl:template>

Isto permite a simplificação do tratamento destas secções.

De salientar adicionalmente, que foi utilizado o elemento XSTL xsl: sort para a ordenação das actividades dentro de cada secção por data.






2.3. Testes aos elementos facultativos

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

Como enunciado anteriormente existe um grande número de elementos facultativos, que podem ou não aparecer no documento. Os elementos XSLTxsl: if teste são muito úteis neste caso, pois permitem-nos aplicar tratamento a elementos facultativos. O excerto de código seguinte exemplifica a utilização deste elemento para verificar a existência de Fax ou Email, elementos facultativos de contacto.

<xsl:if test="string-length( fax ) != 0">
		Fax:<xsl:value-of select="fax" /><br/>
</xsl:if>
<xsl:if test="string-length( email ) != 0">
		Email:<xsl:value-of select="email" /><br/>
</xsl:if>

Desta forma os descritivos respectivos só aparecem se o elemento existir.






2.4. Geração de indíce de acesso rápido

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

Para acesso rápido a cada uma das secções do currículo, foi criado um pequeno indíce de acesso rápido a cada uma das secções. Como, decorrente da estrutura definida, cada secção tem um nome único bem definido, este foi utilizado como referência para a criação dos links, ao invés do típico {generate-id()} que é a instrução tipicamente utilizada em situações semelhantes, para gerar identificadores únicos.

Desta forma, foi relativamente fácil construir o índice, utilizando uma passagem do documento específica para a criação deste, avaliando as secções presentes.

Vejamos o código correspondente à chamada da passagem para a criação do índice.

...
<hr/> <p> <xsl:apply-templates mode="indice"/> </p> <hr/>					
...

Agora, vejamos os templates para a criação do índice

<xsl:template match="dadosPessoais" mode="indice">
  [<a href="#{name()}">Dados Pessoais</a>]
</xsl:template>

<xsl:template match="experienciaProfissional" mode="indice">
  [<a href="#{name()}">Experiência Profissional</a>]
</xsl:template>

<xsl:template match="formacao" mode="indice">
  [<a href="#{name()}">Formação</a>]
</xsl:template>

<xsl:template match="investigacao" mode="indice">			
  [<a href="#{name()}">Investigação</a>]
</xsl:template>

<xsl:template match="Competências" mode="indice">			
  [<a href="#{name()}">Formação</a>]
</xsl:template>

<xsl:template match="reconhecimentos" mode="indice">			
  [<a href="#{name()}">Reconhecimentos</a>]
</xsl:template>

<xsl:template match="passatempos" mode="indice">			
  [<a href="#{name()}">Passatempos</a>]
</xsl:template>

<xsl:template match="text()" priority="-1" mode="indice"/>









Epílogo


A elaboração deste trabalho, embora trabalhosa, demonstrou-se agradável, por proporcionar uma pequena visão do 'mundo' XML e verificar as potencialidades deste.

O desenvolvimento deste trabalho, está longe de terminado, sendo possível diversas melhorias que permitam uma maior flexibilidade e alargar o âmbito dos tipos de currículos suportados.

O próprio relatório foi elaborado utilizando o trabalho de colegas da edição de 2002 do MICEI, permitindo uma maior familiarização com a tecnologia e outros trabalho elaborados na área.

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





Glossário


MICEI: Mestrado de Informática / Curso de Especialização em Informática

XML: Extended Markup Language

XSLT: Extensible Stylesheet Language for Transformations






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





Bibliografia


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

[jcr02] - Ramalho, José C. L. , XML e XSL da Teoria à Prática , FCA , Rua D.Estefânia, 183 - r/c - Dto. 1049-057 Lisboa , Agosto 2001 , http://www.di.uminho.pt/~jcr/XML/publicacoes/livros/fca2002/index.htm , 972-722-347-8

[tXML] - TopXML , DOM, XSLT, XPath Reference , www.topXML.com






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