Friday, August 20, 2004

Resting on SOFA

I've recently been part of taking a closer look at SOFA (I haven't been doing most of the work though). Initially, it looks too good to be true, OWL in 5 classes. Surely it can't be that easy? It's basically an object model for OWL and RDFS. It includes: Concept, Ontology, Relation, Restriction and Thing. A Concept represents a classification item (class) and a Thing represents a knowledge item (instance). Relations are transitive, symmetric or an inversion. Restrictions are by cardinality or value. It can read and write both OWL and RDFS.

Other features:
* Provides inferencing.
* Support for Java types. This includes mapping to 10 Java datatypes, like String to xsd:string. Other Java objects are base64 encoded - which is a strange feature but kind of cool.
* Events and event listeners (when Things are added, removed or modified).
* Uses URI objects.
* Supports checked exceptions and throws them when you do something wrong.
* Interfaces all the way through.
* DOTWriter which represents an ontology as a directed graph described by Graphviz DOT language syntax.
* Unit tests.

Because it is so small it should be fairly easy to integrate into other stores and APIs.

More information is available here.

1 comment:

Andrew said...

It uses Jena (1.6 by the looks) to do the RDF/XML import and export but that's about it. Apart from that the API is completely independent of Jena - what was most surprising is that it doesn't use Jena's inferencing.

The closest package in Jena is com.hp.hpl.jena.ontology.

As I said, ease of use (as a client and server API) and ease of integration seems to be the biggest wins over Jena.