Andy Powell, UKOLN, University of Bath
Jeff Young, OCLC
Thom Hickey, OCLC
$Id: intro.html,v 1.8 2004/02/16 08:40:38 lisap Exp $
This document desribes the PURL-based Object Identifier (POI) - a simple specification for resource identifiers based on the PURL system . The use of the POI is closely related to the use of the Open Archives Initiative Protocol for Metadata Harvesting (OAI-PMH)  and with the OAI identifier format (oai-identifiers)  used within that protocol.
The POI has been developed with the following criteria in mind:
The primary intention of the POI is as a relatively persistent identifier for resources that are described by metadata 'items' in OAI-compliant repositories. Where this is the case, POIs are not explicitly assigned to resources - a POI exists implicitly because an OAI 'item' associated with the resource is made available in an OAI-compliant repository. However, POIs can be explicitly assigned to resources independently from the use of OAI repositories and the OAI-PMH if desired. As such, the POI can be seen as a possible mechanism for implementing cool URIs .
A separate document provides some POI resolver guidelines . All POI assigners are strongly encouraged to configure the PURL system to resolve their POIs.
A POI is a PURL and a PURL is a URI.
The POI syntax is a restriction of the
"general, absolute URI" syntax:
RFC 2396 .
The following description uses the same notational conventions as
and the same definitions of
All POIs conform to the PURL template below:
"http://purl.org/poi/" namespace-identifier "/" local-identifier
where the components are as follows:
namespace-identifier = domainname-word "." domainname domainname = domainname-word [ "." domainname ] domainname-word = alpha *( alphanum | "-" ) local-identifier = 1*uric
uric elements are permitted in the
Since characters in the
reserved set do not have any
special meaning in the
local-identifier component, they
are permitted unescaped. All characters not included
reserved sets must
Characters in the
must not be escaped.
The following definitions are copied from
uric = reserved | unreserved | escaped reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," unreserved = alphanum | mark mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
To avoid the possibility of inconsistently generated
characters in a POI, the
digits must use uppercase for the letters
This is a further restriction on RFC 2396. Thus,
hex are defined as follows:
escaped = "%" hex hex hex = digit | "A" | "B" | "C" | "D" | "E" | "F"
http://purl.org/poi/bath.ac.uk/lisap-2003-1286544 http://purl.org/poi/rdn.ac.uk/12345-67890 http://purl.org/poi/arXiv.org/hep-th/9901001 http://purl.org/poi/foo.org/some-local-id-53 http://purl.org/poi/xtcat.oclc.org/OCLCNo/ocm41020136
It is not necessary to explicitly register each assigned POI with the PURL system, as is the case with most PURLs. However, POI assigners are strongly encouraged to configure the PURL system to resolve their POIs as described in the POI resolver guidelines.
If the party assigning the POI offers an OAI-compliant repository containing metadata about the resource identified by the POI and uses oai-identifiers, it is not necessary to explicitly assign a POI. The POI is based on the oai-identifier for the 'item' that is assigned as part of running the OAI-compliant repository. Mapping between POIs and oai-identifiers is described below.
Where parties need to explicitly assign a POI, the algorithm is as follows:
local-identifieras described above.
This document makes no recommendations for how the
should be assigned,
nor for techniques to make such names unique within their domain.
To construct a POI from an available oai-identifier the following algorithm should be used:
local-identifierto a forward slash ('/').
oai:bath.ac.uk:lisap-2003-1286544 ---> http://purl.org/poi/bath.ac.uk/lisap-2003-1286544 oai:rdn.ac.uk:12345-67890 ---> http://purl.org/poi/rdn.ac.uk/12345-67890 oai:arXiv.org:hep-th/9901001 ---> http://purl.org/poi/arXiv.org/hep-th/9901001 oai:foo.org:some-local-id-53 ---> http://purl.org/poi/foo.org/some-local-id-53 oai:xtcat.oclc.org:OCLCNo/ocm41020136 ---> http://purl.org/poi/xtcat.oclc.org/OCLCNo/ocm41020136
To construct an oai-identifier from an available POI, use the reverse algorithm:
[distributed systems] [UKOLN]