Has anyone here tried using the Tag URI scheme as an alternative to blank nodes? If so, could you tell me of any advantages/disadvantages/gotcha/victories?
The practice of replacing blank nodes with URIs is known as “skolemization” in the RDF world. It is discussed quite often in various places.
As long as you create a “fresh” URI that hasn't been used anywhere before, it is ok to skolemize blank nodes.
Many triple stores actually do this internally. Some use an
urn:uuid:xxx scheme with a UUID, some use a made-up (not official)
bnode:xxx scheme. Tag URIs would be a good solution as well, because they help with ensuring uniqueness.
The practice of skolemization is also being discussed in W3C's RDF Working Group. The group is likely to include some recommendation for this practice in a future document. In the WG, this is known as ISSUE-40. It's possible that the group will also define a special URI scheme for this kind of URI, and/or recommend the use of tag URIs, and/or (perhaps most likely) recommend the use of a special
.well-known namespace. So in the future, the official recommendation might be to use URIs such as
http://your-host/.well-known/skolem/xxx if you want to avoid blank nodes.
A problem with skolemization is that it can create the false impression of stability and permanence for the URIs you use instead of blank nodes. Users of your data might be tempted to use your tag URIs in their own data with the intention of referring to the same object. But how long-lived are those URIs? Will your publishing system arbitrarily change them when the data is updated, for example?
If you can ensure stability of the tag URIs (or don't mind some broken links), then I think the use of tag URIs instead of blank nodes is a perfectly valid modeling technique.