Data model

Fields

A field is a definition that applies across the whole instance. It exists independently of projects and layouts. Values belong to the field, not to the layout.

You manage fields under Data model › Fields (status 9). The list is grouped by field group. Clicking a field opens its details in a dialog: the sections on the left, the selected section in the middle and the description of the field type on the right.

Field details of the text field “Objekttitel”: on the left the sections Basics, Parameters, Output, Conditions, Permissions and Usage, in the middle the basics with field name, field group, note, sample content and field type, on the right the description of the field type.

Sections of the field details

SectionContents
BasicsField name, Field group, Note, Sample content, Field type
ParametersThe configuration of the field, next to it the field type’s default. See Field configuration
OutputYour own formatting (output formatters) for views and export
ConditionsChecks during data entry. See below
CleanupSteps that every value goes through before it is saved. See Cleanup
InheritOnly for text, number, date and authority fields: take over values or links from an authority record. See below
Custom codeOnly for field types with their own display: a Svelte component or HTML template
PermissionsRead and write permissions for Everyone and for each group
UsageIn which projects, on which layouts and on how many objects the field occurs

Basics

PropertyMeaning
Field nameThe name. Unique within the instance. Filters, templates, exports and mappings point to it
Field groupOrders the field pickers. Has no effect on permissions or storage
NoteText shown at the field during data entry. This is where cataloguing rules belong
Sample contentA value that the layout editor and the standards administration show instead of real data
Field typeHow the value is entered and stored. See Field types

The field name is an identifier

You can change it, but many places point to the field by exactly this string:

  • Word templates: $o[`Objekthöhe`]. Moliri updates these when you rename, see below
  • Saved views and filters
  • Excel export presets
  • Virtual fields and formatting

Renaming breaks anything that points only by name. Change the label on the layout instead. You can choose it freely for each layout, and it breaks nothing.

After a rename, Moliri rewrites the stored Word templates to the new name in the background, backing up every changed file first. Anything it could not rewrite triggers a warning, and the report of the run lists the places. Runs and reports also appear in the Upload workers and queue view of the file library. Under Word templates: new names you can also check all stored templates against the current names (Dry run, report only) or rewrite them (Rewrite).

Naming rules that work well

Because the name is meant to stay stable, it pays to be careful when you create a field. No units in the name (they belong in the parameters), no project names, no years, no leading spaces, no typographic quotation marks. A prefix for each area (Objektmaße_Breite, Leihgeber_Anschrift) sorts the list by itself.

Changing the field type

You can only switch to field types that store their values in the same form. The picker only offers those. If there are none, it says No switch possible.

A switch does not change the stored values, only the input and the parameters. Turning a text field into a select list is therefore harmless: the values stay.

Conditions

Conditions check a value during data entry. They warn, they do not block: the value is saved in any case, and the violation is marked at the field.

ConditionChecks
must not be emptyRequired entry
unique in the projectNo second object in the project with the same value
unique in the databaseNo second object in the instance with the same value
not in the futureOnly for date and timestamp fields: no date after today. A partial date such as 2027 only counts once the whole year is in the future
Custom ruleA JS expression that returns true or false. Together with a Message on violation

Next to the conditions there are two switches that report nothing themselves:

SwitchEffect
compare strictlyOnly together with one of the two uniqueness conditions. Unticked, Moliri compares text leniently; ticked, every character counts. See below
Suspected duplicatesIncludes the field in the Suspected duplicates check under Check. Switched on by itself for fields with a uniqueness condition, but you can switch it off. That check also ignores punctuation, whitespace and leading zeros
Conditions section of the text field “Inventarnummer”: ticked are “must not be empty”, “unique in the database” and “Suspected duplicates”, unticked are “unique in the project” and “compare strictly”. Below it the editor for the custom rule with the message on violation, and the test on the right.

When two values are equal

Without compare strictly, two text values count as equal if they differ only in

  • upper and lower case: A-1 and a-1,
  • accents and ß: Müller and Muller, Strasse and Straße,
  • umlauts and their transcription: Müller and Mueller,
  • whitespace at the beginning and end.

For inventory numbers this is usually what you want: Gm 1234 and GM 1234 are almost always a typo, not two objects. Where the spelling makes a difference, set compare strictly.

The bar above the form

Above the input form it says n fields do not meet their condition. It counts all fields of the object with a violated condition, not only those of the open layout. A field on another tab carries that tab’s name (Leihgeber on “Erfassung”); a click switches there and briefly highlights the field. If the field is on no layout the person may open, it says not in this view. A custom rule sees the values of all the object’s fields, including fields on other layouts.

