The Discovery Protocol Stack

The new discovery framework, commonly referred to as XRD, has been designed with strong support for modularity and re-usability. This of course, adds complexity as each component of the protocol stack has its own specification (and standardization venue). At this point, all the components except for XRD have a draft specification available. The good news is, that the XRD spec will directly incorporate everything you need to know about the other layers to use it.

The web is made out of links. But unlike what most people think, links are more than just markup in hypertext. They are one of the most fundamental web architecture building blocks, and we are just starting to fully appreciate their usefulness. In my previous post on redefining discovery, I explained why the current discovery framework described by XRDS and used by OpenID is problematic.

The new XRD protocol stack includes three layer, each useful on its own:

Discovery Stack

Discovery tries to answer two questions:

  • Given a resource (identified by a URI), where can I find information about it?
  • What format is this ‘information about’ in? How do I make sense of it and use it?

Looking at the protocol stack, the bottom two layers (Links and LRDD) answer the first question (where) and the top layer (XRD) answers the second question (how). Let’s take a look at each layer and what it provides:

  1. XRD – the Extensible Resource Descriptor is a simple XML-based schema for describing resources. The schema has a two-sections architecture where one describes the resource itself and the other describes its relationships to other resources. For example, the self describing section can include information such as which API version the endpoint supports, while the relationships section can indicate where to fine the address book of the person associated with the resource. On its own, XRD is mostly a schema, a document format, which can be obtained in many ways. For the use cases we focus on today such as OpenID, OAuth, Portable Contacts, OpenSocial, Activity Streams, etc., LRDD will be the primary delivery method.
  2. LRDD – the Link-based Resource Descriptor Discovery protocol (pronounced ‘lard’) is a collection of three link methods and a common relation type (‘describedby’). Together they are used to associate a descriptor to the resource it describes. In our focus, the descriptor format is XRD, but LRDD can be used with any other descriptor format such as POWDER (which in fact uses a subset of LRDD already). LRDD replaces the methods described in Yadis, by providing more standards-friendly substitutions.
  3. Links and /host-meta – the third layer includes a subset of the link framework. It consists of existing protocols such as the HTTP Link header and HTML <LINK> element together with a new ‘well-known-location’ solutions called /host-meta. The links layer provides a way to associate resources, for example, a web page with its stylesheet.

The next few posts will explain each component in detail.

10 thoughts on “The Discovery Protocol Stack

  1. I am not sure it helps. I am not a fan of attempting to construct a discovery stack for the entire web. I think the use cases and competing technologies have a long way to go before we can actual promote them at this level.
    I for one, am not sold on the whole RDF universe of specifications. I find it all very complicated and academic. It doesn’t make it bad, just not suited for my needs. And this is not an invitation for discussion… 🙂
    Note that this post is about the XRD protocol stack, not a generic discovery stack. It is very specific to the protocol I am building. And XRD is very specific to the use cases I am trying to solve.

  2. Hi,
    I was trying to install php-xrd. I downloaded the package, unzipped it but figured out that the class path has some problem. Do you have a complete working version that I can download and play with it. I am a new to this XRD domain. But very much interested. Can you give me a some hint to way out? I appreciate your help. Eagerly waiting to hear from u.

  3. Abdur: As of right now, that library is non-functional. It will eventually be a full XRD implementation in PHP, but I haven’t sat down to work on it in a while, and it’s got a little ways to go.

  4. Eran,
    A tiny heads-up: we are currently working on ULDis (Universal Link DIScovery client) where LRDD plays, as you might imagine, a central role. We have now a very early LRDD processor written in Java [1] and a test service [2].
    My colleague Juergen [3] is the mastermind behind this and we are looking forward to keep you up to date …

  5. This is great news! Keep in mind that both LRDD and /host-meta are about to go a pretty significant revision in the next few weeks so stay tuned. I will update this blog when details are clear.

Comments are closed.