Noções básicas para uso do Protege

Você está no site http://mba.eci.ufmg.br 

Tutorial original:
Sachs, E. Getting Started with Protege-Frames. (2006) Available from Internet: <http://protege.stanford.edu/doc/tutorial/get_started/get-started.html>. Acess 9 July 2006

Tradução: Prof. Mauricio B.Almeida - mba@eci.ufmg.br - Escola de Ciência da Informação - UFMG

Tutorial: Noções básicas para uso do Protege
O Protege é um editor de ontologias desenvolvido pela University of Stanford
Para maiores informaçoes, acesse o site do Protege em Stanford:
 
Site do Protege
| Protege Wiki | Equipe Protege

Sumário
Entendendo ontologias...

Esse tutorial apresenta uma introdução ao Protege, um ambiente para criação e edição de ontologias e bases de conhecimento, que permite ao usuário iniciar o projeto de uma ontologia rápida e intuitivamente. O usuário aprende a criar, modificar e salvar um projeto no Protege. Será criado um projeto chamado "tutorial", o qual contém umas poucas classes e exemplos de um exemplo, denominado newspaper, que acompanha a instalação do Protege. Uma vez lido o tutorial, se está pronto para explorar o Protege por conta própria.

Nem todos os usuários do Protege estão familiarizados com o projeto e o desenvolvimento de ontologias. Dessa forma, além de introduzir a interface do Protege, esse tutorial apresenta uma breve visão geral de alguns conceitos básicos do projeto de ontologias e se baseia nos conceitos descritos no artigo Ontology Development 101 . Caso se esteja familiarizado com o projeto de ontologias, pode-se pular diretamente para o item "Criar e salvar um projeto". Para documentação mais completa, tutoriais, artigos e apresentações, veja a página de documentação (documentation page) no site do Protege.


O que é uma ontologia?

Uma ontologia descreve os conceitos básicos em um domínio de conhecimento e define relações entre eles. Os fundamentos básicos do projeto de ontologias incluem:

Uma ontologia mais um conjunto de instâncias individuais de classes constitui uma base de conhecimento.


Porque criar uma ontologia?

Uma ontologia fornece um vocabulário comum para pesquisadores que necessitam compartilhar informações em um domínio. Algumas razões para se criar uma ontologia são:


Como criar uma ontologia?

Não existe uma única metodologia correta para o desenvolvimento de ontologias, nem um único resultado correto. Desenvolver uma ontologia é, em geral, um processo interativo. Começa-se com um primeiro rascunho da ontologia. Então, essa primeira versão é refinada e detalhes são inseridos.

Em termos práticos, desenvolver uma ontologia inclui:

  1. Definir classes da ontologia;

  2. Arranjar as classes em uma hierarquia de subclasses e superclasses;

  3. Definir slots e descrever os valores permitidos para eles;

  4. Preencher os valores para os slots com instâncias.


Como saber se está se fazendo certo?

Existem muitas possibilidades de ontologias para um determinado domínio; qualquer ontologia específica é apenas uma maneira de estruturas conceitos e relações. Existem alguns poucos princípio que podem ajudar a tomar decisões de projeto em muitos casos:


Por onde começar?

Pode-se começar determinando para que se pretende usar a ontologia, e o quanto detalhada ou geral a ontologia deve ser. Entre várias alternativas viáveis, deve-se determinar qual delas funcionará melhor para a tarefa imaginada, a mais intuitiva, mas extensível e a mais fácil de se manter. Uma ontologia é um modelo de um domínio real no mundo e os conceitos da ontologia devem refletir esse realidade.

Após definir uma versão inicial da ontologias, pode-se avaliá-la e corrigi-la utilizando-a em aplicações ou em métodos de solução de problemas (problem-solving methods), ou discutindo com especialistas da área. Como resultado, quase sempre será preciso revisar a ontologia inicial. Esse processo de projeto interativo continua através de todo o ciclo de vida da ontologia.

 


Desenvolvimento de um exemplo

Suponho que é preciso desenvolver um sistema que auxilia a gerencia custo e a organização de um jornal. A subpasta "examples/newspaper" do diretório de instalação do Protege contém um projeto completo, denominado newspaper, o qual fornece uma ontologia possível para esse domínio. Algumas questões que pode-se desejar responder são:

Uma vez que se tem uma idéia do que é preciso cobrir, pode-se listas alguns termos importantes que são necessários. Esses termos podem incluir conceitos básicos, propriedade que os conceitos devem ter e relações entre eles. Para começar, pode-se apenas coletar termos sem preocupação sobre o papel que eles vão desempenhar na ontologia.

No exemplo do jornal, tem-se seções. Cada seção contem conteúdo, tal como artigos e anúncios, e cada uma tem também um editor, que é responsável por cada seção. Cada artigo tem um autor, e aquele autor pode  ter ou não um empregado. Para cada empregado, é preciso determinar o nome e o salário, e também a quem ele se reporta.

Ao continuar a gerar termos, se está implicitamente definindo o escopo da ontologia, ao definir o que se deve incluir ou excluir. Por exemplo, ao examinar preliminarmente o termo empregado, pode-se desejar adicionar zelador ou motorista. Entretanto, refletindo, pode-se perceber que a ontologia enfatize custos diretamente associados com a geração de conteúdo e a apresentação do jornal. Dessa forma, poder-se-ia decidir não incluir zelador como um termo de interesse.

Quando se tem uma lista suficientemente completa, pode-se iniciar o processo de categorizar diferentes termos, de acordo com sua função na ontologia. Conceitos que são objetos, tais como artigo ou autor, são provavelmente representados por classes. Propriedades das classes, tais como conteúdo ou salário, podem ser representados por slots; e restrições sobre as propriedades ou sobre relações entre classes ou slots, são representados por restrições sobre slots.

Em seguida, descreve-se como usar a interface do Protege para criar a estrutura desses componentes da ontologia.

 


