Download - Jess Tab Tutorial
![Page 1: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/1.jpg)
JessTab Tutorial
Henrik Eriksson
![Page 2: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/2.jpg)
2JessTab Tutorial 2006 2
Outline
1. Introduction
2. Background
3. Installation
4. Interaction with JessTab
5. Introduction to Jess programming Jess functions Rule-based reasoning with Jess
6. Managing Protégé ontologies with Jess
7. Mapping Protégé ontologies to Jess
8. Metalevel mappings
9. JessTab and Protégé OWL
10. Example
11. Conclusion
Tip: Slides available at http://www.ida.liu.se/~her/JessTab/tutorial06/
![Page 3: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/3.jpg)
3JessTab Tutorial 2006 3
2. Background
Ontologies are nice to look at, but…
…they do not do anything.
![Page 4: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/4.jpg)
4JessTab Tutorial 2006 4
Background (cont.)
• Protégé-related problems Difficult to directly integrate problem solving and ontology
development in Protégé
Languages/shells need direct access to Protégé
Difficult manage large/complex ontologies Ontology editors should be programmable
• Protégé allows alternative problem-solving engines through the plug-in API The Java API allows access to the internal ontology representation
![Page 5: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/5.jpg)
5JessTab Tutorial 2006 5
Why Jess and JessTab?
• Jess Popular language/shell Active user community Implemented in Java
• JessTab A Protégé plug-in for running Jess under Protégé Combines the strengths of Protégé and Jess
![Page 6: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/6.jpg)
6JessTab Tutorial 2006 6
Practical uses of JessTab
• Macro language Creating lots of classes quickly Making large changes to ontologies
• Rule engine Information retrieval Classification Decision support Planning
![Page 7: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/7.jpg)
7JessTab Tutorial 2006 7
Examples of applications
• Ontology engineering and reengineering Jess as macro/scripting for ontologies
• Importing ontologies Jess as input filter
• Semantic Web
• Problem-solving methods
• Agent frameworks JadeJessProtege
• Classic expert-system development
![Page 8: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/8.jpg)
8JessTab Tutorial 2006 8
What is Jess?
• Java Expert System Shell; based on CLIPS
• Forward chaining; production rules
• Fact-base and pattern matching
• Lisp-like syntax
• No support for object orientation The Cool subsystem of CLIPS not implemented
• Developed by Sandia Laboratories http://herzberg.ca.sandia.gov/jess/
![Page 9: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/9.jpg)
9JessTab Tutorial 2006 9
Historical background
CLIPS
Jess
Current Protégé
ArtOPS5
Protégé-II
Cool
Protégé-I
Java
JavaKIF/OKBC/Clos
Descendants
Influences
Protégé/Win
JessTab
![Page 10: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/10.jpg)
10JessTab Tutorial 2006 10
Tool integration – 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
JessTab supports tight integration
![Page 11: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/11.jpg)
11JessTab Tutorial 2006 11
Approach – JessTab plug-in for Protégé
• Jess console window in Protégé
• Mapping instances to Jess facts
• Functions for knowledge-base operations
• Mirroring Jess definitions in Protégé knowledge bases
• Support for metalevel objects
• Support for methods and message handlers
![Page 12: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/12.jpg)
12JessTab Tutorial 2006 12
3. Installation
• JessTab is bundled with the Protégé distribution
• Latest JessTab version available from SourceForge
• It is necessary to download and install Jess separately Because of licensing
![Page 13: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/13.jpg)
13JessTab Tutorial 2006 13
Enabling JessTab
• Enable the tab
![Page 14: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/14.jpg)
14JessTab Tutorial 2006 14
JessTab with no Jess engine
![Page 15: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/15.jpg)
15JessTab Tutorial 2006 15
Jess installation
• Visit http://www.jessrules.com/
• Choose license type Trial – expires after 30 days Licensed – commercial or academic (includes source)
• Choose version Stable (e.g., 6.1p8) Development (e.g., 7.0b7)
Tip: Development versions of Jess are usually stable
![Page 16: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/16.jpg)
16JessTab Tutorial 2006 16
Jess installation (cont.)
• The distribution contains the file jess.jar
• Put the file jess.jar in the Protege/plugins/JessTab directory in the Protégé installation
JessTab.jar
jess.jar
plugin.properties
Tip: The file names sometimes contain version number. Protégé will usually find them anyway
![Page 17: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/17.jpg)
17JessTab Tutorial 2006 17
Installation troubleshooting tips
• Make sure everything is in the correct directory The files jess.jar, JessTab.jar, and plugin.properties
should be in the plugins/JessTab directory
• Two or more versions of the same .jar file on the CLASSPATH means trouble. Double check this.
• Check Jess version number in startup message
• Check the plugin.properties file
• Try running Jess without Protégé/JessTab
• If all else fails, try a clean installation of Protégé
![Page 18: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/18.jpg)
18JessTab Tutorial 2006 18
4. Interaction with JessTab
• Ready to go Jess installation completed JessTab enabled
• Interaction based on read-evaluate-print loop Just like Lisp
![Page 19: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/19.jpg)
19JessTab Tutorial 2006 19
Jess console window in Protégé
![Page 20: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/20.jpg)
20JessTab Tutorial 2006 20
Console window (upper part)
JessTab selected
Jess prompt
Jess startup message
subtabs
Jess version
Console selected Default engine
![Page 21: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/21.jpg)
21JessTab Tutorial 2006 21
Console window (lower part)
Enter Jess expressions here
Break execution
Clear console window
Command history
Tip: It is possible to copy & paste commands with ctrl-C and ctrl-V
Evaluate expression
![Page 22: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/22.jpg)
22JessTab Tutorial 2006 22
Console Window (subtabs)
• Console
• Facts
• Rules
• Functions
• Message handlers
• Methods
• Defglobals
• Deftamplates
• Deffacts
• Settings
Lists of Jess constructs
Various settings
The Jess console
![Page 23: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/23.jpg)
23JessTab Tutorial 2006 23
5. Introduction to Jess programming
• The CLIPS heritage
• Jess basics
• Running Jess
• Jess facts
• Jess constructs
![Page 24: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/24.jpg)
24JessTab Tutorial 2006 24
CLIPS
• Forward-chaining system
• Object-oriented part (COOL)
• Lisp-like syntax
• Based on Art
• Developed by NASA
• Implemented in C available on several platforms (e.g., Unix, PC, and Macintosh) source code available
• Homepage: http://www.ghg.net/clips/CLIPS.html documentation, discussion forum, download area
![Page 25: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/25.jpg)
25JessTab Tutorial 2006 25
Jess
• Based on CLIPS Rules from CLIPS but no object-oriented part
• Developed by Dr. Ernest Friedman-Hill at Sandia National Laboratories
• Implemented in Java source code license available
• Homepage: http://www.jessrules.com/ documentation, download area
![Page 26: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/26.jpg)
26JessTab Tutorial 2006 26
Running Jess
> jess
Jess, the Rule Engine for the Java Platform
Copyright (C) 2004 Sandia Corporation
Jess Version 7.0a5 2/2/2005
Jess> exit
exit
Jess> (+ 3 4)
7
Jess> (exit)
>
Exits Protégé if running in JessTab
![Page 27: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/27.jpg)
27JessTab Tutorial 2006 27
Jess Facts
Jess manages a list of known facts
Sample Jess fact:
(person (hair-color black)
(name ”John Smith”)
(eye-color blue)
(age 23))
![Page 28: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/28.jpg)
28JessTab Tutorial 2006 28
The Deftemplate Construct
Declaration of valid slots for a given relation name
The general format of deftemplate is
(deftemplate <relation-name> [<optional-comment>]
<slot-definition>*)
where <slot-definition> is defined as
(slot <slot-name>) | (multislot <slot-name>)
![Page 29: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/29.jpg)
29JessTab Tutorial 2006 29
Sample Deftemplate
Information about a person
(deftemplate person ”A sample deftemplate”
(slot name)
(slot age)
(slot eye-color)
(slot hair-color))
![Page 30: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/30.jpg)
30JessTab Tutorial 2006 30
Multifield slots
• Normal, single-field slots can hold only one value
• Multifield slots can hold several values
• The values are ordered in a list
![Page 31: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/31.jpg)
31JessTab Tutorial 2006 31
Sample Fact Revisited
(person (name John Smith)
(age 23)
(eye-color blue)
(hair-color brown))
• Illegal if name is a single-field slot, but
• legal is name is a multifield slot
![Page 32: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/32.jpg)
32JessTab Tutorial 2006 32
Ordered Facts
• Implied deftemplate: Single implied multifield slot
• List of elements
• Order of elements important; slot names not required
• Example: list of numbers
(number-list 7 9 3 4 20)
![Page 33: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/33.jpg)
33JessTab Tutorial 2006 33
Adding and Removing Facts
• All facts known to Jess are stored in the fact list
• Add new facts with the assert command:
(assert <fact>+)
• More than one fact can be added with assert
![Page 34: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/34.jpg)
34JessTab Tutorial 2006 34
Adding Facts: Example
Jess>
(deftemplate person
(slot name)
(slot age)
(slot eye-color)
(slot hair-color))
Jess>
(assert (person (name ”John Q. Public”)
(age 23)
(eye-color blue)
(hair-color black)))
<Fact-0>
Jess>
![Page 35: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/35.jpg)
35JessTab Tutorial 2006 35
Displaying Facts
• The facts command: (facts)
• Example:
Jess> (facts)
f-0 (MAIN::person (name ”John Smith”) (age 23)
(eye-color blue) (hair-color black))
For a total of 1 fact.
Jess>
![Page 36: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/36.jpg)
36JessTab Tutorial 2006 36
Adding another Fact
Jess>
(assert (person (name ”Jane Smith”)
(age 36)
(eye-color green)
(hair-color red)))
<Fact-1>
Jess> (facts)
f-0 (person (name ”John Smith”) (age 23)
(eye-color blue) (hair-color black))
f-1 (person (name ”Jane Smith”) (age 36)
(eye-color green) (hair-color red))
For a total of 2 facts.
Jess>
Normally, Jess does not accept duplicate fact entries
![Page 37: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/37.jpg)
37JessTab Tutorial 2006 37
Jess Rules
Step 1 — Define the relevant deftemplates:
(deftemplate emergency (slot type))
(deftemplate response (slot
action))
IF the emergency is a fire
THEN the response is to activate the sprinkler system
Sample rule:
![Page 38: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/38.jpg)
38JessTab Tutorial 2006 38
Jess Rules (cont.)
Step 2 — Define the rule
(defrule fire-emergency ”A sample rule”
(emergency (type fire))
=>
(assert (response
(action activate-sprinkler-system))))
actions
patterns
rule header
![Page 39: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/39.jpg)
39JessTab Tutorial 2006 39
The Run Command
Run the forward-chaining system
Jess> (run)
Jess> (facts)
f-0 (emergency (type fire))f-1 (response (action activate-sprinkler-system))For a total of 2 facts in module MAIN.
Jess>
![Page 40: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/40.jpg)
40JessTab Tutorial 2006 40
Printing the Result
(defrule fire-emergency
(emergency (type fire))
=>
(printout t ”Activate the sprinkler system” crlf))
output stream (t = stdout)
![Page 41: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/41.jpg)
41JessTab Tutorial 2006 41
Multiple Rules
(defrule fire-emergency
(emergency (type fire))
=>
(printout t ”Activate the sprinkler system” crlf))
(defrule flood-emergency
(emergency (type flood))
=>
(printout t ”Shut down electrical equipment” crlf))
![Page 42: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/42.jpg)
42JessTab Tutorial 2006 42
Single-Field Patterns
(deftemplate person
(multislot name)
(slot social-security-number))
(deffacts some-people
(person (name John Smith)
(social-security-number 483-98-9083))
(person (name Jack Smith)
(social-security-number 483-98-9084)))
(defrule print-social-security-numbers
(print-ss-numbers-for ?last-name)
(person (name ?first-name ?middle-name ?last-name)
(social-security-number ?ss-number))
=>
(printout t ?ss-number crlf))
![Page 43: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/43.jpg)
43JessTab Tutorial 2006 43
Single-Field Wildcards
(defrule print-social-security-numbers
(print-ss-numbers-for ?last-name)
(person (name ? ? ?last-name)
(social-security-number ?ss-number))
=>
(printout t ?ss-number crlf))
![Page 44: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/44.jpg)
44JessTab Tutorial 2006 44
Conditional Patterns
(defrule black-or-brown-hair
(person (name ?name) (hair brown | black))
=>
(printout t ?name ” has dark hair” crlf))
(defrule black-or-brown-hair
(person (name ?name) (hair ?color&brown | black))
=>
(printout t ?name ” has ” ?color ” hair” crlf))
![Page 45: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/45.jpg)
45JessTab Tutorial 2006 45
Conditional Patterns (cont.)
(defrule not-black-or-brown-hair
(person (name ?name)
(hair ?color&~brown&~black))
=>
(printout t ?name ” has ” ?color ” hair” crlf))
![Page 46: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/46.jpg)
46JessTab Tutorial 2006 46
Conditional Patterns (cont.)
(defrule complex-eye-hair-match
(person (name ?name1)
(eyes ?eyes1&blue | green)
(hair ?hair1&~black))
(person (name ?name2&~?name1)
(eyes ?eyes1&~?eyes2)
(hair ?hair2&~red | ?hair1))
=>
(printout t ?name1 ” has ” ?eyes1 ” eyes and ” ?hair1 ” hair” crlf)
(printout t ?name2 ” has ” ?eyes2 ” eyes and ” ?hair2 ” hair” crlf))
![Page 47: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/47.jpg)
47JessTab Tutorial 2006 47
Conditional Patterns (cont.)
(defrule no-identical-birthdays
(not (and (person (name ?name)
(birthday ?date))
(person (name ~?name)
(birthday ?date))))
=>
(printout t ”No two people have the same birthday”
crlf)
![Page 48: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/48.jpg)
48JessTab Tutorial 2006 48
Loading Jess Constructs from a File
• Create the Jess source file with a text editor
• Use the batch command:
(batch <file>)
• Example:
Jess> (batch ”fire.clp”)
Defining deftemplate emergency
Defining deftemplate response
Defining defrule: fire-emergency +j
![Page 49: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/49.jpg)
49JessTab Tutorial 2006 49
6. Managing Protégé ontologies with Jess
• The Protégé GUI is nice but sometimes scripting or programmatically modifying an ontology is better
• JessTab adds several functions and constructs for managing ontologies
• Naturally, these functions and constructs are available from the Jess command prompt and from Jess programs
![Page 50: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/50.jpg)
50JessTab Tutorial 2006 50
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>
![Page 51: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/51.jpg)
51JessTab Tutorial 2006 51
Modifying slots
Jess> (slot-set john age 21) Jess> Jess> (slot-get john age) 21Jess>
![Page 52: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/52.jpg)
52JessTab Tutorial 2006 52
Creating a second instance
Jess> (make-instance sue of Person (name "Sue") (age 22))
<External-Address:SimpleInstance>
Jess>
Jess> (slot-get sue age)
22
Jess>
![Page 53: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/53.jpg)
53JessTab Tutorial 2006 53
Functions for knowledge-base operations
mapclass
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
subclassp
class-superclasses
class-subclasses
get-defclass-list
class-slots
instancep
instance-existp
instance-name
instance-address
instance-addressp
instance-namep
slot-existp
slot-default-value
set-kb-save
get-kb-save
load-kb-definitions
load-project
include-project
save-project
jesstab-version-number
jesstab-version-string
get-knowledge-base
get-tabs
![Page 54: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/54.jpg)
54JessTab Tutorial 2006 54
7. Mapping Protégé ontologies to Jess
• Transferring the Protégé representation to the Jess representation
Protégéontology Jess facts
f-0
f-1
f-2
f-3
![Page 55: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/55.jpg)
55JessTab Tutorial 2006 55
Mapping classes
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.
![Page 56: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/56.jpg)
56JessTab Tutorial 2006 56
The “object” fact
• Pattern for facts corresponding to Protégé instances
(object (is-a Person) (is-a-name "Person")(OBJECT <External-Address:SimpleInstance>)(age 20) (name "John"))
Fact name Class nameClass name
as string
Slot values
Reference to Protégé instance
![Page 57: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/57.jpg)
57JessTab Tutorial 2006 57
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.
![Page 58: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/58.jpg)
58JessTab Tutorial 2006 58
Creating Instances
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.
![Page 59: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/59.jpg)
59JessTab Tutorial 2006 59
Adding a Jess rule
Jess> (defrule twenty_one (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>
![Page 60: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/60.jpg)
60JessTab Tutorial 2006 60
More rule examples
(defrule twenty_two (object (name ?n) (age 22))=> (printout t "The object " ?n " is 22" crlf))
(defrule print_age (object (is-a Person) (name ?n) (age ?a))=> (printout t "The person " ?n " is " ?a crlf))
![Page 61: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/61.jpg)
61JessTab Tutorial 2006 61
Accessing instances from rules
(defrule print_age_2 (object (is-a Person) (OBJECT ?obj) (name ?n))=> (printout t "The person " ?n " is " (slot-get ?obj age) crlf))
(defrule print_age_3 ?f <- (object (is-a Person) (name ?n))=> (printout t "The person " ?n " is " (slot-get ?f age) crlf))
![Page 62: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/62.jpg)
62JessTab Tutorial 2006 62
Modifying slot values from rules
(defrule upgrade_my_age ?f <- (object (is-a Person) (name ”Joe Hacker”) (age 20))=> (slot-set ?f age 21))
(defrule upgrade_my_age_2 ?f <- (object (is-a Person) (name ”Joe Hacker”) (age ?a))=> (slot-set ?f age (+ ?a 1)))
Tip: Avoid.Infinite loop!
![Page 63: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/63.jpg)
63JessTab Tutorial 2006 63
Consistency rules
(defrule set_john_doe_if_no_name ?f <- (object (is-a Person) (name nil) (age ?a&:(numberp ?a)))=> (slot-set ?f name ”John Doe”))
(defrule remove_if_no_name_and_no_age ?f <- (object (is-a Person) (name nil) (age nil))=> (unmake-instance ?f))
![Page 64: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/64.jpg)
64JessTab Tutorial 2006 64
Matching instances in rules
• Remove duplicates
(defrule remove_if_duplicate_name_and_age (object (is-a Person) (OBJECT ?p) (name ?n) (age ?a)) (object (is-a Person) (OBJECT ~?p) (name ?n) (age ?a))=> (unmake-instance ?p))
![Page 65: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/65.jpg)
65JessTab Tutorial 2006 65
Matching instances in rules (cont.)
• Find pet owners
(defrule print_owner_and_pet (object (is-a Person) (OBJECT ?p) (name ?n)) (object (is-a Dog|Cat|Bird) (is-a-name ?type) (owner ?p) (name ?an))=> (printout t "The person " ?n " has a " ?type " called " ?an crlf))
![Page 66: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/66.jpg)
66JessTab Tutorial 2006 66
Mappings and rules – Summary
• Use (mapclass <class-name>) or (mapinstance <instance>) to map instances to facts
• Use (facts) to check what facts you got
• Define the rules matching the object facts (defrule …)
• Use (run) to invoke the rules
• Tip #1: Learn as much Jess as possible (e.g., rule patterns)
• Tip #2: Start out with simple examples (when learning and troubleshooting)
![Page 67: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/67.jpg)
67JessTab Tutorial 2006 67
Question #1: Why mappings?
• Separates the Protégé model from the Jess model
• Allows selected parts of the Protégé kb to be visible to Jess
• Allows for large ontologies and/or fact bases with a small common part
• Different Jess engines can map in different part of a Protégé kb
• Why not have Jess index the Protégé frames directly? Implementation complexity Maintenance problem: The Jess indexing scheme changes often (due to
code optimizations) Several Jess versions supported simultaneously However, mappings increase memory consumption
![Page 68: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/68.jpg)
68JessTab Tutorial 2006 68
Question #2: Why does mapclass map to these “object” facts?
• Backward compatibility with CLIPS rules The Jess rules have (almost) the same syntax as the CLIPS rules for objects
• Support for more general patterns in rules Example: Find an instance of any class with a certain slot value
• No name conflicts with other types of facts The name object is reserved for facts coming from Protégé
• Why can’t I change the mappings to something else? In fact, there is an API for this Using Java, you can write arbitrary mappings
![Page 69: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/69.jpg)
69JessTab Tutorial 2006 69
Mirroring Jess definitions in Protégé knowledge bases
• Reverse mapping
• Jess definitions become instances in the Protégé kb
• Graphical browsing of definition instances in Protégé
• Definition instances visible to other tabs
• Introspection because JessTab can access the definition instances
• Limited support for editing and customization of definition editors in Protégé
• Limited support for saving these Jess definitions with the Protégé kb Not recommended unless you know its limitations
![Page 70: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/70.jpg)
70JessTab Tutorial 2006 70
Mirroring Jess definitions in Protégé knowledge bases (cont.)
Your Jess definitions as first-class citizen in Protégé
![Page 71: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/71.jpg)
71JessTab Tutorial 2006 71
Editing Jess definitions in Protégé
Jess rule editor in Protégé
![Page 72: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/72.jpg)
72JessTab Tutorial 2006 72
Editing Jess definitions in Protégé (cont.)
Rule-editor subtab in JessTab
![Page 73: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/73.jpg)
73JessTab Tutorial 2006 73
8. Metalevel mappings
• The Next Level!
• Mapping classes to facts
• Good news: Classes are instances!Metaclass
Class
Instance
instance of
instance of
![Page 74: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/74.jpg)
74JessTab Tutorial 2006 74
Support for Protégé metalevel objects
• JessTab support for metaclasses, metaslots, and metafacets
• Functions for instances work for classes too and for slots and facets
• Defining classes by instantiating metaclasses:
(make-instance Person of :STANDARD-CLASS (:DIRECT-SUPERCLASSES :THING))
![Page 75: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/75.jpg)
75JessTab Tutorial 2006 75
Class definition by instantiation
(make-instance of :STANDARD-CLASS (:NAME LivingThing) (:ROLE Abstract) (:DIRECT-SUPERCLASSES :THING))
(make-instance of :STANDARD-CLASS (:NAME Person) (:DIRECT-SUPERCLASSES LivingThing) (:DIRECT-TEMPLATE-SLOTS (make-instance of :STANDARD-SLOT (:NAME name) (:SLOT-VALUE-TYPE String)) (make-instance of :STANDARD-SLOT (:NAME age) (:SLOT-VALUE-TYPE Integer)) ))
(defclass Person
(defclass LivingThing
![Page 76: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/76.jpg)
76JessTab Tutorial 2006 76
Class definition by instantiation (cont.)
• Resulting classes: LivingThing and Person
Tip: Classes can also be created programmatically with calls to defclass (which is a construct implemented as a function)
![Page 77: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/77.jpg)
77JessTab Tutorial 2006 77
Class definition with custom metaclass
(make-instance of :STANDARD-CLASS (:NAME MyMetaClass) (:DIRECT-SUPERCLASSES :STANDARD-CLASS) (:DIRECT-TEMPLATE-SLOTS (make-instance of :STANDARD-SLOT (:NAME AUTHOR) (:SLOT-VALUE-TYPE String)) ))
(make-instance of MyMetaClass (:NAME Person2) (:DIRECT-SUPERCLASSES Person) (:DIRECT-TEMPLATE-SLOTS (make-instance of :STANDARD-SLOT (:NAME income) (:SLOT-VALUE-TYPE Integer)) ))
; Set the AUTHOR value for Person2(slot-set Person2 AUTHOR "The meta man")
Add AUTHOR property to classes
![Page 78: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/78.jpg)
78JessTab Tutorial 2006 78
Resulting class with AUTHOR property
(instance of MyMetaClass)
![Page 79: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/79.jpg)
79JessTab Tutorial 2006 79
Class changes
• Change the metaclass of an existing class
• BTW, you can change the class of an existing ordinary instance
(slot-set Person :DIRECT-TYPE MyMetaClass)
(slot-set john :DIRECT-TYPE Person2)
![Page 80: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/80.jpg)
80JessTab Tutorial 2006 80
Rules and metalevel objects
• Use mapclass on metaclasses Maps classes (as instances) to facts Check result with (facts)
• Define rules matching the facts representing the classes Rules for searching ontologies and identifying patterns Rules for modifying ontologies
• Useful for ontology development and maintenance Rules for ontology-wide changes Rules for identifying inconsistencies
![Page 81: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/81.jpg)
81JessTab Tutorial 2006 81
Printing abstract classes in Protégé
(mapclass :THING) (defrule print-all-abstract-classes ?c <- (object ) (test (class-abstractp ?c)) => (printout t "The class " (instance-name ?c) " is abstract." crlf))
Map every class to Jess
Match every object
Test for abstract classes
Print matches
![Page 82: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/82.jpg)
82JessTab Tutorial 2006 82
Modifying ontologies
(defrule make-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:
Not no subclasses = subclasses exist
Concrete classes & no instances
Change role
![Page 83: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/83.jpg)
83JessTab Tutorial 2006 83
Methods and Message Handlers
• Object-oriented programming for Protégé/Jess Complements rule-based modeling
• Methods Respond to generic function calls Match on parameter types
• Message handlers Handle messages sent to objects Allow parameters, but not pattern matching Before, after, and around handlers
• Implementation of methods and message-handlers supported by CLIPS
![Page 84: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/84.jpg)
84JessTab Tutorial 2006 84
Defining methods
• Syntax
• Examples
(defmethod <name> [<index>] [<comment>] (<parameter-restriction>* [<wildcard-parameter-restriction>]) <action>* )
(defmethod add ((?a STRING) (?b STRING)) (str-cat ?a ?b))
(defmethod add ((?a MyClass) (?b MyClass)) …)
![Page 85: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/85.jpg)
85JessTab Tutorial 2006 85
Defining message handlers
• Syntax
• Examples
(defmessage-handler MyClass get-foo () ?self:foo)
(defmessage-handler rectangle find-area () (* ?self:side-a ?self:side-b))
(defmessage-handler <class-name> <message-name> [<handler-type>] [<comment>] (<parameter>* [<wildcard-parameter>]) <action>* )
![Page 86: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/86.jpg)
86JessTab Tutorial 2006 86
Invoking message handlers
• Sending messages
• Syntax: (send <instance> <message> <param>* )
• Example
Jess> (defclass MyClass (is-a :THING)(slot foo (type integer))) TRUEJess> (make-instance x of MyClass (foo 42)) <External-Address:DefaultSimpleInstance>Jess> (slot-get x foo) 42Jess> (defmessage-handler MyClass get-foo () ?self:foo) TRUEJess> (send x get-foo) 42Jess>
![Page 87: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/87.jpg)
87JessTab Tutorial 2006 87
Methods and Message Handlers – Summary
• Object-oriented modeling
• Methods Advanced parameter matching (similar to CLOS) Both classes and datatypes in parameter patterns Overloading of existing functions
• Message handlers Message passing Invoked with (send <inst> <msg> <param>* ) Easy access to slot values (through ?self) Before, after, and around methods
![Page 88: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/88.jpg)
88JessTab Tutorial 2006 88
9. JessTab and Protégé OWL
• Basic support for OWL
• JessTab uses the Protégé frames API which provides a best-effort implementation of OWL functionality
• Metaclasses not supported
• OWL constraints/expressions not supported
• Jess definition mirroring not supported
![Page 89: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/89.jpg)
89JessTab Tutorial 2006 89
10. Example
• Based on the Protégé newspaper example
• Goal: Layout rules in Jess Reuse ontology Add new rules
• Step-wise development
• Download from http://www.ida.liu.se/~her/JessTab/tutorial06/
![Page 90: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/90.jpg)
90JessTab Tutorial 2006 90
Steps
• Prerequisite Jess and JessTab installed
• Open newspaper example Available in the standard Protégé installation
• Enable JessTab Project -> Configure -> select JessTab
• Cut-and-paste from source file (newspaper.jess)
• Alternatively, load with (batch ”newspaper.jess”) Tip: You probably need the full pathname for this file
![Page 91: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/91.jpg)
91JessTab Tutorial 2006 91
Rule overview
• Mapclass for newspaper articles and ads (mapclass Content)
• Rules for mapping instance facts to page-area facts page_area_r1, page_area_r2
• Rules for creating size facts from the page-area facts size_r1, size_r2, size_r3, size_r4
• Rules for creating layout instances from the size facts layout_r1
![Page 92: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/92.jpg)
92JessTab Tutorial 2006 92
Graphical rule overview
Personals_Ad
Standard_Ad
Article
page-area
width
height
Content_Layout
Rectangle
page_area_r1page_area_r2
size_r1size_r2size_r3size_r4
layout_r1
Instance
Fact
Rules
![Page 93: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/93.jpg)
93JessTab Tutorial 2006 93
Rules – Code
(mapclass Content)
(defrule area_r1 (object (is-a Personals_Ad|Standard_Ad) (OBJECT ?a) (name ?n) (page_number ?p)) => (assert (page-area ?p Ad ?n "" ?a)))
(defrule area_r2 (object (is-a Article) (OBJECT ?a) (headline ?h) (text ?t) (page_number ?p)) => (assert (page-area ?p Article ?h ?t ?a)))
(defrule size_r1 (page-area ?p&:(< ?p 10) Article ? ? ?a) => (assert (width ?a 100.0)))
(defrule size_r2 (page-area ?p&:(>= ?p 10) Article ? ? ?a) => (assert (width ?a 50.0)))
(defrule size_r3 (page-area ? Article ? ?t ?a) => (assert (height ?a (* (str-length ?t) 2.0))))
(defrule size_r4 (page-area ?p Ad ? ? ?a) => (assert (width ?a 50.0) (height ?a 50.0)))
(defrule layout_r1 (width ?a ?w) (height ?a ?h) => (slot-set ?a layout (make-instance of Content_Layout (main_rectangle (make-instance of Rectangle (width ?w) (height ?h))))))
![Page 94: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/94.jpg)
94JessTab Tutorial 2006 94
Result
![Page 95: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/95.jpg)
95JessTab Tutorial 2006 95
11. Conclusion
• Web of tools
• Future work
• Trying JessTab
• Learning more
• Summary
• Questions
![Page 96: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/96.jpg)
96JessTab Tutorial 2006 96
Tool Web/Library
Your system
Your tab
JessTab
FuzzyJess PrologTab
JadeJessProtege
FloraTab
More Protégé plug-ins
More Jess extensions
Algernon
ProtégéJess
JADE
![Page 97: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/97.jpg)
97JessTab Tutorial 2006 97
Ideas for future work
• Improved OWL support
• Custom mappings (defined in Jess)
• Support for managing Protégé forms
• Improved GUI
• Aspect-oriented functionality (e.g., pointcut for message-handlers)
• ???
![Page 98: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/98.jpg)
98JessTab Tutorial 2006 98
Trying JessTab
• Obtain Protégé Download from http://protege.stanford.edu/ License: MPL 1.1
• Obtain Jess Download from http://www.jessrules.com/ License: Special Jess license (commercial or free academic) Compilation sometimes required
• Get JessTab Download from http://www.ida.liu.se/~her/JessTab/ License: MPL 1.1
![Page 99: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/99.jpg)
99JessTab Tutorial 2006 99
Learning more about Jess and JessTab
• Jess manual See http://www.jessrules.com/
• Jess book Ernest Freidman-Hill. Jess in Action: Java Rule-based Systems.
Manning Press, 2003. ISBN: 1930110898 See http://manning.com/friedman-hill/
• Jess mailing list See http://www.jessrules.com/jess/mailing_list.shtml
• JessTab manual See http://www.ida.liu.se/~her/JessTab/
• Jess publication Henrik Eriksson. Using JessTab to integrate Protégé and Jess.
IEEE Intelligent Systems, 18(2):43– 50, 2003.
![Page 100: Jess Tab Tutorial](https://reader037.vdocument.in/reader037/viewer/2022102922/54b534e44a7959f8228b45e7/html5/thumbnails/100.jpg)
100JessTab Tutorial 2006 100
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