OpenURL 1.0 for Reptilian Brains
"And now for something entirely different." Jeff Young has been trying to convince people to use OpenURL 1.0 where it is appropriate (and maybe a few places where it's not so appropriate but that isn't the case here), with little success. Here's his late-night-rant trying to explain it one-more-time to people-that-just-don't-get-it (lightly edited for family viewing):
OpenURL 1.0 for Reptilian Brains
According to conventional wisdom, OpenURL 1.0 is unnecessary and/or too complex for certain needs. I intend to refute both notions.
"After all, it's hard to argue against the reptilian brain"
If you read this article and respond with "OK, but what about ContextObject Representations, Referring Entities, and yadda yadda yadda", it is irrefutable proof of a reptilian brain at work. Start over. Forget everything you (think you) know about OpenURL 1.0. Everything. Kill the Buddha! If it's not mentioned here, chances are excellent that you shouldn't care.
What is OpenURL good for?
OpenURL provides a simple, common, URL convention for invoking web services. Services built using these conventions can be mixed and exploited by others in innovative ways that you can't possibly imagine. I'm serious. If you choose to invent a new protocol knowing that the conventions described here would work perfectly well, you are willfully denying the world of this wondrous potential for interoperability and will surely be ostracized from the "Plays Well With Others" club.
What are the significant limitations of OpenURL?
OpenURL is a machine-to-machine interface. As shown below, the URLs aren't difficult to construct, but their general dependence on URIs makes them unwieldy for human consumption. Actually, the human-to-machine factor isn't as significant as it might appear, but that's a different story.
How simple is "simple"?
Here is an example of a request that is 100% OpenURL 1.0 compliant:
Ignore the result produced by this particular example. As OpenURL service providers, you and your cohorts get to decide this for yourselves.
What does this mean?
- "http://alcme.oclc.org/wikid/resolver" refers to the location of a web service
- "url_ver=Z39.88-2004" is boilerplate and as far as you care it means nothing. Nothing. Servers can safely ignore it. Trust me on this. No, really, trust me. You're not listening. IGNORE it. TRUST ME! IEEEEEEEEE! Alright, alright, alright! Imagine your URL as a needle in a haystack. Now imagine url_ver as a billboard attached to that needle. Now imagine creative people being able to easily locate and use your URLs in strange and unexpected ways! All it costs you is this little bit of boilerplate.
- "rft_id=..." represents the resource you are interested in. Imagine you want to provide a web service for ISBNs. Consider the multitude of ways various service providers currently do this:
- Amazon: http://www.amazon.com/exec/obidos/tg/detail/-/020530902X/
- B&N: http://search.barnesandnoble.com/booksearch/isbninquiry.asp?ISBN=020530902X&pdf=y
- Open WorldCat: http://worldcatlibraries.org/wcpa/isbn/020530902X
- xISBN: http://labs.oclc.org/xisbn/020530902X
- Oregon State Library: http://oasis.oregonstate.edu/search/i?SEARCH=0024182001
- Columbus Metro Library: http://webpac.cml.lib.oh.us/cgi-bin/wpnm1156.shtml?user_sys=0&user_locn=730&bookbag_number=0&input=4&searchstring=020530902x
Why does everyone do this differently? It's a full-time job for someone at OCLC to decipher these kinds of systems so we can use them in clever ways. Imagine the possibilities for interoperability if everyone encoded the ISBN in an rft_id parameter instead!
Why call this field "rft_id"? Why not call it "uri" or "foo" instead?
It's a small price to pay for the all the benefits of OpenURL compliance. Someday you'll understand. In the mean time, <text deleted /> deal with it.
"rft_id" means "Referent Identifier". This tells the web service the identity of the resource your request refers to (e.g. an ISBN). This is an awkward way to say something that should be obvious. We can all agree that the label "rft_id" is as ugly as sin. It's aesthetics were obviously inspired by a carburetor. From a mechanic's perspective, however, the beauty is sublime. You bolt it on and off you go. Without it, you're parked. (updated 6 March 2006).
But what about Context Objects, Transports, and yadda yadda yadda?
Reptilian Brain alert! Here is some pseudo-code for a 100% compliant OpenURL 1.0 resolver:
servlet(args) {
write 'Hello ' + args['rft_id']
}
Now, go back to the beginning of this article and start over.
Call now!
For the low monthly fee of url_ver and rft_id, you will not only organize your own default services for known items but win the praise and patronage of friends, neighbors, and complete strangers too! But wait! That's not all! Call in the next 10 minutes, and receive free... FREE!... 12 great attachments to do the dishes, mow the lawn, take out the garbage, and much MUCH more! Our operators are standing by!
Ring Ring Ring
Hello?
Hi, I want to order OpenURL 1.0, but I don't want the free dishwashing attachment.
No problem.
Great. But that leads to another question. If you don't send me the attachment, how will it do my dishes?
IEEEEEEEEEEEE! <thump/><thump/><thump/>
Note by Th: Another page in a similar vein from what is now part of OCLC: Idiot's guide to Implementing OpenURL 1.0 for Journal Articles