Para criar e salvar um projeto
Em primeiro lugar, deve-se criar um novo projeto no Protege. Uma explicação mais detalhada do modelo de conhecimento do Protege está disponível na seção Overview do site do Protege.

Criação de um exemplo de projeto

Para criar um exemplo de projeto, siga as instruções:

  1. Inicie o Protege. Se já existe um projeto do Protege aberto, feche-o e reinicie o programa. Ao iniciar o Protege, a caixa de diálogo de boas vindas é apresentada, para que se possa criar um novo projeto, abrir um projeto recente ou obter ajuda.



    Nota: Para explorar os exemplos incluídos no Protege, clique em Abrir um projeto existente... (Open Existing Project...) e selecione o projeto desejado. Para criar um novo projeto, selecione Arquivo | Novo projeto (File | New Project...)

  2. Clique em Criar novo projeto... (Create New Project...). Uma caixa de diálogo será aberta, permitindo a escolha do tipo de projeto. A menos que seja necessário um tipo especial de formato para os arquivos, apenas clique em Terminar (Finish) para aceitar a definição padrão: "Protege Files (.pont and pins)".

      

  1. A janela do Protege é aberta e as etiquetas (tabs) se tornam visíveis. Um novo projeto sempre é aberto na visão de Classes. As classes internas de sistema do Protege (:THING e :SYSTEM-CLASS) são apresentadas. Não serão criadas instâncias.


Nomear e salvar o exemplo de projeto

Embora o tutorial não seja longo, pode-se desejar sair do projeto antes de terminá-lo. Salvar o projeto permite encerrar a atividade sempre que se ache conveniente. Para salvar o projeto:

  1. Clique no botão "Salvar Projeto" (Save Project) (o terceiro da esquerda no menu superior do Protege). Pode-se escolher também "Salvar Projeto" no menu "Arquivo" (File). A caixa de diálogo de arquivos do Protege (Protege Files) será aberta.



  2. Escolha a localização para salvar o projeto, clique no botão a direita da linha "Projeto" (Project). A caixa de diálogo de arquivos do Protege (Protege Files), navegue para selecionar ou criar um diretório. 



  3. Entre com um nome de arquivo (por exemplo, "tutorial").



  4. Clique em "Selecionar" (select).

  5. A caixa de diálogo de arquivos do Protege (Protege Files) aparecerá novamente. Clique em OK para salvar os arquivos e deixar a caixa de diálogo.



    Nota: Pode-se também escolher uma localização digitando o caminho completo na linha Projeto (Project). Os nomes dos outros arquivos serão preenchidos automaticamente.

Criação de Classes 

A janela principal do Protege consiste de etiquetas (tabs) que apresentam vários aspectos do modelo de conhecimento. A etiqueta mais importante que aparece ao se iniciar um projeto é a etiqueta "Classes". Em geral, classes vão corresponder a objetos, ou tipos de objetos, no domínio. No exemplo do jornal, classes podem ser pessoas, tais como editores, repórteres e vendedores; componentes do layout do jornal, tais como seções; e conteúdo do jornal, tais como anúncios e artigos.

Classes no Protege são mostradas em uma hierarquia com heranças, apresentadas em um "Navegador de Classes" (Class Browser), do lado esquerdo da etiqueta "Classes". As propriedades da classe selecionadas na árvore, no momento, são apresentadas no "Editor de Classes" (Class Editor) à direita.

Nessa seção, o objetivo é ensinar como criar classes e subclasses, modificar a hierarquia de classes, criar classes abstratas, e adicionar superclasses adicionais a classes existentes.


Criação da classe Colunista (columnist)

Deseja-se acompanhar fonte de cada artigo, e assim, serão criados diferentes tipos de pessoas e serviços que originam artigos. Primeiro, vai-se criar uma nova classe denominada colunista (columnist):

  1. Selecione a etiqueta de classes (Classes Tab).

  2. Localize a área "Hierarquia de Classes" (Class Hierarchy) no painel "Navegador de Classes" (Class Browser) do lado esquerdo da janela do Protege. Essa área mostra a hierarquia de classes e destaca a classe selecionada no momento.



  3. Assegure-se de que a classe :THING está destacada. Quase todas as classes que serão criadas estarão subordinadas a :THING. A classe :SYSTEM_CLASS é usada para definir a estrutura de vários formulários do Protege.

  4. Clique no botão Criar classe (Create Class) , do na parte superior direita do "Navegador de Classes". Uma classe é criada com um nome genérico, baseado no nome do projeto, tal como "tutorial_Class_0". Pode-se ver o nome no "Navegador de Classes" e, além disso, ele aparece destacado para mostrar que está selecionado.



  5. Digite Colunista (Columnist). Uma convenção recomendável no Protege é criar o primeiro caráter de cada palavra em um nome de classe, em maiúsculo, e o resto do nome em minúsculo, além de separar as palavras por um traço baixo (underscore).

  6. Tecle Enter ou clique de novo na classe destacada para completar a operação e mostrar a alteração.



    Caso ocorram problemas em renomear a classe, verifique o painel Editor de Classes (Class Editor), do lado direito da janela do Protege. O nome genérico da classe criada deve ser apresentado e destacado no campo "Nome" (Name). Se o nome genérico correto é mostrado, mas não destacado, apenas dê um clique duplo no campo "Nome" para editar o nome. Se um nome incorreto é mostrado, então a classe errada está selecionada na área de "Hierarquia de Classes" (Class Hierarchy). Clique na classe que se deseja renomear.


