Dienst Protocol 2000-05-30 09:58:27 -0400

Dienst Protocol Specification

Jim Davis (jrd3@alum.mit.edu)
David Fielding (fielding@cs.cornell.edu)
Carl Lagoze (lagoze@cs.cornell.edu)
Richard Marisa (rjm2@cornell.edu)

Introduction
Dienst architecture overview
Protocol Features
    Verbs and Versions
    HTTP embedding of Dienst requests
    Dates
Protocol Messages
    Repository Service
        Document Model
        Dissemination Variables
        Partitions
        Repository Verbs
            Describe-Verb
            Disseminate
            Formats
            List-Authorities
            List-Binders
            List-Contents
            List-Encodings
            List-Meta-Formats
            List-Partitions
            List-Verbs
            List-Versions
            New-Version
            Submit
            Submit-Formats
            Structure
            Terms
            Withdraw
    Index Service
        Describe-Verb
        Header-Tags
        List-Verbs
        SearchBoolean
   Query Mediator Service
        Describe-Verb
        List-Verbs
        SearchBoolean
   Collection Service
        Describe-Verb
        List-Verbs
        Regions
        Collection
        Publishers
        QueryMediators
        Indices
        Repositories
   Info Service
        Describe-Verb
        List-Verbs
        Identity
        List-Services

0. Changes

1. Introduction

This document describes the Dienst protocol, which provides for communications with services in a distributed digital library. The word "Dienst" is used in this document and others to refer to a number of things:

The Dienst system (in all three senses) is the foundation for NCSTRL, the Networked Computer Science Technical Report Library.

This document describes the current version of the Dienst protocol.  An earlier version of the Dienst protocol, with verbs and features that are still supported by some software implementations (servers), is implemented in another document.

2. Dienst architecture overview

The Dienst architecture is built on the notion of individually defined services that when combined together create a distributed digital library.  The word distributed is used since the services and the resources in a Dienst digital library may be located anywhere on the Internet.  The functionality of a Dienst digital library includes storage and access to resources (digital objects), deposit of new resources, discovery and browsing of those resources, and user registration. 

Communication with and among individual Dienst services takes place via an open protocol, which makes it possible to combine the services in innovative ways, or build other service layers on top of the existing basic Dienst services.  

The services defined in the protocol are as follows:

Human interaction with these services and their protocols is mediated by a user interface service.

3. Protocol Features

3.1 Verbs and Versions

Individual Dienst protocol requests are called Verbs. Each service supports a set of verbs. 

A service may support more than one version of a verb, with each version differing in syntax or semantics. A version takes the form of two integers, separated by a period. This version applies to the individual verb, not the protocol as a whole. (The protocol as a whole does not have a version number.  The date on the protocol document indicates the set of verbs that are defined as of that date.)  Including a version number in the message allows for backward-compatible extension to the Dienst system. 

A server offering one or more Dienst services might  support verbs in various versions. A service receiving a message with an older version number must either reply using the old syntax and semantics, or reply with an error. If a service receives a message with a newer version number, then it must return an error.

Software supporting the Dienst protocol may or may not be versioned.  If a software version number exists, that number is independent of the Dienst protocol verbs and versions of those verbs that the software supports.  Information on the services, verbs, and versions of those verbs supported by an individual server is available through Info service requests.

3.2 HTTP embedding of Dienst requests

Dienst protocol requests are expressed as URLs embedded in  HTTP requests.  Except where as noted, these are all HTTP GET requests.  A typical implementation uses a standard Web server, such as Apache, that is configured to dispatch Dienst URLs  to the appropriate Dienst service. The remainder of this section describes the aspects of the protocol that are specific to the HTTP embedding.

3.2.1 Message format

All messages are encoded into URLs where the path portion of the URL consists of the following tokens, in the following order:

Dienst
This token appears literally in the URL.
Service Name
The name of the service which is to handle the message, e.g. Repository
Version
The version of the verb being invoked. 
Verb
This is the name of the message, e.g. SearchBoolean. A verb is unique within a Service.
Fixed arguments
Each verb has a certain number of fixed arguments, which must always be supplied, and must appear in the order cited.
Keyword arguments
In the keyword syntax arguments take the form key=value. If there is more than one keyword argument, they are separated by an ampersand. Arguments may appear in any order.  Unless otherwise specified, keyword arguments are always optional and may not be repeated.

The separator between tokens in the path is the slash, except that the separator before the Keyword Arguments is a question mark.

Example

If the Repository service implemented the Shred verb, and if version 1.2 of that verb accepted two optional keyword arguments (delay and amperage), then an example request is:

/Dienst/Repository/1.2/Shred?delay=9&amperage=7.4.

The full URL for this request at a particular Web server might be:

http://bar.com/Dienst/Repository/1.2/Shred?delay=9&amperage=7.4.

3.2.2 Special characters

The syntax rules for URIs  restrict a few characters to special roles in certain contexts and require that if these characters are used in any other way that they be written as an escape sequence; a percent sign followed by the character code in hexadecimal. The reserved characters are.

    

Character Role Escape Sequence

/

Path Component Separator

%2F

?

Query Component Separator

%3F

#

Fragment Identifier

%23

=

Name/Value Separator

%3D

&

Argument Separator in Query Component

%26

: Host Port Separator %3A
; Authority Namespace Separator %3B

Finally, the space character may not appear anyplace in a URL. It must be written with a "+" (or with the percent sign escape sequence %20.)  

As a result, use of these characters within a Dienst protocol request must be escaped if their use does not correspond to their established URI role.  Note that in the examples used throughout this document, special character escaping is shown.  

3.2.3 Message Responses

