Page tree
Skip to end of metadata
Go to start of metadata


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.



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 compatibilitycodex.location.json
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.


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.

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.


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.


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.

  • No labels