2. 1
I N T R O D U C¸ ˜A O
A Plataforma Lattes ´e um sistema online com o fim de realizar a
integrac¸˜ao de bases de dados de curr´ıculos de grupos de pesquisa e
de instituic¸ ˜oes em um ´unico sistema de informac¸ ˜oes. O Curr´ıculo Lat-
tes registra a vida pregressa dos estudantes e pesquisadores do pa´ıs
e ´e hoje adotado pela maioria das instituic¸ ˜oes de fomento, univer-
sidades e institutos. Devido a popularidade dessa plataforma, essa
possui hoje uma rica base de dados contendo informac¸ ˜oes sobre a
grande maioria dos pesquisadores do pa´ıs.
Citar recursos bibliogr´aficos ´e uma atividade corriqueira na vida
de um pesquisador, para isso, existem softwares dedicados a gest˜ao
de referˆencias. BibTeX [10] ´e uma ferramenta e um formato de ar-
quivo o qual ´e usado para descrever e processar listas de referˆencias
usadas normalmente acoplado a um arquivo LaTeX [10]. Apesar das
vantagens de sua utilizac¸˜ao, a ferramenta BibTeX requer a laboriosa
tarefa de preencher manualmente os campos de uma entrada bibli-
ogr´afica e ´e esse o problema que o sistema procura resolver: usufruir
da riqueza da Plataforma Lattes para extrair suas referˆencias bibli-
ogr´aficas em formato BibTeX.
2
3. 2
S I T U A C¸ ˜A O AT U A L
Existe hoje biblioteca que realiza funcionalidade equivalente, chamada
Lattes-to-BibTeX [12]. As ferramentas utilizadas por essa biblioteca
s˜ao as seguintes:
slattes [13] Uma ferramenta desenvolvida para conectar o Curr´ıculo
Lattes e as tecnologias de Web Semˆantica. A principal ferra-
menta utilizada dessa biblioteca ´e um XSLT que converte do
XML do Lattes para um formato mais difundido, MODS (Meta-
data Object Description Schema).
allegro common lisp [6] ´e uma extens˜ao do ANSI Common
Lisp a qual provˆe interface para OpenGL, threads, Unicode,
CLOS (Common Lisp Object System) streams e etc.
allegroserve [7] servidor web escrito pela Franz Inc, que utiliza
a ferramenta de gerac¸˜ao de HTML, htmlgen, para a criac¸˜ao de
p´aginas dinˆamicas HTML, i.e. a pagina web ´e modificada di-
namicamente dentro da m´aquina cliente sem necessidades de
novos acessos ao servidor web. Al´em disso, essa ferramenta
permite que p´aginas sejam dinamicamente geradas.
bibutils [11] um conjunto de programas o qual converte entre
v´arios formatos de especificac¸˜ao bibliogr´afica utilizando um for-
mato intermedi´ario MODS (Metadata Object Description Schema).
Um dos programas desse conjunto, ”xml2bib”, realiza a con-
vers˜ao entre um XML MODS para BibTeX.
quicklisp [3] o gerenciador de bibliotecas de Common Lisp.
jquery [8] uma biblioteca de JavaScript que facilita o percorrimento
de um documento HTML, parsing, assim como o tratamento de
eventos, animac¸˜ao de um site e etc. jQuery pode ser visto como
uma biblioteca auxiliar utilizada para que n˜ao seja necess´ario
trabalhar extensivamente com JavaScript.
Esse sistema implementa um conversor de Lattes para BibTeX. Nesta
vers˜ao, o conversor recebe como entrada um curr´ıculo Lattes em XML
ou zipado e o transforma em outro XML em formato MODS (usando
a transformac¸˜ao XSLT [4], lattes2mods.xsl, da ferramenta SLattes) o
3
4. situac¸ ˜ao atual
qual ´e transformado posteriormente para formato BibTeX pela ferra-
menta Bibutils. Esse conversor ´e disponibilizado em uma p´agina web
e possui interface minimalista, disponibilizando apenas um HTML
form para o carregamento do arquivo. Al´em disso, a interface possui
alguns links para as ferramentas (aqui mencionadas) utilizadas em
seu desenvolvimento assim como uma p´agina para esclarecer algu-
mas d´uvidas frequentes, e.g.: Como utilizar a ferramenta.
4
5. 3
O B J E T I V O S D O T R A B A L H O
Na primeira etapa do projeto buscou-se desenvolver funcionalidade
equiparada com a ferramenta j´a existente, no entanto, utilizando work-
flow diferente. De fato, nesse novo caminho busca-se manter a aplicac¸˜ao
o m´aximo poss´ıvel dentro do dom´ınio da linguagem Common Lisp [5].
Para realizar essa aplicac¸˜ao ´e disposto ao programa bibliotecas
utilit´arias, descritas a seguir.
CL-BibTeX [9] ´e um substituto para o programa BibTeX o qual
permite o usu´ario escrever programas utilizando Common Lisp ao
inv´es da linguagem orientada a pilha dos arquivos de estilo BibTeX.
A motivac¸˜ao da implementac¸˜ao desse sistema foi devido a dificul-
dade de escrever/editar programas em BAFLL (BibTeX Anonymous
Forth-Like Language) o qual permite customizar a formatac¸˜ao dos
arquivos BibTeX.
CXML [2] ´e um parser de XML escrito em Common Lisp. Dentro
dessa biblioteca, ´e utilizado especialmente sua interface SAX, a qual
permite gerar eventos enquanto o arquivo est´a sendo percorrido, e.g.
´e poss´ıvel chamar um m´etodo cada vez que um in´ıcio de elemento ´e
detectado.
Xuriella [15] ´e uma biblioteca em Common Lisp a qual busca se
tornar uma implementac¸˜ao completa do XSLT vers˜ao 1.0.
Por meio do carregamento dessas ferramentas cria-se um ambiente
capaz de: usufruir das convers˜oes j´a propostas pela comunidade, ex-
trair informac¸ ˜oes de maneira eficiente dos arquivos XML e processar
um arquivo XSLT dentro do c´odigo Lisp.
A convers˜ao seguir´a o seguinte procedimento: uma interface web
receber´a, por meio de um HTML form, um arquivo XML em formato
Lattes, de seguida deve-se converter esse para formato intermedi´ario
(BibTeXML) por meio da linguagem de transformac¸˜ao XSLT. A van-
tagem de realizar essa transformac¸˜ao intermedi´aria ´e devido ao fato
de sua estrutura ser muito parecida com o formato de arquivo dese-
jado, BibTeX. Por meio desse interm´edio, facilitamos o trabalho a ser
realizado pelo programa em Common Lisp, o qual realizar´a inclusive
a convers˜ao final do formato BibTeXML para BibTeX, uma vez que
esse ter´a como entrada uma estrutura mais parecida com o intento.
Os produtos finais da primeira parte do projeto ser˜ao:
5
6. objetivos do trabalho
• Interface Web: p´agina web a qual exibir´a o resultado da con-
vers˜ao.
• lattes2bibtexml: Transformac¸˜ao XSLT a qual recebe um XML
em formato Lattes e o transforma de acordo com as regras ex-
plicitadas na folha de estilo. Um arquivo XML de entrada rep-
resentando uma ´arvore ´e percorrido e sobre ele s˜ao aplicados
templates nos n´os necess´arios, extraindo informac¸ ˜oes e gerando
o XML de sa´ıda. Dessa forma, quando ocorre um casamento en-
tre um n´o especificado nas regras e um n´o na ´arvore XML de
entrada, escreve-se no arquivo de sa´ıda o XML necess´ario para
atingir o formato desejado, nesse caso, bibtexml.
• lattes2bibtex: Programa em Common Lisp respons´avel por re-
alizar a convers˜ao fim a fim. Esse programa executa o proces-
samento da convers˜ao descrita anteriormente e utiliza seu re-
sultado para a convers˜ao final. A ´ultima convers˜ao consiste
em estruturar os dados das entradas bibliogr´aficas em um hash,
a qual ´e utilizada futuramente pela biblioteca CL-BibTeX para
gerar o arquivo BibTeX.
Deve ser apontado que na parte de programac¸˜ao foi utilizado o
aux´ılio do co-orientador Dr. Alexandre Rademaker, tanto na indicac¸˜ao
de referˆencias para a obtenc¸˜ao de documentac¸˜ao, quanto na soluc¸˜ao
de d´uvidas t´ecnicas na implementac¸˜ao dos c´odigos XSLT e Common
Lisp.
6
7. 4
AT I V I D A D E S
Desde Janeiro de 2014 estou estudando a linguagem de programac¸˜ao
Common Lisp, incentivada pelo atual co-orientador, devido ao tra-
balho que foi realizado na Fundac¸˜ao Get´ulio Vargas uma vez que a
maioria do c´odigo fonte tinha sido escrito em tal linguagem. Nessa
´epoca, iniciou-se o estudo do livro Practical Common Lisp [14].
Na metade do ano de 2014, foi cursado a disciplina do departa-
mento de engenharia el´etrica: L´ogica Fuzzy (ELE2399). No decorrer
do curso, foi desenvolvido em Lisp as primeiras operac¸ ˜oes l´ogicas
e modificadores necess´arios para prover a, hoje proposta, biblioteca
de Fuzzy que ser´a plenamente desenvolvida na segunda parte do
projeto. Durante o trabalho na FGV, tamb´em foi requerido projetar
algumas transformac¸ ˜oes XSLT, que facilitaram a atual transformac¸˜ao
entre o XML em formato Lattes e o XML em formato BibTeXML.
Nas primeiras reuni˜oes realizadas sobre o Projeto Final I, j´a foram
definidas as ferramentas necess´arias na implementac¸˜ao. Foi necess´ario
aprender, por exemplo, a utilizar interface SAX da biblioteca CXML
para navegar no arquivo XML de entrada. Al´em dessa, tamb´em foi
estudado as funcionalidades b´asicas da biblioteca Xuriella a qual per-
mitiu realizar o processamento da transformac¸˜ao XSLT dentro do
c´odigo Lisp. Para realizar a convers˜ao final para formato BibTeX,
existiu um esforc¸o para compreender a estruturac¸˜ao da biblioteca
CL-BibTeX para a correta convers˜ao da estrutura de hashes para o
arquivo BibTeX. Para gerenciar todas essas bibliotecas, foi necess´ario
entender a estrutura b´asica do asdf [1] e a chamada de func¸ ˜oes do
quicklisp.
7
8. 5
R E V I S ˜A O D O P L A N O D E T R A B A L H O
Ocorreram algumas mudanc¸as no workflow mencionado na Proposta
do Projeto I. Durante a implementac¸˜ao inicial, foi extremamente penoso
implementar o programa Lisp respons´avel por realizar a convers˜ao
do XML do Lattes direto para a estrutura de hash. De fato, devido a
falta de um padr˜ao entre o formato dado e o formato almejado exigiu-
se uma complexidade dispens´avel no c´odigo Lisp. Notou-se que
buscava alcanc¸ar pelo c´odigo Lisp as funcionalidades oferecidas pela
transformac¸˜ao XSLT, e.g. a chamada de um conjunto de instruc¸ ˜oes
sempre quando uma tag espec´ıfica do XML era parseada que ´e justa-
mente o que o template match do XSLT faz. Com o tempo, foi ficando
cada vez mais n´ıtido que n˜ao utiliz´avamos a ferramenta ideal para o
problema, por isso, foi sugerido que mudasse o workflow passando a
incluir o estado intermedi´ario, BibTeXML, dado a semelhanc¸a desse
com a estrutura de hashes desejada.
Ocorreu outra quebra de expectativa ao utilizar a func¸˜ao da bib-
lioteca CL-BibTeX, write-bib-entry, para transformar uma entrada bib-
liogr´afica (representando um hash) salva em mem´oria para uma en-
trada do arquivo final BibTeX. No entanto, a func¸˜ao write-bib-entry
esperava que sua entrada fosse uma instˆancia da classe bib-entry, a
qual possu´ıa em um de seus slots a estrutura de hash, diferentemente
do que tinha sido suposto a priori.
Ficar´a pendente para o Projeto Final I, acertar essa modificac¸˜ao na
estrutura de hash, pois essa deveria ter sido constru´ıda como um hash
de instˆancias da classe bib-entry (representando cada entrada bibli-
ogr´afica) as quais possuem em um de seus slots uma outra hash (rep-
resentando os campos espec´ıficos de cada entrada). Anteriormente,
imaginava-se que a estrutura era simplesmente uma hash de hashes.
8
9. 6
C R O N O G R A M A
Na Figura 1 temos o cronograma fornecido pelo GitHub, editado
para conter somente os commits referentes ao desenvolvimento do
Projeto Final I. Este gr´afico identifica o volume de commits nos dois
reposit´orios utilizados: cl-fuzzy e lattes2bibtex. Vale mencionar que
esses dados registram apenas a conclus˜ao de uma certa funcionali-
dade, n˜ao ´e monitorado nesse esquema os estudos realizados nem os
esforc¸os infrut´ıferos os quais n˜ao foram dignos de serem commitados.
´E poss´ıvel obter acesso a vers˜ao atualizada dos reposit´orios em:
• http://github.com/dcguim/cl-fuzzy
• http://github.com/dcguim/lattes2bibtex
Na Tabela 1 ´e relatado tudo que j´a foi desenvolvido e que ficar´a
pendente para a conclus˜ao integral do Projeto Final I, i.e. a inter-
face web e a correc¸˜ao desse erro. Pretende-se realizar tais pendencias
antes do in´ıcio do pr´oximo semestre para que esse fique dedicado ao
t´ermino da biblioteca fuzzy. Na tabela acima, ´e relatado tudo que j´a
foi desenvolvido e que ficar´a pendente para a conclus˜ao integral do
Projeto Final I, i.e. a interface web e a correc¸˜ao desse erro. Pretende-
se realizar tais pendencias antes do in´ıcio do pr´oximo semestre para
que esse fique dedicado ao t´ermino da biblioteca fuzzy.
Figure 1: Cronograma do GitHub
9
10. cronograma
Dezembro Desenvolvimento das operac¸ ˜oes b´asicas e dos modi-
ficadores que ir˜ao agir sobre conjuntos fuzzy. Vale
mencionar que a biblioteca fuzzy, a princ´ıpio, tinha
sido implementada para prop´osito gen´erico.
Janeiro -
Fevereiro Foi desenvolvido um sistema asdf e um framework
de teste para realizar testes de coerˆencia sobre a
biblioteca. Estudo do livro Practical Common Lisp
e do cap´ıtulo 17 do XML Bible o qual ensina as
transformac¸ ˜oes XSL.
Marc¸o Estudo da biblioteca cxml, mais especificamente, sua
interface SAX. In´ıcio da implementac¸˜ao da convers˜ao,
a princ´ıpio, objetivava realizar um curto-circuito entre
o XML do Lattes e a estrutura de hash em Common
Lisp. Nesse momento, os esforc¸os foram direcionados
ao desenvolvimento desse curto-circuito o qual futu-
ramente se mostrou o caminho mais custoso.
Abril Em abril, persistiram os esforc¸os na realizac¸˜ao do
curto-circuito em Common Lisp, `a vista disso, foi ex-
tremamente penoso construir essa parte do c´odigo de-
vido aos problemas mencionados no cap´ıtulo 5.
Maio Houve a realizac¸˜ao de que seria mais simples optar
pela transformac¸˜ao XSL, portanto, foi implementada
a transformac¸˜ao XSL respons´avel,por transformar o
XML do Lattes para o XML BibTeXML. Durante a
implementac¸˜ao, fez-se necess´ario estudos adicionais
no cap´ıtulo 17 do livro XML Bible.
Junho Uma vez que foi gerado o XML BibTeXML, foi
extremamante simples converter as entradas bibli-
ogr´aficas do XML para a estrutura de hash dese-
jada.Tamb´em houve a realizac¸˜ao de que existia um
pressuposto errado sobre a estrutura de hash e sobre
essa ocorrer´a uma mudanc¸a sut´ıl.
Table 1: Cronograma
10
11. B I B L I O G R A P H Y
[1] Daniel Barlow. ASDF Manual. https://common-
lisp.net/project/asdf/asdf.html.
[2] Gilbert Baumann. Closure xml parser. https://www.common-
lisp.net/project/cxml/.
[3] Zach Beane. Quicklisp beta. https://www.quicklisp.org/beta/.
[4] James Clark. Xsl transformations version 1.0. Technical report,
W3C, 1999.
[5] ANSI X3J13 committee. Ansi incits 226-1994 (r2004) american na-
tional standard for programming language common lisp (x3j13).
[6] Franz Inc. Allegro Common Lisp.
http://franz.com/products/allegrocl/.
[7] Franz Inc. AllegroServe: A web application server.
http://franz.com/support/documentation/current/doc/aserve/aserve.html.
[8] The jQuery Foundation. jquery api. http://api.jquery.com/.
[9] Matthias Koeppe. CL-BibTeX. http://www.nongnu.org/cl-
bibtex/.
[10] Leslie Lamport. LaTeX: A Document Preparation System. Addison-
wesley, 1994.
[11] Chris Putnam. bibtutils: bibliography conversion utilities.
http://bibutils.refbase.org/.
[12] Alexandre Rademaker. Lattes to BibTeX.
https://github.com/arademaker/lattes-to-bibtex.
[13] Alexandre Rademaker. Semantic Lattes.
https://github.com/arademaker/SLattes/.
[14] Peter Seibel. Practical Common Lisp. Apress, 2005.
[15] Ivan Shvedunov and David Lichteblau. Xuriella: A com-
mon lisp implementation of xslt 1.0. https://common-
lisp.net/project/xuriella/.
11