The "brower slot" has been renamed in the UI to be the "Display Slot". More significantly, you can set
the "display slot" directly in the Instances tab. We have also changed the text displayed when the "display slot" is
not set so that it is more informative. We hope that these changes will help to clear up one of the more confusing issues
for beginners trying to figure out the system.
All project and file references are now done by URI. Read more about this below.
Created simple ImageWidget to display the contents of an image. The image location is the value of a string slot. The
path can be either an absolute URL or relative to the project file.
Created simple URLWidget to display the contents of a URL. The URL is the value of a string slot. The path can be
either an absolute URL or relative to the project file.
Changed the way that the file encoding is specified in order to make this less error prone.
Added the ability to specify browser text that depends on more than one slot.
The text of nodes in the Graph Widget is now centered.
The "look and feel" that you select is now remembered across invocations of the program.
You can now insert FrameStore implementations into the FrameStore chain. This is done via the KnowledgeBase.insertFrameStore
call. You can also get the current FrameStore chain (via KnowledgeBase.getFrameStores) and insert your framestore
at an arbitrary location.
Added a feature to allow forms to be customized to not "stretch" when they are displayed. This feature
is accessed by selecting "<<NONE>>" from "select stretcher" items on the "Layout"
pane of the form configuration dialog.
Added a project level event for the creation of "runtime" forms.
Changed the Knowledge Base API to uniformly return unmodifiable collections. Previously, the API returned
unmodifiable collections in some cases and modifiable ones in other cases. This led to lots of confusion.
Added the ability to override the type names reported by the JDBC driver for all column types used by the database back-end.
Previously this ability just existed with the LONGVARCHAR type. The mechanism is the same as before: to override a type name
you set a JAVA property (either on the command line or in the LAX file). The names for the properties are:
You only have to worry about setting one or more of these if the system cannot create a table in your database
because of problems with your JDBC driver.
The standard text components now commit their changes when the user presses the "Enter" key.
Created application properties to enable tracing of SQL calls in the database back-end:
Added the ability to control the number of instances that the direct instances widget will sort:
Removed some less than useful information from the metrics panel.
Refactored DefaultKnowledgeBase code so that it can be subclassed more easily.
Removed the DiagramWidget from the distribution.
Implemented code to test for and correctly dispatch get/set own slot values calls on system slots
(such as :DIRECT-SUPERCLASSSES). You can now call, for example, setOwnSlotValues on the slot :DIRECT-SUPERCLASSES and it
will "do the right thing".
Added the ability to read in projects in the local machine file encoding and write out UTF-8. Read more
about this below.
Reimplemented the ability to set the "default class metaclass" in the UI. This metaclass is only used when creating
subclasses of :THING. Otherwise, you get the metaclass of your parent.
Put some checks into the API to prevent the default class/slot metaclass being set programmatically to something that
is not a class/slot metaclass.
Added a "View in Browser" button to the URL Widget.
Frames from different knowledge bases no longer compare equal, independent of their frame id values.
Deleting a slot now causes "direct template slot removed" events on all classes that it is directly attached to.
The "Archive Revert" dialog now has the last archive selected by default.
Refactored the FileUtilities class and moved a bunch of methods to the new URIUtilities class.
Made some performance improvements in file loading/saving.
Added documentation about saving of file-based projects in the multiuser version.
Added the ability to specify a port for the Protégé server to use. You can specify this port with the java command
line option -DProtégé.rmi.server.port=N. This is useful when running the server behind a firewall. Now only the
rmiregistry port and the Protégé server port need to be opened in the firewall.
Deleting a frame no longer removes the frame ID from the object. This change may make it easier for programmers to
track down (or avoid) some sorts of problems.
The method Frame.hasBeenDeleted() has been renamed to Frame.isDeleted() to work better with undo (where deleted
frames can be undeleted).
FileField is changed so that it can optionally acquire directories. Thanks go to Stanley Knutson for contributing this code.
Specifying slot type INSTANCE with no allowed-class value is now interpreted to allow any value. Previously it allowed no
value and this behavior was inconsistent with the notion of a constraint.
Made some performance improvements to address the needs of projects with large numbers of template slots attached to
:THING (i.e. OWL projects).
Added a subinterface to KnowledgeBaseFactory (called KnowledgeBaseFactory2) to allow a factory to modify the knowledge
base before the user executes a save to another format.
Moving widgets on the Forms tab with the arrow buttons on the keyboard now causes the Forms on other tabs to update
(just like moving the widgets with the mouse does).
Added a search field to the slots tab.
The API now blocks attempts to set a frame name to either null or to a name already used. An exception is thrown.
The various setAllowedClses/Parents/Values calls now remove duplicate values.
Made some performance improvements to DefaultRenderer.
Made some paint methods in DefaultRenderer protected.
Changed the behavior of the "direct domain" slot for subslots. The value is no longer inferred from superslots.
Fixed a problem that was preventing users from drawing reified relations in the graph widget when using
the database back-end.
Fixed a problem in the graph widget that was causing a null pointer exception in some situations.
Fixed the Frame.getOwnSlotDefaultValues() call.
Fixed a problem with the Queries Tab throwing null pointer exceptions on some pick list operations.
Fixed a problem with default values not propagating correctly.
Fixed an obscure problem with a default value for the :DIRECT_SUPERCLASSES slot.
Fixed a problem with the Cls.getBrowserSlot() method call.
Fixed a problem which caused template slot values to show up twice in some situations.
Fixed a problem with drag and drop on the Mac that caused classes to "disappear".
Forms now update correctly when slots attached to :THING are changed.
Float and integer field widgets no longer throw exceptions when they have no value.
Fixed a problem with custom instances/subclasses of :INSTANCE-ANNOTATION.
Fixed a problem with some overridden slots not showing up as overridden in the template slots widget.
Exceptions generated in startup code are now caught so that the system will come up even if there are strange problems.
Made CLIPS save mechanism more robust in the face of some types of KnowledgeBase corruption.
Fixed a problem with selection in the instance table widget with the windows look-and-feel installed.
Removed the "hashcode called for deleted frame" trace message.
Made some corrections to direct-type slot facet overrides on several system frames.
Fixed a problem with the BooleanList widget.
Fixed some problems with listeners on deleted frames. It is now no longer necessary to detach listeners
from deleted frames (but it is harmless to continue to do so).
Fixed a problem with forms not updating immediately when a slot value type is changed.
Fixed UI bug which prevented users from overriding instance and class type slots.
Fixed a problem with "include" for new projects.
Changing the value-type of a slot now clears out all values of the slot.
Made CLIPS back-end somewhat more robust in the face of problems with the input files. You are now more likely to get
a "partial load" of your files rather than a complete failure.
Fixed a bug in the Graph Widget that was causing text not to be positioned properly the first time a user drops
a node onto the view from the palette.
Fixed a number of problems where new dialogs did not get the focus appropriately. This made editing more clumsy
than it has to be. This problem affected the "yellow stickies" and a number of places where integers, floats,
and symbol values were input.
Fixed a number of places where "NumberFormatException" was thrown when the user attempted to enter an integer or a float.
Fixed a problem with the CLIPS parser not accepting slots as facet values. Thanks go to Reiner Borchert for sending in this patch.
Fixed a UI update problem with dragging and dropping slots to create subslots in the Slots tab.
Fixed slot default values and template values to be removed if a change to the value type (type, allowed values,
allowed classes or allowed parents) makes it no longer valid.
Fixed a problem with symbol allowed values being discarded on the load of a project.
Fixed a problem with setValueType() removing information under some circumstances.
Fixed the Getting Started button on the Welcome dialog to show the Getting Started tutorial
instead of a file not found error.
Fixed a problem that caused the values for inverse slots to get duplicated on a save/load cycle.
Fixed a problem that caused the API call Project.isDirty() to return false even though instances had been created.
Fixed a number of problems with event generation including:
- missing add/remove sub/super slot events
- missing ownSlotValueChanged events on calls such as KnowledgeBase.addDirectSuperclass
Fixed a problem that caused PPRJ files to grow every time they are saved.
Fixed a problem with sorting frames with an empty string as their display name (browser text).
Fixed a problem which caused saving to a new directory and importing to fail for both the Clips and RDF back-ends.
Fixed a problem with drag and drop throwing exceptions in some situations.
The database back-end has been rewritten for Protégé 2.0. The schema has also changed. Protégé 2.0 provides read-only
access to a Protégé 1.9 database. You will need to up update to Protégé 2.0 before you can modify your database. We
suggest that you update your database by creating a new project and database table, following the instructions given
below. This process will create an entirely new database project and table and will leave your current one unchanged.
- As with any conversion process, it is probably best to first create a backup copy of your PPRJ file and of your Protégé
database table. (How you create a backup of a database table depends on the database that you are using. You may want
to read your database documentation or contact your system administrator about this).
- Open your Protégé 1.9 database in
Protégé 2.0. Look at the title bar. It should note that this is a Protégé 1.9 "Legacy" database. In addition,
you should note that all of the frames in the system are "grayed out" (disabled) because you have read-only access.
- Do Project | Save In Format and choose "Database" from the list of choices. When the "Save" dialog
comes up you must:
- Change the Project name
- Change the table name -- This is very important!
- Click OK.
The system will then create a new table and copy your database project from the old table into the new one. This may take a long
while if you have a large database project. (Converting 180K frames took a hour on my machine). In the console window the system
will print out the total number of frames to be copied and show its current progress.
When the conversion is complete Protégé will load the new project. Your original database project should be unchanged and will
still work as before (under Protégé 1.9).
To re-enable editing on the new 2.0 project go to the Project | Configure | Options
panel and check the "editing enabled" button.
As an aid to upgrading from previous releases, Protégé can now read CLIPS (the default file format) projects
in any available file encoding on your system. You may need to use this if you are both using non-Latin character
sets, and upgrading from release 1.8 or earlier. When they are written out, they will be in the more portable UTF-8
format that Protégé now uses by default. You must however tell the system what encoding the project file is currently
in, since the system cannot figure out this information by itself. This functionality is accessed by the deliberately
obscure Help | Encodings menu item. Select the "read encoding override" for your system from the list of
available encodings, load your project, and then save it back out. This process will update your project to UTF-8. If
you need help trying to figure out what encoding your machine uses, Sun's Web site has a
list of supported encodings
. Please do
a backup before you try this and also please verify that your project has been read correctly before you do the save!
This release incorporates changes to the way that projects are referenced in Protégé. All projects
are now referenced by relative or absolute "URI". (A URI is a standard generalization of a URL. You can
about this on the W3's Web site). This change
has the following effects for Protégé users:
- Inclusion of a project from a subdirectory of the including project is
now supported and results in a relative URI reference. Thus if the
directory hierarchy is moved the reference still works.
- Inclusion of a project from a completely different directory from the
including project is now supported and results in an absolute URI
reference. This means that if the directory containing the including
project is moved the reference will still work.
- Reference to a project from the command line or programmatically can now
take a URL, a project inside a jar, or even a jar on the web
somewhere. There is no UI support for this inside of Protégé yet but this
support is coming. The API support is there and has been tested. Thus you
can have a local file-based project that includes a project across the
web. This should make it easier to do things such as shared
libraries. Note that the standard syntax for a reference to a project
inside of a jar across the web is somewhat baroque. I suggest looking at
the "model.ProjectTest" class for examples of how to do these sorts of
- Support for this feature has necessitated a few changes in the public
Protégé API, which will be transparent for most API users. Most apparent
are the new methods that take URI's as parameters rather than strings or
File objects. In most cases the old methods have been retained for
backwards compatibility reasons. Some of them have been deprecated. In
addition, the notion of "current working directory" in the FileUtilities
class has been removed. The largest change in source code will have to be
made by back-end authors. If a back-end is to support this new feature then
it must be updated to support URIs. We have tried to make this as
painless as possible by providing a new base class that provides a bunch of
helper methods. Please see the default (CLIPS) back-end for an example of
the way that this can be done.