The basic principle is extremely simple. Rather than just creating a normal wiki link from one article to another, you annotate that link with information what sort of relationship it represents. This is similar to XFN, and other microformats, except they live in wikitext rather than HTML. Being a wiki, however, they don’t need to be predefined anywhere – the first time you create such a relationship it springs into being as a new “blank” relationship that you can describe or define further.
So, for example, on Nigov we store minutes from Belfast City Council meetings. One of the advantages of having them in a wiki, over the official Word documents, is the linking. The list of councillors who are in attendance can be linked to each of their individual pages. When minutes of previous meetings are approved, they can be linked to. With Semantic Mediawiki we can go even further. In a normal wiki there is no distinction between the link to a councillor who is in attendance, and the link to one who sent apologies. Now, however, we can annotate the links to differentiate between them. On the text of the wiki page for the minutes there is no obvious difference (other than the summary box at the bottom that shows all the semantic information known), but we now have two extra benefits.
Firstly, every page is now addressable as RDF. These can then be fed into a reasoner, or picked up by a semantic search engine. We’re in the early days of the semantic web so this isn’t really as useful yet as it will be in a few years time. But even now there’s still a major benefit: the internal query facility. As well as a built in “Simple Semantic Search”, you can also dynamically include the results of queries into other pages.
So, by annotating each councillor with links like: “[[Is councillor for::Belfast City Council]]”, we can now auto-generate the list of all councillors. Of course, we were always able to do this if we added them to a Category, but if we extend this with “[[electoral area:=Pottinger]]”. and “[[party member of::DUP]]”, we can pull that data into our resulting table as well.
Thus, our list of councillors page, rather than having to be maintained by hand, is as simple as just “ask”ing:
[[Is councillor for::Belfast City Council]]
[[party member of::*]]
Most of the data in the Nigov wiki still needs to be annotated like this before we’ll be able to generate the interesting reports (how often do councillors attend meetings vs send apologies?), and we probably won’t be able to ask the really interesting questions (“have any councillors attended a meeting that allocated funds to an organisation they’re involved in where they didn’t declare a conflict of interest?”) until there’s a proper reasoning engine underneath, rather than the current SQL model.
But for a little extra work when adding links to a page, we get a pretty good payoff now as well as the potential of even more later without having to do any additional work then. Seems like a good deal to me.