O mecanismo de anotação foi proposto com o objetivo de atender aos seguintes requisitos: possibilitar a realização de anotação in-situ; ser passível de integração com um ambiente educacional; oferecer suporte ao conceito de lugares-de-anotação; ter facilidade de integração com outros componentes; utilizar uma arquitetura baseada em componentes; e oferecer comunicação cliente-servidor através do mecanismo de invocação remota de métodos.
Os requisitos acima foram satisfeitos em duas aplicações. Uma delas, o AnnotTool, é uma ferramenta de anotação autônoma, pois funciona em qualquer navegador compatível com a API (Application Programming Interface) JDK 1.1 da Sun Microsystems. A segunda aplicação está integrada a um ambiente educacional, o CALM (Seção 2.2.1). Este ambiente, além de possuir um navegador próprio, é uma plataforma para integração de outras ferramentas educacionais, entre elas um mecanismo de anotações sobre páginas HTML.
As duas ferramentas permitem realizar anotações em qualquer documento HTML. Há duas opções de documento passível de anotação, o documento preparado para receber anotações em locais pré-estabelecidos e documentos sem locais pré-estabelecidos. Os documentos com locais pré-estabelecidos devem ser preparados para receber anotações. A preparação pode atender a algum cenário de aprendizado no qual seja esperado que os leitores anotem em determinados pontos do texto. A preparação de um documento HTML para anotação é feita utilizando o tag (marcador) de comentário,
(<!--#Annot#Discussion-->)
Este marcador possui a palavra reservada Annot e, após um
separador (#
), pode informar o tipo de lugar-de-anotação que se
deseja associar àquele ponto do documento.
Para o caso de documentos não preparados para receber anotações, há
alguns marcadores que definem a localização de possíveis anotações.
Três marcadores estão configurados inicialmente como locais possíveis
de receber anotações, <p>
, <li>
e <dt>
. Este
conjunto de marcadores pode ser facilmente reconfigurado. A definição
do lugar-de-anotação a partir de marcadores HTML limita a presença de
anotação a alguns locais pré-estabelecidos, os quais podem ser
insatisfatórios para a anotação que se deseja realizar. Apesar dessa
limitação, esse mapeamento permite associar lugares-de-anotação a um
texto que não fora preparado para ser anotado, expandindo
consideravelmente a aplicabilidade da ferramenta desenvolvida.
O AnnotTool é uma interface baseada em menus (Figura 2.5), com as seguintes opções: recuperar arquivo para realizar anotações; configurar informações do usuário (nome, grupo, e-mail, endereço Web local); configurar o navegador; configurar os tags que localizam lugares-de-anotação; buscar anotações pelas correspondentes palavras-chave; e gerar uma página Web, chamada de notesBook, com as anotações do usuário.
O acesso às anotações é feito por uma tela de edição, a qual permite alterar o conteúdo da anotação, inserir palavras-chave e definir se anotação é visível no texto ou não. Esta tela de edição é obtida a partir de uma figura de anotação presente em alguns pontos do texto-base. Os referidos pontos são identificados por um ícone de anotação. Pressionando-se o mouse sobre este ícone é fornecida tela de edição, a qual contém o texto da anotação correspondente àquele ponto do documento. Esta forma de acesso às anotações corresponde a um tipo de lugar-de-anotação, definido como do tipo ``hiperligação'', pois fornece somente uma ``ponte'' entre o texto e a anotação.
O mecanismo integrado ao ambiente CALM aparece como um botão (Figura 2.6) que permite ao usuário requisitar a inserção de lugares-de-anotação na página que está lendo. Este botão está localizado na barra de navegação do ambiente. O objetivo de integrar esse mecanismo ao ambiente permite ao aprendiz realizar anotações sobre os textos estudados, as quais cumprem os seguintes objetivos: facilitar a apropriação do conteúdo pela personalização do material, realimentar o material com críticas, fornecer um veículo de interação com outros colegas e de execução de tarefas colaborativas.
A arquitetura dos mecanismos compartilha dos seguintes elementos básicos: servidor de anotações (DBServer), compositor de documentos (DocTComp) e interface de anotação (navegador e applets). A organização destes na aplicação autônoma AnnotTool e a ordem de eventos para a obtenção e de um documento com anotações são mostradas na Figura 2.7. O servidor de anotações atende a requisições do compositor de documentos e da interface de anotação. As requisições podem ser por conteúdo de uma anotação em determinada posição de um documento, a lista de tags de um documento, gravar e remover anotações do repositório, etc. A comunicação entre o servidor e os clientes é feita via sockets.
O compositor de documentos é responsável por inserir os lugares-de-anotação no documento desejado. O compositor de documentos utiliza uma API, chamada DocT, que permite dividir um documento hipertexto em três perspectivas (Conteúdo, Marcadores e MetaInformação). O uso da API DocT se resume em alterar a perspectiva Marcadores de modo a obter um novo documento com um conjunto de tags que viabiliza a realização de anotações. Este novo documento possui tags applet que correspondem aos lugares-de-anotação inexistentes no documento original. Após obtido o novo documento, este é gravado em uma área pública do usuário (por exemplo o diretório public_html) e que tenha cesso via protocolo HTTP. Tal escolha permite que se recupere a página com os lugares-de-anotação por meio do servidor Web da rede local.
A interface de anotação é um applet disparado na própria página anotada. Esta interface é responsável por recuperar e editar o conteúdo de uma anotação. O conteúdo da anotação é obtido por meio de comunicação com o servidor de anotações.
Com o objetivo de integrar o mecanismo de anotações ao ambiente CALM, algumas modificações foram feitas em sua arquitetura. O servidor de anotações foi encapsulado em um componente JavaBean e a comunicação com este é feita via RMI. Também foi eliminada a restrição imposta pelo modelo padrão de segurança de Java de executar a aplicação no servidor Web. Para contornar esta restrição foi implementado um esquema de repetição de requisições. O applet da interface de anotação continua se conectando a um aplicativo no servidor Web, mas este aplicativo repete a requisição para o servidor de anotações rodando na máquina do usuário.
A integração do mecanismo de anotação ao ambiente CALM é resultado da abordagem de compor recursos mais sofisticados a partir de outros recursos já existentes. A integração do mesmo mecanismo autônomo ao ambiente impôs a adoção de um framework para componentes de software, os JavaBeans. Seguindo a especificação deste framework, foi criado o componente NoteBean, que encapsula a arquitetura básica do mecanismo de anotação. O resultado do condicionamento da arquitetura original ao framework de JavaBeans está na Figura 2.8.
A especificação de JavaBeans define como construir e conectar componentes de modo a criar uma aplicação. Um JavaBean, ou um bean, é um componente de software formado por propriedades, métodos e eventos associados. A propriedade é um atributo com eventos associados e emitidos em decorrência de sua modificação.
O mecanismo de emissão de eventos é baseado no design pattern Observer descrito em Gamma et al. (1994). Este design pattern fornece uma solução para registrar outros componentes interessados em receber um determinado evento. A solução consiste basicamente em definir interfaces (classes abstratas), chamadas ``Listener'', que recebem notificações sobre a ocorrência de um determinado evento. Para cada interface Listener há uma lista com referências para todos os componentes interessados em escutar o evento.
O modelo de objetos do mecanismo de anotações é resultado da estratégia de obtenção de um modelo que atenda aos seguintes requisitos: indexação robusta das anotações nos documentos, persistência autônoma das anotações, tipos de anotação e várias mídias diferentes.
Como primeiro empenho para atingir tal modelo abstrato, foi desenvolvido um modelo de objetos (Figura 2.9), o qual está presente nas duas versões do mecanismo de anotação (AnnotTool e NoteBean). Este modelo define três classes: U_Html, U_Annotation e U_Tag.
Os objetos dessas classes são persistentes. Foram utilizados dois mecanismos de persistência baseados em repositórios de objetos. Na ferramenta AnnotTool utilizou-se o mecanismo PSE (Persistent Storage Engine) da ObjectStore, que é um repositório de objetos com suporte a transações. No componente NoteBean foi utilizado o recurso de serialização de objetos, fornecido pela API de Java desde sua versão JDK 1.1.
No mecanismo de persistência PSE, adotado em AnnotTool, a manipulação de objetos persistentes é realizada por meio de transações e pela recuperação de um handler, que é uma palavra-chave associada a um objeto persistente. Este objeto persistente é normalmente uma estrutura de dados definida pelo programa. A palavra-chave utilizada para recuperar esta estrutura de dados é o nome do usuário. A estrutura de dados, que é baseada na classe java.util.Hashtable, é utilizada para mapear nomes de URL (Uniform Resource Locator) para objetos U_Html. Logo, a partir de uma instância desta classe, se tem acesso a todos os outros objetos persistentes.
No mecanismo de serialização, usado pelo componente NoteBean, é necessário que as classes, cujos objetos são candidatos a serem persistentes, implementem a interface java.lang.Serializable. Esta interface é apenas uma marcação para a API Java. Os objetos são recuperados e armazenados via uso de métodos readObject e writeObject de classes para manipulação de arquivos. Não há suporte a transações e a recuperação de um objeto de um arquivo é feita pelo de sua classe. Este mecanismo menos sofisticado foi adotado no NoteBean principalmente para ampliar sua portabilidade, pois usuários interessados em instalar o ambiente CALM em outras redes não necessitariam adquirir o pacote PSE, que é proprietário.
Em função dessa atividade foram publicados os artigos Adriano et al. (1999b), Adriano et al. (2000b) e Adriano et al. (2000a).