Anwendung und Persistenz der METS-Attribute ID (UUID) in Kitodo.Production 3 #5860
Replies: 5 comments 5 replies
-
Den Fall 1 1. hab ich mir mal angeschaut und dieser hat in der Implementierung folgenden Grund: Beim Abspeichern im Metadateneditor wird in einer intern geladenen Map mit relativen URI's z.B. Diese Funktion wird auch beim Export aufgerufen, allerdings wird hier mit der absoluten URI des METS Pfades (aus der Unterordnerkonfiguration) z.B. Deshalb ändert sich beim Abspeichern im Metadateneditor die UUID in der |
Beta Was this translation helpful? Give feedback.
-
Ganz grundsätzlich werden die Struktur- und Metadaten im laufenden Betrieb von Kitodo.Production nicht in METS “gedacht”, sondern in einer Struktur (als Java-Objekte) verwaltet, die technisch die Funktionalität der Darstellung in Presentation abbildet: 🗎 Workpiece (1)
├ 🗎 creation date (2)
├ 🗎 edit history (3)
│ ├ 🗎 processing note
│ │ ├ 🗎 name
│ │ ├ 🗎 note
│ │ ├ 🗎 role
│ │ └ 🗎 type
│ ├ 🗎 processing note
│ ├ 🗎 processing note
│ ┆ ...
│ 🗎
├ 🗎 id (4)
├ 🗎 physical structure (5)
│ ├ 🗎 physical division
│ │ ├ 🗎 children
│ │ │ ├ 🗎 physical division
│ │ │ ├ 🗎 physical division
│ │ │ ┆ ...
│ │ ├ 🗎 contentIDs (7)
│ │ ├ 🗎 label (7)
│ │ ├ 🗎 mediaFiles (10)
│ │ │ ├ 🗎 LOCAL → images/ProcessTitle_tif/00000001.tif
│ │ │ ├ 🗎 MAX → jpgs/max/00000001.jpg
│ │ │ ┆ ...
│ │ ├ 🗎 mediaPartial (11)
│ │ ├ 🗎 metadata (12)
│ │ ├ 🗎 order (13)
│ │ ├ 🗎 orderlabel (14)
│ │ └ 🗎 type (15)
│ ├ 🗎 physical division
│ ├ 🗎 physical division
│ ┆ ...
└ 🗎 logical structure (6)
├ 🗎 logical division
│ ├ 🗎 children
│ │ ├ 🗎 logical division
│ │ ├ 🗎 logical division
│ │ ┆ ...
│ ├ 🗎 contentIDs (7)
│ ├ 🗎 label (8)
│ ├ 🗎 link (9)
│ ├ 🗎 metadata (12)
│ │ ├ 🗎 domain
│ │ ├ 🗎 key
│ │ └ 🗎 value
│ ├ 🗎 order (13)
│ ├ 🗎 orderlabel (14)
│ ├ 🗎 type (15)
│ └ 🗎 views (16)
├ 🗎 logical division
├ 🗎 logical division
┆ ...
<mets:agent ROLE="CREATOR" TYPE="OTHER" OTHERTYPE="SOFTWARE">
<mets:name>Kitodo</mets:name>
<mets:note>Converted by Kitodo - Data Editor - 3.2.1-SNAPSHOT (2021-03-29T07:53:32Z)</mets:note>
</mets:agent>
Wie man sieht, gibt es in dieser Struktur gar keine IDs. Sie werden beim Speichern der Struktur nach METS erzeugt, weil es in METS halt nicht ohne IDs geht, und beim Lesen benutzt, um die Puzzlesteine der METS-Datei wieder an den richtigen Stellen in ein zusammenhängendes Datenmodell zu laden. Eigentlich hatte ich hier wie in Version 2 benannte IDs benutzt ( Die Fälle, in denen IDs erhalten bleiben, wurden nachträglich absichtsvoll in diese Logik hineingearbeitet, da diese IDs auf bestimmten Kundensystemen erhalten bleiben müssen, weil die IDs zusätzlich in einer externen Datenbank mitgeführt werden und sich deshalb nicht mehr ändern dürfen. Dafür wurden noch ein paar Felder bzw. Sub-Klassen eingefügt, die in der Darstellung oben nicht aufgelistet sind. Eine Frage wäre, ob man dafür nicht CONTENTIDS nutzen könnte. Ich glaube, die größte Verwirrung besteht darin, dass das interne Datenmodell überhaupt nach METS konvertiert abgespeichert wird. Das führt immer wieder zu Verwirrungen, auch wenn Fremddaten (z.B. ein Link auf ein Volltext-PDF) von anderen Skripten in die interne METS-Datei eingetragen werden und dann “verloren gehen”. Natürlich kann Production mit diesen Angaben beim Auswerten der METS-Datei nichts anfangen (da es dafür im obigen Modell kein Feld gibt) und “überliest” sie dann einfach. Ich hätte es auch lieber gesehen, dass die internen Daten in einem eigenen Format gespeichert werden, das die innere Programmlogik besser repräsentiert. Das hätte uns auch noch andere Möglichkeiten geboten, es wurde dann aber anders entschieden. So kommt es zum beschriebenen Verhalten. |
Beta Was this translation helpful? Give feedback.
-
Die Änderung der ID in Wenn die ID eines Objekts geändert wird, wird das Objekt von der DDB nicht mehr mit dem vorhandenen Objekt zusammengeführt, sondern als neues Objekt bewertet. Dadurch entstehen Dubletten, wie zum Beispiel: In der SLUB Dresden werden alle Vorgänge exportiert, um die ID in Durch die sukzessive Aktualisierung der METS-Dateien wegen Metadaten-Korrekturen, Hinzufügen von Kollektionen, oder anderer Gründe würden sich ansonsten mit der Zeit dublette Datensätze anhäufen. Ergänzung:
Allgemeine Informationen: |
Beta Was this translation helpful? Give feedback.
-
Wenn ich mich nicht täusche und darauf wurde bereits oben verwiesen, betrifft das Problem der geänderten IDs bei Metadatenabzügen nur hierarchische Vorgänge. Und genauer: Die ID des erzeugten div-Containers für Eltern-Elemente (z.B. einen Jahrgang einer Zeitung, eine Zeitschrift). Das Problem tritt also in der XML-Datei der Unterordnung auf, die nun einen Elternvorgang mit anderer ID referenziert. Erster Export: <mets:structMap TYPE="LOGICAL">
<mets:div ID="uuid-87ac6c0e-2b93-420e-bb8b-6c6bf1c31447"
TYPE="multivolume_work"
LABEL="Versuch eines Systems des teutschen Styls, zu einem vollständigen Kursus der teutschen Sprache auf Akademien und Gymnasien">
<mets:mptr LOCTYPE="URL"
xlink:href="https://content.digital.ub.uni-koeln.de/mets/retro_991020828859706476_000000"/>
<mets:div ID="uuid-c60b7dbd-3974-44da-85cd-31a7c543f2b2"
DMDID="uuid-1e34d349-28eb-3c3c-904c-cb389f84ddef"
ADMID="uuid-af4f6d90-c121-3d1c-af83-bb4c36538ee5"
TYPE="volume"
LABEL="2. Versuch eines Systems des teutschen Styls, zu einem vollständigen Kursus der teutschen Sprache auf Akademien und Gymnasien"/>
</mets:div>
</mets:structMap> Zweiter Export: <mets:structMap TYPE="LOGICAL">
<mets:div ID="uuid-722a4694-039d-4bc5-ac74-c066918be9d7"
TYPE="multivolume_work"
LABEL="Versuch eines Systems des teutschen Styls, zu einem vollständigen Kursus der teutschen Sprache auf Akademien und Gymnasien">
<mets:mptr LOCTYPE="URL"
xlink:href="https://content.digital.ub.uni-koeln.de/mets/retro_991020828859706476_000000"/>
<mets:div ID="uuid-c60b7dbd-3974-44da-85cd-31a7c543f2b2"
DMDID="uuid-1e34d349-28eb-3c3c-904c-cb389f84ddef"
ADMID="uuid-af4f6d90-c121-3d1c-af83-bb4c36538ee5"
TYPE="volume"
LABEL="2. Versuch eines Systems des teutschen Styls, zu einem vollständigen Kursus der teutschen Sprache auf Akademien und Gymnasien"/>
</mets:div>
</mets:structMap> Das Problem liegt vermutlich darin, dass der Verweis auf die Überordnung beim Export immer nur dynamisch erzeugt wird und in der internen Kitodo-XML gar nicht vorgehalten wird. Er kann dementsprechend auch nicht persistent gespeichert werden. |
Beta Was this translation helpful? Give feedback.
-
Ergänzung nach einem Treffen von @andre-hohmann , @apiller und einem Kollegen der DDB: Die folgende Vermutung war korrekt:
Siehe: #5860 (reply in thread) Die Identifier in der DDB werden für alle Strukturelemente (Monografie, Volume, Kapitel, ...) aus folgenden Bestandteilen gebildet.
Dies ist in der API der DDB für jeden Datensatz in dem Element Für: |
Beta Was this translation helpful? Give feedback.
-
Einleitung
In Kitodo.Production werden die Werte der METS-Attribute
ID
auf unterschiedliche Weise als in Kitodo.Production 3 erzeugt. Dies führt in einigen Fällen zu Anpassung-Bedarfen nachgelagerter Prozesse, weil diese auf den bisher bestehenden Werten entwickelt wurden.Im Folgenden wird die vermutete Anwendung bezüglich der Erstellung der ID-Werte untersucht und einige Auswirkungen beschrieben. Ziel ist die Ermittlung der Gründe für die Umstellung der ID-Erzeugung, die jeweiligen Anwendung und deren Dokumentation. Ausdrücklich kein Ziel dieser Diskussion ist die Bewertung der Änderung zur Erzeugung der ID-Werte.
Generell werden in Kitodo.Production 3 UUID für neue METS-Attribute
ID
erzeugt. In einigen Fällen bleibt die vorhandene "alte"ID
erhalten. Somit entstehen auch Mischungen der ID-Werte aus Kitodo-Production 2 (LOG_0000, LOG, 0001, PHYS_0001, PHYS_0001, …) und Kitodo.Production 3 (UUID) innerhalb einer METS-Datei.Einige ID-Werte werden während der Migration in der internen METS-Datei angepasst, andere Werte werden in der exportierten METS-Datei angepasst.
Fall 1
In den folgenden ID-Attributen werden die Werte in der exportierten Datei nach jeder Aktualisierung (Export) neu erstellt, unabhängig davon, ob Änderungen an den Metadaten, Strukturdaten, … durchgeführt wurden oder nicht.
mets:fileSec/mets:fileGrp/mets:file/@ID
mets:structMap[TYPE='LOGICAL']/mets:div/@ID
(Hierarchische Vorgänge)
Der Grund besteht wohl darin, dass die Einträge nicht in der internen METS-Datei des Vorgangs enthalten sind, somit nicht stabil vorgehalten werden können und deshalb neu erzeugt werden.
Fall 2
In den folgenden ID-Attributen werden die Werte in der internen METS-Datei während der Migration neu erstellt. Dementsprechend werden die geänderten Werte auch in die exportierte METS-Datei eingetragen.
mets:dmdSec/ID
mets:amdSec/mets:rightsMD/@ID
mets:amdSec/mets:digiprovMD/@ID
Der Grund für die Änderung der ID ist nicht bekannt.
Fall 3
In den restlichen ID-Attributen bleiben die ID-Werte aus Kitodo.Production erhalten.
Auswirkungen
Insbesondere die Erzeugung neuer UUID durch jede Aktualisierung er METS-Datei in den Attributen
mets:fileSec/mets:fileGrp/mets:file/@ID
behindert die Anwendung von Annotationen. Diese werden in Regel auf der Basis der Derivate erstellt.Fragen
dmdSec
, ...) in der internen METS-Datei während der Migration geändert?Beta Was this translation helpful? Give feedback.
All reactions