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
Download

Protégé-OWL e JessTab