Estruturação, anotação e transformação do Inventário dos Livros da Misericórdia de Braga

18 de Dezembro de 2001


Filipe Martins a24816@correio.ci.uminho.pt
Helder Ribeiro helderibeiro@bragatel.pt




Abstract
Digitalização do Documento
Definição do documento XML
Processo de Anotação
Transformação XML/HTML
Transformação XML/LaTeX
Conclusão
Agradecimentos
Bibliografia
Ficheiros


Abstract

Este relatório apresenta o processo de processamento estruturado do Inventário dos Livros da Misericórdia de Braga. Este processamento deve-se à necessidade de tornar rápidamente disponível o texto em vários formatos que auxiliem a sua consulta e catalogação.

Várias foram as ferramentas de software utilizadas, abrangendo àreas desde o XSL até linguagens de scripting como o Perl.

Começamos por analisar o documento em questão e definir um DTD e um schema que englobassem toda a informação nele constante. Após esta fase, foi necessário anotar o documento e na posse de um documento de XML válido, elaborar as stylesheets necessárias à correcta transformação para os formatos pretendidos.

Digitalização do Documento

O processo de digitalização é o primeiro do ciclo de vida do documento digital. Para esse processo foi utilizado um scanner e um software de OCR para gerar um ficheiro de texto que foi guardado no formato RTF

A digitalização do documento propriamente dita foi feia por um colega da disciplina, tendo sido posteriormente disponibilizada na página da cadeira.

Definição do documento XML

Nesta fizemos uma profunda análise do documento original, identificando os elementos lógicos nele constantes. Após um primeiro esboço passamos à definição do schema utilizando o XML Spy.

Na elaboração do schema tivemos em atenção os seguintes aspectos:

• divisão do documento em duas grandes partes: o preambulo, e o inventário propriamente dito;

• o inventário divide-se em séries, séries estas que podem ter como elementos: secções, epigrafes, paragrafos e referências;

• foi feita uma análise global e incremental a cada um dos elementos por forma a fazer uma definição que se acomodasse a todos, não sendo, no entanto específica para este documento, mas que se adapta-se a documentos deste tipo;

• divisão das referências do documento em dois grupos, as ref e as ref2. As ref têm um identificador global e um local (referente à epígrafe/série/subsecção em que se encontram) enquanto que as ref2 só têm um identificador local;

• criação de complex types para englobar características comuns a determinados elementos;

• análise cuidada de cada elemento, definindo quando necessário atributos

Processo de Anotação

O nosso processo de anotação consistiu em remover as tags desnecessárias e criar novas tags que transformem o inventário num documento XML válido. Esse processo foi feito em quatro fases: conversão do RTF para XML transdoc, limpeza do XML transdoc,anotação automática usando Perl e anotação manual.

Conversão do RTF para XML usando o omnimark

Nesta fase utilizamos o omnimark para efectuar a conversão do RTF para XML usando a script rtf2xml. Geramos assim o ficheiro output.xml.

Limpeza do XML

Foi necessário efectuar esta fase porque o formato RTF acrescenta bastantes tags associadas principalmente ao estilo e não anota o conteúdo propriamente dito. Essa limpeza foi efectuada pela invocação de uma script em Perl.

Anotação automática

Um dos constituintes do texto são as referências, que respeitam mais ou menos um certo padrão. Da mesma maneira, também os parágrafos respeitam determinado padrão. Por isso, decidimos criar uma script em perl que anotasse automaticamente as referências e os parágrafos, segundo o formato definido, além de remover os cabeçalhos das páginas.

Esta abordagem revelou-se bastante útil, rápida e menos fastidiosa, uma vez que o documento é constituído em grande parte por referências e parágrafos.

Anotação manual

Tendo já as referências e o parágrafos anotados, que acabam por ser os elementos nucleares do documento, restava só construir a estrutura que os envolve (séries, epígrafes, secções e subsecções) e outros elementos como títulos, pessoas, citações, etc..

Transformação XML/HTML

A transformação do XML em HTML é feita recorrendo a XSL. Definimos uma style sheet que gera uma página HTML com duas frames. A frame do lado esquerdo corresponde ao índice do documento e foi criada para facilitar a navegação. A frame do lado direito é composta pelo documento propriamente dito.

A página de topo (index.html) e as páginas que compõem as frames (indice.html e inventario.html) são geradas automaticamente a partir do documento XML. Para tal recorremos a uma style sheet com duas travessias do documento, uma em modo índice e outra em modo inventario. Efectuamos uma terceira travessia em modo rodape para colocar as notas de rodapé.

Na estrutura definida para o documento, existem sub-elementos que se repetem em elementos distintos. Por exemplo, as referências podem ser sub-elementos de serie, secção, subsecção e epígrafe. No entanto, pretendíamos transformar os elementos iguais, de forma igual independentemente dos seus elementos ancestrais, para isso, definimos para quase todos os elementos uma template própria e com o respectivo nome. Nessas templates implementamos a transformação pretendida para esse elemento e, no caso de esse 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. Dentro de cada elemento que possa ter filhos, executamos um xsl:for-each para percorrermos todos os filhos e aí invocamos a template específica do filho recorrendo a xsl:choose e xsl:when.

