Monday, 2 July 2007

Topic Maps, OWL and RDF

It's been quite a while since my last post. This has mostly been due to spending a large amount of time playing with some Topic Map (the Ontopia Omnigator) and OWL (Protege) software. Both of these are excellent applications and I was especially impressed by the ability of OWL to form advanced object relationships.

However, at the end of all this research, I think that neither Topic Maps nor OWL are suitable for my purposes; yes, both can perform complex classifications and describe advanced relationships between classes but, for my purposes of creating a heterogeneous database, I only require simple classifications and relationships. Therefore using either of these technologies would probably be like taking the proverbial hammer to a nut. For me, a stronger argument against using these technologies is that, at this moment in time, neither is freely available for C# - the language that I'd like to work with.

So my requirements are a technology that can describe simple classifications and relationships and that is freely available in C#. The one application that seems to match these requirements is Joshua Tauberer's SemWeb - an RDF library for C#. The RDF and RDFS support provided by this package can perform categorisation and describe the relationships between objects to a level suitable for my requirements. An added bonus is that this library is still under active development - version 1.0 was only released on the 10th June 2007 (unlike the other C# RDF library Drive - the web page of which had actually expired the last time I looked).

This doesn't mean to say that SemWeb is perfect - like most things I've encountered on this journey, using SemWeb is not as straightforward as it could be. The main reason for this is that SemWeb has been developed on Mono, as opposed to Microsoft's Visual Studio that I want to use. As a result of this the supplied Visual Studio solutions are incomplete (I needed to refer to the makefiles to create the required projects) and the package currently doesn't support SQL Server, the Express version of which I'd been using for some other areas of this project (such as user administration). I've therefore now switched databases to use MySQL and am now struggling to add and retrieve some RDF data from this. I'll give more details of this struggle in the next post.


Tim said...

this is great - its easy to see the logical progression of how you've got to where you're at. I'm in the exact same boat, fixed on developing a flexible database structure to manage anything i what objectify (contacts, delicious tags, books, and any other nuggets of information). I considered using jena - but i'm a .net programmer and wanted to stick with microsoft. I'm interested in getting the .net solution you put together from the mono build, and contributing my problems/thoughts/fixes along the way.

Steve said...

Hi Tim, I'm glad you've found my posts of interest. I haven't looked at the RDF stuff for a while now, as I've been concentrating on the front end ASP.NET.

The decision to use the SemWeb RDF tool has caused me a lot of extra work with the front end components – due to SemWeb not yet being able to use SQL Server I’ve had to employ MySQL; however a lot of the ASP.NET components, such as Membership, WebParts, etc. are set up to use SQL Server by default and so quite a bit of extra work has been required to get these working with MySQL (in retrospect it may have been easier to get SemWeb working with SQL Server). Having said that, as far as I’m aware, SemWeb is still the only RDF framework that works with C#, so I haven’t really had much choice – I know that there have been some attempts to produce a .NET version of Jena (such as ) but I’m not sure how successful these have been (nor if they would have let me use SQL Server).

Anyway, in response to your request for my projects, I’ve uploaded them here:

Let me know how you get on with these, and if they’re complete as I haven’t had a chance to test them.

Good luck!

Lee Davies said...

Hi Steve, Tim,

I did something similar last year and compiled the Jena framework into a DLL that you can easily use from any .NET language. I also created a simple interface object that lets you configure a Jena store using any database (by passing any IDBConnection obect) and add/remove query via SPARQL.

It is the example quoted by Tim and can be found at:

Any problems using it please let me know.



gyuri10 said...

If you want to go beyond the triples, you may consider using ROWLEX. It allows to interact with the RDF data on the OWL level very nicely. You can do that using its surprisingly pretty autogenerated classes (on any .NET language). The down side of it is that internally it uses the SemWeb.MemoryStore, so you cannot handle with it things that do not fit into your memory.