Applying the Semantic Web to Home Automation
Recently I've been considering how the Semantic Web will impact home automation.
Technologies like the Web Ontology Language (OWL) and RDF allow for the construction of complex ontologies that define what things are, and how they relate. Using these ontologies automated reasoning can be applied to generate new facts or to prove or disprove assertions.
This sounds like the ideal companion to the Natural Language Processing (NLP) Engine that I have already created for the my home automation system. With reasoning powers added to the natural language engine and the ability to augment the knowledge base by adding new assertions the whole system will be much more powerful. One day it might even be possible to create the entire home definition using a natural language text file and to query the system using rich natural language queries.
So, the first step is to find an existing ontology store and reasoning engine. A quick web search reveals that most are built in Java. There were a couple of links I came across later for .NET: http://razor.occams.info/code/semweb/ and http://www.intellidimension.com/products/semantics-server/. There's also an interesting Q&A site at http://semanticoverflow.com which has lots of useful information on it.
But rather than starting with some existing library I really wanted to understand more deeply how an ontology store works and how a reasoning engine functions, so over the course of a couple of evenings I created my own. I now have a triple store and a simple reasoning engine. Here's an actual conversation so you can see what it's capable of so far and can perhaps get a glimpse at how powerful this concept could be:-
house is a class contains is a property contains is transitive first floor is a class room is a class kitchen is a room first floor contains kitchen house contains first floor does house contain kitchen? House: Yes, house contain kitchen because [house contains first floor] ... [first floor contains kitchen]
As you can see my semantic store can already represent classes, relationships between classes, new relationships ('contains'), relationships between relationships ('same as'). For such a small amount of code it's quite surprising what this system can now handle in terms of knowledge representation and simple reasoning.
Next time I get some spare time I'll hook it up to the actual home model so you can start to query that in much more powerful ways than before.