January 9, 2007
What is the Purpose of the url_ver Parameter?
Here is a copy of an opinion/comment I just made on the OpenURL listserv regarding the url_ver parameter.
From what I can remember, the purpose of including "url_ver=Z39.88" isn't spelled out in the OpenURL 1.0 spec. As I was writing my OpenURL implementation(s), I decided there was nothing whatsoever that I could do with this bit of information on the server side in a generic way that was useful. Just because it is required for the current set of registered transports doesn't mean someone couldn't come along later and define a new transport that doesn't include it.
As a consequence, I decided that this parameter must exist for the sake of clients as some sort of "hint". Even then, however, such a hint only seems to be useful in the very limited circumstance where the ContextObject Representation is decoupled from any particular resolver. There are very few web services in existence where such decoupling is employed. The notable exception can be found in OpenURL's citation linking ancestry.
Even here, though, there is a problem. The presence of "url_ver=z39.88" might indicate that the string can be interpreted as an OpenURL ContextObject Representation, but that's not necessarily enough of a clue to know which resolvers are capable of processing the request since different resolvers can support unrelated community profiles. As long as the ContextObject Representation is interpreted within a constrained community, things will work fine. If the decoupled ContextObject Representation leaks out into the wild, though, all bets are off.
I like that OpenURL 1.0 includes an abstraction for decoupling a ContextObject from any particular resolver, but this is an advanced feature that most potential OpenURL applications will never take advantage of. For typical types of web services, the "url_ver=z39.88" parameter appears to be completely superfluous despite being required by the current set of transports.