• Nenhum resultado encontrado

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

5.3.3 Serviço de Inferência de Contexto

Como descrito na Seção 5.2, o serviço de inferência de contexto fornece a aplicações (ou consumidores de contexto) um mecanismo configurável de inferência sobre informações de contexto baseado em ontologias e em regras. Embora este serviço ofereça atualmente duas possibilidades de inferência, inicialmente o serviço foi projetado para oferecer apenas inferência baseada em ontologias.

Inferência baseada em ontologias

Em um processo de inferência baseado em ontologias, inferem-se informações de contexto a partir da combinação da semântica definida pelos construtores da linguagem em que uma ontologia é construída e de um conjunto de fatos instanciados desta ontologia. Assim, pode-se inferir informações de contexto com base em relações de generalização, especialização, transitividade, simetria, inversão, etc.

A versão atual do serviço de inferência de contexto pode ser configurada para realizar inferência sobre ontologias codificadas nas linguagens esquema RDF e OWL. Três tipos de máquinas de inferência têm sido integrados ao serviço de inferência de contexto, a saber:

• a máquina de inferência transitiva (TransitiveReasoner), que infere relações de especialização e generalização entre classes e propriedades por meio dos construtores da linguagem esquema RDF para definição de subclasses (rdfs:subClassOf) e subpropriedades (rdfs:subPropertyOf);

• a máquina de inferência RDFS (RDFSReasoner), que implementa um subcon- junto configurável dos construtores da linguagem esquema RDF, tais como

subclasses, subpropriedades e domínio (rdfs:domain) e imagem (rdfs:range) de propriedades;

• máquinas de inferência OWL (OWLReasoner), que implementam todas as de- duções obtidas de ontologias baseadas em esquema RDF, bem como diferentes subconjuntos da linguagem OWL. No caso de ontologias OWL, como aquelas que compõem o modelo SeCoM, diferentes graus de expressividade lógica podem ser aceitos. Desta forma, a configuração apropriada de uma máquina de inferência OWL depende dos construtores OWL envolvidos no processo de inferência. Além das máquinas de inferência OWL oferecidas pelo arcabouço Jena, inclui-se a máquina de inferência Pellet, ideal para processar ontologias que exploram a máxima expressividade dos construtores fornecidos pela linguagem OWL.

Para que uma aplicação sensível a contexto se beneficie de processos de inferência baseados em ontologias, o serviço de inferência de contexto deve ser invocado com quatro parâmetros de entrada: o tipo de máquina de inferência (TransitiveReasoner, RDFSReasoner ou OWLReasoner), uma lista de parâmetros de configuração da máquina de inferência (caso necessário)1, o conjunto de ontologias cuja semântica será utilizada para direcionar o processo de inferência e um conjunto de fatos instanciados a partir desse conjunto de ontologias. Estes dois últimos parâmetros, na verdade, são grafos com descrições RDF, e são comumente chamados TBox e ABox, respectivamente, conforme apresentado no Capítulo 3, Seção 3.3.4. Para um processo de inferência baseado em ontologia, o serviço de inferência de contexto segue o algoritmo descrito no Exemplo 5.6.

0 <!-- Exemplo 5.6 -->

1 Se o grafo TBox não for vazio

2 Identifica a máquina de inferência a utilizar;

3 Configura a máquina de inferência com parâmetros de configuração; 4 Associa os grafos TBox e ABox à máquina de inferência;

5 Executa a máquina de inferência; 6 Cria um grafo X vazio;

7 Adiciona ao grafo X o resultado da execução da máquina de inferência; 8 Retorna o grafo X à aplicação solicitante;

Vale ressaltar que o resultado retornado à aplicação solicitante é um grafo RDF (linhas 6, 7 e 8) contendo não apenas as informações do grafo ABox, mas principal- mente as novas informações de contexto deduzidas. O conjunto de informações de contexto deduzidas pode ser obtido separadamente das informações de origem por meio de métodos que a API do arcabouço Jena oferece.

A partir do Exemplo 5.6, consegue-se ilustrar que todos os tipos de máquinas de inferência supracitados derivam novos fatos RDF a partir de uma base de informações

1As possibilidades de configuração da máquina de inferência OWLReasoner são discutidas na seção

