The Codex Metadata Model.

Codex app retired as of Nolana

Please note that as of the Nolana release (Q3 2022) the Codex app was retired - these pages may still reference the app and associated modules.

Codex

Codex is a normalization and virtualization layer that allows Folio to integrate metadata about various resources regardless of format, encoding, or storage location. It is the piece that allows disparate resources to be surfaced using a common vocabulary and description.

The Codex metadata model for Folio is inspired by both the BIBFRAME 2 conceptual model and the Dublin Core (DC) Elements. The conceptual model (objects) are as shown in the following diagram.


The initial model consists of 5 objects (in orange). It is anticipated that more objects will be added to the model. Some of the future objects are already known (in blue): Work and Subject.

This model is only inspired by BIBFRAME 2, it does not strictly adhere to BIBFRAME2. A key concept is the similar central stack consisting of  Work - Instance - Item. Although in this case, which object contains specific properties may differ. This model includes an object not found in BIBFRAME: the Package. The Location and Coverage objects are shown broken out as separate objects. This is to illustrate their reusability for other parts of Folio. They are represented using distinct JSON schema definitions, but in practice they will be found nested within higher level objects such as Item or Package.


Instance

The Instance object represents the generalized abstraction of a resource, Out of necessity this object also takes on some of the properties which BIBFRAME 2 might place in the Work.

The Instance object consists of the following fields.

Field
TypeRequiredRepeatableDescription
idstringY
The internal id of the Instance record (UUID)
titlestringY
The primary title (or label) associated with the resource
altTitlestring

An alternative title for the resource. (e.g. original language version title of a Movie)
seriesstring

A series title associated with the resource (e.g. Harry Potter)
contributorstring
YA set of secondary authors/creators tied to the resource
publisherstring

The publisher, or provider, of the resource
datestring

A date associated with the resource (e.g. publication date)
typestring

The resource type. (e.g.: serial; monograph; audio recording; etc..)
formatstring

The material type or distribution format of the resource. (e.g.: hardcover; cassette tape; dvd; etc..)
identifier
object
YAn extensible set of name-value pairs of identifiers associated with the resource

typestring

identifier type : e.g. ISSN

valuestring

identifier value
sourcestring

a link back to the source record for this metadata
languagestring
Ythe set of languages used by the resource
rightsstring

Access rights associated with the resource
versionstring

This is where the edition can be found in the case of a monograph
lastModifiedstring

Adminstrative field indicating date at which the resource was added to the Codex.

Instance JSON schema.

Item / Holding

This objects represents two distinct concepts: (1) an Item in the sense of a specific copy of an Instance; (2) a Holding which describes the relationship of the library or institution to the Item. From a data modeling point of view there is so much overlap in the set of metadata needed to describe them both, that it only makes sense to use a single object to represent both concepts together.  The term Item in the rest of this document should be understood to be interchangeable with Item/Holding.


Also note that what is discussed in this document is as a “holding” is slightly different from what is known as a holding in the context of a MARC holdings record (MFHD). In this context, a “holding” represents the possession of (or access to) a resource by the library: what is being held.

The Item represents a specific material copy of an Instance. Put differently, an Item has a single Instance as a parent.  The Item will inherit many fields from its parent Instance, which will appear directly within the Item object. If the field changes in the Instance it will be instantly reflected in the corresponding Item field. (Behind the scenes the implementation will share the data rather duplicate it between the two object types.)

There is however the ability to override these inherited fields at the Item level. On the surface,  this feature doesn’t make much sense when one thinks of a Codex Item and Instance representing a resource described in the Inventory domain. However, it does make more sense when one considers Referential Cataloging. If the master bibliographic description is being maintained in a system external to Folio, such as in a knowledgebase, there is an expectation that corrections and updates will be made in the external system. Since there is no direct control as to when those may be made, the override allows for a temporary update to be applied by the local library directly and immediately. When the changes are eventually made in the remote system, the local overrides can be removed and the fields will revert to their inherited values which reference the master bibliographic record.

Field
TypeRequiredRepeatableDescription
idstringY
The internal id of the Item record (UUID)
instanceidstringY
Link back to the parent Instance
descriptionstring

Free-form description of the resource
titlestringY
Inherited from Instance: see above
altTitlestring

Inherited from Instance: see above
seriesstring

Inherited from Instance: see above
contributorstring
YInherited from Instance: see above
publisherstring

Inherited from Instance: see above
datestring

Inherited from Instance: see above
typestring

Inherited from Instance: see above
formatstring

Inherited from Instance: see above
identifier
object
YInherited from Instance: see above

typestring

Inherited from Instance: see above

valuestring

Inherited from Instance: see above
sourcestring

Inherited from Instance: see above
languagestring
YInherited from Instance: see above
rightsstring

