agate-SIP-Import¶
Seit v0.61.0 kann agate (das Anton-Vorbereitungs-Tool für SIPs aus losen Datei-Ablagen) BagIt- Pakete direkt per HTTP an Anton schicken. Anton nimmt das ZIP entgegen, prüft es, legt ein Backup an, importiert die Inhalte als Verzeichnungseinheiten unter dem gewählten Bestand und gibt agate Bescheid wenn alles fertig ist.
Der gesamte Pfad läuft asynchron — agate kann parallel weiterarbeiten oder andere SIPs vorbereiten.
Workflow¶
┌──────────┐ HTTP-POST ┌──────────┐
│ agate │ ───────────────▶ │ Anton │
│ │ sip.zip │ │
└──────────┘ └──────────┘
│
▼ async Job
┌──────────┐
│ Import │
│ BagIt │
│ validate│
│ + apply │
└──────────┘
Zwei Pfade¶
-
Direkt-Import — Wenn der Filename die Konvention
sip-agate-<bestand_id>.zipeinhält, startet der Import sofort unter dem angegebenen Bestand. -
Eingangskorb — Sonst landet das SIP im Eingangskorb unter
/sip/inbox. Bearbeiter:innen sehen alle wartenden Uploads und weisen pro Eintrag manuell einen Bestand zu oder verwerfen das SIP.
Der Eingangskorb verhindert, dass unzugeordnete SIPs den Speicherplatz still aufessen — Bearbeiter:innen sehen aktiv, was wartet.
Eingangskorb (/sip/inbox)¶
Sichtbar für Editor- und Admin-Rollen unter Import / Export → SIP Inbox. Pro Zeile:
- SIP-Filename, Hochladedatum
- Vorschau (Anzahl Dateien, BagIt-Validität, NARA-Kategorien)
- Aktionen: Bestand zuweisen (öffnet Auswahl) oder Verwerfen
Vokabular-Mapping: NARA → Tenant-Objekttyp¶
agate spricht intern in NARA-Standard-Kategorien (StillImage, Audio, Textual, Video, Geospatial …). Anton übersetzt diese beim Import in die tenant-spezifische Werteliste „Objekttyp" (Bild, Akte, Foto, Plan, Sammlung …).
Das Mapping ist pro Tenant konfigurierbar. Vorteil: agate muss das spezifische Vokabular des Archivs nicht kennen.
Konfiguration:
Setting::setValue('nara_to_objecttype_map', [
'StillImage' => 'Bild',
'Textual' => 'Akte',
'Audio' => 'Tonaufnahme',
// ...
]);
Wenn für eine NARA-Kategorie kein passender Tenant-Typ existiert,
bleibt das object_type-Feld leer (statt den Import abzubrechen) und
kann später von Hand vergeben werden.
HTTP-API¶
Endpoint: POST /api/sip/upload
Request:
- Multipart-Form mit
file-Feld (sip.zipBagIt-Container) - Header
Authorization: Bearer <api_token>(Sanctum-Token, siehe API Authentication)
Response: 202 Accepted mit JSON, das die Job-ID enthält:
{
"job_id": "01J5XYZ...",
"status": "queued",
"callback_url": "https://your-anton.ch/api/sip/status/01J5XYZ..."
}
agate pollt anschliessend callback_url bis status: completed (oder
failed).
Akzessions-Archiv¶
Wenn der Tenant ein Akzessions-Archiv konfiguriert hat
(setting('accessions_archives_id')), wird der SIP-Import dort als
neuer Eingang verbucht — mit Datum, agate-Versionsangabe und
Filename-Referenz. Damit ist der Importpfad auch nachträglich
auditierbar.
Konfigurations-Checkliste¶
Damit agate-Imports funktionieren:
setting('enable_sip_anton_import')auftruesetzen (default false aus Sicherheitsgründen)- API-Token für agate erzeugen (siehe API Authentication)
accessions_archives_idauf einen geeigneten Wrapper-Bestand setzen, damit die Eingangsbuchung erfolgt- NARA-Mapping anlegen (siehe oben) — Default-Mapping vorhanden, aber tenant-spezifische Werte sind wahrscheinlich nötig
- Queue-Worker muss laufen (Anton-Standard: Supervisor)
Häufige Stolpersteine¶
- Wiederholte Uploads mit gleichem Filename funktionieren seit v0.61.0 — Anton prüft jetzt den Original-Filename, nicht den UUID-suffixed Pfad auf Disk.
- NARA-Kategorie ohne Tenant-Typ bricht den Import nicht mehr ab
(seit v0.61.0). Das
object_typebleibt leer. - Wrapper-Datensatz oben am SIP bekommt keinen Objekttyp aufgedrückt — Hardcoded "Agate SIP" wurde entfernt.
Verwandte Seiten¶
- SIP Ingest — generische SIP-Import-Mechanik
- Inge / DIMAG Upload — DIMAG-Anbindung für ZH-Gemeinden
- API Authentication — Tokens für agate