Criação da classe Autor (Author
Um Autor (Author) é qualquer possível fontes de um artigo, tal como um serviços de notícias ou um colunista.  Para criar a classe Autor (Author):
  1. Marque com o mouse a classe :THING. Se isso não for feito, será criada uma classe que é subclasse de Colunista (Columnist).

  2. Clique no botão Criar Classe (Create Class) e digite Autor (Author).

  3. Tecle Enter para completar a operação e apresentar a alteração.



    Note: Se acidentalmente for criada uma subclasse de Colunista (Columnist), significa que não foi selecionada a classe :THING antes de se criar a nova classe. Pode-se apagar e recriar a classe Autor (Author), clicando no botão Apagar Classe (Delete Class, o quarto botão a partir da esquerda, na parte superior da área Class Hierarchy) para apagar a classe e, então, clicar em :THING e recriar outra classe. Pode-se também rearranjar a hierarquia de classes arrastando a classe criada para a :THING e, então, soltando o botão do mouse.

Criação das subclasses de Autor (Author)
Deseja-se agora adicionar duas novas fontes de artigos, denominadas Serviço_de_Noticias (News_Service) e Editor (Editor), as quais serão criadas como subclasses de Autor (Author).
  1. Selecione Autor (Author) no painel de "Hierarquia de Classes" (Class Hierarchy).

  2. Clique no botão Criar Classe (Create Class) e renomeie a nova classe como o nome Serviço_de_Noticias (News_Service). Toda vez que uma nova classe for criada, ela é criada como subclasse da classe destacada no momento. Note que quando se cria a primeira subclasse de uma classe, um ícone ou aparece a sua esquerda. Pode-se usar esse ícone para mostrar ou ocultar as subclasses de uma classe. Para que se possa desenvolver a ontologia em seções posteriores, será criada outra subclasse de Autor (Author).

  3. Selecione Autor (Author) no "Navegador de Classes" (Class Browser).

  4. Clique no botão Criar Classe (Create Class) e renomeie a nova classe Editor.


Modificação da hierarquia
Nesse ponto, observa-se que Autor (Author) e Colunista (Columnist) estão no mesmo nível (irmãos) na hierarquia. Entretanto, conceitualmente, Serviço_de_Noticias (News_Service), Editor (Editor) e Colunista (Columnist) estão todos no mesmo nível de generalidade, enquanto Autor (Author) é um conceito mais genérico. Essa disposição não atende aos bons princípios de projeto de ontologias: todos os irmãos na hierarquia (exceto aqueles que estão na raiz) devem estar no mesmo nível de generalidade. Dessa forma, é preciso modificar a hierarquia para fazer com que a classe Colunista (Columnist) seja uma subclasse de Autor (Author), o que reflete com mais precisão a estrutura subjacente. Para modificar a hierarquia e tornar Colunista (Columnist) uma subclasse de Autor (Author):
  1. Clique em Colunista (Columnist) e arraste-o para sobre a classe Autor (Author) e então, solte o mouse. Repare que ao arrastar a primeira classe sobre autor, esta última é destacada.



  2. Colunista (Columnist) é movida e agora aparece como uma subclasse de Autor (Author).



Nesse caso, o problema pode parecer óbvio. Entretanto, quando se desenvolvem ontologias, o próprio processo de desenvolvimento pode revelar diferenças ou paralelos que não eram tão claros no início do processo. Dessa forma, é provável que a medida que tal processo caminha será preciso rearranjar a hierarquia, criar e apagar classes, de forma a modelar melhor os conceitos que se pretende utilizar.

Criação de uma classe abstrata 

Uma classe do Protege pode ser Concreta (Concrete), o que significa que ela pode ter instâncias diretas, ou pode ser Abstrata (Abstract), o que significa que ela aparece na hierarquia, mas não tem instâncias diretas. Quando se cria a primeira classe, ela é, por convenção, concreta. Agora que se sabe mais sobre a classe Autor (Author), percebe-se que qualquer instância de Autor vai realmente ser uma instância de um tipo particular de autor, tal como, por exemplo, um colunista ou um serviço de noticias. Dessa forma, vai-se alterar a classe Autor (Author) para uma classe abstrata. Para realizar essa tarefa:

  1. Selecione Autor (Author) na hierarquia de classes. No "Editor de Classes" (Class Editor), do lado direito do "Navegador de Classes", localize o menu Papel (Role), logo abaixo do nome da classe.



  2. Clique no menu Papel (Role) e selecione Abstrata (Abstract).

  3. Note que quando se muda o papel da classe, o ícone em frente ao nome da classe, no caso o nome "Autor", é alterado. O novo ícone indica uma classe abstrata na hierarquia. Um ícone sólido indica uma classe concreta.


Criação da classe Empregado (Employee)

Agora vai se criar outra classe, Empregado (Employee). Um Empregado (Employee) é qualquer empregado do jornal, que pode ser ou não um autor. Observe entretanto, que se está apenas interessado em empregado que estão envolvidos na criação e gestão do conteúdo do jornal. Uma das escolhas a tomar no projeto de uma ontologia é o que não considerar. Ao mesmo tempo que é necessário assegurar-se de que foram incluídos todos os conceitos relevantes, não se deve complicar a hierarquia adicionando classes que são dispensáveis. Dessa forma, mesmo que um zelador possa ser, tecnicamente, um empregado do jornal, não há interesse em criar uma subclasse chamada "zelador".

  1. Selecione :THING no "Navegador de Classes" (Class Browser). Embora alguns autores sejam empregados, não se deseja que Empregado (Employee) seja uma subclasse de Autor (Author). Na maioria dos casos, deve-se selecionar :THING para criar um classe de nível mais alto na hierarquia.

  2. Clique no botão Criar Classe (Create Class)   e renomeie a classe Empregado (Employee).


Adição de outra superclasse a uma classe existente

Conforme mencionado anteriormente, deseja-se que um Colunista (Columnist) seja um Empregado (Employee). Como a classe Colunista (Columnist) já está criada, não se deseja criá-la novamente. Ao invés disso, é possível fazer com que a classe Colunista (Columnist) existente seja uma subclasse de Empregado (Employee), da forma explicada a seguir: 

  1. Selecione Colunista (Columnist) no "Navegador de Classes".



  2. Vá até o painel de superclasses na parte inferior esquerda da janela do Protege, abaixo do "Navegador de Classes " (Class Browser). Note que, quando Colunista (Columnist) está selecionado, a superclasse atual de Colunista (Columnist), que é Autor (Author), é apresentada no painel de superclasses.



  3. Clique no botão Adicionar Superclasse (Add Superclass) na parte superior direita no painel de superclasses. Uma caixa de diálogo de "Selecionar Classes" (Select Classes) será apresentada, mostrando todas as classes que foram criadas até agora, organizadas em uma hierarquia.



  4. Marque Empregado (Employee) e clique em OK. O Colunista (Columnist) agora tem duas superclasses: Autor (Author) e Empregado (Employee). Ambas as superclasses são apresentadas no painel de superclasses.



  5. Note que um ícone aparece do lado esquerdo de Empregado (Employee). Clique nesse ícone para expandir o "filho" (na hierarquia) de Empregado (Employee). Colunista (Columnist) agora aparece em dois lugares no "Navegador de Classes" (Class Browser): uma vez, abaixo de Autor (Author) e, novamente, abaixo de Empregado (Employee).


Adição de uma superclasse com arrastar-e-soltar
Pode-se também adicionar uma superclasse como recurso arrastar-e-soltar:
  1. Selecione Editor (Editor) no "Navegador de Classes" (Class Browser).

  2. Clique no botão do mouse, segure e arraste a classe "Editor" para cima da classe Empregado (Employee). Empregado (Employee) é destacado.

  3. Antes de soltar o botão do mouse, pressione a tecla Ctrl, e então solte o botão do mouse para transferir a subclasse.


Para remover uma superclasse de uma classe, marque a superclasse que se deseja remover no painel Superclasses e clique no botão Remover Superclasse (Remove Superclass) . Agora pode-se designar alguns atributos para as classes já inseridas, criando-se slots. Esse assunto será tratado na próxima seção. 


Criação de slots
No Protege, as classes podem ser consideradas como conceitos concretos do domínio, tal como Editor (Editor) e Colunista (Columnist). Classes são mais do que simples objetos organizados na hierarquia. Elas pode também ter atributos, tais como nome, número de telefone ou salário, e relações entre elas, tais como o Autor (Author) de um Artigo (Article).

Atributos de classes são descritos utilizando-se slots. Nas seções seguintes apresenta-se o processo de criar slots e atribuí-los a classes, a descrição de relacionamentos entre classes usando slots, e o funcionamento da herança de slots.


Criação de um slot a partir da "etiqueta slot" (slot tab)

Existem várias formas de se criar um slot. Uma maneira é criar slots usando a "etiqueta slots" e, então, atribuí-lo a uma ou mais classes. Para criar uma slot denominado nome (name) dessa forma, faça:

  1. Clique na "etiqueta slots".  Observe que essa etiqueta tem uma layout similar ao da "etiqueta classes", com os slots listados a esquerda, e o "editor de slots" mostrando as propriedades dos slots, a direita.



  2. Clique no botão Criar slot (Create Slot) no lado direito superior do painel de "hierarquia de slots" (Slot Hierarchy). Um novo slot é criado. Assim que o slot é criado, recebe um nome genérico, tal como  "tutorial_Slot_0". Esse nome é automaticamente destacado no "Editor de Slots" (Slot Editor).



  3. Para nomear o slot, assegure-se de que o nome genérico está destacado no campo nome (name) do "Editor de Slots" (Slot Editor). Digite o nome do slot, que nesse caso, se chama nome (name). Uma convenção recomendada é usar letras minúsculas nomes de slots, com as palavras separadas por traços baixos (underscores). Criar slots com nomes em letra minúscula, e classes com nomes que se iniciam com letras maiúsculas, facilita a distinção entre  eles na ontologia.



  4. Observe que esse slot tem string como "tipo de valor padrão" (default Value Type). O tipo de valor (Value Type) impõem restrições relativas aos tipos de valores que um slot pode ter. Um slot do tipo string recebe valores que são qualquer caractere alfanumérico, inclusive espaços.

Para esse slot simples, não vai-se alterar quaisquer outras facetas (restrições sobre os slots) no "Editor de Slots" (Slot Editor).


Atribuição de um slot a uma classe

Tudo o que foi feito até aqui foi criar um slot que define o atributo geral nome (name). Para incorporá-lo a ontologia, é preciso atribuí-lo a uma classe, por exemplo: se deseja que cada instância da classe Autor (Author) tenha um nome.

Para fazer isso, retorna-se a "etiqueta Classes" (Classes Tab) e edita-se a classe Autor (Author). Quaisquer atributos criados ou atribuídos a uma classe são apresentados no "Editor de Classes" (Class Editor), a direita do "Navegador de Classes" (Class Browser). Já se utilizou o "Editor de Classes (Class Editor) para alterar o nome de classes criadas, e também para alterar o papel da classe Autor (Author) para abstrata. Agora, vai se utilizá-lo para ver e nomear slots.

Para atribuir o slot nome (name) a uma classe:

  1. Clique na "etiqueta Classes" (Classes Tab).

  2. Destaque a classe Autor (Author) no painel de hierarquia de classes (Class Hierarchy).



    Durante um momento, observe o "Editor de Classes" (Class Editor), à direita. Essa área tem um Nome (Name), o qual foi alterado anteriormente para Autor (Author), o papel (Abstract), além da documentação e restrições. Abaixo desse campo está o painel de "Modelos de Slots" (Template Slots), o qual ocupa toda a metade inferior do painel "Editor de Classes" (Class Editor). Nessa área são listados todos os slots atribuídos a uma classe. No momento, ela está vazia.

  3. Para adicionar um slot a uma classe, clique no botão Adicionar Slot (Add Slot) . Os botões de slots aparecem a direita da janela do Protege, logo acima do painel de "Modelos de Slots" (Template Slots).



  4. Quando se clica no botão Adicionar Slot (Add Slot), a caixa de diálogo "selecionar modelos de slots" (Select Template Slots) apresenta todos os slots do projeto atual, em ordem alfabética (com exceção das classes de sistema do Protege, as quais são listadas abaixo da hierarquia de slots).



  5. Selecione nome (name) e clique OK.



    Observando o painel "Modelos de Slots" (Template Slots) para Autor (Author), verifica-se que nome (name) foi adicionado a lista  de slots, junto com suas propriedades, nesse caso, sua cardinalidade (um autor pode ter apenas um nome) e o tipo do slot (slot type), String.

Criação de um slot na "etiqueta classes" (Classes Tab)

Alternar entre a "etiqueta classes" (Classes Tab) e a "etiqueta slots" (Slots Tab) pode ser cansativo. Além disso, uma vez que slots representam propriedades de classes, seria mais simples criar slots diretamente da "etiqueta classes" (Classes Tab), o que é fácil fazer no Protege. 

Para criar um slot para a classe Empregado (Employee):

  1. Selecione Empregado (Employee) no painel "hierarquia de classes" (Class Hierarchy).



  2. Clique no botão Criar Slot (Create Slot) no lado direito do painel "modelos de slots" (Template Slots), o qual apresenta o formulário para preenchimento de dados sobre o slot:



  3. Digite salário (salary) no campo nome (name) e tecle Enter.



  4. Retorne a janela principal (pode-se deixar caixa de diálogo do editor de slots para salary aberta, caso se deseje; vai-se retornar posteriormente a ela para editar mais propriedades do slot salary). Observe que o slot agora aparece no painel "modelos de slots" (Template Slots) quando Empregado (Employee) é destacado.


Slots e herança

Não é preciso atribuir o slot nome (name) a cada classe em que se deseja que ele apareça. Qualquer subclasse de uma classe automaticamente herda todos os slots da superclasse. Por exemplo, ao clicar na classe Serviço_de_Notícias (News_Service), pode-se ver que:

a) o slot nome (name) já foi atribuído a essa classe através de herança;
b) o ícone do slot está diferente de quando ele foi atribuído a Autor (Author), ou seja, o ícone de "slot herdado" (inherited slot) mostra que esse slot foi atribuído por herança.


