Processamento estruturado do Inventário das Cartas Anuais das Missões da Etiópia

Dezembro de 2000


Beatriz de Oliveira Costa Marco Paulo da Venda Flores
beatrizc1@yahoo.com marcoflores@mail.pt
Nº Aluno: 22644 Nº Aluno: 22687

Índice



Abstract

Este documento descreve detalhadamente cada uma das etapas relativas ao processamento estruturado do Inventário das Cartas Anuais das Missões da Etiópia.

Para a sua realização, é necessária a utilização de várias ferramentas de software e o conhecimento de várias tecnologias. Inicialmente, é essencial um conhecimento da realização de DTDs, da sua validação com o XMetaL e da anotação de documentos de modo a produzir documentos XML que respeitam a estrutura do DTD. Numa segunda fase, é importante saber utilizar linguagens como o Omnimark (utilizado por nós na geração de tabelas de índices), e o XSL (saxon e xt) (utilizada na formatação visual do documento XML, procedendo à geração de HTML). Estas linguagens permitem, a partir do documento XML, produzir formas mais adequadas para a visualização do mesmo documento.

Deste modo, utilizando as técnicas referidas e tendo um documento base em papel, conseguimos obter uma versão XML correctamente anotada. A partir do código XML, produzimos uma versão HTML desse documento e tornámos fácil a sua transformação para qualquer outro formato.



Introdução

Este trabalho tem como objectivo a armazenação digital estruturada do Inventário das Cartas Anuais das Missões da Etiópia pertencente ao Arquivo Distrital de Braga.

A primeira fase deste projecto consiste na digitalização do documento, ou seja, na transformação da sua forma em papel num formato digital, passível de ser transformado (tipicamente utilizando o OCR - "Online Character Recognition"). Paralelamente, é necessário fazer a análise do seu conteúdo e das partes e sub-partes em que o poderemos dividir de modo a criar o DTD. O passo seguinte é a anotação do documento fonte de acordo com a estrutura do DTD, passando assim a ter um documento XML válido. O XMetaL é uma ferramenta de bastante utilidade nesta fase para a validação do DTD, validação do documento em relação ao DTD e para fazer a anotação do documento fonte. Em seguida, deve ser feita a geração automática dos índices, tipicamente em Omnimark (embora outras linguagens possam ser utilizadas). O último passo é a conversão do documento XML para outra linguagem, tal como HTML. O XSL é uma linguagem de formatação adequada para esta fase.

Várias tecnologias foram interligadas, o que foi positivo pois permitiu-nos adquirir uma ideia generalizada do processo de digitalização de documentos. Cada uma destas etapas vai estar mais pormenorizadamente explicada ao longo deste documento.



Digitalização e conversão OCR

Esta fase consistiu na digitalização das páginas do documento em estudo e na respectiva conversão OCR.

Na digitalização das páginas recorreu-se a um scanner, a conversão da imagem digitalizada em texto foi efectuada utilizando um software de OCR que permitia converter a imagem num documento no formato RTF, formato este escolhido de vários possíveis.

De salientar que esta tarefa foi efectuada por um dos grupos que estava a realizar o mesmo trabalho e posteriormente foram disponibilizadas as páginas via internet.



Análise documental

O desenvolvimento de um bom DTD começa por uma análise pormenorizada do documento fonte. Começámos assim por perceber a sua estrutura, podendo estabelecer uma primeira aproximação para os nomes das tags. Tentámos pensar no maior número de pormenores possível para evitar grandes modificações no DTD durante a adequação do documento ao nosso DTD. Conseguimos gerar uma primeira versão bastante completa, mas houve alguns pormenores que foram alterados mais tarde.

Vamos apresentar em seguida alguns detalhes significativos na criação deste DTD.

Os restantes elementos foram atribuídos da forma que nos pareceu mais adequada ao documento. Tentámos que fosse o mais correcta e estruturada possivel.



Conversão Transdoc-DTD

Após a transformação do documento para o formato RTF, era necessário fazer a respectiva conversão para a estrutura do nosso DTD. Decorrida uma extensa análise ao documento no formato RTF, constatámos que as vantagens inerentes a uma qualquer script de captura eram consideravelmente inferiores à conversão de uma forma linear extraindo o conteúdo do documento e passando-o para a estrutura do nosso DTD (vulgo copy/paste).

O documento em formato RTF era estruturavelmente pobre e por vezes inconsistente, no entanto discutimos diversas possibilidades para a sua conversão, desde capturar apenas o texto e colocá-lo sobre a estrutura do nosso DTD sem anotações adicionais, a capturar o texto anotando excertos como nomes, datas e locais.

A primeira possibilidade como se depreende não era vantajosa sobretudo porque o resultado obtido pela script não compensaria o dispêndio de tempo necessário devido à pobreza e inconsistência do documento em RTF. A segunda hipótese trar-nos-ia diversos problemas:

