Persistent uniform resource locator
A persistent uniform resource locator is a uniform resource locator that is used to redirect to the location of the requested web resource. PURLs redirect HTTP clients using HTTP status codes.
The PURL concept is generic and can be used to designate any redirection service that:
- has a "root URL" as the resolver reference ;
- provides means, to its user-community, to include new names in the root URL ;
- provides means to associate each name with its URL, and to update this redirection-URL;
- ensure the persistence of the root URL and the PURL resolver services.
PURLs are used to curate the URL resolution process, thus solving the problem of transitory URIs in location-based URI schemes like HTTP. Technically the string resolution on PURL is like SEF URL resolution.
The remainder of this article is about the OCLC's PURL system, proposed and implemented by OCLC.
History
The PURL concept was developed at OCLC in 1995 and the PURL system was implemented using a forked pre-1.0 release of Apache HTTP Server. The software was modernized and extended in 2007 by Zepheira under contract to OCLC and the official website moved to http://purlz.org.PURL version numbers may be considered confusing. OCLC released versions 1 and 2 of the Apache-based source tree, initially in 1999 under the OCLC Research Public License 1.0 License and later under the OCLC Research Public License 2.0 License. Zepheira released PURLz 1.0 in 2007 under the . PURLz 2.0 was released in Beta testing in 2010 but the release was never finalized. The Callimachus Project implemented PURLs as of its 1.0 release in 2012.
The oldest PURL HTTP resolver was operated by OCLC from 1995 to September 2016 and was reached as as well as , , and .
Other notable PURL resolvers include the US Government Printing Office, which is operated for the Federal Depository Library Program and has been in operation since 1997.
The PURL concept is used in the , that may replace the old PURL-services and PURL-technologies.
On 27 September 2016 OCLC a cooperation with the Internet Archive resulting in the transfer of the resolver service and its administration interface to Internet Archive. This service is supported on newly created software, separate from all previous implementations. This transfer reenabled the ability manage PURL definitions that had been disabled in the OCLC hosted service for several months. This service hosted on Internet Archive Servers supports access via , , , and . OCLC are now redirecting DNS requests for to .
Principles of operation
The PURL concept allows for generalized URL curation of HTTP URIs on the World Wide Web. PURLs allow third party control over both URL resolution and resource metadata provision.A URL is simply an address of a resource on the World Wide Web. A Persistent URL is an address on the World Wide Web that causes a redirection to another Web resource. If a Web resource changes location, a PURL pointing to it can be updated. A user of a PURL always uses the same Web address, even though the resource in question may have moved. PURLs may be used by publishers to manage their own information space or by Web users to manage theirs; a PURL service is independent of the publisher of information. PURL services thus allow the management of hyperlink integrity. Hyperlink integrity is a design trade-off of the World Wide Web, but may be partially restored by allowing resource users or third parties to influence where and how a URL resolves.
A simple PURL works by responding to an HTTP GET request by returning a response of type 302. The response contains an HTTP "Location" header, the value of which is a URL that the client should subsequently retrieve via a new HTTP GET request.
PURLs implement one form of persistent identifier for virtual resources. Other persistent identifier schemes include Digital Object Identifiers, Life Sciences Identifiers and. All persistent identification schemes provide unique identifiers for virtual resources, but not all schemes provide curation opportunities. Curation of virtual resources has been defined as, "the active involvement of information professionals in the management, including the preservation, of digital data for future use."
PURLs have been criticized for their need to resolve a URL, thus tying a PURL to a network location. Network locations have several vulnerabilities, such as Domain Name System registrations and host dependencies. A failure to resolve a PURL could lead to an ambiguous state: It would not be clear whether the PURL failed to resolve because a network failure prevented it or because it did not exist.
PURLs are themselves valid URLs, so their components must map to the URL specification. The scheme part tells a computer program, such as a Web browser, which protocol to use when resolving the address. The scheme used for PURLs is generally HTTP. The host part tells which PURL server to connect to. The next part, the PURL domain, is analogous to a resource path in a URL. The domain is a hierarchical information space that separates PURLs and allows for PURLs to have different maintainers. One or more designated maintainers may administer each PURL domain. Finally, the PURL name is the name of the PURL itself. The domain and name together constitute the PURL's "id".
Comparing with permalink
Both permalink and PURL are used as permanent/persistent URL and redirect to the location of the requested web resource. Roughly speaking, they are the same. Their differences are about domain name and time scale:- A permalink usually does not change the URL's domain, and is designed to persist over years.
- A PURL domain name is independently changeable, and is designed to persist over decades.
Types
Type | PURL meaning | HTTP meaning |
200 | Content created or aggregated | OK |
301 | Moved permanently to a target URL | Moved permanently |
302 | Simple redirection to a target URL | Found |
Chain | Redirect to another PURL within the same server | Found |
Partial | Redirect to a target URL with trailing path information appended | Found |
303 | See other URL | See Other |
307 | Temporary redirect to a target URL | Temporary Redirect |
404 | Temporarily gone | Not Found |
410 | Permanently gone | Gone |
Clone | Copy the attributes of an existing PURL | N/A |
Most PURLs are so-called "simple PURLs", which provide a redirection to the desired resource. The HTTP status code, and hence of the PURL type, of a simple PURL is 302. The intent of a 302 PURL is to inform the Web client and end user that the PURL should always be used to address the requested resource, not the final URI resolved. This is to allow continued resolution of the resource if the PURL changes. Some operators prefer to use PURLs of type 301.
A PURL of type "chain" allows a PURL to redirect to another PURL in a manner identical to a 301 or 302 redirection, with the difference that a PURL server will handle the redirection internally for greater efficiency. This efficiency is useful when many redirections are possible; since some Web browsers will stop following redirections once a set limit is encountered.
A PURL of type "200" is an "Active PURL", in which the PURL actively participates in the creation or aggregation of the metadata returned. An Active PURL includes some arbitrary computation to produce its output. Active PURLs have been implemented in PURLz 2.0 and The Callimachus Project. They may be used to gather runtime status reports, perform distributed queries or any other type of data collection where a persistent identifier is desired. Active PURLs act similar to a stored procedure in relational databases.
A PURL of type "303" is used to direct a Web client to a resource that provides additional information regarding the resource they requested, without returning the resource itself. This subtlety is useful when the HTTP URI requested is used as an identifier for a physical or conceptual object that cannot be represented as an information resource. PURLs of type 303 are used most often to redirect to metadata in a serialization format of the Resource Description Framework and have relevance for Semantic Web and linked data content. This use of the 303 HTTP status code is conformant with the finding of the of the World Wide Web Consortium.
A PURL of type "307" informs a user that the resource temporarily resides at a different URL from the norm. PURLs of types 404 and 410 note that the requested resource could not be found and suggests some information for why that was so. Support for the HTTP 307, 404 and 410 response codes are provided for completeness.
PURLs of types "404" and "410" are provided to assist administrators in marking PURLs that require repair. PURLs of these types allow for more efficient indications of resource identification failure when target resources have moved and a suitable replacement has not been identified.
PURLs of type "clone" are used solely during PURL administration as a convenient method of copying an existing PURL record into a new PURL.
Redirection of URL fragments
The PURL service includes a concept known as partial redirection. If a request does not match a PURL exactly, the requested URL is checked to determine if some contiguous front portion of the PURL string matches a registered PURL. If so, a redirection occurs with the remainder of the requested URL appended to the target URL. For example, consider a PURL with a URL ofPartial redirections at the level of a URL path do not violate common interpretations of the HTTP 1.1 specification. However, the handling of URL fragments across redirections has not been standardized and a consensus has not yet emerged. Fragment identifiers indicate a pointer to more specific information within a resource and are designated as following a # separator in URIs.
Partial redirection in the presence of a fragment identifier is problematic because two conflicting interpretations are possible. If a fragment is attached to a PURL of type "partial", should a PURL service assume that the fragment has meaning on the target URL or should it discard it in the presumption that a resource with a changed location may have also changed content, thus invalidating fragments defined earlier? Bos suggested that fragments should be retained and passed through to target URLs during HTTP redirections resulting in 300, 301, 302 or 303 responses unless a designated target URL already includes a fragment identifier. If a fragment identifier is already present in a target URL, any fragment in the original URL should be abandoned. Unfortunately, Bos’ suggestion failed to navigate the IETF standards track and expired without further work. Dubost et al. resurrected Bos’ suggestions in a W3C Note. Makers of Web clients such as browsers have "generally" failed to follow Bos’ guidance.
Starting with PURLz 1.0 series, the PURL service implements partial redirections inclusive of fragment identifiers by writing fragments onto target URLs in an attempt to comply with and avoid problematic and inconsistent behavior by browser vendors.