Nota: Na barra de menus, clique em  Help | Icons para ver a lista de todos os ícones da interface do Protege, além de descrições textuais sobre o significado do ícone.


Classes com mais de uma superclasse herdam slots de todas as classes superiores. Por exemplo, ao clicar na classe Editor (Editor), pode-se ver que ela herda o slot nome (name) de Autor (Author), e o slot salário (salary) de Empregado (Employee). A herança múltipla é uma funcionalidade importante do Protege.



Criação de facetas (facets) para slots

Os slots criados até aqui são bem simples. Entretanto, slots podem ter propriedades. Por exemplo, um "salário" (salary) é sempre um número. Pode-se também utilizar slots para criar relacionamentos entre as classes. As propriedades de um slot, chamadas facetas (facets), podem ser criadas e editadas a partir "etiqueta classes" (Classes Tab) usando o diálogo de especificação de slots, ou a partir da "etiqueta slots" (Slots Tab) no painel "editor de slots" (Slot Editor).


Definição de facetas de slots para salário (salary)
Pode-se definir algumas facetas para o slot salário (salary) criado anteriormente.
  1. Selecione a classe Empregado (Employee) no painel "hierarquia de classes" (Class Hierarchy).



  2. Dê um clique duplo no slot salário (salary) no painel "modelos de slots" (Template Slots) para a abrir o formulário de slots. É apresentada uma caixa de diálogo solicitando que seja selecionada a "visão do slot" (Slot View). Ao editar um slot, pode-se escolher se as mudanças serão aplicadas ao slot e a todas as classes relacionados a esse slot -- "slot de nível superior" (top level slot) -- ou apenas a classe corrente e todas as suas classes filhas, ou seja, de nível inferior na hierarquia.



  3. Nesse caso, deseja-se ver e editar o "slot de nível superior" (top-level slot). Assegure-se que a opção "visão do slot de nível superior" (View top-level slot) está selecionada e clique em OK. Essa ação vai alterar a definição do slot em qualquer lugar que ele apareça na ontologia.



  4. No formulário de slots resultante, selecione Flutuante (Float) no menu Tipo de valor (Value Type), a esquerda. Ao criar instâncias, será possível fornecer apenas números decimais para esse slot.



  5. Entre com 0 (zero) no campo "mínimo" (Minimum) na parte inferior esquerda. Essa ação especifica que, para casa instância de Empregado (Employee), o valor que será atribuído ao salário (salary) deve ser positivo.



  6. Feche a caixa de diálogo de edição de slots. Pode-se ver que a descrição do slot foi alterada no painel "modelos de slots" (Template Slots). O tipo agora está configurado como "Flutuante" (Float), e o valor mínimo de 0.0 aparece na coluna "outras facetas" (Other Facets).



    Note: Fazer alterações no "slot de nível superior" (top-level slot) significa modificar a definição fundamental do slot. Corresponde a fazer alterações na "etiqueta de slots" (Slots Tab). Caso se selecione a opção Ver o slot na classe (View slot at class), todas as mudanças realizadas serão aplicadas apenas àquela classe e a seus filhos. Por exemplo, caso se inicie um programa que permita uma pessoa pagar para fazer um estágio no jornal, pode-se criar uma nova subclasse para Empregado (Employee), denominada Pagamento_estagiário (Paying_intern), abrir o slot salário (salary), selecionar Ver slot na classe (View slot at class) e apagar o valor mínimo. Essa ação criaria um "slot sobreposto" (slot override), o qual afetaria apenas a classe Pagamento_estagiário (Paying_intern), enquanto que para os outros empregados seria preciso criar um salário não negativo.

