BagIt ist ein quelloffenes, dateisystem-basiertes Container-Format der Library of Congress und der California Digital Library. Es definiert eine schlanke Verzeichnisstruktur, mit der digitale Inhalte zuverlässig transportiert, übergeben und aufbewahrt werden können. Seit 2018 ist BagIt als RFC 8493 standardisiert.
Die Idee ist bewusst minimalistisch: ein „Bag” ist ein Verzeichnis, das einen Payload-Ordner mit den eigentlichen Daten enthält und daneben Manifest-Dateien mit Hashwerten, die jederzeit eine Integritätsprüfung ermöglichen. BagIt schreibt nichts über die Inhalte selbst vor — es geht ausschliesslich um zuverlässigen Transport und Verifikation.
Aufbau eines Bags
mein-bag/
├── bagit.txt ← BagIt-Version + Encoding (Pflicht)
├── data/ ← Payload (Pflicht)
│ ├── dokument.pdf
│ └── unterordner/
│ └── bild.tif
├── manifest-sha256.txt ← Hashes aller Payload-Dateien (Pflicht ≥ 1 Algorithmus)
├── tagmanifest-sha256.txt ← Hashes der Tag-Dateien (optional)
├── bag-info.txt ← freie Metadaten (optional)
└── fetch.txt ← URLs für indirekte Bags (optional)
Pflicht-Dateien
bagit.txt— eine Mini-Datei mit fixem Inhalt:BagIt-Version: 1.0 Tag-File-Character-Encoding: UTF-8data/— alle eigentlichen Inhalte als reguläre Datei-Hierarchie.manifest-<algorithm>.txt— Hashwert + Pfad pro Payload-Datei. Mindestens ein Manifest ist Pflicht. Erlaubte Algorithmen: SHA-256, SHA-512, SHA-1, MD5 (empfohlen: SHA-256/512).
Beispiel manifest-sha256.txt:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 data/dokument.pdf
4e4f… (Hash) … 0bf data/unterordner/bild.tif
Optionale Dateien
-
tagmanifest-<algorithm>.txt— Hashes der Tag-Dateien (alles ausserdata/). Schützt auch die Manifest-Dateien selbst gegen Veränderung. -
bag-info.txt— freie Metadaten alsKey: Value-Paare. Häufige Felder:Source-Organization,External-Identifier,Bagging-Date,Contact-Name,Bag-Size,Payload-Oxum.Source-Organization: Kränzle & Ritter GmbH Bagging-Date: 2026-05-07 External-Identifier: KR-2026-05-07-001 Payload-Oxum: 12345678.42Payload-Oxum(Octetstream Sum) ist eine Schnellprüfung:<bytes>.<filecount>über alle Files indata/. Erlaubt vor der teuren Hash-Verifikation eine Plausibilitätskontrolle. -
fetch.txt— verweist auf URLs, von denen Payload-Dateien später nachgeladen werden müssen. Erlaubt „Holey Bags” ohne lokal mitgelieferte Daten:https://example.org/file.tif 124356 data/file.tif
Validierung
Ein Bag ist valid, wenn:
bagit.txtunddata/vorhanden sind.- Mindestens ein
manifest-<algorithm>.txtvorhanden ist und alle Payload-Dateien dort eingetragen sind (ohne Extra-Einträge). - Alle Hashes übereinstimmen.
- Optional:
tagmanifest-<algorithm>.txtvalidiert. - Optional: alle in
fetch.txtreferenzierten Dateien sind erreichbar.
Ein Bag ist zusätzlich complete, wenn keine Datei fehlt — auch keine, die nur in fetch.txt steht.
Werkzeuge
bagit-python(Library of Congress) — Referenzimplementation; CLI und Python-Library.bagit-java— Java-Implementation für JVM-basierte Workflows.bagger— GUI-Werkzeug zum Erstellen und Validieren von Bags.
Beispiel mit der Python-CLI:
bagit.py --processes 4 mein-verzeichnis/
bagit.py --validate --fast mein-bag/ # nur Payload-Oxum (schnell)
bagit.py --validate mein-bag/ # mit Hash-Verifikation
Verwandte Standards
BagIt ist konzeptionell verwandt mit anderen Submission-Containern:
- SIP nach eCH-0160 — Schweizer Standard, ebenfalls ein Verzeichnis mit Payload + Manifest, aber mit dem reichhaltigeren
metadata.xmlals Header. - METS — XML-basiertes Containerformat.
- OAIS — abstraktes Modell, das Container-Begriffe wie SIP/AIP/DIP definiert.
Aus unserer Praxis
Bei Übergaben einzelner Sammlungen oder Datenpaketen, in denen wir keine vollständige eCH-0160-Struktur brauchen, nutzen wir BagIt als pragmatischen Container — gerade für interinstitutionellen Transport.