Recently I was interviewed for a podcast episode that might (hoping it indeed is published! [Updated 2/16, 5:30pm: yep, and here it is, and there goes the news about my new job...]) soon be heard by a lot of people. The topic was OpenURL, and why it's both so exciting and so frustrating to everyone who dives down into it.
I've been particularly frustrated with OpenURL lately. Just when efforts like COinS are starting to pay off (c.f. new Wikipedia cite templates, worldcat.org, new Wordpress plugin from Zotero, Zotero itself, and LibX), it feels like the door to wider use and acceptance of COinS specifically and OpenURL in general remains welded shut.
Don't take this the wrong way - I remain a huge OpenURL fan, including the whole vision that led to the ANSI/NISO Z39.88-2004 standard, even if that standard turned out to be way too complicated. I've been a fan of this way of doing things since we added multiple linking paths to the now-defunct jake project in early 1999, so we could link users from bibliographic references on the web into the books and journal articles the way your library has best set you up to do so, in pretty much an OpenURL-0.1-compatible way, even before we ever heard about OpenURL. (It was, after all, obvious to have a bunch of HTTP GET fields with names like [title, spage, volume, issue, issn, etc.].)
And I'm not saying we need to do away with OpenURL. I think instead that we need to recontextualize what it is we think OpenURL is for, and to do so in a way that focuses on the common use case of service linking on the web today. And I think we need to avoid dogmatic adherence to the Z39.88 standard, since we all mostly think it's overwrought anyway.
Let me try to explain it this way. Have you noticed those little clusters of links next to stories at NYTimes.com, or at the end of blog posts, or in reference databases, or on journal sites? These little blocks of links are popping up all over the place. What they are, in general, is "a list of the functions you can do from here, given the thing you're looking at now, depending on who you are."
New York Times service links.
Blyberg.net weblog service links.
Pubmed.gov service links.
JAMA service links.
Citeseer service links.
Google Scholar service links.
This, my friends, is dynamic service linking, in a nutshell.
(And, yes, I do mean "in a nutshell" as in "ooh, ooh, help, I'm trapped in a nutshell, get me out of here.")
I believe that this analysis maps *exactly* to the vision for OpenURL specified in the documents that led up to the ANSI/NISO Z39.88-2004 standard that nobody can actually read. They nailed it - they knew this was coming, and they were right, and here it is, all over the place, on the most popular sites on the web.
But there are two major problems with this analysis.
First, all of these diverse sites publishing useful service links for their own materials have *no* idea that I'm a Yale University person and that *my* library's OpenURL resolver is over here, yes, please, thank you very much. This means that there's no public, cross-site workflow for getting out from most of these sites' own concepts of what "context-sensitive links for me for this content object" what mean back into what Yale's library thinks should be useful links for me. Nor is there a clear workflow for me to get back out from a Yale resource to these online, not-at-Yale items. This is a fatal flaw in the current state of how we both conceive of and implement OpenURL solutions in libraries today (which is to say, not a fatal flaw in the model, just how we use it now).
Until we address this flaw in our current thinking, and bring this wider world of web resources and their own notions of service links and our traditional, more narrowly defined research library workflows into some kind of common system, we'll never see the full vision of OpenURL realized.
Secondly, and this is perhaps a bit less practical, but no less important, but I think the notion of "context-sensitive" linking does itself have a basic flaw. If you've studied finite automata or linguistics and know what language parsing is all about, "context-sensitive" might ring an alarm for you. "Context-sensitive" grammars tend to be significantly computationally harder to work with than "context-free" grammars. (If you're not familiar with this distinction, see the Wikipedia entry for Chomsky hierarchy.) Do you know how the "natural language query" problem remains mostly unsolved? Well, think about the difference this way - most human languages are context-sensitive, whereas most computer programming languages are context-free.
What we've done with the OpenURL model and how we use it in libraries today is to design a standard around our unusual, more complex cases (dealing with weird bibliographic references). The workflow we have applied to OpenURL is context-sensitive in that the publisher needs to recognize my network address, and needs to then redirect to my institutional resolver, and that our institutional resolver needs to be pre-configured with our holdings information, and the outgoing links from our resolver needs to be aware of my network address again as I go out there to get the thing I wanted in the first place. Without all of this preceeding context-setting, the workflow breaks, so our context-sensitive worldview simply requires all of it.
In the meantime, sites applying the more common, simpler cases (dealing with web links) have essentially adopted the entire OpenURL model but without so much as saying so. That blog engine doesn't care what my network address is, and doesn't know whether I have accounts at the endpoints of the digg and del.icio.us links at the bottom of the blog post. It'll send me there just in case I do, and at the moment of need, just in time, if I need to identify myself to digg, or to whatever the target link might be, I will, if I have an account. But not before. Digg doesn't need to know that I'm a TimesSelect subscriber. The New York Times doesn't care that I use unalog, not del.icio.us. This whole scenario does not depend upon - and thus performs none of - the context-setting of our library research and licensed resource workflows.
The computational aspect of it doesn't bail out if you don't have a del.icio.us account - del.icio.us just doesn't let you in, but I can still get there if I want. In the heavier-weight scenario, I can't even figure out where I might want to go through my OpenURL resolver if my institutional context isn't sniffed out by the original remote resource, because I never even get to the OpenURL resolver in the first place.
I think I'm starting to see a better way to address all of this. This post is already pretty long, though, so I'll just state the objective for now.
The goal of rethinking OpenURL, I think, should be to reimplement the same original OpenURL model of dynamic service linking as - in the typical case - a context-free workflow. The instant we do that conceptually, we see how unified all of this really could become. It gives us librarians something to offer the nytimes.coms and diggs of the world: a singular framework for mixing and mashing service links for diverse sites independent of who we all are and what we know about each other.
Then, to address the more complicated context-sensitive research workflows we hold so dear, we simply define a context-free way to hook into that workflow, so if some arbitrary transaction needs it, it can hand us over into it, but *not* until we have to have it.
I'm not sure who said it first, but there's a librarianly spin on the old Perl paradigm I think I heard at code4libcon or Access in the past year: instead of "making simple things simple, and complex things possible," we librarians and those of us librarians who write standards tend, in writing our standards, to "make complex things possible, and make simple things complex."
That approach just won't cut it anymore.
Coming soon: a concrete way forward.