Criação de um relacionamento com o uso de slots

O Protege também permite criar slots que podem ser utilizados para descrever relacionamentos entre classes, os quais não foram definidos na hierarquia de classes. Isso pode ser feito usando slots do tipo "instância" (instance) ou do tipo "classe" (class). Por exemplo, um editor pode ser "responsável por" (responsible for) um ou mais empregados. Pode-se criar um slot que representa esse relacionamento entre Editor (Editor) e Empregado (Employee), da seguinte maneira:

  1. Selecione a classe Editor (Editor) no painel "hierarquia de classes" (Class Hierarchy).



  2. Clique no botão "Criar Slot" (Create Slot) para criar um novo slot a para Editor (Editor).



  3. No formulário de slots resultante, digite responsável_por (responsible_for) no campo "nome" (Name).



  4. Selecione "instância" (Instance) no menu "tipo de valor" (Value Type).



    Um novo campo, "classes permitidas" (Allowed Classes), é apresentado abaixo do menu do menu "tipo de valor" (Value Type).



  5. Clique no botão "adicionar classe" (Add Class) que aparece na parte superior direita da área de "classes permitidas" (Allowed Classes). Surge uma caixa de diálogo para "selecionar classes" (Select Classes),  apresentando todas as classes do projeto. Selecione Empregado (Employee) e clique em OK.



  6. Para permitir que um editor seja responsável por mais de um empregado, clique na opção "múltiplo" (multiple) na área de "cardinalidade" (Cardinality), do lado direito da área de "tipo de valor" (Value Type).



