Johannes Ernst's Blog [XML]  [LID]

Clarifying XRI Resolution

Thanks to some intense e-mail exchanges with Drummond Reed, CTO of Cordance, I now understand much better how XRI resolution works. With his permission, I'm blogging some of the highlights, in the hope that it will be useful for others as well:

Johannes:

Where in the OASIS docs does it say how one gets from an =example XRI to an http://xri.net/=example URL? Or should it be https://xri.net/=example?

Drummond:

In XRI Resolution 2.0 Working Draft 10, the overall definition of http proxy resolution are in section 7. That's where it specifies using a "xri.*" DNS prefix, either as a second level domain (of which there are a fixed number), or any third- or lower-level domain.

XDI.org registered xri.net to serve as the domain for its public XRI proxy resolution network, which is the only publicly supported XRI proxy res network that I know of so far ... companies can run their own.

The XDI.org XRI proxy resolution network specs are part of the XDI.org Global Services Specifications (GSS). Specifically they are section 5.1 and 5.3 in this PDF.

Hope this helps.

Johannes:

Right document, wrong version! (in which I looked) Thanks!

But now I'm more confused. (Sorry.) I had been working under the assumption that, say =Drummond or any other XRI would be a globally unique identifier. Is it? What you seem to say is that, say, Boeing, could define it to mean something else. Am I correct about that?

Drummond:

No, =drummond is a globally unique identifier. The power of XRIs (and XRI proxy resolution) is that globally unique XRIs can be syntactically understood in the context of OTHER globally unique XRIs (or URIs).

For example, when it comes to proxy resolution, every XRI proxy resolver works the same way. The formula is:

[http: / https: ] xri.* / qxri

The combination of the above is called an HXRI (HTTP XRI), and it consists of putting an http proxy resolver prefix in front of an XRI (called the "query XRI" or QXRI).

The XDI.org proxy resolver network responds to either http://xri.net or https://xri.net (the only difference is the access protocol).

So the following two are equivalent:

http://xri.net/=drummond.reed
https://xri.net/=drummond.reed

In both cases, the xri.net proxy resolver is simply resolving the XRI =drummond.reed and returning the result.

If a company brings up their own XRI proxy resolver service at xri.example.com, and offers both http and https, then it too can resolve =drummond.reed, and should return exactly the same result. In that case, all four of the below are equivalent:

http://xri.net/=drummond.reed
https://xri.net/=drummond.reed
http://xri.example.com/=drummond.reed
https://xri.example.com/=drummond.reed

In all four cases, the same globally-unique XRI is being resolved: =drummond.reed. The only difference is the XRI proxy resolver you are asking, and what protocol you are using.

Johannes:

Thanks for your patience in this.

So where does it say that all XRI strings must resolve to the exact same information, regardless which resolver is used? (And I think this must be a 'must', otherwise I don't see how the identifier can be globally unique?)

Drummond:

It says that in the XRI Resolution 2.0 Working Draft 10 spec, however in section 7.7 it points out:

7.7 Differences Between Proxy Resolution Servers

An XRI proxy resolution request may be sent to any proxy resolver that will accept it. All XRI proxy resolvers SHOULD attempt to deliver uniform responses given the same QXRI and input parameters. However because proxy resolvers may potentially need to make decisions about network errors, reference processing, and trust policies on behalf of the client they are proxying, and these decisions may be based on local policy, in some cases different proxy resolvers may return different results.

This is just reality -- the same thing can happen in DNS. The point is that that XRI resolvers always SHOULD do this even if they can't enforce perfection.

Johannes:

Ah, now I'm beginning to understand this. Just like I can set up a DNS server that returns different results than an "official" DNS server would ("don't do this at home, kids"), one could set up an XRI resolver that did something different, but it is frowned upon and might have bad consequences.

Then from a logical perspective, there is only one XRI resolution service. On a networking level, there are many for reliability, distributed processing etc. etc. kinds of reasons. All of which ultimately delegate to the central repository (which in turn may delegate).

The consequence is that it really doesn't matter which instance of the resolution service I resolve against, as long as I'm okay with the QoS that I'm getting from them. And if XRIs were to become as ubiquitous as DNS, then all sorts of funny policies would be implemented that would force people further out at the edges to use services close to them instead of everybody always going to the root servers.

Do I have it right this time? ;-)

Drummond:

Yes, you got it -- with the exception that we're hoping it's not so much "funny policies would be implemented that would force people further out at the edges" rather than good OpenXRI code that caches efficiently plus the inherent advantages of persistent i-numbers (which will appear primarily as CanonicalID values) that will not need to be looked up as often as DNS, where all the identifiers are reassignable.

In many ways, XRI infrastructure is DNS done at a higher layer -- a layer truly designed for the requirements of identity services rather than just host naming. The members of the XRI TC took about 18 months to arrive at that conclusion, and now that it's up and operating, it's a lot easier to start to share that worldview.

Since we have to start to produce a new round of XRI education/ evangelism documents this fall as we finish the XRI 2.0 suite, please do tell me if you have suggestions as to how we can better communicate about it. Many of us on the TC are WAY too close to it ;-)

Well, here is suggestion number 1: I blog it. I'm hoping it helps others to understand this as well. Many thanks, Drummond, for educating us!!

[permanent link]    Add to [del.icio.us