Request For Comments (RFCs)
  • Request for comments (RFC)
  • RFC 001: Matcher architecture
  • RFC 002: Archival Storage Service
  • RFC 003: Asset Access
  • RFC 004: METS Adapter
  • RFC 005: Reporting Pipeline
  • RFC 006: Reindexer architecture
  • RFC 007: Goobi Upload
  • RFC 008: API Filtering
  • RFC 009: AWS account setup
  • RFC 010: Data model
  • RFC 011: Network Architecture
  • RFC 012: API Architecture
  • RFC 013: Release & Deployment tracking
    • Deployment example
    • Version 1
  • RFC 014: Born digital workflow
  • RFC 015: How we work
    • Code Reviews
    • Shared Libraries
  • RFC 016: Holdings service
  • URL Design
  • Pipeline Tracing
  • Platform Reliability
    • CI/CD
    • Observability
    • Reliability
  • RFC 020: Locations and requesting
  • RFC 021: Data science in the pipeline
  • RFC 022: Logging
    • Logging example
  • RFC 023: Images endpoint
  • RFC 024: Library management
  • RFC 025: Tagging our Terraform resources
  • RFC 026: Relevance reporting service
  • RFC 026: Relation Embedder
  • RFC 027: Pipeline Intermediate Storage
  • RFC 029: Work state modelling
  • Pipeline merging
  • RFC 031: Relation Batcher
  • RFC 032: Calm deletion watcher
  • RFC 033: Api internal model versioning
  • RFC 034: Modelling Locations in the Catalogue API
  • RFC 035: Modelling MARC 856 "web linking entry"
  • RFC 036: Modelling holdings records
  • API faceting principles & expectations
  • Matcher versioning
  • Requesting API design
  • TEI Adapter
  • Tracking changes to the Miro data
  • How do we tell users how to find stuff?
  • Removing deleted records from (re)indexes
  • RFC 044: Tracking Patron Deletions
  • Work relationships in Sierra, part 2
    • Work relationships in Sierra
  • Born Digital in IIIF
  • Transitive hierarchies in Sierra
  • RFC 047: Changing the structure of the Catalogue API index
  • RFC 048: Concepts work plan
  • RFC 049: Changing how aggregations are retrieved by the Catalogue API
  • RFC 050: Design considerations for the concepts API
  • RFC 051: Ingesting Library of Congress concepts
  • RFC: 052: The Concepts Pipeline - phase one
  • RFC 053: Logging in Lambdas
  • RFC 054: Authoritative ids with multiple Canonical ids.
  • RFC 055: Genres as Concepts
  • RFC 055: Content API
    • Content API: articles endpoint
    • Content API: Events endpoint
    • Content API: exhibitions endpoint
    • The future of this endpoint
  • RFC 056: Prismic to Elasticsearch ETL pipeline
  • RFC 57: Relevance testing
    • Examples of rank CLI usage
  • RFC 059: Splitting the catalogue pipeline Terraform
  • RFC 060: Service health-check principles
  • RFC 060: Offsite requesting
    • Sierra locations in the Catalogue API
  • Content-api: next steps
Powered by GitBook
On this page
  • How holdings records are used
  • How holdings records connect to other records
  • MARC fields on holdings records
  • How should we present holdings records in the Catalogue API?
  • Can we present holdings records as Items?
  • Creating a separate Holdings type
  • Possible future enhancements
  • Examples

RFC 036: Modelling holdings records

PreviousRFC 035: Modelling MARC 856 "web linking entry"NextAPI faceting principles & expectations

Last updated 10 months ago

Holdings records are a type of record in Sierra, alongside bibs and items (which we already present through the Catalogue API).

In library science, the holdings are the materials owned (or "held") by a library. At Wellcome, the list of materials we own is split between item records and holdings records. We tend to use item records for single, one-off objects (for example, a book), and holdings records for more complex or continuously published objects (for example, journals, periodicals, and electronic subscriptions).

Holdings records are presented separately from item records on the current Wellcome Library website. For example, on :