Responses to messages are formatted as HTTP responses, with appropriate HTTP header fields. The return type specified for each message in this document will, therefore, be the MIME type included in the HTTP Content-Type header field (If a wrapper is applied to the content, the Content-Type will correspond to the type of the wrapper).  Likewise, any encoding applied to the content will be included in the HTTP Content-Encoding header field.

3.2.3.1 MIME Types

The responses to Dienst protocol requests vary among the following MIME types:

3.2.3.2 Status Codes

Status codes and error returns correspond to that defined for HTTP (refer to that protocol documentation). A normal response from a Dienst message in HTTP is signaled with the 200 reply code. Error returns are signaled with the appropriate 4xx or 5xx code as specified in the HTTP protocol. The use of HTTP error codes is as follows:

For each error return, the HTTP reason-phrase returned with the code should provide additional useful information to a human reader.

3.3 Dates

All dates in the protocol (requests and responses are encoded using the "Complete date" variant of ISO8601.  This format is CCYY-MM-DD where CC is the century, YY is the year, MM is the month of the year between 01 (January) and 12 (December), and DD is the day of the month between 01 and 28 or 29 or 30 or 31, depending on length of month and whether it is a leap year.

4. Protocol Messages

This section lists the messages (verbs) implemented by each service. Each message has a Name (which is used for purposes of discussion), a Verb (a unique name for the message, used in the protocol to name the message), a Version, a list of Fixed arguments, a list of Keyword Arguments, and a Return MIME type. The documentation for every message includes an example request and response (where appropriate) and the meaning of HTTP error codes that may be returned. These examples uniformly use the handle handlecorp/f970101.  

To make reading of this document easier, the DTDs of responses to verbs that return text/xml are separated from the main body of the document into an appendix.

4.1 Repository Service

A repository is administratively divided into a set of partitions. Each partition stores documents, as defined by the Dienst document model, and provides messages to deposit documents, discover their structure, and obtain disseminations of documents.  A number of dissemination variables effect the nature of a particular dissemination request.    

4.1.1 Document Model

The documents that are stored and delivered in Dienst have a unique identifier (a Handle), and may have multiple versions, logical structure, and multiple content-types.  These document model features are expressed in the protocol:  

This section describes these features of the document model.  

4.1.1.1 Handles

A document is named by a handle, which is a kind of URN. Unlike a URL, a handle is location independent.

A handle has two parts, a naming authority and a string. A naming authority is an entity that is authorized to create new handles and store them in the handle system. Naming authorities are hierarchically organized, with periods used as the separator. For example, handlecorp, handlecorp.research, handlecorp.sales, and handlecorp.sales.hardware. A handle is written with these two parts separated by a slash, for example handlecorp.research/doc1. The character set for handles used in Dienst is restricted to alphanumeric characters, underscore, period, and hyphen (except for the slash separator). (Note that this restriction is specific to Dienst handles and not handles in general). Case is not significant in handles.

4.1.1.2 Versions

A document may have multiple versions. Versions are linear and numbered. The first version is version 1, subsequent versions are 2, 3, etc. A specific version of a document is called a document instance.

4.1.1.3 Logical Structure

Every document instance has a logical structure. The components of this structure are described in the following sections.  Refer to the documentation for the Structure verb for the syntax for requesting the structure of a document instance, and the documentation for the Disseminate verb for the syntax for requesting disseminations based on that structure.

4.1.1.3.1 Descriptive Metadata

Descriptive metadata provides structured (cataloging) information about the document instance or its sub-parts.  Typically this cataloging information is used by index services or other discovery or browsing services that facilitate location of digital objects in a digital library.  The only restriction on metadata used in Dienst is that it is transported (formatted) in XML.  Examples in this document use three metadata standards:

All document instances include descriptive metadata at the top level (for the document instance itself).  Optionally, a document instance may also include metadata for individual views and divs, which are described below.

4.1.1.3.2 Views

Every document instance has zero or more views.  Each view is an alternative expression or structural representation of the content encapsulated in the digital object.  Two examples illustrate the notion of alternate views:

Views are strictly alternates.  That is, views are not nested and there is no implied ordering in significance or importance among views.  Each view within a document instance is uniquely named using an alphanumeric string.

Each view may have descriptive metadata.

4.1.1.3.3 Divs

Each view may then be hierarchically structured using nested divs.  Two examples illustrate the purpose of a div hierarchy:

Each div within a view of a document instance is uniquely named using an alphanumeric string.

Each div may have descriptive metadata.

4.1.1.3.4 Terminals

Each div may then contain one or more terminal elements that are individually disseminable components of the document instance.  At present Dienst only supports a single terminal:

Future versions of the protocol may support other terminal elements such as frames in a movie or samples in a digital audio format.

Each terminal within a view of a document instance is uniquely named using an alphanumeric string.

4.1.2 Dissemination Variables

Three dissemination variables affect the actual byte stream that is returned from a Dissemination request.  These variables are described in this section.

4.1.2.1 Content-types

Every disseminable component of a document (the disseminable components of a document are defined by meta-formats, views, divs, and terminals returned by a Structure request to the document)  is available in at least one content type. A content type is a MIME type such as image/tiff or text/html. If no Binder is specified for the dissemination, then the specified Content-type will be the MIME type in the Content-Type header field in the HTTP response to the Dienst protocol request.

4.1.2.2 Binders

For some Dissemination requests, some choices of content type imply a set of logical objects rather than a single object, e.g. requesting five pages of a document as TIFF images, a set of scanned pages of MIME type image/tiff. A binder is used to encapsulate these multiple logical objects. The protocol defines the following set of binders:

tar
a tar archive
multipart
a MIME multipart document

Not all binders are supported by all servers.  The specification of a Binder changes the MIME type of the Dienst protocol response, which is then reflected in the HTTP Content-Type header field.  The list of Binders supported by a repository is available through the List-Binders protocol request.

4.1.2.3 Encodings

An encoding is a compression scheme to reduce transmission time. The protocol defines the following set of encodings:

gzip
Lempel-Ziv L77 encoding

The specification of an Encoding is then reflected in the HTTP Content-Encoding header in the HTTP response to the Dienst protocol request.  The list of Encodings supported by a repository is available through the List-Encodings protocol request.

4.1.3 Partitions

The Repository Service defines the notion of a partition. A partition is an administrator-defined subset of the repository.  Each partition has a one token name and a (possibly) longer description.  Depending on the policy of a repository an individual document may exist in one or more partitions (the determination of the partition in which a document is located is made in the Submit request).  Note that there is, in general, no way to predict in which partition a document appears from its handle, or even given full knowledge of the document.

A repository may have one or more partition hierarchies.  For example, an administrator may decide to partition a repository into two hierarchies, one based on institutional affiliation and one based on subjects as follows: 

The partition hierarchies in a repository are available via the List-Partitions request.

4.1.3.1 Partition specifications

The Submit and List-Contents verbs include, as an argument, a partition specification. Partition specifications are expressed in the following grammar, where partitionname is the short one token name for the partition:

partitionspec := partitionlist
partitionlist := partitionsel | partitionsel;partitionlist
partitionsel  := partitionname
partitionname := [A-Za-z0-9-_]+

Example:

Florida;Frenetics

Where Florida is the short name for Valley View University of Florida and Frenetics is the short name for Department of Frenetics. 

4.1.4 Repository Verbs

Describe Verb

Verb: Describe-Verb
Version: 2.0
Fixed args: verb
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response that contains a list, where each element of the list provides information on a version of the specified verb that is supported by this service. The following information may be provided at the verb or version level.

Each element of the list contains the following information:

Note that a service may implement more than one version of a verb.

Example Request:

/Dienst/Repository/2.0/Describe-Verb/Formats

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Describe-Verb version="2.0">
    <Verb name="Formats">
      <description>Returns a structured response indicating
        the formats of disseminations available for this document
      </description>
      <versions>
        <version id="4.0">
          <example>http://cs-tr.cs.cornell.edu:80/Dienst/Repository/4.0/Formats/<handle></example>
          <arguments>
            <fixed>
              <arg name="handle" />
            </fixed>
            <keyword>
              <arg name="version" />
              <arg name="view" />
            </keyword>
          </arguments>
        </version>
        <version id="2.0">
          <note>Depricated</note>
          <example>http://cs-tr.cs.cornell.edu:80/Dienst/Repository/2.0/Formats/<handle></example>
          <arguments>
            <fixed>
              <arg name="handle" />
            </fixed>
          </arguments>
        </version>
      </versions>
    </Verb>
  </Describe-Verb>

Disseminate Content

Verb: Disseminate
Version: 1.0
Fixed args: handle, view, content-type
Keyword Args: version, <div>, pageimage, binder, encoding
Return MIME type: dependent on dissemination requested.
Return Status Codes: 200, 400, 404, 415, 501, 503

Request a dissemination of a digital object.  The characteristics of the dissemination that can be requested (the arguments to the Disseminate verb), are determined by the responses to the List-Versions, Formats, and Structure verbs for the specific digital object. The response is a MIME-typed byte stream.  The MIME type of the byte stream is either the MIME type of the specified content-type or, if a binder is specified, the MIME type of that binder.  Refer to the examples below for more information on the stream that is returned.

In addition to the handle, the required fixed arguments are:

The Keyword Arguments are:

Example Request:

Dienst/Repository/1.0/Disseminate/handlecorp/970101/body/postscript

Example Response:

The PostScript rendition (MIME-type postscript) of "body" view of the document.

Example Request:

Dienst/Repository/1.0/Disseminate/handlecorp/970101/%23oams/xml

Example Response:

The Open Archives metadata record for the document instance (in the only available content-type for metadata which is xml). 

<?xml version="1.0" encoding="UTF-8"?>
  <Disseminate version="1.0">
    <oams:oams xmlns:oams="http://www.openarchives.org/sfc/sfc_oams.htm">
      <oams:title>A protocol for Interoperable Archives</oams:title>
      <oams:accession date="1994-06-24 />
      <oams:fullId>ncstrl.cornell/TR94-1418</oams:fullId>
      <oams:author>
        <oams:name>James R. Davis</oams:name>
        <oams:organization>Xerox</oams:organization>
      </oams:author>
      <oams:author>
        <oams:name>Carl Lagoze</oams:name>
        <oams:organization>Cornell</oams:organization>
      </oams:author>
    </oams:oams>
  </Disseminate>


Example Request:

Dienst/Repository/1.0/Disseminate/handlecorp/970101/book/gif?pageimage=3

Example Response:

Page 3 of the book view of the document instance as a GIF file (MIME type image/gif).

Example Request:

Dienst/Repository/1.0/Disseminate/handlecorp/970101/book/gif
       ?chapter=3&binder=tar&encoding=gzip

Example Response:

Chapter of the book view of the document instance as a series of GIF files, bound together using tar, and then compressed using gzip.  The MIME type of the disseminated byte stream is than application/tar.

List Formats

Verb: Formats
Version: 4.0
Fixed args: handle
Keyword Args: version, view
Return MIME type: text/xml
Return Status Codes: 200, 400, 404, 501

Returns a structured response indicating the formats of disseminations available for this document instance.  

The available arguments are:

The response includes the following information:

Example Request:

/Dienst/Repository/4.0/Formats/handlecorp/970101?version=1&part=body

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Formats version="4.0">
    <formats>
      <postscript name="application/postscript" 
        size="25555" 
        URL="http://foo.com/bar.ps" />
      <gif name="image/gif" />
    </formats>
  </Formats>

List Authorities

Verb: List-Authorities
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Return a structured list of the authorities stored in this repository.

Example Request:

/Dienst/Repository/1.0/List-Authorities

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Authorities version="1.0">
    <authority>
      <name>ncstrl.cornell</name>
      <display>Cornell University Computer Science Department</display>
    </authority>
  </List-Authorities>
 

List Binders

Verb: List-Binders
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Return a structured list of the types of binders available in this repository.

Example Request:

/Dienst/Repository/1.0/List-Binders

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Binders version="1.0">
    <binder>tar</binder>
  </List-Binders>

List Contents

Verb: List-Contents
Version: 4.0
Fixed args: none
Keyword Args: partitionspec, file-after, file-before, meta-format
Return MIME type: text/xml
Return Status Codes: 200, 400, 501

Return a structured list of the handles for documents stored in this repository service.  Without any arguments the list includes all stored documents. 

The meaning of the Keyword Arguments is as follows:

Example Request:

List the handles in the high energy (hep) partition within the physics partition.

/Dienst/Repository/4.0/List-Contents?partitionspec=physics;hep

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Contents version="4.0">
    <record>
      handlecorp/970101
    </record>
    <record>
      handlecorp/970102
    </record>
  </List-Contents>

Example Request:

List the rfc1807 metadata along with the handles

/Dienst/Repository/4.0/List-Contents?partitionspec=physics;hep&meta-format=rfc1807

Example Response:

Note the empty rfc1807 record for handlecorp/970102 indicating that there is no rfc1807 metadata for this document.

<?xml version="1.0" encoding="UTF-8"?>
  <List-Contents version="4.0">
    <record>
      handlecorp/970101  
      <rfc1807:rfc1807 xmlns:rfc1807="ftp://nic.merit.edu/document/rfc/rfc1807.txt">   
        <rfc1807:author>William Shakespeare</rfc1807:author>
        <rfc1807:title>Romeo and Juliet</rfc1807:title>
        <rfc1807:id>handlecorp//970101</rfc1807:id>
        <rfc1807:entry>June 24 1506</rfc1807:entry>    
      </rfc1807:rfc1807>  
    </record>
    <record>
      handlecorp/970102
      <rfc1807:rfc1807 xmlns:rfc1807="ftp://nic.merit.edu/document/rfc/rfc1807.txt"> >
      </rfc1807:rfc1807>
    </record>
  </List-Contents>

List Encodings

Verb: List-Encodings
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Return a structured list of the types of encodings available in this repository.

Example Request:

/Dienst/Repository/1.0/List-Encodings

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Encodings version="1.0">
    <Encoding>gzip</Encoding>
  </List-Encodings>

Get Metadata Formats

Verb: List-Meta-Formats
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400, 501

Returns a structured response indicated the metadata formats that are supported by this repository service.  Note that the fact that a metadata format is supported does not mean that it is available for all digital objects in that repository.  For each metadata format, the following information is returned:

Example Request:

/Dienst/Repository/1.0/List-Meta-Formats

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Meta-Formats version="1.0">
    <meta-format name="rfc1807"
       namespace="ftp://nic.merit.edu/document/rfc/rfc1807.txt" />
    <meta-format name="dc" 
       namespace="http://purl.org/dc" />
  </List-Meta-Formats>

List Partitions

Verb: List-Partitions
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400, 501

Return a structured list of the administrator-determined partitions for documents stored in this repository service. The list contains the hierarchy of partitions and sub-partitions. For each partition, both the short name and long description is returned.

Example Request:

/Dienst/Repository/2.0/List-Partitions

Example Response:

The following response indicates a partition hierarchy with two top level partitions - Oceanside and ValleyView - each with partitions hierarchies within them.

<?xml version="1.0" encoding="UTF-8"?>
  <List-Partitions version="2.0">
    <partition name="Oceanside">
      <display>Oceanside University of Nebraska</display>
      <partition name="CompEnt">
        <display>Department of Computational Entomology</display>
      </partition>
      <partition name="MetPhen">
        <display>Department of Metaphysical Phenomenology</display>
      </partition>
    </partition>
    <partition name="ValleyView">
      <display>Valley View University of Florida</display>
      <partition name="Fren">
        <display>Department of Frenetics</display>
      </partition>
      <partition name="Hist">
        <display>Department of Histrionics</display>
      </partition>
    </partition>
  </List-Partitions>

This example shows the nested partition lay out described earlier.

List Verbs

Verb: List-Verbs
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the name of the verbs defined by this service.

Example Request:

/Dienst/Repository/2.0/List-Verbs

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Verbs version="2.0">
    <verb>Disseminate</verb>
    <verb>Formats</verb>
    <verb>List-Contents</verb>
    <verb>List-Verbs</verb>
  </List-Verbs>

List Document Versions

Verb: List-Versions
Version: 1.0
Fixed args: handle
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400, 501

Returns a structured response describing the current versions (document instances) available for the requested handle.  The information returned consists of:

id
is the version number, a positive integer
date
is the date the version was last modified, expressed as in ISO 8601, or * if this can’t be determined
comment
is a comment or description. It may not contain a newline.

Example Request:

/Dienst/Repository/1.0/List-Versions/handlecorp%2f970101

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Versions version="1.0">
    <version id="2">
      <date>1999-02-01</date>
      <comment>this version</comment>
    </version>
    <version id="1">
      <date>1998-02-01</date>
      <comment>that version</comment>
    </version>
  </List-Versions>
 

Submit a New Version of a Document

Verb: New-Version
Version: 1.0
Fixed args: handle
Keyword Args: comment 
Return MIME type: text/xml
Return Status Codes: 200, 400, 401, 404, 501

Submit a new version of a document with identifier handle that is currently stored in the repository.  The version number of the new version is then one greater than the previous most current version (and it becomes the default version for Disseminate and Structure requests are made without version arguments).  

Note on PermissionsIt is the responsibility of the repository service implementation to provide some level of access control over the versioning process.  One common mechanism is for a repository service implementation to only accept New-Version requests from clients with specific DNS client identifiers.  In this case the client is left with the responsibility that the party requesting a new version is authorized to do so.

This is transmitted as a HTTP POST request where the input stream is a MIME type multipart/mixed.  This input stream has two parts ordered as follows:

The meaning of the arguments is as follows:

If the new version request is successful the structured return contains:

Example Request:

/Dienst/Repository/1.0/New-Version
    ?description=fixed+wrong+algorithm

In addition an input stream should be supplied with the POST that includes this request.

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <New-Version version="1.0">
    <version id="2"> 
      <date>1999-02-01></date> 
      <comment>fixed wrong algorithm</comment> 
    </version>  
  </New-Version>

Get Document Structure

Verb: Structure
Version: 2.0
Fixed args: handle
Keyword Args: version, view, content-type
Return MIME type: text/xml
Return Status Codes: 200, 400, 404, 415, 501, 503

This verb returns a structured response that describes the decompositions available for a document instance. A client may use the decomposition information as the basis for document requests using the Disseminate verb. 

The meaning of the Keyword Arguments is as follows:

The response lists the meta-formats, views, divs, and pageimages as described above.

Example Request:

/Dienst/Repository/2.0/Structure/handlecorp/970101?version=1

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Structure version="2.0">
    <meta-formats>
      <rfc1807 />
      <dc />
    </meta-formats>
    <view id="book">
      <div id="section 1">
        <div id="chapter 1">
          <pageimage id="1">
          <pageimage id="2">
          <pageimage id="3">
        </div>
      </div>
    </view>
  </Structure>

This response says that the document instance can disseminate two metadata formats at the top level, rfc1807 and dc (Dublin Core).  The document instance also has one disseminable view called body. This view is structured into a section and chapter hierarchy, with individually disseminable pages available at the chapter.  (Note that additional sections and chapters have been omitted in the example for brevity).

Example Request:

/Dienst/Repository/2.0/Structure/handlecorp/970101

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Structure version="2.0">
    <meta-format>
      <rfc1807 />
    </meta-format>
    <view id="body" divs="pageimage" min="1" max="150" />
  </Structure>

This is the "shorthand" response for documents with simple structure.  The response indicates one metadata type for the document instance, rfc1807, and a single view, body, with a set of sequential pages numbered from 1 to 150 inclusive.

Example Request:

/Dienst/Repository/2.0/Structure/handlecorp/970101?view=body

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Structure version="2.0">
    <view id="body" divs="pageimage" min="1" max="150" />
  </Structure>

This request, and the associated response, demonstrates the use of the view argument in the request, which specifies that structure information only for the specified view should be returned.

Example Request:

/Dienst/Repository/2.0/Structure/handlecorp/970101?view=%23

This request specifies that only the metadata formats for the document should be returned.

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Structure version="2.0">
    <meta-format>
      <rfc1807 />
      <dc />
    </meta-format>
  </Structure>

This response says that the document can disseminate two metadata formats  rfc1807 and dc (Dublin Core).  

Submit a Document

Verb: Submit
Version: 1.0
Fixed args: 
Keyword Args: id, partitionspec, authority
Return MIME type: text/xml
Return Status Codes: 200, 400, 401, 501

Submit a new document to be stored in the repository.  This is transmitted as a HTTP POST request where the input stream is a MIME type multipart/mixed.  This input stream has two parts ordered as follows:

The meaning of the arguments is as follows:

If the submit request is successful the structured return contains:

Note on PermissionsIt is the responsibility of the repository service implementation to provide some level of access control over the submission process.  One common mechanism is for a repository service implementation to only accept Submit requests from clients with specific DNS client identifiers.

Example Request:

/Dienst/Repository/1.0/Submit
    ?id=handlecorp/970101&partitionspec=compsci;ai

In addition an input stream should be supplied with the POST that includes this request.

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Submit version="1.0">
    <handle>handlecorp/970101</handle>
    <partition name="compsci">
      <display>
        Computer Science
      </display>
      <partition name="ai">
        <display>
          Artificial Intelligence
        </display>
      </partition>
    <partition>
  </Submit>

Get Submit Formats

Verb: Submit-Formats
Version: 1.0
Fixed args: 
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200,  400, 501 

Return a structured list of the MIME types of content streams that are accepted by this server in the Submit verb.

Example Request:

/Dienst/Repository/1.0/Submit-Formats

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Submit-Formats version="1.0">
    <format>application/postscript</format>
    <format>application/pdf</format>
  </Submit-Formats>

Get Terms and Conditions

Verb: Terms
Version: 4.0
Fixed args: handle
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400, 404, 501

Returns a natural language statement of the terms and conditions for use of the object. The intention is not to create a contract, but only to advise a human of the reasonable expectations of the server or author.

Example Request:

/Dienst/Repository/4.0/Terms/handlecorp/970101

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Terms version="4.0">
    <text>Copyright 1999 by the Regents of Oceanview University, Kansas
    </text>
  </Terms>
 

Withdraw a Document

Verb: Withdraw
Version: 1.0
Fixed args: handle
Keyword Args: reason, delete, nosave
Return MIME type: text/xml
Return Status Codes: 200, 400, 401, 404, 501

Removes a document from a repository.   The following arguments are available:

If the withdraw request is successful the structured return contains:

Note on PermissionsIt is the responsibility of the repository service implementation to provide some level of access control over the withdraw process.  One common mechanism is for a repository service implementation to only accept Withdraw requests from clients with specific DNS client identifiers.  In this case the client is left with the responsibility that the party requesting a withdrawal is authorized to do so.

Note on Policy:  The purpose of the Withdraw protocol request is not to dictate policy but provide a mechanism for the implementation of a range of policies.  It is expected that each repository will have individual policies for document withdrawal.  For example, some repositories may not allow withdrawal at all (will always respond with a 401 error).  In other cases, a repository may allow withdrawal of content but insist on maintaining access to the bibliographic record.  

Example Request:

/Dienst/Repository/1.0/Withdrawhandlecorp/970101?
     &reason=I+was+wrong.+The+world+is+not+flat

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Withdraw version="1.0">
    <handle>handlecorp/970101</handle>
  </Withdraw>

4.2 Index Service

The index service searches a set of descriptions of documents and return handles for those that match.  Typically an index service operates by harvesting metadata from one or more Repository services and storing that metadata in an easily searched index.

Describe Verb

Verb: Describe-Verb
Version: 2.0
Fixed args: verb
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response that contains a list, where each element of the list provides information on a version of the specified verb that is supported by this service. The following information may be provided at the verb or version level.

Each element of the list contains the following information:

Note that a service may implement more than one version of a verb.

Example Request:

/Dienst/Index/2.0/Describe-Verb/SearchBoolean

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Describe-Verb version="2.0">
    <Verb name="SearchBoolean">
      <description>Handles search requests for this index server.
      </description>
      <version id="5.0">
        <example>http://cs-tr.cs.cornell.edu:80/Dienst/Index/5.0/SearchBoolean</example>
        <arguments>
          <keyword>
            <arg name="title" />
            <arg name="author" />
            <arg name="abstract" />
            <arg name="keywords" />
            <arg name="boolean" />
            <arg name="file-after" />
          </keyword>
        </arguments>
      </version>
    </Verb>
  </Describe-Verb>

Get Tags Returned from a Query

Verb:  Header-Tags
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Return a structured response that is a list of the information elements that are returned from a SearchBoolean request.

Example Request:

/Dienst/Index/1.0/Header-Tags

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Header-Tags version="1.0">
    <tag>handle</tag>
    <tag>rank</tag>
    <tag>author</tag>
    <tag>title</tag>
    <tag>date</tag>
  </Header-Tags>

Submit a Query

Verb: SearchBoolean
Version: 5.0
Fixed args: none
Keyword Args: see below
Return MIME type: text/xml
Return Status Codes: 200, 400

Specifies a search request to the index server. Keyword Arguments are a set of bibliographic fields and values specifying the search criteria. Returns a structured response that is a list of each document that matches the search criteria.  Each element of the list has the following contents:

Note that clients should not assume any logical ordering of the records returned.

Bibliographic Field Arguments

Valid bibliographic field arguments can vary among index servers.  The Describe-Verb verb returns the set of field arguments for a particular server.  The minimal and standard set of bibliographic field arguments is as follows:
title
words from the title.
author
author’s last or first name.
abstract
words from the abstract.
keywords
words from the any of the fields.
boolean
The connective between the above operators, either and (the default) or or.

Scope Argument

Two additional arguments are not affected by the boolean, rather it is always considered to be joined with "and" to the Bibliographic Field Arguments.

authority
the name of the authority in the index server to which the search is to be limited. The default is all authorities. The authority argument may be repeated, in which case the the search is carried out in each authority (effectively or’ing the authority arguments). 
 
added-after limits the list to those handles for documents that were added or modified since time, a universal time expressed in ISO 8601 format. If the server is not able to determine date of modification to the resolution of a day, or if the server is not able to selectively extract records on a time scale of a day, the server may return additional records, e.g. all those modified during the week, month, or even century containing the date.
Rules for bibliographic field matching

A token in a field is either an unquoted word or a quoted string. Tokens are matched to bibliographic entries according to the following rules:

Example Requests:

/Dienst/Index/5.0/SearchBoolean?author=davis+or+fox

/Dienst/Index/5.0/SearchBoolean?author=donald&title=robot

/Dienst/Index/5.0/SearchBoolean?
    author=donald&title=computer+vision&boolean=or&authority=xxx

Note the use of the special character "+" to indicate spaces between word tokens in the arguments.

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <SearchBoolean version="5.0">
    <record>
       <handle>handlecorp/1112</handle>
       <rank>2857</rank>
       <author>Doe, J.</author>
       <author>Public, J. Q.</author>
       <title>Answering Queries</title>
       <date>19941106</date>
    </record>
    <record>
       <handle>handlecorp/1110</handle>
       <rank>2859</rank>
       <author>Mouse, M.</author>
       <author>Disney, W.</author>
       <title>Success with Cartoons</title>
       <date>19941106</date>
    </record>
  </SearchBoolean>

List Verbs

Verb: List-Verbs
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the name of the verbs defined by this service.

Example Request:

/Dienst/Index/2.0/List-Verbs

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Verbs version="2.0">
    <verb>SearchBoolean</verb>
    <verb>List-Verbs</verb>
  </List-Verbs>

4.3 Query Mediator Service

The query mediator service performs searches over the entire collection.

Describe Verb

Verb: Describe-Verb
Version: 2.0
Fixed args: verb
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response that contains a list, where each element of the list provides information on a version of the specified verb that is supported by this service. The following information may be provided at the verb or version level.

Each element of the list contains the following information:

Note that a service may implement more than one version of a verb.

Example Request:

/Dienst/QM/2.0/Describe-Verb/SearchBoolean

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Describe-Verb version="2.0">
    <Verb name="SearchBoolean">
      <description>Handles search requests for collection.
      </description>
      <version id="2.0">
        <example>http://cs-tr.cs.cornell.edu:80/Dienst/QM/2.0/SearchBoolean</example>
        <arguments>
          <keyword>
            <arg name="title" />
            <arg name="author" />
            <arg name="abstract" />
            <arg name="keywords" />
            <arg name="boolean" />
            <arg name="file-after" />
          </keyword>
        </arguments>
      </version>
    </Verb>
  </Describe-Verb>

 

List Verbs

Verb: List-Verbs
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the name of the verbs defined by this service.

Example Request:

/Dienst/QM/2.0/List-Verbs

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Verbs version="2.0">
    <verb>SearchBoolean</verb>
    <verb>List-Verbs</verb>
  </List-Verbs>

 

Submit a Query

Verb: SearchBoolean
Version: 2.0
Fixed args: none
Keyword Args: see below
Return MIME type: text/xml
Return Status Codes: 200, 400

Specifies a search request over the entire collection. Keyword Arguments are a set of bibliographic fields and values specifying the search criteria. Returns a structured response that contains optional search statistics and a list of documents that matches the search criteria.  

Each element of the document list has the following contents:

Note that clients should not assume any logical ordering of the records returned.

The statistics section contains information about which partitions of the collection returned hits along with information about errors that occurred while processing the search request. Collections are currently segmented by institutional publishing authorities. Authorities returning hits are grouped into buckets according to the number of hits returned. 

The statistics error section is organized according to the error received from the remote server since most servers generate similar error messages. Authorites with the same error are included under the same error element.

Bibliographic Field Arguments

Valid bibliographic field arguments can vary among index servers.  The Describe-Verb verb returns the set of field arguments for a particular server.  The minimal and standard set of bibliographic field arguments is as follows:
title
words from the title.
author
author’s last or first name.
abstract
words from the abstract.
keywords
words from the any of the fields.
boolean
The connective between the above operators, either and (the default) or or.

Scope Argument

Two additional arguments are not affected by the boolean, rather it is always considered to be joined with "and" to the Bibliographic Field Arguments.

authority
the name of the authority in the index server to which the search is to be limited. The default is all authorities. The authority argument may be repeated, in which case the the search is carried out in each authority (effectively or’ing the authority arguments). 
 
added-after limits the list to those handles for documents that were added or modified since time, a universal time expressed in ISO 8601 format. If the server is not able to determine date of modification to the resolution of a day, or if the server is not able to selectively extract records on a time scale of a day, the server may return additional records, e.g. all those modified during the week, month, or even century containing the date.
Rules for bibliographic field matching

A token in a field is either an unquoted word or a quoted string. Tokens are matched to bibliographic entries according to the following rules:

Example Requests:

/Dienst/QM/2.0/SearchBoolean?author=davis+or+fox

/Dienst/QM/2.0/SearchBoolean?author=donald&title=robot

/Dienst/QM/2.0/SearchBoolean?
    author=donald&title=computer+vision&boolean=or&authority=xxx

Note the use of the special character "+" to indicate spaces between word tokens in the arguments.

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <SearchBoolean version="2.0">
    <statistics grouping="hits" segmentation="authority" count="2">
      <hits count="2" authorities="1">
        <authority name="handlecorp">
      </hits>
      <errors count="1">
        <error text="Can't connect to errorcorp:9999" authorities="1">
          <authority name="errorcorp" />
        </error>
      </errors>
    </statistics>
    <records>
      <record>
         <handle>handlecorp/1112</handle>
         <rank>2857</rank>
         <author>Doe, J.</author>
         <author>Public, J. Q.</author>
         <title>Answering Queries</title>
         <date>19941106</date>
      </record>
      <record>
         <handle>handlecorp/1110</handle>
         <rank>2859</rank>
         <author>Mouse, M.</author>
         <author>Disney, W.</author>
         <title>Success with Cartoons</title>
         <date>19941106</date>
      </record>
    </records>
  </SearchBoolean>

 

4.4 Collection Service

The collection service provides information about the individual components that make up a collection.

Describe Verb

Verb: Describe-Verb
Version: 2.0
Fixed args: verb
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response that contains a list, where each element of the list provides information on a version of the specified verb that is supported by this service. The following information may be provided at the verb or version level.

Each element of the list contains the following information:

Note that a service may implement more than one version of a verb.

Example Request:

/Dienst/Collection/2.0/Describe-Verb/Regions

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Describe-Verb version="2.0">
    <Verb name="Regions">
      <description>List the regions for this collection.
      </description>
      <version id="1.0">
        <example>http://cs-tr.cs.cornell.edu:80/Dienst/Collection/1.0/Regions</example>
      </version>
    </Verb>
  </Describe-Verb>

 

List Verbs

Verb: List-Verbs
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the name of the verbs defined by this service.

Example Request:

/Dienst/Collection/2.0/List-Verbs

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Verbs version="2.0">
    <verb>Regions</verb>
    <verb>Publishers</verb>
    <verb>QueryMediators</verb>
    <verb>Indices</verb>
    <verb>Repositories</verb>
  </List-Verbs>

 

Regions

Verb: Regions
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing a list of regions.

Example Request:

/Dienst/Collection/1.0/Regions

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Regions version="1.0">
    <Region host="region1host.cs.yourinst.edu" port="9090"
      symbol="NA-EAST" name="North America - Eastern Region" />
    <Region host="region2host.cs.yourinst.edu" port="9898"
      symbol="NA-WEST" name="North America - Western Region" />
  </Regions>

 

Collection

Verb: Collection
Version: 3.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing information about the collection server. This request provides information about the verbs supported by the collection service.

Example Request:

/Dienst/Collection/1.0/Collection

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Collection version="1.0">
    <CollectionServer host="chost.cs.yourinst.edu" 
      port="9891" priority="1">
      <Verbs>
        <Publishers>
          <version>1.0</version>
          <version>2.0</version>
          <version>3.0</version>
        </Publishers>
        <Repositories>
          <version>2.0</version>
          <version>3.0</version>
          <version>3.0</version>
        </Repositories>
      </Verbs>
    </CollectionServer>
  </Collection>

 

Publishers

Verb: Publishers
Version: 3.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the list of publishers that are represented in the collection. All documents in the collection are associated with a publisher.

Example Request:

/Dienst/Collection/3.0/Publishers

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Publishers version="3.0">
    <publisher pretty="Cornell University Computer Science
      Department" authority="ncstrl.cornell" publisher="CORNELLCS">
    <publisher pretty="CNR - Instituto di Cibernetica (Napoli)"
      authority="ercim.cnr.ic" publisher="ercim.cnr.ic">
  </Publshers>

 

Query Mediators

Verb: QueryMediators
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the name of the verbs defined by this service.

Example Request:

/Dienst/Collection/2.0/QueryMediators

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <QueryMediators version="2.0">
    <QueryMediator host="qmhost.cs.yourinst.edu" port="80"
      priority="1">
      <Verbs>
        <Describe-Verb><version>2.0</version></Describe-Verb>
        <List-Verbs><version>2.0</version><List-Verbs>
        <SearchBoolean>
          <version>1.0</version><version>2.0</version>
        <SearchBoolean>
      </Verbs>
    </QueryMediator>
  </QueryMediators>

 

Indexers

Verb: Indices
Version: 4.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the list of indexers that provide search services on a portion of the collection.

Example Request:

/Dienst/Collection/4.0/Indices

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Indices version="4.0">
    <Indexer host="ihost.cs.inst.edu" port="80" priority="1">
      <Authorities>
        <authority name="ercim.cnr.ic" />
        <authority name="ncstrl.cornell" />
      </Authorities>
      <Verbs>
        <Describe-Verb><version>1.0</version></Describe-Verb>
        <List-Verbs><version>1.0</version><List-Verbs>
        <SearchBoolean>
          <version>2.0</version><version>3.0</version>
        <SearchBoolean>
      </Verbs>
    </Indexer>
  </Indices>

 

Repositories

Verb: Repositories
Version: 4.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the list of repositories that store documents contained in the collection.

Example Request:

/Dienst/Collection/4.0/Repositories

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Repositories version="4.0">
    <Repository host="rhost.cs.inst.edu" port="80" priority="1">
      <Authorities>
        <authority name="ercim.cnr.ic" />
        <authority name="ncstrl.cornell" />
      </Authorities>
      <Verbs>
        <Describe-Verb><version>1.0</version>
          <version>2.0</version></Describe-Verb>
        <List-Verbs><version>1.0</version>
          <version>2.0</version><List-Verbs>
        <Structure><version>2.0</version><version>4.0</version>
        </Structure>
        <Disseminate><version>3.0</version>
        </Disseminate>
        <Formats><version>4.0</version>
        </Formats>
        <List-Contents><version>2.0</version><version>4.0</version>
        </List-Contents>
      </Verbs>
    <Repository>
  </Repositories>

4.5 Info Service

These messages return general information about the server.

Describe Verb

Verb: Describe-Verb
Version: 2.0
Fixed args: verb
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response that contains a list, where each element of the list provides information on a version of the specified verb that is supported by this service. The following information may be provided at the verb or version level.

Each element of the list contains the following information:

Note that a service may implement more than one version of a verb.

Example Request:

/Dienst/Info/2.0/Describe-Verb/List-Services

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Describe-Verb version="2.0">
    <Verb name="List-Services">
      <description>List services available at this site.
      </description>
      <version id="1.0">
        <example>http://cs-tr.cs.cornell.edu:80/Dienst/Info/1.0/List-Services</example>
      </version>
    </Verb>
  </Describe-Verb>

 

List Verbs

Verb: List-Verbs
Version: 2.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the name of the verbs defined by this service.

Example Request:

/Dienst/Info/2.0/List-Verbs

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Verbs version="2.0">
    <verb>Describe-Verb</verb>
    <verb>List-Services</verb>
    <verb>Identity</verb>
  </List-Verbs>

 

Server Identification

Verb: Identity
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing information about the identity of the Dienst server.

Example Request:

/Dienst/Info/1.0/Identity

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <Identity version="1.0">
    <server>This Server</server>
    <localhost>foo.bar.com</localhost>
    <localport>80</localport>
    <maintainer>jane@bar.com</maintainer>
    <daylight_savings_time_zone>EDT</daylight_savings_time_zone>
    <standard_time_zone>EST</standard_time_zone>
  </Identity>

List Services

Verb: List-Services
Version: 1.0
Fixed args: none
Keyword Args: none
Return MIME type: text/xml
Return Status Codes: 200, 400

Returns a structured response containing the names of the defined Dienst services that are supported by this server. 

Example Request:

/Dienst/Info/1.0/List-Services

Example Response:

<?xml version="1.0" encoding="UTF-8"?>
  <List-Services version="1.0">
    <service>Repository</service>
    <service>Index</service>
  </List-Services>

Appendix - DTDs for Messages

References

[Fielding et al., 1997] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, “Hypertext Transfer Protocol—HTTP/1.1. RFC 2068. U.C. Irvine, DEC, MIT/LCS. January, 1997. ftp://ds.internic.net/rfc/rfc2068.txt

[Lasher, Cohen, 1995] R. Lasher, D. Cohen, “A Format for Bibliographic Records, RFC 1807. Stanford, Myricom. June, 1995. ftp://ds.internic.net/rfc/rfc1807.txt

[ISO 8601] Regretably, the ISO standards are not available online.

[Handles] http://www.handle.net/ Corporation for National Research Initiatives.