Skip to main content

Dzaleka Metadata Standard (DMS)

License: MIT License: CC BY 4.0 Python 3.10+ Schema: v1.1.0

An open-source metadata specification and toolkit for describing, organising, and sharing digital heritage content from Dzaleka Refugee Camp.


What is DMS?

The Dzaleka Metadata Standard (DMS) is an open-source metadata specification and toolkit designed to describe, organise, and share digital heritage content from Dzaleka Refugee Camp in Malawi.

It provides a standardised, interoperable, and reusable schema for heritage items such as stories, photos, documents, audio, and events.

🧭 Purpose

The purpose of DMS is to:

  • Enable consistent metadata creation for heritage assets
  • Support discoverability, interoperability, and reuse of heritage data
  • Provide tools to validate, manage, and export metadata
  • Serve as an open standard for heritage documentation

DMS helps both technical systems and community contributors work with heritage content in a structured way.

📦 What DMS Includes

📌 Metadata Schema

A machine-readable specification defining fields, types, and constraints for heritage metadata.

Available formats:

🛠️ Python Tools & Web UI

A suite of tools for creating, validating, and converting metadata records. Includes a command-line interface and a local web workspace built with Kumo. See Quick Start below.

📖 Documentation

Field definitions, best practices, and tutorials for metadata entry. See Documentation.

📁 Example Records

Sample records covering stories, photos, documents, audio, and events. See Examples.


Quick Start

Installation

# Clone the repository
git clone https://github.com/Dzaleka-Connect/Dzaleka-Metadata-Standard.git
cd dzaleka-metadata-standard

# Install the CLI tools
pip install -e .

The Web UI

To create, validate, and manage records in a browser, start the local workspace:

dms web --port 8080 --dir records/

The DMS workspace includes a schema-driven editor, searchable records, JSON import, JSON/JSON-LD downloads, and a Vocabulary workspace for term lookups and structured references. Unsaved drafts are protected when switching to another record.

The Sources workspace can read seven published Dzaleka Services collections and prepare local drafts for review. Loading a collection is opt-in; local record contents are never uploaded. Review consent and reuse rights before sharing.

React and Kumo assets are bundled with the Python package. Node.js and a CDN connection are not needed to run the installed app. This is a localhost workspace, not an authenticated public hosting service. Rights metadata does not enforce filesystem access.

This also exposes a local vocabulary API at http://127.0.0.1:8080/api/taxonomy for DMS term lookups, deprecations, change logs, and JSON-LD/Turtle/RDF/XML output.

Create a Record via CLI

# Interactive wizard
dms init

# Skip type selection prompt
dms init --type poem

# Save to specific file
dms init --output my-record.json

Validate a Record

# Single file
dms validate examples/story.json

# All files in a directory
dms validate --dir examples/

Search & Analyze

# Search records by type, subject, or free-text
dms search --dir records/ --type poem -q "displacement"

# View collection analytics (types, languages, completion)
dms stats --dir records/

# Generate a browsable HTML catalogue of your collection
dms report --dir records/ --output catalogue.html

Interoperability Tools

# Export record(s) as JSON-LD for semantic web
dms export examples/story.json

# Convert CSV batch to JSON records
dms convert csv2json examples/batch.csv

# Compare two records field-by-field
dms diff record_v1.json record_v2.json

View Schema Info

dms info

Schema Overview

A DMS record describes a single heritage item with these fields:

Field Required Description
id ✅ Unique identifier (UUID)
title ✅ Name of the item
type ✅ Category: story, photo, document, audio, video, event, map, artwork, site, poem
description ✅ Narrative context
language ✅ Language code (BCP 47)
creator Recommended Who created it (name, role, affiliation)
date Recommended When it was created or occurred
subject Recommended Controlled tags and keywords
subject_ref Optional Structured subject identifiers and scheme references
location Recommended Place name, area, coordinates
rights Recommended License, access level, holder
source Optional Contributor, collection, original format
format Optional MIME type of the digital object
technical Optional File-level technical metadata
relation Optional IDs of related records
relation_detail Optional Typed relationships to related records or resources
coverage Optional Time period covered

All fields map to Dublin Core for broad interoperability, with Dzaleka-specific extensions for camp areas and access levels.

Repository Structure

