Data Model

Lark has Concept model and Event Log model.

The Lark Concept

Lark’s concept model follows skos:Concept definition. A full authority record built from it and saved to the solr index.

The following Vocabulary/Property has been defined for an authority record:

"prefLabel",
"alternateLabel",
"hiddenLabel",
"exactMatch",
"closeMatch",
"note",
"scopeNote",
"editorialNote",
"historyNote",
"definition",
"scheme",
"literalForm",
"label_source",
"campus",
"annotation",
"identifier"

The Lark Event Log

Lark’s state is maintained by a single append-only event log. This document provides the abstract specification for that log, as well as some notes about its implementation.

In principle, the full internal state of the application and its records can be reconstructed from the events on the log.

Events

Events are simple data structures holding:

  • type: a token representing specifying the semantics of the event data.
  • data: a key-value structure providing the event details.
  • created_at: a unique timestamp.

Implementation Note:

Events are implemented as Valkyrie::Resource objects. This means they use dry-schema and dry-types.

The Log

The Event Log is a totally-ordered and persistent stream of Events. The log is append only, meaning events can only be added (never destroyed), and each event is added to the end of the log (i.e. after the previous event).

The log is primarily for internal use, though aspects of it MAY be exposed via the API, especially for expressing record history/provenance.

Events added to the log are published to listeners/subscribers.

Event Types

Each Event has a type, corresponding to semantics for its data. This section defines types that appear in the log, and specifies the expected data and their impact on the application and record states.

Events missing required (MUST) data MUST be ignored (i.e. treated as a no-op); additionally SHOULD be rejected when added to the log.

For example: a :create Event without an id SHOULD result in an error when added to the log. If such an event is encountered when reading the log, it MUST NOT result in the creation of any record (or in any other change to application/record state).

Create

A :create Event establishes the existence of a particular Authority Record.

Data:

:create Events MUST have an id. The value of this attribute is a string identifier for the created record.

Key Requirement Description
id MUST The identifier of the record created by the event.

Change Properties

A :change_property Event updates the properties of an Authority Record.

Data:

Key Requirement Description
id MUST The identifier of the record to which changes are applied.
changes MUST A data structure containing the changes to be applied to the record.