This specification defines the concept of a Holding in the context of a library. A library is said to hold a particular book or issue of a journal. HoldingStatement is defined as a class rather than a predicate because it is an n-ary relation, at the very least the principal entities are the library doing the holding, the thing that is held and the location at which it is held (which may be a physical or logical location).

Introduction

Background

In the process of working on representing data aggregated by SUNCAT from various libraries across the UK in RDF ([[!RDF-SYNTAX]], [[!RDF-MT]]), we found a that existing vocabularies for describing bibliographic data are generally missing constructs for dealing with holding statements. As SUNCAT primarily contains information relating to which issues of which academic journals are held in the institutions, the primary value of this information is clearly in the holding statements. Since we have chosen a relatively flat model of catalogue records, as is natural in the [[MARC21]] source data and is appropriate with [[!BIBO]], there is no obvious way to express this information which might normally go at the Item level were we to use a more elabrate model like [[FRBR-RDF]].

We therefore define a simple lh:HoldingStatement construct and some associated predicates in such a way that it can be used with BIBO or indeed any other vocabulary for describing bibliographic data.

Namespaces

The namespaces used in this document are:

lh:
http://vocab.edina.ed.ac.uk/holdings#
rdf:
http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs:
http://www.w3.org/2000/01/rdf-schema#
owl:
http://www.w3.org/2002/07/owl#
dc:
http://purl.org/dc/terms/
bibo:
http://purl.org/ontology/bibo/
foaf:
http://xmlns.com/foaf/0.1/

Motivating Example

We are concerned with representing data of the following type in RDF (ficticious fragment of a MARC/XML record):

<datafield tag="852" ind1=" " ind2=" ">
  <subfield code="a">Alexandria</subfield>
  <subfield code="z">Buried in a secret location in the desert's</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2="0">
  <subfield code="u">http://alexandria.example.org/desert/hiding/place</subfield>
</datafield>

In this case, code 856 means Electronic Location and Access and will usually include a URI where the item in question (subfield u) can be obtained, and code 852 is for more traditional locations and can include a wide variety of information but will almost always include the institution (subfield a) at the very least.

Reading the specification of field 852 it is really quite elaborate and handles all sorts of cases relating to different conventions for putting books on shelves, ordering by title, or within a collection, previous shelf locations, etc., etc.. We do not propose to handle all of these cases in this lightweight vocabulary, but instead simply to address the basic information, namely that an institution (identified, presumably, by a URI) holds an item (presumably also identified by a URI and perhaps but not necessarily modelled with BIBO.

More explicitly, we might wish to have an arrangement like this:

ex:Alexandria a foaf:Organisation;
  foaf:name "Library of Alexandria".

ex:OnSphereMaking a bibo:Book;
  dc:title "On Sphere Making";
  dc:creator ex:Archimedes.
  lh:held [
    a lh:HoldingStatement;
    dc:description "Buried in a secret desert location";
    lh:holder ex:Alexandria;
    lh:heldAt <http://alexandria.example.org/desert/hiding/place>
  ].

Vocabulary Reference

Throughout this specification, the item side of the relations that are defined, in terms of their domains and ranges as appropriate, are purposely unrestricted. That is rdf:Resource is used. Commonly they will be used with instances of bibo:Document or subclasses thereof but the intention is not to restrict users of this vocabulary to using it with BIBO.

Holding Statement Vocabulary Diagram

A version of this vocabulary specification in [[!TURTLE]] format is available here: holdings.ttl

Classes

lh:HoldingStatement

A Class representing an n-ary relation between an institution holding an item, the item and other information such as the location at which the item is held, any descriptions or notes, shelf-marks, etc.

Predicates

lh:holding

Used to link from an institution or organisation to a holding statement for some item.

rdfs:domain
foaf:Organisation
rdfs:range
lh:HoldingStatement
owl:inverseOf
lh:holder

lh:held

Used to link from an item to a holding statement for it.

rdfs:domain
rdf:Resource
rdfs:range
lh:HoldingStatement
owl:inverseOf
lh:item

lh:holder

Used to link from a holding statement to the institution or organisation doing the holding.

rdfs:domain
lh:HoldingStatement
rdfs:range
foaf:Organisation
owl:inverseOf
lh:holding

lh:item

Used to link from a holding statement to the item that is held.

rdfs:domain
rdf:Resource
rdfs:range
lh:HoldingStatement
owl:inverseOf
lh:held

lh:heldAt

Indicates the location, electronic or otherwise at which an item is held.

rdfs:domain
lh:HoldingStatement
rdfs:range
rdf:Resource

lh:holds Experimental

A binary predicate shortcut for linking directly from the holding institution to the item held in the case there is no useful ancilliary data. This is expressed in the following (unsafe) N3 rules:

{ ?org lh:holds ?item } => 
{ [ lh:holder ?org;
    lh:item ?item ] }.

{ ?holding lh:holder ?org;
           lh:item ?item } =>
{ ?org lh:holds ?item }.
rdfs:domain
foaf:Organisation
rdfs:range
rdf:Resource
owl:inverseOf
lh:heldBy

lh:heldBy Experimental

A shortcut binary predicate for linking directly from a held item to the holding organisation in the case that there is no other useful anciallary holding information. This is expressed in the following (unsafe) N3 rules:

{ ?item lh:heldBy ?org } =>
{ [ lh:holder ?org;
    lh:item ?item ] }.

{ ?holding lh:holder ?org;
           lh:item ?item } =>
{ ?item lh:heldBy ?org }.
rdfs:domain
rdf:Resource
rdfs:range
foaf:Organisation
owl:inverseOf
lh:holds

Acknowledgements

Many thanks to Robin Berjon for making our lives so much easier with his cool tool.