Skip to content

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 or dd/mm/yyyy depending 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

FieldTypeCard.Target / formatAliases
idtext1..1UUID, auto-generatedalbum_id
titletext1..1freealbum_name, album_title
descriptiontext0..1freealbum_description
external_linktext0..1URL
locality_texttext0..1free
has_contextrelation1..1Contextcontext_id, context_name, context
has_keywordrelation0..*Keywordkeyword_id, keyword
has_languagerelation0..*Languagelanguage_id, language
has_asset_categoryrelation0..*AssetCategoryasset_category_id, asset_category
has_marine_regionvocab0..*MarineRegion (vocab)locality_MRGID, marine_region
has_ownerrelation0..*Personowner_name, owner
has_photographerrelation0..*Personphotographer
has_eventvocab0..*Event (vocab)event_id, event
has_projectvocab0..*Project (vocab)project_id, project
has_partnervocab0..*Partner (vocab)partner_id, partner
has_albumrelation0..*Album (parent)
has_locationrelation0..*Location (location-type taxonomy)location_type
creation_datedatesystemauto, not importable
public_or_privateenum0..1Public | 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.

FieldTypeCard.Target / formatAliases
idtext1..1UUIDmedia_id
titletext1..1freemedia_title, media_name
descriptiontext0..1freemedia_description
external_linktext0..1URL
locality_texttext0..1free
has_contextrelation1..1Contextcontext_id, context_name, context
has_albumrelation0..1Albumalbum_id, album_name, album
has_archival_collectionrelation0..*ArchivalCollectionarchival_collection_id
has_collection_partrelation0..*CollectionPartcollection_part_id
has_keywordrelation0..*Keywordkeyword, media_keyword
has_languagerelation0..*Languagelanguage, language_media
has_asset_categoryrelation0..1AssetCategoryasset_category_id
has_marine_regionvocab0..*MarineRegionmarine_region_id, locality_MRGID, marine_region
has_eventvocab0..*Eventevent_id, event
has_projectvocab0..*Projectproject_id, project
has_partnervocab0..*Partnerpartner_id, partner
has_ownerrelation0..*Personowner_id, owner
has_creatorrelation0..*Personcreator_id, creator
has_photographerrelation0..*Personphotographer
has_locationrelation0..*Locationlocation_type
creation_datedatesystemauto
public_or_privateenum0..1Public | 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

FieldTypeCard.Target / formatAliases
idtext1..1string matching ^MED.*$, auto-generated
filenametext1..1filename incl. extension
titletext0..1freemediafile_title, mediafile_title_nl
descriptiontext0..1freedescription_nl
content_dragertext0..1physical carrier (e.g. digital, film)
technical_origintext0..1digitisation method
external_linktext0..1URL
embargotext/date0..1embargo date or text
usage_guidelinestext0..1free
usage_guidelines_untildate0..1dd/mm/yyyy
quality_ratingtext0..1numeric or textqualityRating
has_confidentialityrelation0..1Confidentialityconfidentiality_id, confidentiality
has_media_licensevocab0..*Licensemedia_license_id, license
has_keywordrelation0..*Keywordmediafile_keyword
has_languagerelation0..*Languagelanguage_mediafile
has_creatorrelation0..*Personcreator, mediafile_creator, mediafile_creator_person
has_ownerrelation0..*Personowner_id, owner, mediafile_owner_person
has_personrelation0..*Personperson_id, person
belongs_torelation1..1Media (parent)set automatically by import; not editable
belongs_to_parentrelation0..1Mediafile (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

FieldTypeCard.Target / formatAliases
idtext1..1UUIDmap_id
titletext1..1freemap_name
descriptiontext0..1freemap_description
scaletext0..1free (e.g. 1:50000)
date_descriptiontext1..1free, human-readable
date_of_creationdate object0..1{ value: ISO-8601 }
date_of_publicationdate object0..1{ value: ISO-8601 }
date_of_last_revisiondate object0..1{ value: ISO-8601 }
content_datedate object0..1{ value: ISO-8601 }
min_locationcoordinates0..1{ latitude, longitude } (DD)
max_locationcoordinates0..1{ latitude, longitude } (DD)
spatial_coveragetext0..1GIS geometry or textparser TODO
has_contextrelation1..1Contextcontext_id
has_content_map_typerelation1..1ContentMapTypecontent_map_type_id
has_formal_map_typerelation1..1FormalMapType(currently aliased identically to content map type — verify)
has_keywordrelation0..*Keywordkeyword_id
has_languagerelation0..*Languagelanguage_id
has_projectionrelation0..*Projectionprojection_id, projection
has_archival_collectionrelation0..1ArchivalCollectionarchival_collection_id
has_ownerrelation0..1Personparser TODO
has_creatorrelation0..*Personparser TODO
has_coordinate_reference_systemrelation0..1CoordinateReferenceSystemparser 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

FieldTypeCard.Target / formatAliases
idtext1..1UUIDpublication_id
titletext1..1freepublication_name
descriptiontext0..1freepublication_description
has_contextrelation1..1Contextcontext_id
has_content_document_typerelation1..1ContentDocumentTypecontent_document_type_id
has_formal_document_typerelation1..1FormalDocumentType(currently aliased identically to content document type — verify)
has_keywordrelation0..*Keywordkeyword_id
has_languagerelation0..*Languagelanguage_id

ArchivalCollection

Validator: validation/archival_collection_validator.py

FieldTypeCard.Target / formatAliases
idtext1..1UUIDarchival_collection_id
titletext1..1free
descriptiontext0..1free
external_linktext0..1URL
usage_guidelinestext0..1free
usage_guidelines_untildate object0..1{ value: ISO-8601 }
has_contextrelation1..1Contextcontext_id
has_keywordrelation0..*Keywordkeyword_id
has_languagerelation0..*Languagelanguage_id
has_archive_creatorrelation1..*Personcreator_id, archive_creator
has_collection_partrelationvirtualCollectionPartreverse of has_archival_collection
has_mediarelationvirtualMediareverse
has_maprelationvirtualMapreverse
has_publicationrelationvirtualPublicationreverse

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

FieldTypeCard.Target / formatAliases
idtext1..1UUIDcollection_part_id
titletext1..1freecollection_part_name
descriptiontext0..1freecollection_part_description
external_linktext0..1URLcollection_part_external_link
has_contextrelation1..1Contextcontext_id
has_keywordrelation0..*Keywordkeyword_id
has_languagerelation0..*Languagelanguage_id
has_archival_collectionrelation0..1ArchivalCollectionarchival_collection_id
has_collection_partrelation0..*CollectionPart (parent)
is_collection_part_forrelationvirtualCollectionPartreverse of has_collection_part
has_mediarelationvirtualMediareverse
has_documentrelationvirtualDocumentreverse

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.

EntityTitle fieldNotable extras
Keywordtitlehas_language
Languagetitledescription
Contexttitleurl, has_user (virtual)
AssetCategorytitlehas_language, description
Confidentialitytitle
Projectiontitle
Personname
MarineRegiontitledual validator (vocab-server / local)
Licensetitledual validator
Eventtitledual validator
Projecttitledual validator
Partnertitledual validator
FormalDocumentType / ContentDocumentTypetitledocument-type taxonomies
FormalMapType / ContentMapTypetitlemap-type taxonomies

→ For how relations between entities work, see Relations & vocabularies.

Powered by Elody — Open Source Semantic Data Platform