Protégé-OWL e JessTab Adriano Melo Monitoria Sistemas Inteligentes Prof. Fred Freitas Agenda Introdução Instalação JessTab Importar Ontologia OWL Manipular Elementos da Ontologia Introdução Ontologias são legais, mas..... … sozinhas elas não podem fazer nada! (Henrik Eriksson, Karl-Heinz Krempels) - [0] Motivação Problemas relacionados ao Protégé Dificuldade de integrar diretamente a resolução de problemas com a modelagem da ontologia Dificuldade de administrar ontologias muito grandes/complexas Linguagens/shells precisam de acesso direto ao protégé Editores de ontologia poderiam ser programáveis Protégé permite atravéz de sua API que motores de resolução de problemas sejam integrados a ele Por que Jess e JessTab? Jess Linguagem/shell popular Comunidade de usuários ativa Implementado em Java JessTab Plug-in para rodar o Jess dentro do Protégé Integra os recursos do Jess e Protégé Usos práticos do JessTab Linguagem Cria classes facilmente Facilita fazer grandes mudanças na ontologia Motor de Inferença Recuperação de Informações Classificação Suporte a decisão Planejamento Instalação Protégé-OWL 3.4 + Jess http://adrianomelo.com/proteje-owl-jess.zip Habilitando JessTab Menu Project >> Configure... Funções do jess com Protégé - [1] mapclass slot-range instancep mapinstanc e slotallowedvalues instanceexistp unmapinsta nce defclass makeinstance initializeinstance modify- slotallowedclasses slotallowedparents slotdocument instancename instanceaddress instanceaddressp instancenamep função mapclass (mapclass <class-name> [nonreactive | reactive]) Mapeia uma classe do Protégé para o Jess. Gera o deftemplate que representa a classe Cria fatos que corespondem às instâncias do protégé [nonreactive] => desabilita o mapeamento recursivo dos filhos da classe <class-name> função mapclass - exemplo (antes: abrir projeto pizza.owl.pprj) - [2] (mapclass http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl #DomainConcept) (facts) função make-instance (make-instance [<instance-name>] of <classname> <slot-override>* [map]) Cria uma instância do Projégé a partir do Jess <instance-name> = nome da instância (opcional) <class-name> = classe a ser instanciada <slot-override> = pares (slot valor) a serem atribuidos à instância função make-instance – exemplo 1 (make-instance sorvete_1 of http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl #IceCream) função make-instance – exemplo 2 (bind ?m (make-instance massa-grossa of http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Deep PanBase)) (bind ?c (make-instance cobertura-mozzarella of http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Mozz arellaTopping)) (make-instance pizza-queijo of http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Chee seyPizza função unmake-instance (unmake-instance <instance-expression>+) Deleta o indivíduo especificado <instance-expression> = um ou mais ponteiros para instâncias ou nomes de indivíduos função unmake-instance - exemplo (defrule nao-tem-massa (object (is-a http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza) (http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#hasBase ) (OBJECT ?o)) => (printout t "a pizza " ?o " nao tem massa, será apagada" função defclass (defclass <name> [<comment>] (is-a <superclass>+) [role] <slot>*) Define uma nova classe do Protégé. <name> = especifica o nome da nova classe <superclass> = classes que a nova classe vai herdar função defclass - exemplo (defclass Pessoa (is-a http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Do mainConcept) (slot nome (type string)) (slot idade (type integer))) (defclass PizzaQueijo (is-a http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza )) Exemplo – Pizza vs Tipo (defrule tipo-de-massa (object (is-a http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza) (http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#hasBase ?base) (OBJECT ?o)) (object (OBJECT ?base) (is-a ?tipomassa)) Exemplo – Pizza do Usuário (defrule inserir-pizza ?in <- (inserir-massa-grossa) => (printout t "digite um nome de pizza depois um de massa..") (assert (inserir pizza (read) massa (read))) (retract ?in) ) (assert (inserir-massa-grossa)) Exemplo – Pizza do Usuário (cont.) (defrule criar-pizza ?in <- (inserir pizza ?pizza massa ?massa) => (make-instance ?massa of http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#DeepPanBa se) (make-instance ?pizza of http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#Pizza (http://www.coode.org/ontologies/pizza/2005/10/18/pizza.owl#hasBase ?massa)) Referências JessTab & JessAgentTab Tutorial - [0] JessTab Documentation - [1] http://www.ida.liu.se/~her/JessTab/tutorial07/JessTabTutorial.ppt http://www.ida.liu.se/~her/JessTab/JessTab.pdf Ontologia de Pizzas - [2] http://www.cin.ufpe.br/~astm/si/pizza