Entity reference
Field-by-field reference for the major content entities. Each table lists the canonical field key (as stored), its type, whether it is required, the target/format, and any common CSV aliases the import parser accepts.
Source of truth
These tables were derived from the JSON-schema validators in clients/vliz-dams/client-collection-module/api/apps/vliz/validation/. When in doubt, that directory is authoritative.
Conventions
- Type:
text(free string) ·date(ISO-8601 ordd/mm/yyyydepending on the field) ·relation(link to another entity) ·vocab(link to a vocab-server entity) ·enum(one of a fixed list) ·coordinates(lat/long pair). - Card.: cardinality.
1..1= single required,0..1= single optional,1..*= required list,0..*= optional list. - Aliases: alternative column names accepted by the CSV importer (and the GraphQL form), in addition to the canonical key.
Album
Validator: validation/album_validator.py
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | UUID, auto-generated | album_id |
title | text | 1..1 | free | album_name, album_title |
description | text | 0..1 | free | album_description |
external_link | text | 0..1 | URL | — |
locality_text | text | 0..1 | free | — |
has_context | relation | 1..1 | Context | context_id, context_name, context |
has_keyword | relation | 0..* | Keyword | keyword_id, keyword |
has_language | relation | 0..* | Language | language_id, language |
has_asset_category | relation | 0..* | AssetCategory | asset_category_id, asset_category |
has_marine_region | vocab | 0..* | MarineRegion (vocab) | locality_MRGID, marine_region |
has_owner | relation | 0..* | Person | owner_name, owner |
has_photographer | relation | 0..* | Person | photographer |
has_event | vocab | 0..* | Event (vocab) | event_id, event |
has_project | vocab | 0..* | Project (vocab) | project_id, project |
has_partner | vocab | 0..* | Partner (vocab) | partner_id, partner |
has_album | relation | 0..* | Album (parent) | — |
has_location | relation | 0..* | Location (location-type taxonomy) | location_type |
creation_date | date | system | auto, not importable | — |
public_or_private | enum | 0..1 | Public | Private | — |
Album does not link directly to ArchivalCollection / CollectionPart
Those links run through the album's Media records (which do have has_archival_collection and has_collection_part). Don't try to set them on the album itself.
Media
Validator: validation/media_validator.py · custom serializer manages the primary mediafile + thumbnail.
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | UUID | media_id |
title | text | 1..1 | free | media_title, media_name |
description | text | 0..1 | free | media_description |
external_link | text | 0..1 | URL | — |
locality_text | text | 0..1 | free | — |
has_context | relation | 1..1 | Context | context_id, context_name, context |
has_album | relation | 0..1 | Album | album_id, album_name, album |
has_archival_collection | relation | 0..* | ArchivalCollection | archival_collection_id |
has_collection_part | relation | 0..* | CollectionPart | collection_part_id |
has_keyword | relation | 0..* | Keyword | keyword, media_keyword |
has_language | relation | 0..* | Language | language, language_media |
has_asset_category | relation | 0..1 | AssetCategory | asset_category_id |
has_marine_region | vocab | 0..* | MarineRegion | marine_region_id, locality_MRGID, marine_region |
has_event | vocab | 0..* | Event | event_id, event |
has_project | vocab | 0..* | Project | project_id, project |
has_partner | vocab | 0..* | Partner | partner_id, partner |
has_owner | relation | 0..* | Person | owner_id, owner |
has_creator | relation | 0..* | Person | creator_id, creator |
has_photographer | relation | 0..* | Person | photographer |
has_location | relation | 0..* | Location | location_type |
creation_date | date | system | auto | — |
public_or_private | enum | 0..1 | Public | Private | — |
Mediafiles attach to media
A media entity does not store the file itself. Files are attached as mediafile entities pointing at this media via belongs_to. One media can have several mediafiles (original + previews + alternate formats).
Mediafile
Validator: validation/mediafile_validator.py
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | string matching ^MED.*$, auto-generated | — |
filename | text | 1..1 | filename incl. extension | — |
title | text | 0..1 | free | mediafile_title, mediafile_title_nl |
description | text | 0..1 | free | description_nl |
content_drager | text | 0..1 | physical carrier (e.g. digital, film) | — |
technical_origin | text | 0..1 | digitisation method | — |
external_link | text | 0..1 | URL | — |
embargo | text/date | 0..1 | embargo date or text | — |
usage_guidelines | text | 0..1 | free | — |
usage_guidelines_until | date | 0..1 | dd/mm/yyyy | — |
quality_rating | text | 0..1 | numeric or text | qualityRating |
has_confidentiality | relation | 0..1 | Confidentiality | confidentiality_id, confidentiality |
has_media_license | vocab | 0..* | License | media_license_id, license |
has_keyword | relation | 0..* | Keyword | mediafile_keyword |
has_language | relation | 0..* | Language | language_mediafile |
has_creator | relation | 0..* | Person | creator, mediafile_creator, mediafile_creator_person |
has_owner | relation | 0..* | Person | owner_id, owner, mediafile_owner_person |
has_person | relation | 0..* | Person | person_id, person |
belongs_to | relation | 1..1 | Media (parent) | set automatically by import; not editable |
belongs_to_parent | relation | 0..1 | Mediafile (parent file) | for versioning / derivatives |
Audit note
The previous CSV import doc listed mediafile_creator_partner and mediafile_owner_partner columns. Those keys are not present in mediafile_validator.py — only the _person variants exist. Treat partner-on-mediafile as not supported until the validator is updated, or use has_partner on the parent media entity.
Map
Validator: validation/map_validator.py
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | UUID | map_id |
title | text | 1..1 | free | map_name |
description | text | 0..1 | free | map_description |
scale | text | 0..1 | free (e.g. 1:50000) | — |
date_description | text | 1..1 | free, human-readable | — |
date_of_creation | date object | 0..1 | { value: ISO-8601 } | — |
date_of_publication | date object | 0..1 | { value: ISO-8601 } | — |
date_of_last_revision | date object | 0..1 | { value: ISO-8601 } | — |
content_date | date object | 0..1 | { value: ISO-8601 } | — |
min_location | coordinates | 0..1 | { latitude, longitude } (DD) | — |
max_location | coordinates | 0..1 | { latitude, longitude } (DD) | — |
spatial_coverage | text | 0..1 | GIS geometry or text | parser TODO |
has_context | relation | 1..1 | Context | context_id |
has_content_map_type | relation | 1..1 | ContentMapType | content_map_type_id |
has_formal_map_type | relation | 1..1 | FormalMapType | (currently aliased identically to content map type — verify) |
has_keyword | relation | 0..* | Keyword | keyword_id |
has_language | relation | 0..* | Language | language_id |
has_projection | relation | 0..* | Projection | projection_id, projection |
has_archival_collection | relation | 0..1 | ArchivalCollection | archival_collection_id |
has_owner | relation | 0..1 | Person | parser TODO |
has_creator | relation | 0..* | Person | parser TODO |
has_coordinate_reference_system | relation | 0..1 | CoordinateReferenceSystem | parser TODO |
Map dates use nested objects
Unlike most fields, the dated metadata on Map (date_of_creation, etc.) is stored as { value: "2023-04-29T00:00:00Z" } — wrap your CSV input accordingly or use the parser hook.
Publication
Validator: validation/publication_validator.py
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | UUID | publication_id |
title | text | 1..1 | free | publication_name |
description | text | 0..1 | free | publication_description |
has_context | relation | 1..1 | Context | context_id |
has_content_document_type | relation | 1..1 | ContentDocumentType | content_document_type_id |
has_formal_document_type | relation | 1..1 | FormalDocumentType | (currently aliased identically to content document type — verify) |
has_keyword | relation | 0..* | Keyword | keyword_id |
has_language | relation | 0..* | Language | language_id |
ArchivalCollection
Validator: validation/archival_collection_validator.py
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | UUID | archival_collection_id |
title | text | 1..1 | free | — |
description | text | 0..1 | free | — |
external_link | text | 0..1 | URL | — |
usage_guidelines | text | 0..1 | free | — |
usage_guidelines_until | date object | 0..1 | { value: ISO-8601 } | — |
has_context | relation | 1..1 | Context | context_id |
has_keyword | relation | 0..* | Keyword | keyword_id |
has_language | relation | 0..* | Language | language_id |
has_archive_creator | relation | 1..* | Person | creator_id, archive_creator |
has_collection_part | relation | virtual | CollectionPart | reverse of has_archival_collection |
has_media | relation | virtual | Media | reverse |
has_map | relation | virtual | Map | reverse |
has_publication | relation | virtual | Publication | reverse |
Archive creator is required
Unlike other content entities, has_archive_creator is a required relation (1..*). Imports without an archive-creator mapping will be rejected.
CollectionPart
Validator: validation/collection_part_validator.py
| Field | Type | Card. | Target / format | Aliases |
|---|---|---|---|---|
id | text | 1..1 | UUID | collection_part_id |
title | text | 1..1 | free | collection_part_name |
description | text | 0..1 | free | collection_part_description |
external_link | text | 0..1 | URL | collection_part_external_link |
has_context | relation | 1..1 | Context | context_id |
has_keyword | relation | 0..* | Keyword | keyword_id |
has_language | relation | 0..* | Language | language_id |
has_archival_collection | relation | 0..1 | ArchivalCollection | archival_collection_id |
has_collection_part | relation | 0..* | CollectionPart (parent) | — |
is_collection_part_for | relation | virtual | CollectionPart | reverse of has_collection_part |
has_media | relation | virtual | Media | reverse |
has_document | relation | virtual | Document | reverse |
Vocabulary entities (summary)
These have a small fixed shape — typically id, title or name, description, and zero or more relations. They exist to be linked to from content entities, not to carry rich metadata.
| Entity | Title field | Notable extras |
|---|---|---|
| Keyword | title | has_language |
| Language | title | description |
| Context | title | url, has_user (virtual) |
| AssetCategory | title | has_language, description |
| Confidentiality | title | — |
| Projection | title | — |
| Person | name | — |
| MarineRegion | title | dual validator (vocab-server / local) |
| License | title | dual validator |
| Event | title | dual validator |
| Project | title | dual validator |
| Partner | title | dual validator |
| FormalDocumentType / ContentDocumentType | title | document-type taxonomies |
| FormalMapType / ContentMapType | title | map-type taxonomies |
→ For how relations between entities work, see Relations & vocabularies.