• Nenhum resultado encontrado

5.3 Implementação dos serviços da infra-estrutura SCK

5.3.1 Serviço de Armazenamento de Contexto

Conforme apresentado na Seção 5.2, o serviço de armazenamento de contexto gerencia o armazenamento de informações de contexto em bases de dados relacionais ou em arquivos.

A abordagem baseada em bases de dados utiliza um esquema relacional espe- cialmente adaptado para o armazenamento de dados no formato RDF [Guha, 2001; Wilkinson et al., 2003], daí ser comum utilizar o termo base de dados RDF. O mapeamento de bases relacionais com o modelo de dados RDF dá-se como segue: um registro é um recurso RDF, uma coluna na tabela é uma propriedade RDF e uma célula do registro é o valor da propriedade RDF. Nesta abordagem, informações de contexto são armazenadas em um base de dados RDF, enquanto que as ontologias que modelam essas informações e que compõem o modelo ontológico em questão são armazenadas cada qual em arquivos. Isto permite que as ontologias sejam lidas apenas quando necessário, por exemplo, pelo serviço de inferência de contexto.

A abordagem baseada em arquivos, por sua vez, é uma alternativa para aplicações sensíveis a contexto que não necessitam de funcionalidades de bases de dados rela- cionais, como consistência de dados ou transações. Nesta abordagem, informações

5.3. IMPLEMENTAÇÃO DOS SERVIÇOS DA INFRA-ESTRUTURA SCK 97 contextuais de cada fonte de contexto são armazenadas em seu próprio arquivo de contexto. Vale ressaltar que nesta abordagem as ontologias que compõem o modelo subjacente são também armazenadas em arquivos separados.

Considerando as abordagens utilizadas para armazenamento de informações de contexto, dados de configuração de bases de dados e de arquivos estão codificadas no formato RDF em um arquivo de configuração da infra-estrutura SCK. Esse arquivo é único para todas as aplicações que utilizam a infra-estrutura, portanto sempre que uma aplicação requisitar o armazenamento de informações de contexto, o serviço em questão checa os devidos parâmetros desse arquivo de configuração.

O Exemplo 5.1 descreve o formato desse arquivo de configuração na sintaxe RDF do tipo N-Triple [Grant & Beckett, 2004]. Neste caso, uma aplicação chamada WebMemex (APPNAME, linha 2) deseja armazenar informações de contexto em uma base de dados (STORAGETYPE, linha 4) do tipo PostgreSQL (DBTYPE, linha 6), passando os seguintes parâmetros para conexão a base de dados (linhas 6 a 10): tipo de gerenciador de banco de dados a ser utilizado (DBTYPE), endereço de acesso (DBURL), usuário (DBUSER), senha (DBPWD) e driver JDBC (Java Database Connectivity), repre- sentado por DBDRIVER. Atualmente, a implementação do serviço de armazenamento de contexto acomoda MySQL e PostgreSQL.

0 <!-- Exemplo 5.1 -->

1 @prefix : <http://sck/config/app#>. 2 :appURI :appName "WebMemex". 3 :appURI :appStorage :appStorageURI. 4 :appStorageURI :storageType "DB".

5 :appStorageURI :storageParams :paramsURI. 6 :paramsURI :dbType "PostgreSQL".

7 :paramsURI :dbURL "jdbc:postgresql://localhost/sck". 8 :paramsURI :dbUser "postgres".

9 :paramsURI :dbPwd "wsxcvfr".

10 :paramsURI :dbDriver "org.postgresql.Driver".

Para o caso de configuração de armazenamento em arquivo, o único parâmetro passível de configuração é o nome do arquivo que servirá como repositório de informações de contexto. O Exemplo 5.2 ilustra o caso da mesma aplicação do Exemplo 5.1 indicando que suas informações de contexto devem ser armazenadas em um arquivo (STORAGETYPE, linha 4) chamado repository.rdf (FILENAME, linha 5).

0 <!-- Exemplo 5.2 -->

