In response to my post yesterday on using XRIs for “open tagging”, Darren Chamberlain had this comment:
I wonder why simply using urn: URIs is not sufficient to identify a tag. From your example, the Thai tag could be:
<a href="urn:tag:thai" rel="tag">Thai</a>
Tag-aware services such Technorati could simply extract these URIs and treat them like appropriately. (I haven’t seen anyone suggest using urns for tags, although I would be surprised if someone hasn’t already thought of it.)
Darren’s point is well taken, and indeed one of the most frequent questions about XRIs is “how do they differ from URNs?” The short answer is that although they don’t use the “urn:” scheme name or scheme format, XRIs are effectively a superset of URNs. To quote directly from the XRI Syntax 2.0 Committee Draft specification:
Although an XRI is not a Uniform Resource Name (URN) as defined in URN Syntax [RFC2141], an XRI consisting entirely of persistent segments is designed to meet the requirements set out in Functional Requirements for Uniform Resource Names [RFC1737].
I could go on at great length about the differences between XRIs and URNs, but the easiest way to sum it up is that URNs were designed to meet the requirements for a specific type of abstract identifier — one that is persistent for all time and will never change — while XRIs are designed to satisfy the requirements for all types of abstract identifiers, both persistent and reassignable.
That means XRIs offer several additional features that URNs don’t, such as:
- Synonyms. The XRI resolution protocol has explicit support for identifying the other XRI synonyms (either persistent and reassignable) for a resource.
- Global context symbols (GCS). XRIs support five standard symbols that extablish the global context of an identifier authority (for example, “+” is the GCS for generic concepts, i.e., the “dictionary” or “tag” space).
- Cross-references. XRIs offer syntax that allows any XRI (or a URI) to be expressed in the context of another XRI. I gave an example of this in the previous post where I showed how an open tag could be expressed either in a global context (first example below) or in the context of a specific dictionary authority (second example below).
- Generic, extensible HTTP-based resolution protocol. While some URNs do not need to be resolvable (such as ISBN numbers, in many cases), others do. But there is no generic URN resolution protocol — only specialized resolution protocols for specific URN namespaces. Thus if we wanted to create a “urn:tag” namespace and it needed resolution (and there are many good reasons you may want to resolve a tag), then it would mean defining yet another URN resolution protocol. XRI infrastructure solves that by providing a generic HTTP-based resolution protocol that is extensible to the many different types of metadata and services that one might want to associate with an abstract identifier, and which will work for all XRIs, not just URNs.
<a href="xri://+thai" rel="tag">Thai</a>
<a href="xri://technorati.com/(+thai)" rel="tag">Thai</a>
So, while Darren is absolutely right that URN syntax could be used for open tagging, XRIs are (in my highly biased opinion) even better suited for the job.