The JessTab Approach to Protégé and Jess Integration Henrik Eriksson

Preview:

Citation preview

The JessTab Approach to Protégé and Jess Integration

Henrik Eriksson

Background

• Difficult manage large/complex ontologies– Ontology editors should be programmable

• Difficult to integrate problem solving and ontology development– OO languages/shells need an graphical

counterpart

Background – History

CLIPS

Jess

Protégé-2000

ArtOPS5

Protégé-II

Cool

Protégé-I

Java

JavaKIF/OKBC/Clos

Descendants

Influences

Protégé/Win

JessTab

JessTab – Combining two popular systems

• Protégé– Knowledge acquisition and ontology development tool

– Developed by SMI, Stanford University

– http://protege.stanford.edu/

• Jess– Java Expert System Shell; based on CLIPS

– Forward chaining; production rules

– Developed by Sandia Laboratories

– http://herzberg.ca.sandia.gov/jess/

Two possibilities

• Loose integration– No changes to each representation model– Translators between formats– Independent software

• Tight integration– Changes to representation models when needed– Integrated software (e.g., same Java VM)– Unified user interface

Protégé: A modular system

• Support for plug-ins– Widget plug-ins– Tab plug-ins– Storage plug-ins

JessTab is a tab plug-in for running Jess inside Protégé

JessTab extensions to Jess and Protégé

• Jess console window in Protégé• Mapping instances to facts• Functions for knowledge-base operations• Mirroring Jess definitions in Protégé

knowledge bases• Support for metalevel objects• Support for methods and message handlers

(under construction)

Jess console window in Protégé

Defining classes and instantiating them

Jess> (defclass Person (is-a :THING)

(slot name (type string))

(slot age (type integer)))

TRUE

Jess> (make-instance john of Person (name "John") (age 20))

<External-Address:SimpleInstance>

Jess> (mapclass Person)

Person

Jess> (facts)

f-0 (object (is-a Person) (is-a-name "Person")

(OBJECT <External-Address:SimpleInstance>)

(age 20) (name "John"))

For a total of 1 facts.

Modifying slots

Jess> (slot-set john age 21)Jess> (facts)f-1 (object (is-a Person) (is-a-name "Person")(OBJECT <External-Address:SimpleInstance>)(age 21) (name "John"))For a total of 1 facts.

Creating a second instance

Jess> (make-instance sue of Person (name "Sue") (age 22))

<External-Address:SimpleInstance>

Jess> (facts)

f-1 (object (is-a Person) (is-a-name "Person")

(OBJECT <External-Address:SimpleInstance>)

(age 21) (name "John"))

f-4 (object (is-a Person) (is-a-name "Person")

(OBJECT <External-Address:SimpleInstance>)

(age 22) (name "Sue"))

For a total of 2 facts.

Adding a Jess rule

Jess> (defrule twentyone (object (is-a Person) (name ?n) (age ?a&:(>= ?a 21)))=>(printout t "The person " ?n " is 21 or older" crlf))TRUEJess> (run)The person John is 21 or olderThe person Sue is 21 or older2Jess>

Functions for knowledge-base operationsmapclass

mapinstance

unmapinstance

defclass

make-instance

initialize-instance

modify-instance

duplicate-instance

definstances

unmake-instance

slot-get

slot-set

slot-replace$

slot-insert$

slot-delete$

slot-facets

slot-types

slot-cardinality

slot-range

slot-allowed-values

slot-allowed-classes

slot-allowed-parents

slot-documentation

slot-sources

facet-get

facet-set

class

class-existp

class-abstractp

class-reactivep

superclassp

subclasspclass-superclassesclass-subclassesget-defclass-listclass-slots

instancepinstance-existpinstance-nameinstance-addressinstance-addresspinstance-namepslot-existpslot-default-valueset-kb-saveget-kb-saveload-kb-definitionsload-project

include-project

save-project

jesstab-version-number

jesstab-version-string

get-knowledge-base

get-tabs

Mirroring Jess definitions in Protégé knowledge bases

Your Jess definitions as first-class citizen in Protégé

Editing Jess definitions in Protégé

Support for metalevel objects

• JessTab support for metaclasses, metaslots, and metafacets in Protégé

• Defining classes by instantiating metaclasses

• Functions for instances work for classes too– and for slots and facets

Printing abstract classes in Protégé

(mapclass :THING) (defrule print-abstract-classes-1 "Print all abstract classes" ?c <- (object ) (test (class-abstractp ?c)) => (printout t "The class " (instance-name ?c) " is abstract." crlf))

Modifying ontologies

(defrule make-classes-abstract "Turn classes abstract" ?c <- (object (:NAME ?n) (:ROLE Concrete) (:DIRECT-INSTANCES )) (not (object (:NAME ?n) (:DIRECT-SUBCLASSES))) => (slot-set ?c :ROLE Abstract)) 

Change the role to abstract for classes that have subclasses, but do not have any instances:

Support for methods and message handlers

(defmethod add ((?a STRING) (?b STRING)) (str-cat ?a ?b))

Under construction

(defmethod add ((?a MyClass) (?b MyClass)) …)

(defmessage-handler MyClass get-foo () ?self:foo)

(defmessage-handler rectangle find-area () (* ?self:side-a ?self:side-b))

Applications

• Ontology engineering and reengineering– Jess as macro/scripting for ontologies

• Semantic Web– RDF backend to Protégé

• Problem-solving methods– Migration from CLIPS to Jess

• Agent frameworks– JadeJessProtege

Tool Web/Library

JessTab

FuzzyJess PrologTab

JadeJessProtege

FloraTab

More Protégé plug-ins

More Jess extensions

Your system

Your tab

Jess Protégé

JADE

Ongoing and future work

• Support for methods and message handlers (cf. CLIPS)

• Integration with PAL

• Support for managing Protégé forms

• ???

Trying JessTab

• Obtain Protégé– Download from http://protege.stanford.edu/

• Obtain Jess– Download from http://herzberg.ca.sandia.gov/jess/

– License required (commercial or free academic)

– Compilation required

• Get JessTab– Download from http://www.ida.liu.se/~her/JessTab/

Summary

• JessTab: Protégé – Jess integration

• Manage Protégé ontologies and knowledge bases from Jess

• Rule-based reasoning in Protégé

• Protégé as graphical, object-oriented extension to Jess

Recommended