1 @prefix : <http://sck/config/app#>. 2 :appURI :appName "WebMemex". 3 :appURI :appStorage :appStorageURI. 4 :appStorageURI :storageType "File". 5 :appStorageURI :fileName "repository.rdf".

Para que uma aplicação armazene informações de contexto, são necessários dois parâmetros de entrada para o serviço de armazenamento: o nome da aplicação,

para que seja verificada a configuração de armazenamento conforme apresentada nos Exemplos 5.1 e 5.22, e o grafo RDF que contém as informações de contexto a serem inseridas. Se o armazenamento for realizado em uma base de dados RDF, o serviço de armazenamento segue o algoritmo descrito no Exemplo 5.3.

0 <!-- Exemplo 5.3 -->

1 Cria um grafo vazio X em memória;

2 Adiciona ao grafo X as triplas do banco de dados da aplicação; 3 Se o grafo X é vazio então

4 Adiciona ao grafo X as triplas do grafo Y a ser armazenado; 5 Senão

6 Calcula a diferença entre o grafo X e o grafo Y a ser armazenado; 7 Se a diferença entre os grafos X e Y não for nula então

8 Adiciona ao grafo X as triplas que formam a diferença entre os grafos; 9 Senão; //o grafo Y já estava armazenado no banco de dados

10 Armazena as triplas do grafo X de volta ao banco de dados;

Por outro lado, se uma aplicação pretende explorar a abordagem de arquivos de contexto, cada nova informação contextual é inicialmente armazenada em memória. Esses grafos RDF, independentes entre si, servem temporariamente como a base de dados recente de uma aplicação. Dessa forma, eventuais consultas dessa aplicação a dados que constam em seus grafos são processadas de forma mais rápida.

Para evitar a perda de informações de contexto voláteis, os grafos em memória são periodicamente armazenados — configurável pelo desenvolvedor — cada qual em arquivos de registro de contexto (context log files).

Da mesma forma, para evitar que aplicações consultem informações de contexto inconsistentes, os arquivos de registro de contexto são periodicamente agrupados e armazenados em um único arquivo chamado arquivo de contexto, que contém todas as informações contextuais armazenadas por uma aplicação. Esse arquivo de contexto é o mesmo cujo nome pode ser configurado pelo desenvolvedor, conforme ilustrado no Exemplo 5.2 (FILENAME, linha 5).

Apesar da quantidade de memória necessária para armazenar grandes grafos RDF, a vantagem desta abordagem é a sua simplicidade e o bom desempenho para processamento de consultas, muito embora esse desempenho não tenha sido, até o momento, comprovado com experimentos.

Como apresentado nesta seção, o principal parâmetro de entrada para o serviço de armazenamento de contexto é o grafo RDF com as informações contextuais da aplicação em questão. Para construir esse grafo, independentemente se o armazenamento for em bases de dados ou em arquivos, é necessário adicionar a este recursos RDF que instanciam termos do vocabulário definido no modelo ontológico em questão. Em seguida, devem ser criados e associados a esses recursos as propriedades e seus respectivos valores, também segundo o vocabulário utilizado. Um trecho de código que ilustra a criação de um grafo RDF para armazenamento de

5.3. IMPLEMENTAÇÃO DOS SERVIÇOS DA INFRA-ESTRUTURA SCK 99 informações de contexto de uma aplicação é apresentado no Capítulo 7, Seção 7.2.4. A maneira pela qual o serviço de armazenamento de contexto foi desenvolvido per- mite que qualquer modelo ontológico possa ser utilizado, bastando ao desenvolvedor criar classes Java a partir do vocabulário de cada ontologia do modelo em questão. Isso pode ser realizado por meio do programa distribuído com o arcabouço Jena chamado schemagen, cujas informações sobre sua utilização podem ser encontradas em Dollin [2006]. Após criadas as classes Java que representam as ontologias do modelo, estas devem ser copiadas para o pacote BR.USP.ICMC.SCK.VOCABULARY. Dessa maneira, o serviço de armazenamento de contexto atende à diretriz 3 de projeto da infra-estrutura SCK, independência de modelo ontológico.