logo Client Interfaces

The ADL middleware server mediates between digital library clients and digital library collections. This document describes the middleware's three client interfaces; a companion document describes the middleware's collection interface.

Contents

The big picture

Here's an architecture diagram that shows the client interfaces in context. Don't get boggled; concentrate on the upper half of the diagram.

Services

The middleware's client interfaces are partitioned into eleven independent, stateless services. The services are:

properties <- configuration()

Returns middleware configuration properties. The property of most interest to clients is the list of available collections.

metadata <- collection(collection-name)

Returns collection-level metadata for a collection; see Metadata below.

query-id <- query(query)

Asynchronously queries one or more collections. query is a query expressed in the middleware's query language; see Query language below. Results are stored in a "result set" on the server. query-id identifies both the running query and the result set.

cancel(query-id)

Cancels a running query.

result-set-reference <- results(query-id)

Returns a reference to a result set. A result set is a server-side object that holds the results of a query in the form of a single merged, ranked list of collection items, where each collection item is represented by a triplet of the item's three standard ADL metadata views; see Metadata below. Result sets carry sundry other properties such as elapsed time, total number of results processed, etc.

item-identifiers <- identifiers(collection-name)

Returns the identifiers of all items in a collection.

metadata <- metadata(view, collection-name, item-identifier)

Returns a view of the metadata for an item within a collection; see Metadata below.

document <- status()

Returns the middleware's status as an HTML document.

reference(base-url, remote-collection-name [, local-name])

References a remote collection so that the collection appears and functions as a local collection. base-url is the remote middleware server's HTTP or RMI base URL. The collection is known locally as local-name, if specified, and otherwise by its name on the remote server, remote-collection-name.

unreference(collection-name)

Removes the reference to a remote collection.

unload(collection-name)

Unloads the driver for a collection. (Drivers are automatically loaded on demand.)

Interfaces

There are three client interfaces to the middleware: fundamental, HTTP, and RMI.

The ADL middleware server is implemented in Java, and the fundamental client interface consists of Java objects and object methods. For example, the metadata service is implemented by class MetadataService and is invoked by calling that class's performMetadataService method. The exact semantics of the services are ultimately defined by the fundamental interface.

The HTTP interface is layered on top of the fundamental interface. It accepts HTTP GET and POST requests, converting URL-encoded parameters into service method arguments and returning service results as MIME-typed content. Service exceptions are returned as HTTP failure codes.

The RMI interface is... just that.

The table below correlates the classes implementing the three interfaces.

Fundamental   HTTP   RMI

ConfigurationService   ConfigurationServlet   ConfigurationService
CollectionService   CollectionServlet   CollectionService
QueryService   QueryServlet   QueryService
CancelService   CancelServlet   CancelService
ResultsService   ResultsServlet   ResultsService
IdentifiersService   IdentifiersServlet   IdentifiersService
MetadataService   MetadataServlet   MetadataService
StatusService   StatusServlet   StatusService
ReferenceService   ReferenceServlet   ReferenceService
UnreferenceService   UnreferenceServlet   UnreferenceService
UnloadService   UnloadServlet   UnloadService

Query language

The middleware's query language is a generic, XML-encoded language that supports boolean combinations of typed constraints against abstract metadata fields, or "search buckets." Its syntax and semantics are defined by the DTD ADL-query.dtd.

ADL has defined a set of nine standard search buckets. These buckets are defined conventionally, not architecturally. Nevertheless, clients can assume that all collections support all of the following buckets:

Geographic locations
Internal name   adl:geographic-locations
Type   spatial
Operators   contains, is-contained-in, overlaps
Content   The item's spatial footprint, i.e., an approximation of the subset of the Earth's surface to which the item is relevant, expressed as any of several types of geometric regions defined in WGS84 latitude/longitude coordinates.
Dates
Internal name   adl:dates
Type   temporal
Operators   contains, is-contained-in, overlaps
Content   The item's temporal footprint, i.e., the range of calendar dates to which the item is relevant.
Types
Internal name   adl:types
Type   hierarchical
Operators   is-a
Content   Terms drawn from the ADL Object Type Thesaurus identifying the meaning or content of the item.
Formats
Internal name   adl:formats
Type   hierarchical
Operators   is-a
Content   Terms drawn from the ADL Object Format Thesaurus identifying the form or representation of the item.
Titles
Internal name   adl:titles
Type   textual
Operators   contains-all-words, contains-any-words, contains-phrase
Content   The item's title. This bucket is a subset of the "Subject-related text" bucket.
Originators
Internal name   adl:originators
Type   textual
Operators   contains-all-words, contains-any-words, contains-phrase
Content   Names of entities related to the origination of the item (authors, publishers, distributors, etc.).
Assigned terms
Internal name   adl:assigned-terms
Type   textual
Operators   contains-all-words, contains-any-words, contains-phrase
Content   Subject-related terms from controlled vocabularies. This bucket is a subset of the "Subject-related text" bucket.
Subject-related text
Internal name   adl:subject-related-text
Type   textual
Operators   contains-all-words, contains-any-words, contains-phrase
Content   Text indicative of the subject of the item, not necessarily from controlled vocabularies. This bucket is a superset of the "Titles" and "Assigned terms" buckets.
Identifiers
Internal name   adl:identifiers
Type   identification
Operators   matches
Content   Item names and codes that serve as unique identifiers.

Metadata

All metadata returned by the middleware is encoded in XML and adheres to publicly-defined, external DTDs. The DTDs listed below contain human-readable documentation, and define both syntactic form and semantic content.

For collection-level metadata see ADL-collection-metadata.dtd. The collection-level metadata for a collection contains a number of items of interest to clients: the buckets supported by the collection; the thesauri used to categorize the collection; the number of items in the collection both overall and broken down by type and format; the spatiotemporal distribution of the items; and so on. Examples of collection-level metadata in XML and rendered as HTML can be found here.

Item-level metadata is packaged into "views," with the views differing in size, content, encoding style, and intended usage. Collections and even individual items within collections may define and return arbitrary views. ADL defines three standard views which all collections and items must support:

bucket
DTD   ADL-bucket-report.dtd
Content   Describes mappings from the item's native metadata to high-level, searchable buckets.
browse
DTD   ADL-browse-report.dtd
Content   Describes the browse-size representations of the item that are available.
access
DTD   ADL-access-report.dtd
Content   Provides the information necessary to download or otherwise access the item's content.

Take it for a spin

Perhaps the easiest way to understand what the middleware does is to try it out. Here are some interactive test forms. Or, consult the servlet-URL mapping to see how to point your HTTP client at a running ADL middleware server. RMI clients should consult the corresponding RMI registry names and download the RMI client package, which contains the necessary interface classes and some sample source code.

last modified 2009-02-06 22:43