mark nottingham

We need WikiVerbs!

Friday, 9 May 2003

Semantic Web

Before, I was wondering about the intersection of Wikis and the Semantic Web. I’ve since done some noodling and prototyping, and the idea came together on the train home tonight.

You can build some semantics using just WikiNames. For example, let’s say you have a Wiki about your company’s products. If you have a line of widgets that are different colours, you could create a WidgetProduct WikiName and use that term on all of the pages that describe the different types of widgets, so that the BlueWidget, RedWidget and GreenWidget pages all contain the WikiName WidgetProduct.

In this manner, you can use the magic that most Wikis have to figure out which pages link to the WidgetProduct WikiName, and therefore have a list of all of your WidgetProducts. In my Wiki of choice, MoinMoin, it’s the [[LinkedFrom]] macro (I believe you have to install it seperately).

In n3, this is approximately (forgive me if my n3 is a bit rusty);
:BlueWidget a :WidgetProduct .
:RedWidget a :WidgetProduct .
:GreenWidget a :WidgetProduct .

Neat!

The problem here is that you’re effectively limited to the ‘a’ predicate. We can’t say :BlueWidget :numberSold “15” or :GreenWidget :designer :Bob.

I’ve played around with this on a private Wiki and the results are promising; there is a certain amount of kludging one can do by minting “VerbNouns”; for example, you could create a WikiName called BobDesigner and only use it on pages to denote that Bob is the designer of that subject. I even wrote a macro to take advantage of this; if you have a number of WikiNames with a common suffix (e.g. BobDesigner, JoeDesigner, JaneDesigner), it can find the relevant pages and build a table summarizing the WikiNames that contain those terms. It works fairly well, but still can’t characterize predicates with variable objects (e.g., :numberSold “15”).

Enter what I’d like to call WikiVerbs. Since WikiNames are effectively nouns (and therefore potential subjects and objects), we need a syntax that denotes a predicate, and more importantly links a WikiName to a object - either another WikiName or a literal.

I think that in traditional Wiki fashion, there are a number of viable ways to express this, depending on the circumstances. Most of the scenarios I have in mind right now would use the containing page as the subject, a special syntax to denote the WikiVerb, and some delimited text following the WikiVerb as the object. For example, you might use something like these alternates (each of which denotes a WikiVerb by surrounding it with colons):

*:WidgetDesigner: BobJones # object is a WikiName
*:WidgetDesigner: “Bob Jones” # quote-delimited object
*:WidgetDesigner: Bob Jones # everything after the WikiVerb to the newline

I think this is potentially a REALLY nice sweet spot. There would be a lot more to it, of course (I think I can see WikiVerb macros that would allow some pretty cool inference tricks), but the basics are there.

Who wants to help code? :)

DISCLAIMER: I’m a relative Wiki newbie and haven’t really played with Semantic Web for over a year, so what do I know?


3 Comments

Doug Ransom said:

I have been thinking the same thing. It really comes down to hyperlinks needing a role (like the use of xlink in RDDL).

This would allow the automatic creation of concept maps from web pages (wikis in particular, but this could work with arbitarary pages or corporate weblogs).

http://www.c2.com/cgi/wiki?ConceptMaps

Saturday, May 10 2003 at 8:47 AM

Rainer said:

@doug: The link has moved to http://www.c2.com/cgi/wiki?ConceptMap

Friday, December 26 2003 at 5:31 AM

Rainer said:

@doug: The link has moved to http://www.c2.com/cgi/wiki?ConceptMap

Friday, December 26 2003 at 5:38 AM