Well? How will it do my dishes? Because they're really stacking up.
Posted by: Ross | March 03, 2006 at 09:36
Struggling to be fair here, OpenURL is a great standard, but you just cannot tell coders "just do this! don't ask!", a good coder will ask why and read on.
It's never easy to fight with human nature, such as curiosity.
Posted by: a | March 03, 2006 at 15:52
I've had a long day and my brain has stalled... you give several examples from Amazon and barnes and noble and etc etc of their clunky URIs, but -err - what would each of these look like if they were all using rft-id??
today's been too long, and i don't see the recipe in your post.
would amazon be something like
http://www.amazon.com/openURL?rft_id=isbn:020530902X
Ring ring
Hello?
Hi- I was going to write a simple rewrite rule to let me write an openurl style isbn query to my ouseful redirects site (http://ouseful.open.ac.uk/redirects.php)
that woud then look the book up on my employer's library catalogue, but err - I can't find a simple example of what it would like...Your post mentioned ISBNs, so I thought it might give an example?!
;-)
Posted by: Tony Hirst | March 03, 2006 at 16:34
Regarding an ISBN example, I gave an example using an OCLC number because I have such a service running already. Here it is again:
http://alcme.oclc.org/wikid/resolver?
url_ver=Z39.88-2004
&rft_id=info:oclcnum/53942578
The ISBN equivalent (pretending for a second my resolver handled ISBNs the way it handles OCLC numbers) would look like this:
http://alcme.oclc.org/wikid/resolver
?url_ver=Z39.88-2004
&rft_id=URN:ISBN:0395363411
(BEWARE: Firefox likes to truncate the display of these URLs for some bizarre reason. Click on them, or something, to see them in their entirety.)
Posted by: Jeff Young | March 03, 2006 at 17:00
Please bear with me here -- I have a few long-winded questions.
First, is there a link to the original what is a "reptilian brain"? No, seriously... the analogy completely escapes me. Is that basically Jeff Young's expression of frustration that developers won't scramble to adopt OpenURL because they don't understand the benefit? Because so far, most of the explanations -- this blog post being one of the glaring exception -- have been so devoid of practical examples or explanations. And I don't think anybody is going to spend much time on it until they make it easier for people to understand... which, yes, means catering to us lowly people who don't yet "get it".
Second -- as a web programmer who has never created a web service before, I still don't understand how OpenURL is useful to my employer. I'm interested, but I need more practical examples of how OpenURL can be used to improve what I'm currently doing, or add something new to the equation. The section you wrote ("What is OpenURL good for?") alludes to it, but gives no examples... can you please elaborate a bit?
I'm sure I'll have other questions, but those are my two big ones for now.
Posted by: Tek Boy | June 06, 2006 at 11:42