Skip to content

CSV import via the upload form

This page walks through the most common bulk-upload scenario: uploading a set of media files plus their metadata in a single step, using the Upload entities with media files form in the DAMS UI.

The example mirrors the one previously published at csv-vliz-import-example.md, with the column reference refreshed against the current validators.

When to use this flow

  • You have ≤ a few hundred files and metadata you can edit in a spreadsheet.
  • All files share an album / context / collection.
  • You can upload the files together as a single ZIP.

For larger or recurring imports — especially when files arrive structured per-album on a shared drive — use Bulk from shared drive instead.

Step-by-step example

The scenario: upload three photos from the Koksijde 2014 coastal-management campaign, link them as a single Media entity with three Mediafiles.

1. Open the upload form

In the sidebar: Menu → Upload → Upload entities with mediafiles.

2. Prepare a starter CSV

Drop the three image files (mediafile-1.jpg, mediafile-2.jpg, mediafile-3.jpg) onto the form. Click Download sample CSV — this gives you a template with the filenames pre-filled.

3. Set the context

Fill in the context column — for general VLIZ data this is general vliz. The context controls who within VLIZ can see the resulting entities; ask internally if you're unsure.

4. Use same_entity to group rows

All rows that belong to the same media entity must share an identifier in the same_entity column. Use 1 throughout for this example (one media, three mediafiles).

5. Fill in media-level metadata (row 1)

Media-level fields go on the first row only:

  • titleKoksijde 2014
  • media_keywordCoastal Management (the keyword must already exist in the DAMS or be created first)
  • marine_regionMediterranean Sea
  • albumBelgium Coast (album must exist)
  • collection_partTourist Destination (collection part must exist)

6. Fill in per-mediafile metadata (rows 1–3)

These fields apply per row, so they can vary by file:

  • filenamemediafile-1.jpg, mediafile-2.jpg, mediafile-3.jpg
  • mediafile_owner_personvliz (in every row)
  • confidentialityConfidentiality 1, Confidentiality 2, Confidentiality 3 (must exist)
  • usage_guidelines_until31/12/2030 on the second mediafile only
  • external_link → URL on the third mediafile only

7. Add multiple keywords for the same entity

To attach a second keyword (Beach profiles) to the same media, put it on a new row in the media_keyword column with the same same_entity value. Each new keyword goes on its own line; everything joined by same_entity belongs to the same media.

8. Remove placeholder data

The sample CSV ships with placeholder text like title of a keyword for mediafile. Replace those with real values or clear the cell.

9. Upload

Upload the CSV in the top window of the upload form together with the ZIP archive of mediafiles.

10. Validate

After import, the UI shows whether files are linked correctly and flags any errors. You can download an error-annotated CSV and re-upload it after fixes.

Example CSV

A minimal version of the example, with the current column set:

same_entitytitlecontextmedia_keywordmarine_regionalbumcollection_parttypefilenameconfidentialitymediafile_owner_personusage_guidelines_untilexternal_link
1Koksijde 2014general vlizCoastal ManagementMediterranean SeaBelgium CoastTourist Destinationmediamediafile-1.jpgConfidentiality 1vliz
1Beach profilesmediamediafile-2.jpgConfidentiality 2vliz31/12/2030
1mediamediafile-3.jpgConfidentiality 3vlizhttps://example.org/ref

→ For the full list of importable columns and their target types, see Column reference.

Common gotchas

  • has_context is required. Forget it and the row fails validation.
  • Linked entities must exist first. Keywords, marine regions, partners, etc. must already be in the DAMS or the vocab server.
  • mediafile_creator_partner and mediafile_owner_partner are not currently valid columns despite being in the older documentation — only the _person variants exist on Mediafile. Use the parent media's partner field if you want a partner link.
  • Map dates are nested objects ({ value: ... }) — they cannot be expressed as a flat CSV cell without the parser knowing it's a map. Stick to date_description for free-form dates on maps in CSVs.
  • Multi-line per same_entity group is the only way to express list-valued fields. Don't try comma-separating values in a single cell.

Powered by Elody — Open Source Semantic Data Platform