We need to include information from holdings records on the new Wellcome Collection website. This RFC provides examples of the data in a holding his record, and suggests an initial approach to modelling these in the API.

How holdings records are used

This analysis is based on a February 2021 snapshot of the Sierra catalogue. At time of writing, we have 42,662 holdings records.

How holdings records connect to other records

Holdings records in the Sierra API have fields bibIds and itemIds.

A bib is the core of a Work in the Catalogue API, so by identifying all the holdings associated with a single bib, we have all the holdings that should be part of a particular Work.

MARC fields on holdings records

Wellcome uses the following MARC fields (in decreasing order of usage):

  • Fixed field 40 Location. This is a Sierra code that describes where the holdings are kept, e.g. stax (Closed stores) or elro (Online). Unlike bib/item records, we only get the code and not the full location name.

  • Within the 866 field, we mostly use subfields $a (textual holdings), $x (nonpublic note) and $z (public note).

    There don't seem to be particularly consistent rules about the use of $a and $z. Different records use them for similar text.

  • The fields come in pairs (853 is labels, 863 is values). For example, 853 might contain labels vol., no. and issue, and 863 might contain the values 1–9, 1–90, 2000–2010. These would be joined to form the string vol. 1–9 no. 1–90 issue 2000–2010.

    There are similar pairs 854/864 (for supplementary material) and 855/865 (for captions and indexes).

    Most holdings records have 0 or 1 853/863 pairs, but some records have a lot -- up to 86 in one case.

We also have a handful of records using fields 000, 561, 596, 852, 860, 876, 990. Because these are so infrequently used, we will skip using them in the initial model.

How should we present holdings records in the Catalogue API?

Can we present holdings records as Items?

The Catalogue API already has a model for Work and Item. The Work model is populated from bibs, and the Item model from items.

We did consider trying to put data from holdings records into the Item model, but the data in holdings records doesn't really fit. For example:

  • Two items titled Volume 1 and Volume 2, and a holdings record titled Complete set. It's useful to know that these two volumes form a complete set, but it wouldn't make sense to store this information on the individual items.

  • Two items titled Volume 1 and Volume 2, and a holdings record titled Missing volume 3. Here the holdings record is even more important, but there's no way to encode the absence of an item.

  • A run of journals, with each issue itemised, and a holdings record titled 100 issues, 1957–1972. The holdings record can provide useful summary information that isn't easily observed from the items.

Creating a separate Holdings type

We will create a new Holdings type, which will appear as a list on a Work called "holdings".

For a holdings record with a physical location (anything except elro/Online in fixed field 40), we will create an instance of Holdings, with fields populated as follows:

  • The description field will be a string, taken from the contents of MARC field 866 subfield $a.

  • The note field will be a string, taken from the contents of MARC field 866 subfield $z.

  • The enumeration field will be a list of strings, one per 853/863 enumeration pair.

    We will not include 854/864 or 855/865; these are used rarely and I don't want to model the distinction between holdings/supplementary materials/indexes in the initial implementation.

  • The locations list will contain a physical location using fixed field 40 for the location type/label, and 949 for the shelfmark.

  • For now, we won't add any identifiers. We could add them as h-prefixed Sierra IDs, but I don't see much use of those identifiers -- usually people use the b number when discussing the associated holdings record.

    (It's also not entirely clear to me that h is the correct prefix to use. I've also seen these referred to as "checkin records", with a c prefix. I don't want to add identifiers until I'm sure what prefix to use.)

For a holdings record with an online location (elro in fixed field 40), we will create an unidentified instance of Item, with fields populated as follows:

  • The locations list will contain digital location(s) using the contents of field 856. The label on these locations will be drawn from the contents of the 853/863 enumeration pairs, where possible.

Possible future enhancements

Although we're treating items and holdings as separate types, we might be able to do some de-duplication of data in a future release (e.g. two items Vol. 1 and Vol. 2, and a holdings record Vols. 1 and 2). This would be quite expensive to do, so we're not going to spend significant time on that until the One Website Project is finished. There are better places that time/effort can be spent.