The conditions are stored in the configuration under conditions. You can give each condition its own message by writing it as an object:

JSON
{ "conditions": { "required": true, "unique": { "message": "Inventarnummer doppelt" }, "strict": true } }

Check › Field conditions shows which objects in the current filter violate conditions. A date in the future is not listed there but under Check › Data upkeep › Implausible values. A field without not in the future never counts as implausible there, because it often holds a planned date, such as the end of a loan.

Cleanup

The Cleanup section shows the chain of steps that a value of this field goes through before it is saved, with the origin of each step (system, field type, field, project). You can switch inherited steps off for this field or per project, and add your own. A test shows before and after, and below it is Clean existing values for the values already saved. Everything about this is under Cleanup .

Inheriting

A field can take its value from the authority record that sits in an authority field of the same object. The typical example is literature: once the reference is in the authority field, title, year, publisher and ISBN fill in by themselves. The Inherit section only appears for field types that can inherit.

Inheriting values

For fields that store text, a number, a date or a time.

Inherit section of the text field “Titel”: as the source the authority field Identität with the entry raw data, below it the path in the normalised record, title.
SettingMeaning
SourceAn authority field with one of its entries, for example Identität~label or Identität~description. Choosing only the field means ~label
Path in the normalized recordOnly for the source ~raw: an entry from the reference, for example title, issued, publisher, ISBN, DOI, page or abstract. The field suggests the paths
Apply to all objectsMatches all objects with the field again, for example after records were changed by hand

Empty values take the value from the authority record and follow it whenever it is synced. Your own values stay untouched. A date from the reference arrives as a year, a year and month or a full date, lists as values separated by semicolons; a number field only takes numbers. Inheriting writes to the shared value of the field. Values that only apply in one project stay untouched, and there is no per-project setting for this. In the edit history , inherited values carry the mark Inherited from … with the name of the authority field.

If the source points to a field that no longer exists or is not an authority field, the section warns: The source field does not exist or is not an authority field.

For authority fields. With Inherit links, Moliri creates the persons from the authority record as links on the object. Under Roles you find author, editor, translator and contributors, each with the name of the link type the instance has for it; at least one stays ticked. If the link type for a role is missing, the section warns and the role is skipped.

Moliri looks the persons up in the GND, by the GND number in the reference or by a name search at lobid.org. It only links when there is exactly one match. Your own links stay untouched. What inherited links look like on the object and what the message on saving says is described under Authority record .

Syncing in the background

When you set or change the source, or click Apply to all objects, a sync across all objects is queued: Sync queued. The worker view shows its progress. The worker view is the Upload workers dialog under Libraries › Files. It lists the jobs Inherit field values and Inherit links with their results:

JobResult
Inherit field valuesn values inherited, n cleared (the source no longer has a value), n errors
Inherit linksLinks created, updated and removed, names without a match and without a response from lobid.org, objects that were not fully synced, with a link to the object

After that, the objects follow the authority record by themselves: when an authority field is saved, when the sync changes a record and when two records are merged. Changing the record by hand in the library does not update the objects; that is what Apply to all objects is for.

Setting up inheritance requires status 9.

Permissions

Under Read and write permissions there is the row Everyone and one row for each group. A group’s permission and the permission for everyone are combined, and the higher one applies. Project and layout cap the result.

The usual setting for a field that only some people should see:

RowLevel
EveryoneNo access
Group LoansEdit
Group EducationRead only

You can only test this with an account with status 3. Status 6 and 9 bypass this table.

The permissions also apply in the full-text search. A field that someone may not read gives them neither matches nor a text snippet, not even through comment and source. For a file field the same goes for the transcript and recognised text of the files in it.

For a file field the permissions also apply to the files themselves. If a file sits only in a file field that someone may not read, it is missing for them in the object’s file area, and its transcript and recognised text cannot be retrieved. Files linked in the file area are not attached to any field. Everyone who may read the project sees and searches them, even if the same file also sits in a hidden file field.

Deleting

The field administration offers no delete. To retire a field you no longer need, take it off the layouts (delete the tile in the layout editor, which only removes the tile) and set the permissions for Everyone to No access, with no group. The field then disappears for accounts with status 3, its values remain, and the decision can be reversed. The Usage section shows where the field still occurs.

System fields

Some fields have a fixed meaning. Their name is fixed. See System fields .

Further reading