5.3. IMPLEMENTAÇÃO DOS SERVIÇOS DA INFRA-ESTRUTURA SCK 103 de contexto (Abox) associada a um (ou mais) arquivo(s) de ontologia(s) (TBox). Uma base de conhecimento de contexto é, portanto, a combinação de informações de contexto instanciadas a partir da estrutura e semântica das ontologias com as quais essas instâncias são compatíveis.

Dado que é natural que surjam indagações a respeito de como cada máquina de inferência processa um conjunto de informações de contexto, o Exemplo 5.7 ilustra um trecho de uma base de informações de contexto que está associada à ontologia

Activity do modelo SeCoM (@actvy, linha 3). A atividade descrita em questão consiste de uma reunião agendada (linha 4) da comissão de pós-graduação (linha 5).

0 <!-- Exemplo 5.7 -->

1 @prefix : <http://sck/example#>.

2 @rdf : <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. 3 @actvy : <http://linkserver.icmc.usp.br/ckonto/activity#>. 4 :activityURI rdf:type actvy:ScheduledActivity.

5 :activityURI actvy:hasSummary "Reunião da Comissão da Pós-Graduação".

Se o serviço de inferência de contexto for configurado para utilizar a máquina de inferência TransitiveReasoner, esta é capaz de inferir que o recurso identificado pela URI activityURI (linha 4) é um indivíduo das classes Activity, SpatioTemporalEvent

e SpatioTemporalThing. Isto se deve ao fato do desse recurso ser uma instância declarada da classe ScheduledActivity (linha 4), que é subclasse de Activity, subclasse de SpatioTemporalEvent que, por sua vez, é subclasse de SpatioTemporalThing. Tran- sitiveReasoner não consegue fazer, entretanto, qualquer tipo de inferência sobre a propriedade ACTVY:HASSUMMARY(linha 5).

Se for utilizada a máquina RDFSReasoner, esta também infere que o recurso activityURI é indivíduo das classes Activity, SpatioTemporalEvent e SpatioTemporalThing

pela mesma razão já apresentada. A associação desse recurso à classe Activity

é reforçada pelo fato de todo indivíduo dessa classe apresentar a propriedade ACTVY:HASSUMMARY. Portanto, se o recurso em questão não tivesse seu tipo declarado (linha 4), mesmo assim seria inferido que o recurso é indivíduo da classe Activity. Entretanto, essa máquina de inferência não teria como inferir se a classe de atividades a qual o recurso pertence é a de atividades agendadas (linha 4).

Quando uma máquina de inferência OWL é utilizada para processar as infor- mações de contexto do Exemplo 5.7, ela consegue inferir além do que as outras já citadas inferem. Algumas dessas novas informações de contexto inferidas e as respectivas justificativas são apresentadas a seguir:

• o recurso activityURI possui uma propriedade actvy:schedulingStatus cujo valor booleano é verdadeiro, pois todo indivíduo da classe de atividades agendadas (ScheduledActivity) atende a essa restrição;

• o recurso activityURI não pode ser indivíduo da classe de atividades que acontecem espontaneamente (ScheduledActivity), pois atividades agendadas e espontâneas são declaradas como disjuntas.

Vale observar que máquinas de inferência OWL conseguem inferir informações de contexto adicionais em relação às outras dada a semântica da linguagem de ontologia OWL, superior à da linguagem esquema RDF, por exemplo. Mais detalhes a respeito da utilização de máquinas de inferência podem ser encontradas na seção seguinte e no Capítulo 7, o qual descreve um estudo de caso em que o serviço de inferência de contexto é utilizado por uma aplicação.

Inferência baseada em regras

O serviço de inferência de contexto foi estendido posteriormente com a capaci- dade de apoiar processos de inferência baseados em regras [Bulcão Neto et al., 2005b]. Regras devem ser expressas por desenvolvedores na forma de conjunções de predicados dispostos em premissas e uma conclusão. Para isso, é utilizada a sintaxe de construção de regras2 adotada pelo subsistema de inferência do arcabouço Jena [Reynolds, 2006]. Essa sintaxe incorpora construtores específicos que podem ser utilizados como predicados, por exemplo, para manipulação de listas. Demais predicados correspondem a termos do vocabulário definido em ontologias do modelo em questão, por exemplo, termos das ontologias do modelo SeCoM.