Examples

A bib with a single physical holdings record
{
  "type": "Work",
  "id": "esstapc9",
  "holdings": [
    {
      "enumerations": [
        "v.1 (1979) - v1.130:no.1 (2010)",
        "v.130:no.3 (2010) - v.132:no.3 (2010)",
        "v.133:no.2 (2011) - v.160:no.2 (2015)",
        "v.163 (2015)",
        "v.164:no.1 (2015)",
        "v.165 (2015) - v.166:no.3 (2015)",
        "v.167 (2015) - v.168 (2015)""
      ],
      "locations": [
        {
          "locationType": {
            "id": "open-shelves",
            "label": "Open shelves",
            "type": "LocationType"
          },
          "label": "Open shelves",
          "type": "Location"
        }
      ],
      "type": "Holdings"
    }
  ],
  …
}
A bib with a physical holdings record and enumerations
{
  "type": "Work",
  "id": "esstapc9",
  "holdings": [
    {
      "description": "Vol. 1-7",
      "locations": [
        {
          "locationType": {
            "id": "closed-stores",
            "label": "Closed stores",
            "type": "LocationType"
          },
          "label": "Closed stores",
          "type": "Location"
        }
      ],
      "type": "Holdings"
    }
  ],
  …
}
A bib with a single electronic holdings record
{
  "type": "Work",
  "id": "fjuk8v9k",
  "items": [
    {
      "locations": [
        {
          "locationType": {
            "id": "online-resource",
            "label": "Online resource",
            "type": "LocationType"
          },
          "accessConditions": [
            {
              "accessStatus": {
                "id": "licensed-resources",
                "label": "Licensed resources",
                "type": "AccessStatus"
              },
              "type": "AccessCondition"
            }
          ],
          "linkText": "View this e-book",
          "url": "http://ark.cdlib.org/ark:/13030/ft0d5n99m0/",
          "type": "Location"
        }
      ],
      "type": "Item"
    }
  ],
  …
}
A bib with multiple physical holdings records
{
  "type": "Work",
  "id": "jpwt378k",
  "holdings": [
    {
      "title": "Vol. 6 wanting.",
      "locations": [
        {
          "locationType": {
            "id": "closed-stores",
            "label": "Closed stores",
            "type": "LocationType"
          },
          "label": "Closed stores",
          "type": "Location"
        }
      ],
      "type": "Holdings"
    },
    {
      "title": "Vol. 3 only",
      "locations": [
        {
          "locationType": {
            "id": "closed-stores",
            "label": "Closed stores",
            "type": "LocationType"
          },
          "label": "Closed stores",
          "type": "Location"
        }
      ],
      "type": "Holdings"
    }
  ],
  …
}

In theory we could also combine based on items, but this field is often incomplete, and it doesn't tell us anything about Works. In practice, if a holdings record links to an item, it also explicitly links to all the bibs that the item links to. (Put another way, linking is .)

. This is a free-text description of the holdings, often written by a cataloguer. Examples include "Complete set", "Vol. 1 only" or "1913 (in Provincial sequence)".

989. This contains old migration data that we don't need to show the public. See .

853 and 863 . These fields are used to describe which parts of a multi-part object we have: for example, the individual issues of a journal.

See about how we model electronic locations for more discussion of this field.

949 Shelfmark. This contains values like /JOU, /HIS and /MED. These are currently exposed on wellcomelibrary.org, e.g.

. It's not clear how we're actually using this field: it contains values like "Library Display" and "Reading Room", accompanied by a range of dates, sometimes years passed.

b10032538 (/)

b13107884 (/)

b10035370 (/)

b11514176 (/)

transitive
866 Textual Holdings
discussion in Slack
Enumeration and Chronology
856 Electronic Location.
RFC 035
b13488284
843 Reproduction Note
Library
API
Library
API
Library
API
Library
API
b10000240
Two sections on the library website, one titled "Holdings", the other titled "Items".
A graph with three vertices (bibs, items, holdings). There are arrows from holdings to bibs, holdings to items, and items to bibs.