I admit to not knowing much about ontologies (in the knowledge-management sense), but I am interested in them.
However, what I did discover is that Stanford’s Protégé project works well as a semi-freeform personal database.
For example, a while back I was writing a paper for a psych class, and of course had to have a bibliography. I wasn’t completely satisfied with the bibliographic database software I found out there, so I started to look around for some easy way to build some. I found Protégé because I was exposed to it via another class. I found that despite the fact that I don’t really know what it’s for :-), I was able to use Protégé to get the job done easily.
The nice thing about it, from my perspective, is that it allows for the formality and precision of a database schema, while also allowing for some of the sloppiness and incremental evolution of, say, a plain text file. As I add entries to a database, I sometimes discover that I want new fields in the records, or that I want to formalize something that was informal before. Protégé allows me to do that with a few clicks, without disturbing any existing data or causing any referential-integrity headaches, and it automatically populates the data-entry form to match.
If a new field is marked as required, then I get a visual indication in the form that the field is required, but I’m not forced to add it. For example, if I was building a “people I know” database (which is my current Protégé project), I could add a required birthdate field. I may not know all the birthdates of people I know yet, but I want the schema and form to reflect the fact that its important information that I should eventually fill in.
It doesn’t have the best GUI, because it’s very general, and therefore not the best possible interface for any specific application. However, forms can be customized to make them prettier, or one can embed the database and/or form components in some other program for total control. (I do have to say that the default GUI is much nicer in version 3 than in version 2.) In any case, it’s definitely smoother than any GUI I’ve tried as a front end to a relational database.
I mentioned embedding; the API is easy to work with if you need to get some functionality that’s not natively supported. I wanted an HTML version of my entire bibliography, so I wrote a Jython script in about half an hour to pull the data out of the store and format it appropriately.
And finally, because it’s open-source, it’s free and easy to modify beyond even the API level. Woot again for open-source.