A nossa decisão, como já referimos, passou pela cópia do conteúdo do documento para a estrutura do nosso DTD, utilizando para tal o XMetaL, que nos permitia ter um controlo superior sobre essa mesma estrutura. Isto é, abrimos um ficheiro XML, indicando o nosso DTD e inserindo então as diferentes partes do documento nos seus respectivos locais.

No decorrer desta transposição, fomos efectuando algumas modificações no nosso DTD tendo em vista o correcto armazenamento e anotação do documento. Depois de termos o documento todo em XML, foi necessária a inclusão de diversos atributos, já descritos anteriormente, para a correcta geração dos índices e para a formação qualitativa do documento estruturado.



Geração Índices

A nossa primeira aproximação na geração dos índices foi tentar fazê-la utilizando XSL. Foi fácil criar uma script que faz a recolha dos nomes do documento e sua ordenação, no entanto não conseguimos fazer a remoção dos nomes repetidos. A principal razão para isto não ser possível é o facto de que, em XSL, não é possível alterar o conteúdo de uma variável. Se definirmos duas vezes uma variável com o mesmo nome, isto não vai alterar o valor da primeira, mas sim criar uma segunda com um scope diferente. Logo, não é possível guardar um atributo de uma tag numa iteração de um ciclo "for-each" e compará-lo com o valor encontrado noutra iteração. Deste modo, abandonámos a ideia inicial de fazer a geração de índices usando XSL, e utilizámos o Omnimark, que se revelou ser uma ferramenta mais completa.

Apresentamos em seguida a nossa tentativa de fazer uma script XSL. Esta script gera uma lista ordenada com os nomes que aparecem no texto, mas não elimina os repetidos.

<xml version="1.0" encoding="ISO-8859-1">
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:output version="1.0" encoding="ISO-8859-1"/>
<xsl:template name="nl">
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:variable name="apelidoAnterior">primeiroApelido>
<xsl:template match="/">
<xsl:element name="main">
<xsl:for-each select="//nome">
<xsl:sort order="ascending" select="@apelido"/>
<xsl:element name="nome">
<xsl:attribute name="ultimo">
<xsl:value-of select="@apelido"/>
</xsl:attribute>
<xsl:attribute name="primeiro">
<xsl:value-of select="@nome"/>
</xsl:attribute>
</xsl:element>
<xsl:value-of select="../../../alinea/@valor"/>
<xsl:call-template name="nl"/>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

Esta fase veio a mostrar-se bastante relevante na definição do DTD, sobretudo ao nível do acréscimo de atributos necessário à correcta geração dos índices.

Na geração de índices optámos pela utilização do Omnimark. Sendo esta uma linguagem de programação orientada à Stream e que reage a eventos de dados, adequa-se perfeitamente ao pretendido. A geração ordenada dos índices foi obtida utilizando arrays associativos, que em Omnimark são representados por Shelves e a função quicksort.

É de referir que a criação totalmente correcta dos índices não era possível, sendo necessária a edição de algumas partes, nomeadamente no índice toponímico da descrição dos locais, bem como no índice topográfico da descrição das cartas.

Apresentamos de seguida a geração dos índices antes e depois da sua edição:

- Datas

<datas>

<numAlinea>19</numAlinea>
<data>1615, Julho, 4,</data>
<lcl> Gorgora</lcl>
<txt></txt>
<flhs>152-154 v.</flhs>
</datas>

<datas><numAlinea>19</numAlinea>
<data>1615, Julho, 4,</data>
<lcl> Gorgora</lcl>
<txt>Carta ao Provincial Francisco Vieira</txt>
<flhs>152-154 v.</flhs>
</datas>

- Nomes (não foi necessário editar)

<nomes>
<apelido>BARRADAS</apelido>
<priNome>Manuel, padre</priNome>
<d>doc.</d>
<numAlinea>40</numAlinea>
<numAlinea>44</numAlinea>
</nomes>

- Locais

<sitio>
<contextos>
<contexto lugar=DAMBIA></contexto>
<d>doc.</d>
<numAlinea>25</numAlinea>
<numAlinea>25</numAlinea>
<numAlinea>26</numAlinea>
<numAlinea>34</numAlinea>
</contextos>
</sitio>

<sitio>
<local>DAMBIA</local>
<texto>(Dambea) ((prov. da Abissinea, na África, sobre um grande lago com o mesmo nome, próximo do Nilo))</texto>
<contextos>
<contexto lugar=DAMBIA></contexto>
<d>doc.</d>
<numAlinea>25</numAlinea>
<numAlinea>25</numAlinea>
<numAlinea>26</numAlinea>
<numAlinea>34</numAlinea>
</contextos>
</sitio>


Geração HTML

