Der MetadataNode bietet zunächst diejenigen Funktionen, die man von ihm erwartet: Zugriff auf Basisinformationen (getName(), getText(), getCDATA()), Attribute (getAttribute(...), findAttribute(...)) und Kindknoten (getChild*(...)). Auch der Zugriff auf die darunter liegende DOM-Repräsentation wird gewährt mittels getElement() – auch wenn man diesen Wunsch sicher selten verspüren wird. Richtig mächtig wird der MetadataNode aber erst dadurch, dass er in der Lage ist, Aufgaben nicht nur durch einfache Navigation des DOM-Baumes zu erledigen, sondern viele Funktionen unter minimalem Aufwand mittels XPath-Ausdrücken genutzt werden können. Aber lassen wir doch einfach einige Beispiele sprechen:

// wir laden zunächst ein TIFF-Bild
final Reader reader = new Reader();
reader.read(new File("example.tif"));

// hiervon holen wir uns die erste Seite und darin das Standard-PageSegment
final PageSegment ps = reader.getDocument().getPage(0)
  .getPageSegment(DocumentLayer.DEFAULT);

// lassen wir die Metadaten sprechen
final Metadata md = ps.getMetadata();
System.out.println(md.toString()); // simples Ausgeben auf die Konsole

In der Konsole erscheint das Ergebnis, das wie folgt beginnt:

<tiff>
  <ifd group="TIFF6">
    <field code="256" count="1" name="ImageWidth" type="SHORT">
      <number>1168</number>
    </field>
[...]

Soweit so einfach. Wir würden nun gerne wissen, welche Beschreibung der Erzeuger des TIFFs für uns hinterlegt hat:

final MetadataNode r = md.getRoot();
r.evalToNumber("ifd[@group='TIFF6']/field[@name='ImageDescription']/string")

Wir hätten den XPath-Ausdruck auch noch weiter vereinfachen können, zum Beispiel durch Weglassen des /string oder des ifd-Pfadteils, so sehen Sie aber, wie die vollständige und absolute Adressierung eines Elementes aussieht. Sollten Sie einmal in die Verlegenheit kommen, wissen zu müssen, wie an welcher Position in der Datei sich der fünfte Strip eines gestripeten TIFFs befindet – hier ist die Antwort:

// Ja, XPath adressiert seine Arrays 1-basiert!
r.evalToNumber("ifd[@group='TIFF6']/field[@name='StripOffsets']/number[5]")

Die Metadaten für TIFF-Dateien umfassen nicht nur die Basisinformationen aus dem TIFF6-Standard, sondern auch eingebettete EXIF- und XMP-Metadaten. Das eingebettete XMP-Dokument (sofern vorhanden) erhalten Sie zum Beispiel mit

r.getChildren("ifd[@group='TIFF6']/field[@name='XMP']").get(0)

Das XMP-Dokument ist jedoch Teil des Metadaten-Baumes, das heißt Abfragen könnten auch unmittelbar Elemente aus diesem adressieren. Auch die Daten aus eventuell eingebetteten ICC-Profilen werden über die Metadaten bereitgestellt. Der Name des Geräteherstellers (Device Manifacturer Description – dmnd) des Geräts, für das das Farbprofil gilt, gefällig? Bitte sehr:

r.evalToString("ifd[@group='TIFF6']/field[@name='ICCProfile']/icc-profile/tag[@signature='dmnd']/ascii")
[jadice® document platform 5 Dokumentation. Erstellungsdatum: 2011-08-12]
loading table of contents...