finally a bnode with a uri

RPointer - The resource described by this XPointer element

URIs for resources described in microformatted or poshRDF'd content
I'm often using/parsing/supporting a combination of different in-HTML annotations. I started with eRDF and microformats, more recently RDFa and poshRDF. Converting HTML to RDF usually leads to a large number of bnodes or local identifiers (RDFa is an exception. It allows the explicit specification of a triple's subject via an "about" attribute). Additionally, multi-step parsing a document (e.g. for microformats and then for eRDF) will produce different identifiers for the same objects.

I've searched for a way to create more stable, URI-based IDs. Mainly for two use cases: Technically, for improved RDF extraction, and practically for being able to subscribe to certain resource fragments in HTML pages, like the main hCard on a person's Twitter profile. The latter is something I need for Knowee.

The closest I could find (and thanks to Leigh Dodds for pointing me at the relevant specs) is the XPointer Framework and its XPointer element() scheme, which is defined as: ...intended to be used with the XPointer Framework to allow basic addressing of XML elements.
Here is an example XPointer element and the associated URI for my Twitter hCard:
element(side/1/2/1)
http://twitter.com/bengee#element(side/1/2/1)
We can't, however, use this URI to refer to me as a person (unless I redefine myself as an HTML section ;-). It would work in this particular case as I could treat the hCard as a piece of document, and not as a person. But in most situations (for example events, places, or organizations), we may want to separate resources from their respective representations on the web (and RDFers can be very strict in this regard). This effectively means that we cant use element(), but given the established specification, something similar should work.

So, instead of element(), I tweaked ARC to generate resource() URIs from XPointers. In essence:
The RPointer resource() scheme allows basic addressing of resources described in XML elements. The hCard mentioned above as RPointer:
resource(side/1/2/1)
http://twitter.com/bengee#resource(side/1/2/1)
There is still a certain level of ambiguity as we could argue about the exact resource being described. Also, as HTML templates change, RPointers are only as stable as their context. But practically, they work quite fine for me so far.

Note: The XPointer spec provides an extension mechanism, but it would have led to very long URIs including a namespace definition for each pointer. Introducing the non-namespace-qualified resource() scheme unfortunately means dropping out of the XPointer Framework ("This specification reserves all unqualified scheme names for definition in additional XPointer schemes"), so I had to give it a new name (hence "RPointer") and have to hope that the W3C doesn't create a resource() scheme for the XPointer framework.

RPointers are implemented in ARC's poshRDF and microformats extractors.

Comments and Trackbacks

I believe the same can be achieved with a 303 redirect service

http://thing-described-by.org?http://twitter.com/bengee#element(side/1/2/1)

even if you'd rely on a centralised service and have ugly URIs

(how can I point to the discussion we had on twitter?
Comment by Laurian Gridinoc on 2009-01-17 15:43:50 UTC
Laurian,
a redirection service doubles the instability: once for the XPointer, and once for the service. And the centralization is basically a show-stopper.

Re Twitter: Search results
Comment by Benjamin Nowack on 2009-01-17 16:24:24 UTC
this is really nice, in Any23 we had the same issue (i.e. how to decouple parsers for different formats but keep the output synced) and we used blank nodes with canonicalized names as non-ambiguos XPath, which is more or less the same thing.

I was not familiar with the #resource trick in xpointer but it looks extremely appropriate, I think I'll go and copy you :)
Comment by gabriele renzi on 2009-01-18 23:57:34 UTC
0 comments are currently in the approval queue.

Comments are disabled for this post.

Archives/Search

YYYY or YYYY/MM
No Posts found

Feeds