A utilização do xsl:call-template não é mais a eficiente, porque é necessário executar um xsl:choose para saber a qual dos sub-elementos aplicar a template. Isto seria desnecessário se o xsl:call-template permitisse uma invocação menos restritiva e fosse possível utilizar o xsl:with-param para dar o nome do sub-elemento a processar. Ficaria assim:

<xsl:template name="paragrafo">

<xsl:for-each select="./*">

<xsl:call-template>

<xsl:with-param name=”name”>

<xsl:value-of select=”name()”/>

</xsl:with-param>

</xsl:call-template>

<xsl:otherwise>

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

</xsl:otherwise>

</xsl:for-each>

</xsl:template>

Dado que os processadores utilizados (xt e o saxon) não permitiam essa invocação do xsl:call-template, o aspecto final da template é o seguinte:

<xsl:template name="paragrafo">

<xsl:for-each select="./*|./text()">

<xsl:choose>

<xsl:when test='name()="pessoa"'>

<xsl:call-template name="nome"/>

</xsl:when>

<xsl:when test='name()="citacao"'>

<xsl:call-template name="citacao"/>

</xsl:when>

<xsl:when test='name()="rodape"'>

<xsl:call-template name="rodape"/>

</xsl:when>

<xsl:otherwise>

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

</xsl:otherwise>

</xsl:choose>

</xsl:for-each>

</xsl:template>

A forma como implementamos a style sheet permite alguma modularidade, na medida em que, se for necessário acrescentar sub-elementos a determinado elemento, basta acrescentar uma template para esse novo elemento e um xsl:call-template em todos os seus predecessores directos. A definição de templates específicas para cada elemento permite também simplificar as modificações das transformações a aplicar a determinado elemento, dado que esta modificação é feita apenas num único lugar.

Transformação XML/LaTeX

A transformação XML/LaTeX é feita em XSL e recorre aos conceitos de modularidade apresentados no capítulo anterior.

Na style sheet que criamos para gerar o LaTeX, tivemos que modificar a ordem pela qual são invocadas algumas templates por imposição do LaTeX.

A forma de anotação que foi definida para as referências permite um mapeamento quase directo do XML para LaTex, como se reflecte na seguinte template:

<xsl:template name="refr">

\footnote{<xsl:value-of select="."/>}

</xsl:template>

Nesta style sheet não foi necessário utilizar mode's porque bastava uma travessia para transformar o documento, o que a tornou bastante simples.

O tipo de documento utilizado para gerar o LaTeX foi o AMSLDOC porque era o que tinha uma estrutura mais parecida com o documento original.

Conclusão

Depois de concluído este trabalho estamos na posse de uma representação digital do documento inicial bastante mais útil, flexível e com maiores capacidades de indexação e pesquisa, que torna mais valiosa a informação propriamente dita.

Este novo documento está disponível em três suportes distintos, em XML, em HTML e em LaTeX. Cada um destes suportes permite tirar melhor partido da informação consoante as necessidades dos seus utilizadores.

As maiores dificuldades sentidas na realização deste trabalho estão relacionadas com a transformação de XML para LaTeX. Um dos problemas foram os & uma vêz que o LaTeX não aceitava que eles aparecessem sem estarem devidamente protegidos. Este problema poderia ter sido resolvido de duas formas: criar instruções de processamento específicas para o LaTeX ou substituir os & por e. Optamos pela segunda opção porque não desvirtuava o documento e mantinha-o mais genérico.

Os nossos objectivos foram globalmente atingidos, no entanto, não foi possível fazermos tudo como pretendíamos, como é o caso do problema da invocação do xsl:call-template.

Agradecimentos

Gostaríamos de agradecer ao professor José Carlos Ramalho por esta oportunidade de efectuar um trabalho relacionado com XML, e cujos ensinamentos serão valiosos na nossa futura vida activa.

Gosaríamos também de agradecer a colaboração do nosso colega que fez a digitalização dos textos.

Bibliografia


Anotação Estrutural de Documentos e sua Semântica
José Carlos Leite Ramalho
2000


XSL Companion
Neil Bradley
2000
Addison-Wesley


XT Version 19991105
James Clark
1998, 1999
http://www.jclark.com/xml/xt.html


XSL Transformations (XSLT) Version 1.0
W3C Recommendation
16 Novembro 1999
http://www.w3.org/TR/1999/REC-xslt-19991116


The XML Companion
Neil Bradley
1998
Addison-Wesley


Ficheiros

Gerado pela script omnimark rtf2xml output.xml
Script perl que remove as tags RTF output.pl
Gerado pela script perl output.pl outperl.xml
Script perl que anota automáticamente as referências e os parágrafos outperl.pl
Gerado pela script perl outperl.pl outperl2.xml
Resultante da anotação manual do ficheiro outperl2.xml inventario.xml
DTD do inventário inventario.dtd
Schema do inventário inventario.xsd
Style Sheet para a transformação do inventário em HTML 2HTML.xsl
Cascading Style Sheet para a frame do inventário styleInv.css
Cascading Style Sheet para a frame do indíce styleInd.css
Style Sheet para a transformação do inventário em LaTeX 2LaTeX.xsl
Relatório própriamente dito relatorio.xml
Schema do relatório relatorio.xsd
Style Sheet para a transformação do inventário em HTML rel2HTML.xsl
Cascading Style Sheet para o relatório styleRel.css