Após completar os passos de 1 a 6, o slot responsável por (responsible_for) deve estar com a seguinte configuração:



O que realmente foi feito? Foi criado um slot que abrangeu uma ou mais instâncias da classe Empregado (Employee) com seus valores. Mais tarde, ao se criar uma instância da classe Editor (Editor), será preciso especificar por quem o editor é responsável, e poderá se escolher uma ou mais instâncias da classe Empregado (Employee) para preencher o valor do slot Responsável por (responsible_for).


Inserção de instâncias

Instâncias são os dados reais da base de conhecimento. Uma boa idéia é assegurar-se de que o projeto foi bem estruturado, antes de inserir um grande número de instâncias. Caso sejam necessárias alterações na estrutura das classes ou slots após a inserção das instâncias, pode ocorrer perda de informação. Além disso, caso se adicionem outros slots, será necessário voltar e preencher os valores de slots para todas as instâncias criadas anteriormente.

Nessa seção, vai-se criar duas instâncias para a classe Editor (Editor):

  1. Clique na "etiqueta instâncias" (Instances Tab). Essa etiqueta tem três painéis. O primeiro, do lado esquerdo, apresenta a hierarquia de classes (class hierarchy). O painel do meio, o qual aparece em branco, apresentará a lista de instâncias a serem criadas para uma classe específica. O terceiro painel corresponde ao "editor de instâncias" (Instance Editor), o qual apresenta o formulário para a instância marcada no momento, na qual serão inseridos valores de slots.



  2. Clique em para expandir as subclasses de Empregado (Employee).

  3. Clique em Editor (Editor). O botão Criar instância (Create Instance) no "navegador de instâncias" (Instance Browser) se torna ativo, indicando que pode-se agora criar uma instância.



  4. Clique no botão Criar instância (Create Instance) . Uma instância é criada, e o formulário do "editor de instâncias" (Instance Editor) aparece. Pode-se observar que existem campos, um para cada slot criado anteriormente. Esses campos devem ser usados para inserir valores para os slots. Note que no painel "hierarquia de classes" (Class Hierarchy), a apresentação da classe Editor (Editor) foi alterada quando se criou a instância. O número "um" entre parênteses (1), após a classe Editor (Editor), indica que aquela classe agora possui uma instância.



  5. Entre como o nome Chief Honcho no campo Nome (Name).



  6. Entre com o valor 150000 no campo Salário (Salary). Observe que os caracteres nesse campo vão aparecer em vermelho, se outro valor que não seja um valor flutuante (float) válido for inserido (no Protege, a tentativa de inserir valores que não satisfaçam as restrições determinadas para o slot, fará com que esse valor seja apresentado em vermelho).


A "etiqueta instâncias" (Instances Tab) agora, deve parece com a figura abaixo. Observe que a instância ainda tem um nome genérico no Navegador de Instâncias (Instance Browser), tal como "tutorial_instance_0". Na próxima seção, será explicado como alterar essa situação.



Para criar uma outra instância:

  1. Clique no botão Criar instância (Create Instance) no "navegador de instâncias" (Instance Browser).



  2. Digite Mr. Science no campo Nome (Name).



  3. Digite 60000 no campo Salário (Salary).


Agora que se criaram algumas instâncias, pode-se definir um relacionamento entre elas, por exemplo, pode-se dizer que Chief Honcho é "responsável por" (responsible for) Mr. Science. Antes de fazer isso, de forma a tornar o trabalho com as instâncias mais simples, vai-se configurar um "slot de apresentação" (display slot) para a classe Editor (Editor). O Protege apresenta o valor do "slot de apresentação" cada vez que forem apresentadas as instâncias da classe. A configuração desse slot é explicada na próxima seção.


Configuração do slot de apresentação

Para cada classe da ontologia, pode-se especificar um de seus slots para ser um "slot de apresentação" (display slot). O Protege vai apresentar o valor desse slot cada vez que apresentar instâncias da classe. Caso não se configure um "slot de apresentação", o Protege apresenta um nome gerado pelo sistema para o slot, tal como "tutorial_Instance_0". Assim, é útil configurar um "slot de apresentação" para todas as classes que terão instâncias. De fato, pode-se escolher configurar esses slots para as classes antes mesmo de começar a criar instâncias.

Para configurar um "slot de apresentação" (display slot) para a classe Editor (Editor):

  1. Selecione a "etiqueta de instâncias" (Instances Tab).

  2. Selecione Editor no painel "hierarquia de classes" (Class Hierarchy).

  3. Clique no ícone do menu "Instância" (Instance), em uma seta que aponta para baixo, do lado direito do "navegador de instâncias" (Instance Browser).



  4. Selecione no menu Configurar Slot de Apresentação (Set Display Slot).



  5. Selecione nome (name) no menu Slot de Apresentação (Display Slot).

  6. A apresentação da lista de instâncias no "navegador de instâncias" (Instance Browser) se altera para refletir o "slot de apresentação" (display slot) escolhido. As instâncias do "editor de classes" (Class Editor) são agora listadas por valor do nome (name) do slot (instâncias são sempre apresentadas em ordem alfabética ou numérica). A partir de agora, será possível navegar nas instâncias da classe Editor (Editor) por nome (name) na "etiqueta de instâncias" (Instances Tab), e em qualquer outro lugar na interface do Protege onde listas de instâncias são apresentadas.