Para uma aplicação sensível a contexto utilizar o mecanismo de inferência baseado em regras, o serviço de inferência de contexto deve ser invocado com dois parâmetros de entrada: uma lista de parâmetros de configuração da máquina de inferência e um grafo RDF contendo um conjunto de fatos instanciados a partir de algum modelo ontológico (ABox). Para um processo de inferência baseado em regras, o serviço de inferência de contexto segue o algoritmo descrito no Exemplo 5.8.

0 <!-- Exemplo 5.8 -->

1 Se o grafo ABox não for vazio

2 Configura a máquina de inferência com parâmetros de configuração; 3 Associa o grafo ABox à máquina de inferência;

4 Executa a máquina de inferência segundo o encadeamento escolhido; 5 Cria um grafo X vazio;

6 Adiciona ao grafo X o resultado da execução da máquina de inferência; 7 Retorna o grafo X à aplicação solicitante;

Vale observar que a diferença entre os algoritmos do serviço de inferência de contexto dos Exemplos 5.6 e 5.8 está na ausência de grafo(s) de ontologia(s) (TBox). Ou seja, em processos de inferência baseados em regras, a semântica dos termos

2A versão atual do serviço de inferência de contexto não permite que desenvolvedores escrevam regras

5.3. IMPLEMENTAÇÃO DOS SERVIÇOS DA INFRA-ESTRUTURA SCK 105 que representam os predicados da regra não é considerada, nem a semântica dos construtores da linguagem de ontologia utilizada para modelar esses termos.

É importante destacar que a máquina de inferência para regras é diferente daquelas utilizadas para inferência baseada em ontologias. Seus parâmetros de con- figuração incluem a descrição das regras em questão, a opção pelo armazenamento temporário de processos de inferência recentes e o tipo de encadeamento de regras (linhas 2 a 4 do Exemplo 5.8). Este último parâmetro determina três maneiras que um desenvolvedor pode escolher para processar regras: encadeamento progressivo (forward), retrógrado (backward) ou híbrido (forward-backward).

No encadeamento progressivo a máquina de inferência investiga se uma conjunção de predicados declarada como premissa da regra é encontrada em um repositório de informações de contexto, no caso do Exemplo 5.8, o grafo ABox. Caso seja verdadeiro, consegue-se inferir uma nova informação de contexto, que está declarada como conclusão da regra.

O Exemplo 5.9 exibe uma regra simples que indica as condições necessárias para inferir que tio é o grau de parentesco entre dois recursos. Neste caso, se a base de informações de contexto em questão contiver triplas RDF que casam com as triplas das premissas dessa regra, então infere-se a relação de parentesco tio entre os referidos recursos, estes provavelmente do tipo pessoa.

0 <!-- Exemplo 5.9 -->

1 @prefix xyz: <http://example/family#>.

2 [r1: (?a xyz:father ?b) (?c xyz:brother ?b) -> (?c xyz:uncle ?a)]

No encadeamento retrógrado o processamento é inverso: se o predicado declarado na conclusão é encontrado, então a máquina de inferência adiciona ao grafo ABox a conjunção de predicados declarados nas premissas. Considerando a regra do Exemplo 5.9 em sua forma invertida, caso seja encontrada em uma base de informações de contexto a tripla RDF que descreve que um recurso C é tio de um recurso A, então a máquina de inferência adiciona a essa base que há relações de pai entre A e B, bem como de irmão com respeito aos recursos C e B.

Ao utilizarem o encadeamento de regras híbrido, desenvolvedores podem declarar regras como predicados de outras regras, tal como (A , B -> (C <- D)). Neste caso, regras de encadeamento progressivo são executadas primeiro.

Processos de inferência baseados em regras consideram, portanto, apenas se a partir de uma conjunção de premissas pode-se chegar a uma conclusão ou vice-versa. A partir desse tipo de processo de inferência, consegue-se atender a aplicações que necessitam declarar explicitamente as situações sobre as quais o processo de inferência é relevante. A relevância em questão é, como apresentado, prerrogativa do desenvolvedor de uma aplicação.