├── dms/                 Python CLI tools
│   ├── cli.py           Command entry points
│   ├── validator.py     Schema validation engine
│   ├── generator.py     Interactive record creator
│   ├── converter.py     CSV ↔ JSON converter
│   └── taxonomy.py      Local vocabulary service and serializers
│
│   data/schema/         Schema definitions
│   ├── dms.json         JSON Schema (Draft 2020-12)
│   ├── dms.yaml         YAML version
│   └── dms.jsonld       JSON-LD context for linked data
│
│   data/taxonomy/       DMS vocabulary files
│   └── types.json       Curated heritage item type vocabulary
│
├── docs/                Documentation
│   ├── field-guide.md   Field definitions & guidelines
│   ├── best-practices.md Metadata entry best practices
│   ├── semantic-tagging.md Controlled vocabularies and richer subject metadata
│   ├── taxonomy-api.md  Local vocabulary API endpoints and formats
│   └── getting-started.md Installation & tutorial
│
├── examples/            Sample records
│   ├── story.json       Oral history
│   ├── photo.json       Photograph
│   ├── document.json    Administrative record
│   ├── audio.json       Music recording
│   ├── event.json       Community event
│   ├── site.json        Heritage site (Site Register)
│   ├── mural.json       Public artwork (Art Catalogue)
│   ├── poem.json        Poetry
│   └── batch.csv        CSV batch import example
│
└── tests/               Test suite

Examples

The examples/ directory contains sample records for common heritage item types:

Documentation

  • Field Guide — Detailed definitions for every schema field
  • Best Practices — Guidelines for quality metadata entry
  • Semantic Tagging — DMS guidance for controlled vocabularies and richer subject metadata
  • Taxonomy API — Query vocabularies, terms, deprecations, and semantic formats
  • Getting Started — Installation and first steps tutorial

Interoperability

DMS is designed to work with existing standards and systems. The dms.jsonld context enables linked data publishing with mappings to:

Vocabulary Prefix Used for
Dublin Core dc:, dcterms: Core metadata fields (title, creator, subject, rights, etc.)
FOAF foaf: Person/Agent descriptions (foaf:name, foaf:Person, foaf:Image)
BIBO bibo: Bibliographic roles (bibo:editor, bibo:translator, bibo:interviewer)
Schema.org schema: Creative works, places, events, affiliations
W3C Geo geo: Geographic coordinates (geo:lat, geo:long)
SKOS skos: Subject vocabularies and concept schemes

Additional format support:

  • CSV — Import/export for spreadsheet-based workflows
  • JSON Schema — Machine-readable validation for any language or platform

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Areas where you can help:

  • 📝 Adding example records from the Dzaleka community
  • 🌐 Translating documentation into Swahili, French, or Kinyarwanda
  • 🔧 Improving the CLI tools
  • 📖 Writing guides for specific use cases
  • 🐛 Reporting bugs and suggesting improvements

License

Acknowledgments

  • The Dzaleka refugee community for their heritage, stories, and resilience
  • Dublin Core Metadata Initiative for the foundational metadata standard
  • All contributors and volunteers who help preserve Dzaleka's digital heritage

Preserving heritage. Empowering community. Building the future.

Metadata

Release files for dzaleka-metadata-standard 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dzaleka-metadata-standard 1.2.0
File Size Uploaded
dzaleka_metadata_standard-1.2.0.tar.gz 298.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dzaleka-metadata-standard 1.2.0
File Interpreter ABI Platform
dzaleka_metadata_standard-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 558.5 kB

Release files / dzaleka_metadata_standard-1.2.0.tar.gz

Download URL dzaleka_metadata_standard-1.2.0.tar.gz
Size 298.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ced36dc35d20a9332cd4502bfcb1a10b3a7be7d6fafe04d8dac2e005068d59e5
BLAKE2b-256 checksum
How to use checksums
5b5f85da8b6e7e0d06c2a52d833a611e3b0307ea6a9c9adef0505a13fa04d7b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / dzaleka_metadata_standard-1.2.0-py3-none-any.whl

Download URL dzaleka_metadata_standard-1.2.0-py3-none-any.whl
Size 260.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
193482307c969af1c1b9296648cce45b33bc0dfc527d2dea610a717240c7f176
BLAKE2b-256 checksum
How to use checksums
c2c320d16c2497ef4f811507441992d7786b9c8e2b68fca898765b1fe50b9f9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

1.4.0

2 release files

1.3.0

2 release files

This release

1.2.0 This release

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page