Criação de um relacionamento entre instâncias

Nessa seção, a instância Chief Honcho será modificada para torná-lo responsável pelo Mr. Science:

  1. Clique na "etiqueta de instâncias" (Instances Tab), clique no ícone para expandir a classe Empregado (Employee) no painel "hierarquia de classes" (Class Hierarchy), e selecione a classe Editor (Editor). Instâncias de Editor são agora listadas no "navegador de instâncias" (Instance Browser).



  2. Selecione Chief Honcho no "navegador de instâncias" (Instance Browser). Serão apresentados os slots para Chief Honcho no formulário do "editor de instâncias" (Instance Editor), inclusive o slot Responsável Por (Responsible For). Note que o Protege usa o slot "nomes" (names) no formulário de instâncias, mas automaticamente converte os traços baixos (underscores) para espaços e torna maiúscula a primeira letra de cada palavra.

  3. Clique no botão Adicionar Instância (Add Instance) do lado direito superior do campo Responsável por (Responsible For).



  4. Uma caixa de diálogo com dois painéis é aberta. Do lado esquerdo, pode-se ver a hierarquia de "classes permitidas" (allowed classes) para o slot responsável_por (responsible_for).



  5. Dê um clique simples em Editor. Do lado direito do diálogo, todas as instâncias da classe Editor (Editor) são apresentadas. Selecione Mr. Science e clique OK.



  6. Agora, foi criado um relacionamento na ontologia, especificando que Chief Honcho é "responsável por" (responsible for) Mr. Science.


Personalização de um formulário

Para cada classe na ontologia, o Protege gera um formulário padrão que pode ser utilizado para inserir dados, ou seja, instâncias. Os formulários (forms) contém um campo de entrada de dados, denominado "forma gráfica" (widget), para cada slot relacionado a uma classe. Existem diferentes tipos de "formas gráficas" (widgets), para manipular os vários tipos de valores de slots. Por exemplo, o Protege atribui um widget denominado "InstanceListWidget" a slots com tipos de valores "instância" (instance) e cardinalidade múltipla.

Caso não se queira utilizar o formulário padrão que o Protege gera para uma classe, pode-se personalizá-lo através da "etiqueta formulários" (Forms Tab). Dentre outras possibilidades, pode-se redimensionar widgets, arrastá-los para outros locais do formulário, ocultá-los, e mesmo selecionar diferentes tipos de widgets.

Para ver como as mudanças que serão realizadas na "etiqueta formulários" (Forms Tab) nas próximas seções refletem no "editor de instâncias" (Instance Editor), vá até o "editor de instâncias" (Instances Tab), e dê um clique duplo sobre Chief Honcho no "navegador de instâncias" (Instance Browser) para apresentar uma janela separada do "editor de instâncias" (Instance Editor). Observe que se foram criados slots para a classe Editor de forma diferente daquela explicada nesse tutorial, o formulário pode não ser apresentado exatamente igual as figuras das seções seguintes.


Redimensionamento de formas gráficas (widgets)
Pode-se redimensionar um widget arrastando suas linhas de contorno ou cantos. Para redimensionar um widget dessa forma:
  1. Clique na "etiqueta de formulários" (Forms Tab).

  2. Assegure-se de que Editor está selecionado no "navegador de formulários" (Form Browser), a esquerda. Em seguida, selecione o tipo de widget denominado "FloatFieldWidget" para o slot salário (salary), clicando sobre ele no "editor de formulários" (Form Editor), do lado direito da tela.  Esse widget é então destacado com uma linha de contorno verde, que confirma que ele foi selecionado. Observe que a caixa  tipo combo box denominada "tipo de forma gráfica selecionada" (Selected Widget Type), do lado superior direito, informa que se trata de uma "forma gráfica para campo flutuante" (FloatFieldWidget), a qual é um widget usado para entrada de números com ponto flutuante.



  3. Clique sobre o lado direito do widget e arraste para aumentar seu tamanho. Tente alinhar o lado direito desse widget com o lado direito do widget do slot nome (name).



  4. Observe que o ícone em frente a Editor no "navegador de formulários" (Form Browser) foi alterado. O novo ícone indica que o formulário para essa classe foi personalizado.


Movimentação de formas gráficas (widgets)
Pode-se também mover qualquer widget arrastando-o:
  1. Selecione a opção "InstanceListWidget" para o slot responsável_por (responsible_for).



  2. Arraste-o para a parte superior direita do formulário, de forma que a linha superior do widget se alinhe como a linha superior do widget para o slot nome (name).


Personalização dos botões de formas gráficas (widgets)

Pode-se personalizar formas gráficas (widgets) de forma que apresentem um título diferente, ou mesmo um conjunto de botões diferente do padrão. Por exemplo, pode-se desejar ter a possibilidade de apagar uma instância do projeto clicando em um botão na "InstanceListWidget", que foi atribuída ao slot responsável_por (responsible_for). Para apresentar o botão de apagar:

  1. Dê um clique duplo no "InstanceListWidget" denominado Responsável Por (Responsible For) no "editor de formulários" (Form Editor).



  2. Clique na "etiqueta botões" (Buttons tab).



  3. Clique na caixa de seleção em frente de "Mostrar botão de apagar instância" (Show Delete Instance Button) para selecionar essa opção.



  4. Clique em OK. A "forma gráfica para lista de instâncias" (InstanceListWidget) para o slot responsável_por (responsible_for) tem agora cinco botões.


Ocultamento de uma forma gráfica (widget)

