Manche Dokumentformate bieten die Möglichkeit, in einem originären Datenstrom Verweise auf weitere Datenströme anzugeben. Letztere werden allgemein als Attachments bezeichnet. In manchen Fällen werden Attachments in den originären Datenstrom eingebettet, in anderen Fällen wird lediglich auf die Attachment-Daten verwiesen.[38] Manche Formate erlauben ausschließlich Attachments, die derselben Formatspezifikation genügen. Andere erlauben den Verweis auf beliebige Datenströme.[39]
Im Regelfall legen Formate zudem fest, wie die Verbindung zwischen einem Dokument und einem Attachment zu verstehen ist. So wird einerseits definiert, ob das Attachment mit dem Dokument als Ganzem oder lediglich mit einem Teil des Dokuments, beispielsweise einer Seite, verbunden ist. Andererseits wird oftmals die Art der Verbindung näher spezifiziert. Daraus kann zum Beispiel hervorgehen, ob das Attachment eine alternative Präsentation identischer Inhalte enthält, oder weitere Zusatzinformationen bietet, die im originären Dokument nicht enthalten sind. Mittels dieser Angaben kann somit die Semantik einer Beziehung zwischen Dokument und Attachment beschrieben werden.
Über die von Dokumentformaten gebotenen Möglichkeiten hinaus kann es in manchen Integrationen der jadice document platform sinnvoll sein, eigene, formatneutrale Attachments anzulegen und zu verwalten. In diesem Fall werden die Beziehungen zwischen Dokumenten (oder Dokumentteilen) und Attachments programmatisch zur Laufzeit angelegt und integrationsspezifisch persistiert.
Attachments werden in jadice durch das Interface Attachment
repräsentiert.
Während des Lesevorgangs eines Dokuments wird typischerweise[40] geprüft, ob Attachments enthalten sind, deren Daten eingebettet sind
und die dem Dokument als Ganzem zugeordnet wurden. Ist dies der Fall, so werden
Attachment
Instanzen erzeugt und den beim Lesevorgang entstehenden
PageSegment
s zugeordnet.[41]
Das Attachment
ist ein PropertiesProvider
. Aus dem Attachment können
über die Methode getProperties()
Zusatzinformationen
abgefragt werden.
Diese Zusatzinformationen, wie zum Beispiel Attachment ID, Attachment Name und Attachment Beschreibung, werden beim Ladevorgang des Dokuments, falls möglich, angereichert. In manchen Fällen können die Felder leer sein. Dies ist insbesondere dann der Fall, wenn solche Informationen im Originaldokument nicht vorliegen.
In der Klasse Attachment
sind Konstanten/Schlüssel definiert, um auf die
Informationen zugreifen zu können. Bei Bedarf können den Properties auch weitere
Werte hinzugefügt werden
Das Interface Attachment
definiert (neben der
getProperties()
-Methode des PropertiesProvider
)
keine eigene Methoden – stattdessen werden zur Arbeit mit Attachments die
Hilfsmethoden der Klasse Attachments
verwendet. Diese Klasse bietet folgende Möglichkeiten:
Für eine Instanz von
Document
oderPage
kann festgestellt werden, ob demPageSegment
auf einem bestimmtenDocumentLayer
Attachments zugeordnet sind.In gleicher Weise besteht Zugriff auf die zugeordneten Instanzen von
Attachment
.Für ein gegebenes
Attachment
besteht zudem die Möglichkeit, den eingebetteten Datenstrom anzufordern. Es wird dabei ein Datenstrom zurückgegeben, dessen Lebenszyklus an den des originären Dokumentdatenstroms gebunden ist. Wird letzterer durch Aufruf derclose()
-Methode geschlossen, so werdem damit auch sämtlich Attachment-Datenströme geschlossen.[42]
Das Laden von Attachments erfolgt zur Zeit ausschließlich aus dem PDF-Format. Nähere Details gibt der Abschnitt „PDF: Attachments“.
Unter „Beispiel zur Verwendung der Attachments API“ finden sich Beispiele für die Arbeit mit Attachments.
[38] Ein Beispiel für eingebettete Attachments sind die ›Embedded Files‹ des PDF/A-3 Formats. Ein Beispiel für referenzierte Attachments sind externe Resourcen eines MO:DCA Datenstroms.
[39] Während beispielsweise PDF/A-2 das Einbetten von Attachments im Format PDF/A-2 (oder dessen ›Teilmenge‹ PDF/A-1) erlaubt, bietet PDF/A-3 die Möglichkeit beliebige Datenströme einzubetten.
[40] Die Unterstützung für Attachments ist formatabhängig. Für Formate, die Attachments unterstützen, finden sich nähere Angaben unter Kapitel 6, Formatspezifika.
[41] Die Zuordnung erfolgt durch Ablage der Attachments in den User
Properties des PageSegment
unter einem definierten Schlüssel. Dies
ist jedoch ein internes Implementations-Detail, das ohne weitere
Benachrichtigung seitens levigo solutions jederzeit geändert werden kann. Ein
zuverlässiger Zugriff auf Attachments besteht somit nur über die in
diesem Abschnitt beschriebene Klasse Attachments
.
[42] Wann der korrekte Zeitpunkt gekommen ist, um einen
Dokumentdatenstrom zu schließen, kann nur
Integrations-spezifisch entschieden werden. Aus diesem Grund
hat der Integrator die Verantwortung, das Schließen von
Datenströmen anzustoßen. Soll ein Attachment-Datenstrom
länger verwendet werden, als der originäre
Dokumentdatenstromn zur Verfügung steht, so muss eine Kopie
der Daten angelegt werden. Dies ist beispielsweise über die
Methoden der Klasse IOUtils
möglich.