diff --git a/.dockerignore b/.dockerignore index ff204476..ed02a889 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,5 @@ ** !cmd -!hack/sampledata/xsd !internal !go.mod !go.sum diff --git a/Dockerfile b/Dockerfile index 538581cb..61ea4fe1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,7 +50,6 @@ RUN addgroup -g ${GROUP_ID} -S preprocessing RUN adduser -u ${USER_ID} -S -D preprocessing preprocessing USER preprocessing -COPY --from=build-preprocessing-worker --link /src/hack/sampledata/xsd/* / COPY --from=build-preprocessing-worker --link /out/preprocessing-worker /home/preprocessing/bin/preprocessing-worker RUN mkdir /home/preprocessing/shared diff --git a/cmd/worker/workercmd/cmd.go b/cmd/worker/workercmd/cmd.go index 3b4e66cb..1c3b9c2a 100644 --- a/cmd/worker/workercmd/cmd.go +++ b/cmd/worker/workercmd/cmd.go @@ -5,6 +5,7 @@ import ( "crypto/rand" "github.com/artefactual-sdps/temporal-activities/bagcreate" + "github.com/artefactual-sdps/temporal-activities/xmlvalidate" "github.com/go-logr/logr" "go.artefactual.dev/tools/temporal" temporalsdk_activity "go.temporal.io/sdk/activity" @@ -89,8 +90,8 @@ func (m *Main) Run(ctx context.Context) error { temporalsdk_activity.RegisterOptions{Name: activities.AddPREMISAgentName}, ) w.RegisterActivityWithOptions( - activities.NewValidateMetadata().Execute, - temporalsdk_activity.RegisterOptions{Name: activities.ValidateMetadataName}, + xmlvalidate.New(xmlvalidate.NewXMLLintValidator()).Execute, + temporalsdk_activity.RegisterOptions{Name: xmlvalidate.Name}, ) w.RegisterActivityWithOptions( activities.NewTransformSIP().Execute, diff --git a/go.mod b/go.mod index 5af6443f..2e6e29ba 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/artefactual-sdps/preprocessing-sfa go 1.23.2 require ( - github.com/artefactual-sdps/temporal-activities v0.0.0-20240821162351-47302711bc7b + github.com/artefactual-sdps/temporal-activities v0.0.0-20241018212855-8ea34d29bdf4 github.com/beevik/etree v1.4.0 github.com/deckarep/golang-set/v2 v2.6.0 github.com/go-logr/logr v1.4.2 diff --git a/go.sum b/go.sum index 12a18771..7ab41d85 100644 --- a/go.sum +++ b/go.sum @@ -13,8 +13,8 @@ cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zF cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/artefactual-sdps/temporal-activities v0.0.0-20240821162351-47302711bc7b h1:kTOc2pbkdII6/Z84Bus1q52z5KAOaT8vLpfRoOs1l1I= -github.com/artefactual-sdps/temporal-activities v0.0.0-20240821162351-47302711bc7b/go.mod h1:FVh79rCGNlUU1QnioAU+lrSjLqrA1PJFYKIhWPsmyug= +github.com/artefactual-sdps/temporal-activities v0.0.0-20241018212855-8ea34d29bdf4 h1:WF95IOkZRVSCST/26SAqPYsUrtUuJpavBht6lvdeKl0= +github.com/artefactual-sdps/temporal-activities v0.0.0-20241018212855-8ea34d29bdf4/go.mod h1:FVh79rCGNlUU1QnioAU+lrSjLqrA1PJFYKIhWPsmyug= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= diff --git a/hack/sampledata/SIP_20111020_BFB_v60.zip b/hack/sampledata/SIP_20111020_BFB_v60.zip deleted file mode 100644 index 63abf33b..00000000 Binary files a/hack/sampledata/SIP_20111020_BFB_v60.zip and /dev/null differ diff --git a/hack/sampledata/xsd/ablieferung.xsd b/hack/sampledata/xsd/ablieferung.xsd deleted file mode 100644 index 73f5e253..00000000 --- a/hack/sampledata/xsd/ablieferung.xsd +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - Die Ablieferungsnummer dient zur Identifizierung der Ablieferung im Bundesarchiv. Sie besteht aus dem Ablieferungsjahr und einer Laufnummer innerhalb dieses Jahres. - - - - - - - Angabe darüber, aus welcher Umgebung die Ablieferung stammt. - - - - - - - - - - Die vom BAR vergebene Nummer des Angebots, auf welches sich die Ablieferung stützt. - - - - - - - Organisationseinheit, welche die abzuliefernden Unterlagen aufbereitet (der Name wird ausgeschrieben, keine Abkürzung), und Name der Person, die für die Ablieferung zuständig ist. - - - - - - - Aktenzeichen Bewertungsentscheid(e) BAR, welches die Ablieferung betreffen. - - - - - - - Aktenzeichen des Formulars „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“, in dem die für die Ablieferung vereinbarten Schutzfristen festgehalten sind. - - - - - - - Artikel des BGA, der die Schutzfrist festhält, die das Amt im Formular „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“ gemeldet hat und vom BAR auf ihre formale Korrektheit und Vollständigkeit kontrolliert worden ist. - - - - - - - Dauer der Schutzfrist in Jahren, die das Amt im Formular „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“ gemeldet hat und vom BAR auf ihre formale Korrektheit und Vollständigkeit kontrolliert worden ist. - - - - - - - Angabe über den gesamten Inhalt der Ablieferung (sowohl der digitalen als auch der nicht digitalen Teile). - - - - - - - Zusätzliche Informationen, welche die Ablieferung und ihre Entstehung betreffen. Wenn die Unterlagen in der Ablieferung aus einer periodisierten Registratur stammen, kann hier die Registraturperiode angegeben werden. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/archivischeNotiz.xsd b/hack/sampledata/xsd/archivischeNotiz.xsd deleted file mode 100644 index e47c23f1..00000000 --- a/hack/sampledata/xsd/archivischeNotiz.xsd +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Paketweit eindeutige ID. - - - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/archivischerVorgang.xsd b/hack/sampledata/xsd/archivischerVorgang.xsd deleted file mode 100644 index c58596ed..00000000 --- a/hack/sampledata/xsd/archivischerVorgang.xsd +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - Klassifizierung des Vorgangs. - - - - - - - - Nachweis und Resultat der durchgeführten Tätigkeit. - - - - - - - Name der Person, die den archivischen Vorgang durchgeführt hat. - - - - - - - Aktenzeichen des Übernahmedossiers in der GEVER Anwendung des Bundesarchiv. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/arelda.xsd b/hack/sampledata/xsd/arelda.xsd deleted file mode 100644 index 05ae33f4..00000000 --- a/hack/sampledata/xsd/arelda.xsd +++ /dev/null @@ -1,1155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - Das Element id in der Entität Ordnungssystemposition muss eindeutig sein. - - - - - - - Das Element id in der Entität Dossier muss eindeutig sein. - - - - - - - Das Element id in der Entität Dokument muss eindeutig sein. - - - - - - - Das Element id in der Entität ArchivischeNotiz muss eindeutig sein. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zeitpunkt, zu welchem der archivische Vorgang durchgeführt wurde. - - - - - - - - - - - - - - Der Entstehungszeitraum der Ablieferung wird aus dem ältesten Entstehungsdatum und dem jüngsten Datum der Dokumente oder Dateien ermittelt, die der Ablieferung zugeordneten sind. Der Zeitraum kann auch geschätzt sein. - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zeitraum der Existenz des Aktenbildners. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zeitraum, seit/während dem das Ordnungssystem bei der aktenbildenden Stelle eingesetzt wird/wurde. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - - - - - - Der Entstehungszeitraum des Dossiers wird aus dem ältesten Entstehungsdatum und dem jüngsten (Änderungs)datum aller dem Dossier zugeordneten Dokumente oder Dateien ermittelt. Der Zeitraum kann auch geschätzt sein. - - - - - - - - - - - - - - - - - - - - - - Zeitpunkt, an dem das Dossier eröffnet worden ist. - - - - - Zeitpunkt, an dem das Dossier abgeschlossen worden ist. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - Eine Datei darf nur einmal referenziert werden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zeitpunkt an welchem das Dokument im System einem Dossier zugeordnet worden ist. - - - - - Zeitliche Angabe über die Entstehung des Dokuments. Als Entstehung des Dokuments kann das Datum seiner Erstellung angegeben werden, oder den Zeitraum, in dem das Dokument entstanden ist (aus dem ältesten Entstehungsdatum und dem jüngsten Datum des Dokuments ermittelt). Der Zeitraum kann auch geschätzt sein. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Name und Wert von technischen Eigenschaften der Dateien wie z.B. Felddelemiter. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Referenz zu einer Datei im Inhaltsverzeichnis des Pakets. - - - - - Zusätzliche unstrukturierte Informationen, welche der Ablieferung fakultativ mitgegeben werden können. - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/base.xsd b/hack/sampledata/xsd/base.xsd deleted file mode 100644 index 310b897c..00000000 --- a/hack/sampledata/xsd/base.xsd +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zeitpunkte: the following values are possible by date type 1 regular expression - historische Anwendung - 31.01.2004 - ca.31.01.2004 - 2004 - ca.2004 - keine Angabe - - - - - - - - - - - - - - - - - - - - - Zeitpunkte: the following values are possible by date type 3 regular expression - technische Anwendung - Date Data Type (xs:date) - The date is specified in the following form "YYYY-MM-DD" where: - * YYYY indicates the year - * MM indicates the month - * DD indicates the day - Note: All components are required! - - DateTime Data Type (xs:dateTime) - The dateTime data type is used to specify a date and a time. - The dateTime is specified in the following form "YYYY-MM-DDThh:mm:ss" where: - * YYYY indicates the year - * MM indicates the month - * DD indicates the day - * T indicates the start of the required time section - * hh indicates the hour - * mm indicates the minute - * ss indicates the second - Note: All components are required! - - - - - - - - Datum, an welchem die Notiz erfasst wurde. Datums-Tagengenauigkeit reicht (keine Std. und Sek.). Zwingendes Feld. - - - - - - - Benutzer, welcher die Notiz erfasst hat. Optionales Feld. - - - - - - - Notiz i.e.S, d.h. Beschreibung. Zwingendes Feld. - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/datei.xsd b/hack/sampledata/xsd/datei.xsd deleted file mode 100644 index 091b8cc8..00000000 --- a/hack/sampledata/xsd/datei.xsd +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - Name der Datei, wie dieser im SIP/AIP/DIP erscheint (z.B. "p000001_Machbarkeitsanaly.pdf"). - - - - - - - Name der Datei im Filesystem. - - - - - - - Name des Ordners oder der Datei, wie diese in der Originalstruktur (im GEVER-System, in der Dateiablage) beim Aktenbildner geheissen hat (z.B. "Arbeitspaket" oder "Bericht.doc"). - - - - - - - - - - Paketweit eindeutige ID für die Datei (technischer Primärschlüssel). Diese ID wird aus dem Dokument heraus referenziert. - - - - - - - Bezeichnung des verwendeten Prüfalgorithmus. - - - - - - - - - - - - Prüfsummenwert (abhängig vom verwendeten Prüfalgorithmus). - - - - - - - Generisches Attribut, welches im Zusammenhang mit Wert verwendet wird. Wird bspw. eine CSV-Datei abgeliefert, dann können mittels Attributpaar "eigenschaft" und "wert" Feld- und Zeilendelemiter, Texterkennungszeichen oder Spaltennamen angegeben werden. - - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/dokument.xsd b/hack/sampledata/xsd/dokument.xsd deleted file mode 100644 index 5790fd37..00000000 --- a/hack/sampledata/xsd/dokument.xsd +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - Kurze Beschreibung des im Dokument behandelten Gegenstandes. - - - - - - - Paketweit eindeutige ID (Primärschlüssel). - - - - - - - - - Verfasser eines Dokuments. - - - - - - - Angabe, ob es sich beim Dokument zum Zeitpunkt der Ablieferung um ein digitales Dokument, oder um ein nicht-digitales Dokument handelt (Papier, audiovisuell). Ein Dokument kann nur einer der beiden Erscheinungsformen (entweder digital oder nicht-digital) zugewiesen werden. Dokumente, die vor der Ablieferung ins BAR aus einem digitalen und einem nicht-digitalen Teil bestanden, müssen als zwei getrennte Dokumente abgeliefert werden. - - - - - - - - - - Aussehen des Dokuments, das zu erhalten ist. - - - - - - - Kategorisierung des Dokuments in Bezug auf seinen Anwendungsbereich in der Verwaltungseinheit. - - - - - - - Grad, in dem das Dokument vor unberechtigter Einsicht geschützt werden muss. Referenz: Verordnung vom 10.12.1990 über die Klassifizierung und Behandlung von Informationen im zivilen Verwaltungsbereich ([SR 172.015]) und Verordnung vom 1.5.1990 über den Schutz militärischer Informationen ([SR 510.411]). - - - - - - - Markierung, die angibt, ob das Dokument besonders schützenswerte Personendaten oder Persönlichkeitsprofile gemäss Datenschutzrecht Art 3. - - - - - - - Angabe, ob das Dokument gemäss [BGÖ] öffentlich zugänglich ist oder nicht. - - - - - - - Argumente gegen die öffentliche Zugänglichkeit gemäss [BGÖ]. Gemäss Entwurf [BGÖ] muss begründet werden, warum Unterlagen nicht öffentlich zugänglich gemacht werden können. - - - - - - - Angaben über sonstige rechtliche Auflagen, denen das Dokument unterstellt ist. - - - - - - - Verschiedene Informationen, die in Zusammenhang mit dem Dokument, seiner Entstehung und allfälligen Veränderungen festgehalten werden müssen. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/dossier.xsd b/hack/sampledata/xsd/dossier.xsd deleted file mode 100644 index 0120c2e7..00000000 --- a/hack/sampledata/xsd/dossier.xsd +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - Identifikation und Ordnungsmerkmal des Dossiers. Das Aktenzeichen erlaubt es, das Dossier innerhalb eines bestimmten Ablagesystems einer eindeutigen Position (Rubrik) des OS zuzuordnen. - - - - - - - Angaben über zusätzliche Merkmale, welche das Dossier identifizieren. Hier kann z.B. die Bandnummer eines Dossiers vermerkt werden, als Unterscheidungs- und Reihungsmerkmal von Fortsetzungsdossiers mit demselben Dossier-Titel und mit demselben Aktenzeichen erfasst. - - - - - - - Bezeichnung des Dossiers. - GEVER: Kurzbeschreibung des Geschäftsfalls (bei Seriendossierbildung) oder des Sachbetreffs (bei Sachdossierbildung) zu welchem Dokumente im Dossier abgelegt werden. - FILES: Kurzbeschreibung des Inhalts der Datensammlung und der Dokumentation (falls vorhanden) - - - - - - - Inhaltlicher Schwerpunkt der Datensammlung sofern dies nicht aus dem Feld "Titel" hervorgeht. - - - - - - - Angabe des Mediums (Fotos, Tondokumente, schriftliche Unterlagen usw.) - - - - - - - Anzahl der Dateien des Dossiers und Umfang in MBytes zum Zeitpunkt der Ablieferung. Bei Datenbanken: Anzahl Datensätze der vorliegenden Datensammlung zum Zeitpunkt der Ablieferung. Als Datensatz gilt das Ensemble von Zeilen einer oder mehrerer miteinander verknüpften Tabellen (zentrale logische Einheit). Die Anzahl Datensätze ist zusammen mit der Bezeichnung der zentralen logischen Einheit zu nennen. Diese hängt vom Hauptfokus der Datensammlung ab. Bei Unklarheit muss mit einem Zusatztext erklärt werden, wie viele Datensätze welchen Typs vorliegen. - - - - - - - Paketweit eindeutige ID. Sie wird im AIS im Modul Verzeichnungseinheiten auf Dossierstufe verzeichnet. - - - - - - - - - Angaben darüber, ob das Dossier digitale, nicht-digitale (Papier, audiovisuell) oder sowohl digitale als auch nicht-digitale Dokumente enthält. - - - - - - - - - - - - Bestimmung der für die Erledigung des Geschäftes zuständigen federführenden Organisationseinheit. - - - - - - - Zusätzliche Informationen, welche für die Ermittlung des Entstehungszeitraums relevant sind. Hier können Angaben über allfällige Löschungen und Mutationen an der Datensammlung eingetragen werden (für FILES relevant). Falls der Entstehungszeitraum geschätzt wurde, ist hier das Kriterium für die Schätzung zu nennen. - - - - - - - Artikel des BGA, der die Schutzfrist festhält, die das Amt im Formular „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“ gemeldet hat und vom BAR auf ihre formale Korrektheit und Vollständigkeit kontrolliert worden ist. - - - - - - - Dauer der Schutzfrist in Jahren, die das Amt im Formular „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“ gemeldet hat und vom BAR auf ihre formale Korrektheit und Vollständigkeit kontrolliert worden ist. - - - - - - - Erläuterung der Begründung für eine verlängerte Schutzfrist für Unterlagen, die nach Personennamen erschlossen sind und schützenswerte Personendaten gemäss DSG enthalten (Art. 11 BGA), und für bestimmte Kategorien oder für einzelne Dossiers, die überwiegend schutzwürdige öffentliche oder private Interessen tangieren (Art. 12 Abs. 1 BGA und Art. 12 Abs. 2 BGA). - - - - - - - Grad, in dem das Dossier und die enthaltenen Dokumente und Dateien vor unberechtigter Einsicht geschützt werden müssen. Referenz: Verordnung vom 10.12.1990 über die Klassifizierung und Behandlung von Informationen im zivilen Verwaltungsbereich ([SR 172.015]) und Verordnung vom 1.5.1990 über den Schutz militärischer Informationen ([SR 510.411]). - - - - - - - Markierung, die angibt, ob sich in den Dokumenten des Dossiers besonders schützenswerten Personendaten oder Persönlichkeitsprofilen gemäss Datenschutzrecht. - - - - - - - Angabe, ob das Dossier gemäss [BGÖ] schützenswerte Dokumente oder Dateien enthält oder nicht. - - - - - - - Argumente gegen die öffentliche Zugänglichkeit gemäss [BGÖ]. Gemäss Entwurf [BGÖ] muss begründet werden, warum Unterlagen nicht öffentlich zugänglich gemacht werden können. - - - - - - - Angaben über sonstige rechtliche Auflagen, denen das Dossier unterstellt ist. - - - - - - - Angaben über Tätigkeiten, die an Dokumenten des Dossiers durchgeführt wurden. Es können z.B. Angaben zu Tätigkeiten sein, die im Rahmen eines Auftragssubdossiers durchgeführt wurden. - - - - - - - Zusätzliche Informationen, welche das Dossier oder die Datensammlung betreffen. Hier können nähere Angaben zur Sprache und zu speziellen technischen Anforderungen eingetragen werden, welche den Zugang der Daten einschränken könnten. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/ordner.xsd b/hack/sampledata/xsd/ordner.xsd deleted file mode 100644 index 67d5bb5f..00000000 --- a/hack/sampledata/xsd/ordner.xsd +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - Das Inhaltsverzeichnis listet alle Dateien und Ordner des Pakets hierarchisch auf. Für die Ordner wird der Ordnername eingesetzt. - - - - - - - - - - Paketweit eindeutige ID für den Ordner (technischer Primärschlüssel). Diese ID wird aus dem Dokument heraus referenziert. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/ordnungssystem.xsd b/hack/sampledata/xsd/ordnungssystem.xsd deleted file mode 100644 index 17d185f9..00000000 --- a/hack/sampledata/xsd/ordnungssystem.xsd +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Eindeutige Bezeichnung des Ordnungssystems, welche den Geltungsbereich des Ordnungssystems wiedergibt. Enthält in der Regel als Element die Bezeichnung der Verwaltungseinheit oder des Aufgabenbereichs, in welchem das Ordnungssystem angewandt wird. - - - - - - - Versionsbezeichnung des Ordnungssystems. Dient zur Verknüpfung und Unterscheidung von zeitlich aufeinander folgenden OS desselben Typs mit demselben Geltungsbereich. - - - - - - - Weitere Organisationseinheiten, ausserhalb des Aktenbildners, welche das Ordnungssystem mitbenutzen oder mitbenutzt haben. - - - - - - - Zusätzliche Informationen, welche das Ordnungssystem betreffen. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/ordnungssystemposition.xsd b/hack/sampledata/xsd/ordnungssystemposition.xsd deleted file mode 100644 index 8f2ada37..00000000 --- a/hack/sampledata/xsd/ordnungssystemposition.xsd +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - Eindeutige Identifikation und Ordnungsmerkmal der Ordnungssystemposition. - - - - - - - Bezeichnung des Aufgabenbereichs, dem die Ordnungssystemposition zugewiesen ist. - - - - - - - Paketweit eindeutige ID (Primärschlüssel). - - - - - - - Bestimmung der für die Erledigung des Geschäftes zuständigen federführenden Organisationseinheit. - - - - - - - Artikel des BGA, der die Schutzfrist festhält, die das Amt im Formular „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“ gemeldet hat und vom BAR auf ihre formale Korrektheit und Vollständigkeit kontrolliert worden ist. - - - - - - - Dauer der Schutzfrist in Jahren, die das Amt im Formular „Meldung von Unterlagen mit besonderer Schutzfrist und öffentlich zugänglichen Unterlagen“ gemeldet hat und vom BAR auf ihre formale Korrektheit und Vollständigkeit kontrolliert worden ist. - - - - - - - Erläuterung der Begründung für eine verlängerte Schutzfrist für Unterlagen, die nach Personennamen erschlossen sind und schützenswerte Personendaten gemäss DSG enthalten (Art. 11 BGA), und für bestimmte Kategorien oder für einzelne Dossiers, die überwiegend schutzwürdige öffentliche oder private Interessen tangieren (Art. 12 Abs. 1 BGA und Art. 12 Abs. 2 BGA). - - - - - - - Grad, in dem alle der Ordnungssystemposition untergeordneten Objekte Dossier und Dokumente vor unberechtigter Einsicht geschützt werden müssen. Referenz: Verordnung vom 10.12.1990 über die Klassifizierung und Behandlung von Informationen im zivilen Verwaltungsbereich ([SR 172.015]) und Verordnung vom 1.5.1990 über den Schutz militärischer Informationen ([SR 510.411]). - - - - - - - Markierung, die angibt, ob sich in den Unterlagen der Ordnungssystemposition solche mit besonders schützenswerten Personendaten oder Persönlichkeitsprofilen gemäss Datenschutzgesetz. - - - - - - - Angabe, ob der Ordnungssystemposition untergeordnete Dossiers gemäss [BGÖ] schützenswerte Dokumente enthalten oder nicht. - - - - - - - Argumente gegen die öffentliche Zugänglichkeit gemäss [BGÖ]. Gemäss Entwurf [BGÖ] muss begründet werden, warum Unterlagen nicht öffentlich zugänglich gemacht werden können. - - - - - - - Angaben über sonstige rechtliche Auflagen, denen die Ordnungssystemposition unterstellt ist. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/paket.xsd b/hack/sampledata/xsd/paket.xsd deleted file mode 100644 index 2a4766af..00000000 --- a/hack/sampledata/xsd/paket.xsd +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - Name des SIP zum Zeitpunkt der Ablieferung. - - - - - - - - - Über die Gesamtheit der AIP eindeutige ID. Wird im AIS verzeichnet. - - - - - - - Über die Gesamtheit der AIP eindeutige ID im Zusammenhang mit Paketmigrationen. Entsteht zum ersten Mal, wenn ein AIP migriert wird. Wird nicht im AIS verzeichnet. - - - - - - - Zeigt auf das "Vater-AIP" zurück, also dasjenige AIP, aus welchem das vorliegende hervorgegangen ist. - - - - - - - Klassierung des Pakets. - - - - - - - - - - - Angabe, mit welcher XSD-Version das Paket erstellt wurde. - - - - - - - Die Versionierung des Pakets. Aus der Version ist schnell ersichtlich, wie oft ein AIP bereits migriert wurde. - - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/provenienz.xsd b/hack/sampledata/xsd/provenienz.xsd deleted file mode 100644 index df1d5463..00000000 --- a/hack/sampledata/xsd/provenienz.xsd +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - Bezeichnung der Stelle, der Organisationseinheit oder der Person(en), welche die Unterlagen oder die Datensammlung erstellt oder geführt hat. Falls der Aktenbildner unbekannt ist, muss die Angabe "Aktenbildner unbekannt" eingetragen werden. - - - - - - - Name des Informationssystems, aus dem die abgelieferten Daten (FILES), Dossiers und Dokumente (GEVER) stammen. - - - - - - - Knappe Beschreibung des Informationssystems, aus dem die abgelieferten Daten (FILES) stammen. Die Beschreibung gibt Auskunft über den Zweck (inkl. Angabe der gesetzlichen Grundlagen), die Architektur, die Entwicklung und über relevante Ergänzungen und Änderungen des Systems. Zudem können hier Angaben zur Datenerhebung und zu den Organisationseinheiten gemacht werden, die neben dem Aktenbildner das System verwenden. - - - - - - - Systeme, die mit dem beschriebenen System Daten ausgetauscht haben und damit Subsysteme, Parallelsysteme oder übergeordnete Systeme sind. Hier werden die Bezeichnungen der Systeme und die Art der Verwandtschaft eingetragen. - - - - - - - Angaben darüber, auf welche Weise die Daten aus dem System archiviert werden, allfällige Löschvorschriften, Angaben darüber, welche Funktionalitäten des Originalsystems nicht archiviert werden konnten, und vereinbartes Intervall der Ablieferungen sind hier zu nennen. - - - - - - - Name der Ablage, für welche das primäre Ordnungssystem verwendet wird und die einem Mandanten im System entspricht. Eine aktenbildende Stelle kann im Prinzip mehr als eine Registratur führen. Pro Registratur gibt es allerdings nur ein primäres Ordnungssystem. - - - - - - - Allgemeiner Überblick über die Geschichte des Aktenbildners und Angaben über Vorgänger und Nachfolgerorganisationen. - - - - - - - Zusätzliche Informationen, die den Aktenbildner und die Herkunft der Unterlagen oder der Datensammlung betreffen. - - - - \ No newline at end of file diff --git a/hack/sampledata/xsd/xsdval.py b/hack/sampledata/xsd/xsdval.py deleted file mode 100644 index ab425101..00000000 --- a/hack/sampledata/xsd/xsdval.py +++ /dev/null @@ -1,17 +0,0 @@ -import sys -from lxml import etree - - -def validate_xml(path, arelda): - with open(path) as f: - xml = f.read() - doc = etree.fromstring(bytes(xml, encoding="UTF-8")) - with open(arelda) as f: - xsd_xml = f.read() - xsd_doc = etree.fromstring(bytes(xsd_xml, encoding="UTF-8")) - xsd = etree.XMLSchema(xsd_doc) - valid = xsd.validate(doc) - return valid - - -print("Is metadata.xml valid: ", validate_xml(sys.argv[1], sys.argv[2])) diff --git a/hack/sampledata/xsd/zusatzDaten.xsd b/hack/sampledata/xsd/zusatzDaten.xsd deleted file mode 100644 index 8f9f9f78..00000000 --- a/hack/sampledata/xsd/zusatzDaten.xsd +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - Merkmal - Werte Gruppen erlaubt das festhalten weiterer Metadaten in tabellarisch strukturierter Form - - - - - - - - - Name des Merkmal - Werte Paares - - - - - - - - - \ No newline at end of file diff --git a/internal/activities/validate_metadata.go b/internal/activities/validate_metadata.go deleted file mode 100644 index 048d47ab..00000000 --- a/internal/activities/validate_metadata.go +++ /dev/null @@ -1,49 +0,0 @@ -package activities - -import ( - "context" - "fmt" - "os/exec" - "path/filepath" - - "github.com/artefactual-sdps/preprocessing-sfa/internal/sip" -) - -const ValidateMetadataName = "validate-metadata" - -type ValidateMetadataParams struct { - SIP sip.SIP -} - -type ValidateMetadataResult struct { - Failures []string -} - -type ValidateMetadata struct{} - -func NewValidateMetadata() *ValidateMetadata { - return &ValidateMetadata{} -} - -func (a *ValidateMetadata) Execute( - ctx context.Context, - params *ValidateMetadataParams, -) (*ValidateMetadataResult, error) { - var failures []string - c := exec.Command("python3", "xsdval.py", params.SIP.ManifestPath, "arelda.xsd") // #nosec G204 - out, err := c.CombinedOutput() - if err != nil { - return nil, fmt.Errorf("run xsdval.py: %s", out) - } - - // The xsdval.py script always outputs the name "metadata.xml" in the - // following string regardless of the actual manifest filename. - if string(out) != "Is metadata.xml valid: True\n" { - p, err := filepath.Rel(params.SIP.Path, params.SIP.ManifestPath) - if err != nil { - p = params.SIP.ManifestPath - } - failures = append(failures, fmt.Sprintf("%q does not match expected metadata requirements", p)) - } - return &ValidateMetadataResult{Failures: failures}, nil -} diff --git a/internal/workflow/preprocessing.go b/internal/workflow/preprocessing.go index a3b1b927..d6e977bf 100644 --- a/internal/workflow/preprocessing.go +++ b/internal/workflow/preprocessing.go @@ -8,6 +8,7 @@ import ( "time" "github.com/artefactual-sdps/temporal-activities/bagcreate" + "github.com/artefactual-sdps/temporal-activities/xmlvalidate" "go.artefactual.dev/tools/temporal" temporalsdk_log "go.temporal.io/sdk/log" temporalsdk_temporal "go.temporal.io/sdk/temporal" @@ -219,11 +220,14 @@ func (w *PreprocessingWorkflow) Execute( // Validate metadata. validateMetadataEvent := newEvent(ctx, "Validate SIP metadata") - var validateMetadata activities.ValidateMetadataResult + var validateMetadata xmlvalidate.Result e = temporalsdk_workflow.ExecuteActivity( withLocalActOpts(ctx), - activities.ValidateMetadataName, - &activities.ValidateMetadataParams{SIP: identifySIP.SIP}, + xmlvalidate.Name, + &xmlvalidate.Params{ + XMLPath: identifySIP.SIP.ManifestPath, + XSDPath: identifySIP.SIP.XSDPath, + }, ).Get(ctx, &validateMetadata) if e != nil { validateMetadataEvent.Complete( diff --git a/internal/workflow/preprocessing_test.go b/internal/workflow/preprocessing_test.go index 528af0c8..e69b42a1 100644 --- a/internal/workflow/preprocessing_test.go +++ b/internal/workflow/preprocessing_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/artefactual-sdps/temporal-activities/bagcreate" + "github.com/artefactual-sdps/temporal-activities/xmlvalidate" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" temporalsdk_activity "go.temporal.io/sdk/activity" @@ -154,8 +155,8 @@ func (s *PreprocessingTestSuite) SetupTest(cfg *config.Configuration) { temporalsdk_activity.RegisterOptions{Name: activities.AddPREMISAgentName}, ) s.env.RegisterActivityWithOptions( - activities.NewValidateMetadata().Execute, - temporalsdk_activity.RegisterOptions{Name: activities.ValidateMetadataName}, + xmlvalidate.New(nil).Execute, + temporalsdk_activity.RegisterOptions{Name: xmlvalidate.Name}, ) s.env.RegisterActivityWithOptions( activities.NewTransformSIP().Execute, @@ -255,11 +256,14 @@ func (s *PreprocessingTestSuite) TestPreprocessingWorkflowSuccess() { &activities.ValidateFileFormatsResult{}, nil, ) s.env.OnActivity( - activities.ValidateMetadataName, + xmlvalidate.Name, sessionCtx, - &activities.ValidateMetadataParams{SIP: expectedSIP}, + &xmlvalidate.Params{ + XMLPath: expectedSIP.ManifestPath, + XSDPath: expectedSIP.XSDPath, + }, ).Return( - &activities.ValidateMetadataResult{}, nil, + &xmlvalidate.Result{}, nil, ) // PREMIS activities. @@ -536,13 +540,18 @@ func (s *PreprocessingTestSuite) TestPreprocessingWorkflowValidationFails() { nil, ) s.env.OnActivity( - activities.ValidateMetadataName, + xmlvalidate.Name, sessionCtx, - &activities.ValidateMetadataParams{SIP: expectedSIP}, + &xmlvalidate.Params{ + XMLPath: expectedSIP.ManifestPath, + XSDPath: expectedSIP.XSDPath, + }, ).Return( - &activities.ValidateMetadataResult{Failures: []string{ - `fake/path/to/sip/additional/UpdatedAreldaMetadata.xml does not match expected metadata requirements`, - }}, nil, + &xmlvalidate.Result{ + Failures: []string{ + `fake/path/to/sip/additional/UpdatedAreldaMetadata.xml does not match expected metadata requirements`, + }, + }, nil, ) s.env.ExecuteWorkflow(