OOMRef-J is a Java implementation of ANSI/NISO Z39.88 – The OpenURL Framework for Context-Sensitive Services.

The OpenURL Framework Standard defines an architecture for creating OpenURL Framework Applications. An OpenURL Framework Application is a networked service environment, in which packages of information are transported over a network. These packages have a description of a referenced resource at their core, and they are transported with the intent of obtaining context-sensitive services pertaining to the referenced resource. To enable the recipients of these packages to deliver such context-sensitive services, each package describes the referenced resource itself, the network context in which the resource is referenced, and the context in which the service request takes place.

This page describes research activities involving the OpenURL standard. As participants in the OpenURL Maintenance Agency, OCLC Research also supports the OpenURL Resolver Registry.


At the time this implementation was written, no other open-source OpenURL implementation could be found that recognized the protocol's potential beyond linking to scholarly publications. The abstractions in the new specification allow for an infinite range of possible uses, however. This implementation models its Java classes directly on the OpenURL terminology to create a framework to process OpenURL requests without assuming an particular profile.


OOMRef-J has used as the framework for LANL’s djatoka and OCLC’s WorldCat Registry. The former stretches OpenURL beyond its scholarly content roots to deliver an image server along with a variety of image processing services. 

The latter is a RESTful digital resource collection management system supporting create, read, update, and delete operations supporting delivery of a variety of variant representations. Strictly speaking, though, the latter is not an “OpenURL application” because of limitations in the Registry schemas for encoding descriptors in the path component of URIs. Despite this limitation, OpenURL framework proved to be a flexible and natural model for handling every use case that arose.

OpenURL 1.0

The OpenURL 1.0 protocol is a generalization of the OpenURL 0.1 protocol used to solve the appropriate-copy problem for scholarly publications. The goal of this implementation is to support the full range of abstractions present in the 1.0 specification that takes it far beyond its 0.1 roots.

Although OpenURL is generally viewed as a Web service protocol, this implementation decouples the Servlet front-end from the core functionality so it can be embedded in the architecture of broader systems. For example, WikiD is a thin layer on top of an embedded OpenURL resolver.

Research goals


OpenURL 1.0:

OOMRef-J: OpenURL Object Model–Java Reference Implementation

This service can be configured to support any context-sensitive service within the confines of the OpenURL 1.0 protocol.

The OOMRef-J distributions consist of a jar file and a Java Servlet web application ("war" file) providing basic OpenURL 1.0 resolution capability. The default installation demonstrates its application by echoing OpenURL requests formatted from HTML.

Note, though, that OOMRef-J has application far beyond OpenURL 1.0 (e.g. the WorldCat Registry). For more on this aspect of the application, see the OpenURL Object Model category of posts on Jeff Young's Q6 blog.


This software may be used without charge in accord with the terms of the Apache License, Version 2.0.


You may click below to download the OOMRef-J distributions for use or evaluation. (This is the version referenced in Ryan Chute and Herbert Van de Sompel's article, "Introducing djatoka: A Reuse Friendly, Open Source JPEG 2000 Image Server," in the September/October 2008 issue of D-Lib Magazine http://www.dlib.org/dlib/september08/chute/09chute.html.)

View: Version Demo Java docs
OpenURL Distribution Download    

Prior version

An earlier version of this software was available from July 2005 - October 2008. The current version is much improved and users are strongly encouraged to use it. However, links to the earlier version are provided here for current users who may not be able to upgrade at this time.

The OpenURL 1.0 code in the CVS repository is divided into modules for ease of retrieval.

The module is:

  • 1. openurl – a distribution containing war and jar files.

CVS usage note: The CVSROOT should be set to userid@pubserv.oclc.org:/home/CVS/oai/cvsroot

View: Version Demo Java docs

Most recent updates: Page content: 2009-08-11 Prototype: 2003-11-26

This activity is part of ResearchWorks. Use of our prototypes is subject to OCLC's terms and conditions. By continuing past this point, you agree to abide by these terms.

Try the online demo

This “Hello World” prototype demonstrates the handling of a simple OpenURL request using a basic Referent and ServiceType descriptor.