Pode-se ocultar uma "forma gráfica" (widget) para que ela não possa ser vista no "editor de formulários" (Form Editor) e no "editor de instâncias" (Instance Editor). Essa ação não remove qualquer informação da ontologia. Por exemplo, pode-se ocultar o widget para o slot salário (salary). Para fazer isso:

  1. Selecione a "forma gráfica para campo flutuante" (FloatFieldWidget) denominado Salário (Salary) no "editor de formulários" (Form Editor).



  2. Selecione "<none>" para  a caixa combo box "tipo de forma gráfica selecionada" (Selected Widget Type).



  3. A "forma gráfica" (widget) para o slot salário (salary) não está mais visível no "editor de formulários" (Form Editor).


Apresentação de uma forma gráfica (widget) oculta
Para restaurar e voltar a visualizar uma "forma gráfica" (widget) oculta:
  1. No "navegador de formulário" (Form Browser), clique no botão Ver personalizações de formulários (View Form Customizations) , do lado direito superior.



  2. Na caixa de diálogo "configurar formulário" (Configure form), pode-se ver uma lista de todos os slots e suas formas gráficas correspondentes.



  3. Clique em "<none>" na coluna do lado direito, ao lado de salário (salary), para apresentar diferentes opções de widgets para esse slot, e selecione "forma gráfica de ponto flutuante" (FloatFieldWidget).



  4. Clique OK.



  5. A "forma gráfica de ponto flutuante" (FloatFieldWidget) para o slot salário (salary) está agora visível novamente no "editor de formulário" (Form Editor).

Uso do layout padrão

Caso as personalizações realizadas não atendam as expectativas, o Protege permite rearranjar rapidamente todos as "formas gráficas" (widgets) visíveis de acordo com o layout padrão, acomodando o tamanho atual de cada widget.

Para que o Protege organize automaticamente todas as "formas gráficas" (widgets) de acordo com o layout padrão:

  1. Assegure-se que Editor está selecionado no "navegador de formulários" (Form Browser).

  2. Clique no botão Remover personalizações de formulários (Remove Form Customizations) , do lado superior direito do "navegador de formulários".

  3. O formulário se ajusta para apresentar o layout padrão. Caso se tenham ocultado "formas gráficas" (widgets), elas serão apresentadas novamente. Observe também que o ícone em frente de Editor volta a ser o ícone de formulário padrão .


Criação e armazenamento de uma consulta

A "etiqueta de consultas" (Queries Tab) permite que sejam realizadas consultas no projeto e que se recuperem todas as instâncias que atendam a critérios específicos. Para criar uma consulta (query), deve-se selecionar uma ou mais classes, e um ou mais slots dessas classes. Pode-se também salvar as consultas na "biblioteca de consultas" (Query Library) para utilização futura.


Criação de uma consulta (query)

Considere-se que se deseja localizar todos os empregados que tem um salário superior a $75,000 por ano. Para criar uma consulta:

  1. Clique na "etiqueta de consultas" (Queries tab).



  2. Clique no botão Selecionar Classes (Select Cls) acima da caixa de texto para classes (class), no painel de consultas (Query pane).



  3. Selecione Empregado (Employee) na caixa de diálogo "selecionar classes" (Select Classes), e então clique em OK.



    Empregado (Employee) é agora apresentado na caixa de texto para classes.



  4. Clique no botão "selecionar slot" (Select Slot) acima da caixa de texto para Slots.

  5. Selecione salário (salary) na caixa de diálogo "selecionar slot" (Select Slot) e clique OK.



    O menu do lado direito da caixa de texto de slots está agora ativo, e a caixa de texto mais a direita da janela relembra que o tipo de valor do slot selecionado é "ponto flutuante" (float).



  6. Selecione "é maior que" (is greater than) no menu suspenso (drop down menu). Em seguida, entre com o valor "75000" na caixa de texto Float.


Execução de uma consulta (query)
Agora que a consulta está configurada, pode-se executá-la e ver os resultados.
  1. Para executar a consulta, clique no botão "encontrar" (Find), na parte inferior direita do "painel de consultas" (Query pane).



  2. Os resultados são mostrados no painel de "resultados de busca" (Search Results), do lado direito da tela. Caso não seja possível ver os resultados, será preciso aumentar a janela ou mover a barra que separa o painel.



    Note: Para ver o "editor de instâncias" (Instance Editor) basta dar um clique duplo em qualquer instância dos "resultados da busca" (Search Results).

Armazenamento de uma consulta (query)

Pode-se salvar qualquer consulta antes ou depois que ela for executada. Para salvar uma consulta na "biblioteca de consultas" (Query Library):

  1. Clique no botão Adicionar a Biblioteca de consultas (Add to Query Library) , do lado direito da caixa de texto "nome da consulta" (Query Name).



  2. Digite "sample_query" na caixa de diálogo "entrar com o nome da consulta" (Input Query Name).



    Note: Pode-se digitar um nome de consulta diretamente na caixa de texto "nome da consulta" (Query Name) na janela principal e clicar no botão Adicionar a biblioteca de consultas (Add to Query Library).

  3. Clique OK. O nome é apresentado na caixa de texto "nome da consulta" (Query Name) e a consulta é listada no painel "biblioteca de consultas" (Query Library) na parte de inferior da tela.


Recuperação de uma consulta (query)

Para recuperar um consulta salva, ela deve ser selecionada na "biblioteca de consultas" (Query Library):

  1. Em primeiro lugar, porque se está executando uma mesma consulta novamente, clique no botão "limpar" (Clear) para limpar os resultado de consulta. Caso contrário, não será possível visualizar a alteração.



  2. Selecione "sample_query" na "biblioteca de consultas" (Query Library) na parte inferior da tela. Caso não seja possível ver a "biblioteca de consultas" ( Query Library), será preciso aumentar a janela ou mover a barra de separação.



  3. Clique no botão Recuperar consulta (Retrieve Query) para recuperar a consulta escolhida.

  4. A consulta salva é agora apresentada na parte superior da janela. Caso desejado, pode-se nesse momento, alterar a consulta. Pode-se também combinar consultas clicando no botão Mais (More).



  5. Para executar a consulta, clique no botão "encontrar" (Find).