Inherited from Instance: see above
copyNumbernumber

the "bad old" copy number. Required for backwards compatibilityThe Codex Metadata Model.
barcodestring

barcode on the Item
vendorPackagestring

name of vendor package associated with item. (Not to be confused with the Codex Package object.)
coverageobject

See Coverage object
locationobject
YSee Location object. There can be multiple locations associated with an Item: e.g. Permanent and Termporary
itemStatusstring

Item state: e.g. on order
isSelectedboolean

Holding property. Selection state ("is it held?") of the Item. Mostly relevant for e-resources
isCustomizedboolean

Administrative flag to indicate that inherited fields have been overwritten

Item JSON schema.

Package

The Package represents a container of either Instances and/or Items. As such it provides the ability to group these together for any number of reasons. A given Instance or Item may be placed in any number of Packages since these are ostensibly independent groupings and there are many possible ways to group resources.


The Codex Package should not be confused with the more familiar package object found in a typical electronic resource knowledgebase. The latter is a bundling mechanism used by vendors for commercial purposes. The former is a much broader notion which can be used to represent all sorts of groupings. Obviously, the commercial package from a vendor will find itself represented in the Codes as a Package object of a particular type. However, it is only one of many possible types of Packages.

In addition to being a container of objects, the Package is an object in its own right. It contains a number of metadata fields which are used to describe it, separately from its container payload. The Package object can then be used as a whole to manipulate resources in a very powerful fashion.

FieldTypeRequiredRepeatableDescription
idstringY
The internal id of the Package record (UUID)
identifierstring

An external identifier used to track the Package (e.g. a barcode)
namestring

A name (or label) associated with the Package
descriptionstring

A free-form description of the Package
typestring

The type of package - what sort of collection does it represent. (e.g. DVD box set; boundwidth; archival cardboard box; etc..)
vendoridstring

Link to vendor object associated with this resource (could be in another domain)
vendorstring

Name of vendor for display purposes
platformstring

Platform hosting the e-resource.
itemsarrayY
Array containing Instance or Item objects
itemCountnumber

Number of items found in the itemsArray
selectedCountnumber

Number of items in the ItemsArray that are selected ("are held"). Mostly relevant for e-resources
coverageobject

Coverage object for the package itself, rather than its contents. See Content object
isSelectedboolean

Selection state ("is it held?") of the package itself, rather than its contents. Mostly relevant for e-resources

Package JSON schema.

Location

The Location object will be typically be found nested within the Item or Package object. However, it warrants its own representation as it is a powerful object with potential reuse in other parts of Folio. To this end it has it’s own data model description (JSON schema).

The Location provides an address for the location or consumption of a particular resource. To support physical resources which need a physical address, it provides a multi-level hierarchy of address components. At the top are the fairly rigid Institution - Campus - Library, which seeks to provide consistency across various installations of Folio and the different tenants within those. Below that three level hierarchy is the powerful Parking field. The Parking field is an extensible collection of name-value pairs. It can contain both some standardized entries (e.g. LC CallNumbers) as well as institution or library specific address components (e.g. ShelfName, or Department).

To support the needs of electronic resources the Location object provides a Platform field and a URI field

Field
TypeRequiredRepeatableDescription
idstringY
The internal id of the Location record (UUID)
institutionstring

Top level administrative organization (e.g. University)
campusstring

Geographic level (e.g. City)
librarystring

Building level (e.g. individual libraries)
parkingobject
YExtensible collection of name value pairs. Can represent common location properties (e.g. cal numbers) or library specific location details (e.g. shelf number or department)

name


Name of the parking value (e.g. LCCallNumber or ShelfLocation)

value


Value tied to the specific parking name
platformstring

Delivery platform (for e-resources)
uristring

URI to access a resource (for e-resources)

.Location JSON schema.

Coverage

The Coverage object allows the definition of coverage ranges associated with a resource. This is some of what would traditionally be found in a library’’s holding record (holding in the non-Codex sense).

This object allows for the description of multiple ranges which may be specified as dates or in other units such as volumes and issues. Ranges can also be used to represent single dates associated with monographs.

The Coverage object also provides support for embargoes and a free-form coverage statement.

Field
TypeRequiredRepeatableDescription
idstringYYThe internal id of the Coverage record (UUID)
rangeobject
Y

A set of ranges to describe coverage for the resource

  • Begin and End values specify a range
  • End value is optional (i.e. when specifying date singleton)
  • Range can be specified in time (dates) or volume-issue units

beginstring

Beginning point in a range

endstring

Ending point in a range
statementstring

A free form text statement to describe coverage for the resource
embargoobject
YA set of ranges to describe embargo periods for a resource

beginstring

Beginning of embargo

endstring

End of embargo

Coverage JSON schema.