One of the biggest problems
One of the biggest problems with our current standard Open URL implementations is how the user needs to click on a "Link Resolver" ("Find It", "Get It" whatever) link to see what services are available to her. Or, in the common library case, to see if full text is available.
It's noteable that none of your examples of "open url like" service link groups have this limitation---they all put the service links _right there_, in front of the user. No need to click on a link and wait for a slow page to load to find out what your service links are.
I presume that your idea for a new approach will (attempt to) solve this problem also? Having to click on a link and then wait for a new page to see what services are available--is no good.
I agree
Jonathan, you're totally right - we can do a lot more right inline these days, and several groups are working on it. (Not that I will take this opportunity to shamelessly plug OSU's LibraryFind project outside of parentheses, though.)
I don't know about solving the problem entirely - in the complicated research workflow I think there's always room for (and a real need for) asking users what they want and showing them all the options. But, that doesn't mean we shouldn't just give them the best links right away if at all possible.
But anyway, yes, I hope that some of the new approach will help make it easier to solve this problem in a way that makes sense for different users in a more diverse array of contexts.
openid & foaf?
I have been a fan of FOAF for broadcasting affiliations for some time but I am wondering if the possible linkages with openid might give FOAF some traction. Tim Berners-Lee talks about this in his blog. If the URL for openid could point to a FOAF-enabled web page, it might be an opportunity to indicate a membership in the Yale campus community, for example.
I think I see where you're
I think I see where you're going with this, Art, and though you know I've always been a bit skeptical of FOAF I'm more agFOAFstic than aFOAFist. There's definitely a "network location hole" here, and OpenID seems to be a useful shovel for filling that hole.
Have you started working with OpenID at UWindsor? I have some apps sketched out with it but I haven't started anything yet, so it's still just a whiteboard tool for me cognitively, though I trust it does indeed work.
just a bit
I have an OpenID that i have used with livejournal, and have logged on once or twice with it on campus, if that counts :-) We worked on a shibboleth project this summer and OpenID would hit a lot of the same bases if something like the eduperson attributes set, which shibboleth supports, could be folded in with OpenID. It doesn't have to be FOAF that fulfills this role, but it would be great if something was a candidate for this in connection with OpenID, and Tim BL's endorsement might help with getting it adopted.
context
Just a little note to point out that "context" in OpenURL is about more than just "which institution you are from". The definition of "context" was based on experience gained with OpenURL 0.1 deployment that showed that, in addition to the Referent (the entity that an OpenURL service request is about) there was a need to convey information about other entities involved in a service request. Of those, the Requester (who is asking), and the ServiceType (what is being asked for) are probably the most important. There are five such entities in addition to the Referent; together they make up what is called "context" in the OpenURL Standard.
So when you refer to "context", you really refer to the Requester part of the "context", and, as indicated by art in the above, approaches such as OpenID would fit in very nicely in that slot. So, while I agree that the OpenURL Standard is largely unreadable (who was going to write that Dummies Guide again?), I do think it is kind of nice to see that the standard was sufficiently forward looking that a technology such as OpenID could readily fit in.
Oh, and BTW, it is possible to specify truly simple OpenURL Applications based on that complex OpenURL Standard. Applications that require 1 page to describe; the way you like them.
Thanks for reading this and
Thanks for reading this and writing in, Herbert. I think you might be missing my point, though, and I don't want to get caught up in the specifics of the spec as it stands, because whenever we debate that it doesn't get us anywhere new. :)
I get that context is about much more than "where you're from", and have nothing to argue about that or what's possible with the OpenURL spec, or how forward-looking it was (indeed I pretty much said exactly that, that your model and the spec were both very forward-looking). My point, though, is that dynamic service linking is *bigger* than our context-sensitive workflows. By anchoring our collective vision and implementation on this more heavyweight vision of context-sensitive patterns, we are missing out on a huge opportunity to unify how everybody else on the net is already doing context-free linking with our context-sensitive linking. I think that it would be a big mistake to miss out on that opportunity.
All of that allows that everything we're doing now already can continue working mostly the way that it already does. But if we want to unify things (and I'm arguing that we do), we have to take a broader view. There are conventions we can design and adopt that can both allow for a bit more integration across these context-free patterns and also allow for us to inject our context-rich workflow when needed, whether with OpenID or whatever other mechanisms make sense. If you might agree that that's a valid goal, then I think that to try to impose the heavier context-sensitive model onto all the services already doing context-free service linking would be to doom ourselves to failure.
I don't think I missed your point
Because the point I was trying to make is that the existing OpenURL Standard is what it is because we wanted to enable all that you talk about (simple) and more. The more is where the standard got complex. But, as I said, it should be really easy to use the existing standard as the basis to define simple profiles.
We do such simple stuff with OpenURL on a daily basis in our LANL aDORe OpenURL Resolver, which is the protocol front-end to a repository that stores approx 100,000,000 objects. Our OpenURLs look like this:
baseURL?
url_ver = z39.88-2004 &
rft_id = info:lanl-repo/biosis/PREV1523662 &
svc_id = info:lanl-repo/svc/getBibliographic.DC
This service request returns the bibliographic information of the object with identifier info:lanl-repo/biosis/PREV1523662 in Dublin Core.
And there is also:
baseURL?
url_ver = z39.88-2004 &
rft_id = info:lanl-repo/isi/A3666378 &
svc_id = info:lanl-repo/svc/getCitations.MARC
This service request returns the citation information of the object with identifier info:lanl-repo/isi/A3666378 (an ISI Citation database record) as a MARCXML Collection, i.e. each citation is a MARCXML record.
And etc. of course.
Just as a reminder that we were indeed thinking along the lines you are (other communities), please check out an interview OCLC did with me in 2003, especially the paragraph under "What other communities are working on linking technologies, and how is the library community connecting with them?".
Bottom line for me: There is no need to redo the basic OpenURL Standard work because I think it can address an awful lot of needs. There is a big need to create (and promote) simple profiles based on the general OpenURL Standard. If that is where you are trying to go, I would be very willing to come along.
Sounds good then
I haven't proposed any changes to the spec, so, there doesn't seem to be any disagreement here.
What I'd like to work on for now is some more stuff "outside" of OpenURL itself, much like we did for COinS. Conventions that don't really live inside the actual OpenURL transaction, but can work well with OpenURL when necessary. There's a lot of fertile ground to mine there, and we can do it in a way that lets everything fit together when it has to.
I'm working on a follow-up piece with some more concrete suggestions of what to work on, and hope to post it soon. I don't have any idea whether it will involve new OpenURL profiles or not, but I hope you won't be disinterested if it doesn't. :)
This line of thought
This line of thought inspired me to think about what sort of architecture would/could support this, so I've written a bit about it. Starting with re-thinking what a 'link resolver' is.
http://bibwild.wordpress.com/2007/03/06/link-resolver-understood-as-openurl-service-provider/
(Wow, that's some URL, sorry).
Post new comment