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.
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.
ReplyDeleteThe 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.