A fase de transformação do documento XML para HTML foi feita utilizando XSL. Para isso, fizémos uma script que para cada tag XML dá origem a código HTML que apresenta a informação de uma forma adequada à sua visualização num browser. Decidimos utilizar frames (apesar destas serem desaconselhadas pelos web designers), pois pensamos que neste caso ajudam a estruturar a informação e a facilitar o seu acesso. Fizémos 3 frames: uma com um índice que permite a procura rápida de uma determinada parte do documento, outra que contém os índices topográfico, toponímico e onomástico gerados e uma terceira com o documento propriamente dito.

A segunda frame e a terceira foram geradas automaticamente utilizando para tal o XT. O XT permite-nos, entre outras coisas, a partir de um ficheiro único, criar vários ficheiros de output. Desta forma, para cada capítulo foi gerado um ficheiro html contendo um extracto do documento original.

A primeira frame não foi gerada por nenhuma script, foi feita manualmente. No entanto foi necessário incluir um nome único para cada subtítulo do documento na sua versão HTML, o que teve de ser gerado na script XSL. De seguida pode ser visto o fragmento de código que corresponde à inclusão do nome único no título "Introdução":

<xsl:element name="a">
<xsl:attribute name="name">Introducao</xsl:attribute>
</xsl:element>

O restante código XSL pode ser encontrado no ficheiro formatacao.xsl.

A segunda frame contém links para as cartas nos locais apropriados, fazendo com que estas apareçam no topo da frame que contém o documento. Para que isto fosse possível, tivemos de atribuir um nome único a cada carta e incluir âncoras na geração dos índices que referenciam esses nomes únicos. Inicialmente pensámos em atribuir um nome único a cada tag que envolvesse um local, data ou nome, de modo a que um link nos índices conduzisse a uma dessas tags. No entanto, achámos que fazia mais sentido referenciar as cartas em vez dos nomes pois estas são bastante curtas, sendo menos confuso para o utilizador visualizar a carta toda. Para a atribuição do nome único não foi necessário nenhum contador, pois as cartas possuem números únicos sequenciais, o que facilitou a implementação. Em XSL, a inclusão de uma âncora foi feita do seguinte modo:

<xsl:element name="a">
<xsl:attribute name="name">
<xsl:value-of select="./alinea"/>
</xsl:attribute>
<b>
<xsl:value-of select="./alinea"/>
</b>
</xsl:element>

O código completo pode ser encontrado no ficheiro formatacao.xsl.

As restantes tags XML não ofereceram qualquer dificuldade, pois deram origem a código HTML simples. Utilizámos CSS1 para garantirmos que a formatação é coerente nas 3 frames e para não termos de repetir o código de formatação dentro do mesmo documento. Resolvemos escolher cores diferentes para marcar os nomes, locais e datas, tornando mais fácil para o utilizador uma procura dos mesmos, por exemplo, a partir dos índices.



Conclusão

Neste trabalho obteve-se como resultado a produção documental electrónica do Inventário das Cartas Anuais das Missões da Etiópia pertencente ao Arquivo Distrital de Braga.

A estruturação de documentos é uma forma de os tornar mais "ricos" e mais "vivos" pois ficam com maior informação acoplada e têm maiores potencialidades de utilização em diversas formas. É também possível a descrição semântica do seu conteúdo como um meio de melhorar a qualidade visual, interpretando e transmitindo o conteúdo de uma forma mais adequada ou esteticamente mais aperfeiçoada.

A resolução do objectivo a que nos propusemos foi alcançada de uma forma incremental, necessitando de reajustes conforme as necessidades que a correcta representação do documento ia exigindo. As diferentes fases aqui apresentadas foram analisadas pormenorizadamente, sendo concluídas com o que considerámos ser o mais adequado mediante as condicionantes encontradas.

Tendo cumprido o objectivo pretendido sugerímos, como trabalho futuro:



Bibliografia

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

•XSL Companion
Neil Bradley
Addison-Wesley
2000

•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

•OmniMark docs (pdfs)
OmniMark Technologies Corporation
25 Janeiro 2000
http://www.omnimark.com

•Saxon docs
Saxon
http://users.iclway.co.uk/mhkay/saxon/index.html

•The XML Companion
Neil Bradley
Addison-Wesley
1998

•HyperText Markup Language Version 4.0 (HTML)
W3C
http://www.w3.org/TR/1998/REC-html40

•XML
XML
http://www.xml.com

•Cascading Style Sheets, level 1
H. W. Lie
B.Bos
http://www.w3.org/TR/REC-CSS1-961217.html




Ficheiros produzidos:

DTD do documento: documentoDTD.dtd

DTD do relatório: relat.dtd

Documento em formato XML: reserved

Documento em formato HTML: cartas.html

Relatório em formato XML: relatExp.xml

Script Omnimark para geração dos índices do documento: gera.xom

StyleSheet CSS do documento: style.css

StyleSheet CSS do relatório: styleRel.css

Script XSL para geração HTML do documento: formatacao.xsl

Script XSL para geração HTML do relatório: formatRelat.xsl