« On message | Main | Current reading »

Using RDF

Robert Sayre commented on my WS stack:

Seriously, why is RDF in there?

RDF is in there, because I know people are using it, but aren't talking about it so much (it's a bit like the problem JXTA/Jini has).

At the moment, RDF works well for "normalizing" content across administrations - in English, creating shareable keys. For example we use RDF:

  1. to help manage reliable delivery over HTTP - each message exchange is assigned a URI and we can make assertions about the delivery state as RDF. As well as that all the messages have their own IDs which are linked to the exchange URI. This is proving extremely useful for tracking.
  2. In a pubsub system to log messages. In this system subscribers have the the option to receive batchs of enveloped messages, wrapped in a envelope - this helps them manage their downloads. Each individual message has an identity, but when one gets swallowed inside a batch it would "vanish" from the audit trail. To track where messages went we used RDF assertions about containership.
  3. I haven't done this yet, but I'm very, very close to writing an RDF n-triples appender for log4j. I have a bunch of components that have identity and I would love to be able to log their activity as RDF instead of eyeballing and grepping through "[time][name][event]" traces to build what is essentially a call graph. If anyone has done this, give me a shout.

I think the problem with "seeing" RDF being used, aside from obvious issues like syntax are:

  1. the lack of a query language that will work outside someone's toolkit or product (tho' RDQL would be my choice right now). At the moment most RDF seems to be about data capture. The W3C are at requirements stage on this, but I'm hoping they don't go off the deep end as happened with the RDF-MT and XQuery.
  2. the fact that most people still are not identifying things in way that can live outside the scope of a single database or filesystem. Everybody is declaring property-value pairs of some kind, but not enough people are using shareable keys identifying the thing the property-value applies to. We're either using pure context (filenames, root elements) or auto incrementing primary keys. The point is we are already identifying things, but not as usefully as we could be.
  3. Uninformed press. I don't see RDF used so much for designing vocabularies or ontological work - the use-cases which seem to get the most press. Certainly that's not what I'm using it for. I've never written an RDF schema for production use.

So for me, RDF is part of the stack. My RDF needs are relatively low level (think operations, systems management) compared to most of the talk around RDF (ontology, content management). It can be summed up as follows - "what is it, where is it?". "Why is it, how is it" isn't on the radar yet. When you use RDF this way, it proves to be cheap and cost-effective - no agonizing about models, no pollution of your XML vocabularies. Just useful data.


April 28, 2004 11:43 AM

Comments

Ken Meltsner
(April 28, 2004 03:43 PM #)

A log4j RDF appender would also facilitate one of the ideas I was thinking about lately -- "smart" logging that doesn't record a lot of detail when things are going well, but retains everything when errors are occuring. Obviously, the filtering has to happen post hoc, but your idea of using a call graph sounds much more effective than mine (which was to simply buffer stuff before writing it out, and to set the filter level based on the number of errors encountered while buffering.)

Robert Sayre
(April 28, 2004 06:52 PM #)

OK, I think I am coming around. It would be great to see an example similar to your second use case.

robert
(May 4, 2004 11:53 AM #)

Would you care to elaborate on your rdf toolset?

Scott Deboy
(May 5, 2004 08:09 AM #)

I believe you can track a call graph using Log4J by storing an entry in the MDC when the first method in the call graph is entered (MDC uses ThreadLocal variables) - maybe assigning a 'componentname' MDC entry to the name of the current component. Events generated by callers will contain the componentname MDC entry when they're appended.

Also, you may want to check out the new version of Log4J's Chainsaw tool: http://logging.apache.org/log4j/docs/chainsaw.html - it can filter & colorize events from a number of sources including text files, sockets, and databases.

Trackback Pings

TrackBack URL for this entry:
http://www.dehora.net/mt/mt-tb.cgi/1270

Listed below are links to weblogs that reference Using RDF:

» That reminds me, I haven't criticised RDF for a while. from Steve: developing on the edge
Brian's article on RDF reminds me: I have been undercriticising RDF. ASCII is data. There is meaning there, but you need to know what it is. XML is information: it is data+structure. And RDF? Well, RDF is about knowledge. All... [Read More]

Tracked on April 28, 2004 01:42 PM

» That reminds me, I haven't criticised RDF for a while. from Steve: developing on the edge
Brian's article on RDF reminds me: I have been undercriticising RDF. ASCII is data. There is meaning there, but you need to know what it is. XML is information: it is data+structure. And RDF? Well, RDF is about knowledge. All... [Read More]

Tracked on April 28, 2004 01:42 PM

» Using RDF from Lost Boy
Nice article from Bill de hra about why he's using RDF and the advantages of doing so. This reminds me [Read More]

Tracked on April 28, 2004 03:32 PM

» Bill's stack and RDF logging from Raw
A couple of days ago Bill de Hora suggested an alternative to the ever-expanding WS stack comprised of technologies already... [Read More]

Tracked on April 29, 2004 11:39 AM