BorgFormat (kurz Borg) ist ein Programm für die Formaterkennung und -validierung. Die Anwendung integriert verschiedene Werkzeuge um eine möglichst umfassende Abdeckung bei der Identifizierung und Validierung von Dateiformaten zu erreichen.
Dieses Projekt wird unter der GNU General Public License Version 3 (GPLv3) veröffentlicht. Weitere Informationen finden Sie in der Datei LICENSE.
Diese Lizenz gilt nicht für eingebundene Werkzeuge, die jeweils unter eigenen Lizenzen stehen (siehe unten).
Name | Version | Funktion | Resourcen | Lizenz |
---|---|---|---|---|
Droid | 6.8.0 | Formaterkennung | Homepage | BSD License |
Tika | 2.9.2 | Formaterkennung | Homepage | Apache License, Version 2.0 |
JHOVE | 1.30.1 | Validierung | Homepage | GNU Lesser General Public License |
veraPDF | 1.26.2 | Validierung | Homepage | GNU General Public License v3.0 |
ODF Validator | 0.12.0 | Validierung | Homepage | Apache License, Version 2.0 |
OOXML Validator | 2.1.5 | Validierung | GitHub | MIT License |
Die Weiterentwicklung von Borg wird sich hauptsächlich um die Integration neuer Werkzeuge und die Extraktion von weitereren Metadaten aus den Werkzeugergebnissen drehen. Folgende Weiterentwicklungen sind für die nächsten Veröffentlichungen vorgesehen:
- Integration des Werkzeugs Google Magika für die Formaterkennung, besonders für textbasierte Formate
- Integration des Werkzeugs jpylyzer für die Validierung von JP2-Dateien (JPEG 2000 Part 1)
- PDF-Export von Gesamt- und Teilergebnissen
- Verfeinerung der Bedingungen für das Ansprechen der Validatoren durch Kombination der verschiedenen extrahierten Eigenschaften (Erweiterung der Konfiguration)
Die Formaterkennung und -validierung von unbekannten Dateien ist ein komplexes Problem. Aufgrund der Komplexität kann kein einzelnes Programm das Problemfeld vollständig lösen. In der Regel sind Anwendungen darauf spezialisiert, entweder Dateien mit unbekannten Formaten zu identifizieren oder eine Formatfamilie bzw. eine kleine Gruppe von Dateiformaten zu validieren.
Um eine möglichst umfassende Abdeckung bei der Identifizierung und Validierung von Dateiformaten zu erreichen, ist es daher notwendig, mehrere Programme miteinander zu kombinieren. Es gibt bereits vereinzelt Programme, die mehrere Werkzeuge für die Formaterkennung und -validierung einbinden. Diese eingebundenen Werkzeuge werden in der Regel direkt integriert oder lokal ausgeführt.
Für Borg wurde ein anderer Ansatz gewählt. Die Werkzeuge werden nicht direkt integriert, sondern werden in eigenen Containern ausgeführt und über eine Web-API angesprochen. Das verringert die Abhängigkeit von Systemvorraussetzungen der verwendeten Werkzeuge.
Wie kommunizieren der Client, der Borg-Server und die Werkzeuge?
Der Server und die Werkzeuge werden in jeweils einem eigenen Container mittels Docker gestartet. Der Client und der Server kommunizieren über eine Web-API. Das Gleiche gilt für die Kommunikation zwischen dem Server und den Werkzeugen. Der Client kommuniziert nie direkt mit den Werkzeugen. Stattdessen sendet er eine Datei an den Server und erhält eine Zusammenfassung aller Werkzeugergebnisse und ein berechnetes Gesamtergebnis zurück.
Was passiert mit der übermittelten Datei?
Nachdem der Server die Datei vom Client erhält, speichert er diese in ein Docker Volume. Auf dieses haben auch alle Werkzeuge Zugriff. Sobald alle notwendigen Werkzeuge die Datei analysiert haben, wird sie gelöscht.
Welche Werkzeuge werden für eine Datei angesprochen?
Als erstes werden alle Formaterkennungs-Werkzeuge ausgeführt. Anhand der Erkennungsergebnisse werden die konfigurierten Bedingungen für die Ausführung der Validatoren geprüft. Alle Validatoren für die mindestens eine Bedingung erfüllt ist, werden ausgeführt.
Wir wird das Gesamtergebnis ermittelt?
Für die Ermittlung eines Gesamtergebnisses müssen die einzelnen Werkzeugergebnisse vergleichbar sein. Zu diesem Zweck werden einzelne Eigenschaften aus den Werkzeugergebnissen extrahiert. Den extrahierten Eigenschaften wird über die Konfiguration eine Gewichtung von 0 bis 1 zugewiesen. Wenn mehrere Werkzeuge die gleiche Eigenschaft extrahieren, findet eine gewichtete Abstimmung zwischen den Werkzeugeergebnissen statt. Durch die Gewichtung können zuverlässigere Werkzeuge weniger verlässliche Werkzeuge überstimmen. Alle von den Tools extrahierten Werte erhalten durch die Abstimmung eine Gewichtung für das Gesamtergebnis zwischen 0 und 1. Der extrahierte Wert mit der höchsten Gewichtung wird Teil des Gesamtergebnisses.
Gibt es eine Möglichkeit die Gewichtung einzelner extrahierter Eigeschaften zu verfeinern?
Neben dem Standardwert, der pro Werkzeug und extrahierter Eigenschaft festgelegt wird, gibt es auch die Möglichkeit Werte unter bestimmten Bedingungen auf- oder abzuwerten. Die Bedingungen beziehen sich immer auf das Gesamtergebnis. Beispielsweise ist es möglich die Ergebnisse eines Werkzeugs abzuwerten, wenn ein bestimmter MIME-Type ermittelt wurde.
Borg kann in andere Programme integriert werden. Der Borg-Server bietet dafür eine Web-API, die von beliebigen Programmen genutzt werden kann, um Dateien auswerten zu lassen.
Borg stellt zusätzlich eine Webanwendung bereit, mit der beliebige Dateien analysiert werden können.
Datei-Auswahl
Der Reiter Dateiauswahl ermöglicht die Auswahl von einzelnen Dateien und ganzen Ordnern für die Analyse. Wenn ein Ordner ausgewählt wird, werden auch die Dateien aller enthaltenen Ordner hochgeladen.
Auswertung
Im Reiter Auswertung wird das Gesamtergebnis für alle hochgeladenen Dateien dargestellt. Für jede Datei werden in einer eigenen Zeile die wichtigsten extrahierten Eigenschaften sowie der Status angezeigt. Der Status stellt die Qualität des Gesamtergebnisses symbolisch dar. Detaillierte Ergebnisse der Werkzeuge können durch einen Klick auf die Zeile aufgerufen werden.
Detailansicht von Werkzeugergebnissen für einzelne Dateien
In der Detailansicht einer Datei wird die Zusammenstellung des Gesamtergebnisses aufgeschlüsselt. Es wird dargestellt, welche Werkzeuge mit welcher Gewichtung in das Gesamtergebnis eingegangen sind und wie der (angezeigte) Status zu interpretieren ist. Die Detailansicht eines Werkzeuges lässt sich durch einen Klick auf die entsprechende Zeile öffnen.
Detailansicht einer validen Datei
Detailansicht einer invaliden Datei
Detailansicht eines Werkzeugs
In der Detailansicht eines Werkzeugs werden alle extrahierten Eigenschaften und die vollständige Werkzeugausgabe angezeigt.
Für den Betrieb von Borg wird Docker inklusive Docker Compose benötigt. Für den regulären Betrieb empfehlen wir die Installation auf einem Linux-Server. Für einen lokalen Test der Standalone-Version von Borg ist auch der Einsatz von Docker Desktop möglich. In der Datei .env kann ein Proxy für den Zugriff auf das Internet und der Port unter dem die Anwendung angesprochen werden soll, festgelegt werden. Borg benötigt nur bei der Erstellung der Container eine Internetverbindung. Im Betrieb wird keine Internetverbindung benötigt.
Um die Anwendung in einem Netzwerk verfügbar zu machen, eignet sich ein Webserver als Reverse-Proxy wie bspw. nginx, der die Anfragen auf den konfigurierten Port der Anwendung weiterleitet. Bei der Konfiguration des Webservers ist zu beachten, dass die Grenzen für die Dateigröße beim Upload und Timeouts von Verbindungen ausreichend bemessen werden, so dass auch größere Dateien analysiert werden können. Die notwendigen Einstellungen sind für alle Webserver unterschiedlich.
Folgend ist eine mögliche Teilkonfiguration für nginx abgebildet, die Dateigröße und Timeouts für den Upload erhöht:
Beispiel nginx
location / {
proxy_pass http://url-to-service/;
client_max_body_size 1000m;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
Um alle für den Betrieb von Borg benötigten Container zu starten, genügen die Befehle:
cp .env.example .env
docker compose up --build -d
Das Verhalten des Borg-Servers wird mittels eine Konfigurationsdatei eingestellt. Die Datei bestimmt, wie die Werkzeuge angesprochen werden, unter welchen Bedingungen Validatoren ausgeführt werden und wie einzelne extrahierte Eigenschaften gewichtet werden.
Die Konfigurationsdatei wird beim Start des Servers gelesen.
Borg wird mit einer bereits funktionalen Konfiguration ausgeliefert. Diese stellt sich vereinfacht wie folgt dar:
Werkzeug | Bedingung |
---|---|
DROID | wird immer ausgeführt |
Tika | wird immer ausgeführt |
JHOVE (PDF-Modul) | PUID entspricht PDF Version 1.0 bis 1.7 |
JHOVE (HTML-Modul) | PUID entspricht HTML Version 3.2, 4.0 oder 4.01 (HTML 5 wird nicht unterstützt) oder MIME-Type enthält html |
JHOVE (TIFF-Modul) | PUID entspricht TIFF oder MIME-Type enthält tiff |
JHOVE (JPEG-Modul) | PUID entspricht JPEG oder MIME-Type enthält jpeg |
JHOVE (JPEG2000-Modul) | PUID entspricht JP2 (JPEG 2000 part 1) oder MIME-Type enthält jp2 |
veraPDF (PDF/A-1a-Profil) | PUID entspricht PDF/A-1a oder Formatversion entspricht PDF/A-1a |
veraPDF (PDF/A-1b-Profil) | PUID entspricht PDF/A-1b oder Formatversion entspricht PDF/A-1b |
veraPDF (PDF/A-2a-Profil) | PUID entspricht PDF/A-2a oder Formatversion entspricht PDF/A-2a |
veraPDF (PDF/A-2b-Profil) | PUID entspricht PDF/A-2b oder Formatversion entspricht PDF/A-2b |
veraPDF (PDF/A-2u-Profil) | PUID entspricht PDF/A-2u oder Formatversion entspricht PDF/A-2u |
veraPDF (PDF/UA-Profile) | MIME-Type enthält pdf, nach aktuellen Stand keine PUID verfügbar |
ODF Validator | MIME-Type beginnt mit application/vnd.oasis.opendocument. |
OOXML Validator | MIME-Type beginnt mit application/vnd.openxmlformats-officedocument. |
Werkzeug | PUID | MIME-Type | Formatversion | Validierung |
---|---|---|---|---|
DROID | 90% | 90% | 90% | |
Tika | 90% | 90% | ||
JHOVE | 80% | 100% | ||
JHOVE (PDF-Modul) | 80% bzw. 0% bei PDF/A | 100% bzw. 0% bei PDF/A | ||
veraPDF | 100% | |||
veraPDF (PDF/UA-Profile) | 30% | |||
ODF Validator | 100% | |||
OOXML Validator | 100% |