Bisher gingen wir davon aus, dass die Metadaten durch jadice bereit gestellt wurden. Allerdings ist die API, wie oben bereits erwähnt, auch für die Aufnahme integrationsspezifischer Daten gedacht. Für die Erzeugung von Metadaten steht ein separates Inferface bereit, das MetadataProvider erweitert und von allen Klassen, für die die Aufnahme von Metadaten vorgesehen ist, implementiert wird: MutableMetadataProvider. An dieser Stelle trennen sich die Wege des Document und des BasicDocument: während das Document lediglich ein MetadataProvider ist (da nicht da nicht davon auszugehen ist, dass alle Document-Implementierungen sinnvoll schreibbare Metadaten bereit stellen), ist die Standardimplementierung von Document bereit dafür. Schauen wir uns einfach ein kleines Beispiel dazu an:

/*
 * Erzeugen eines BasicDocument. Wir benutzen hier bewusst nicht den Typ Document für die
 * Variable doc, da nur das BasicDocument ein MutableMetadataProvider ist.
 */
final BasicDocument doc = new BasicDocument();

// Wurzelknoten der Metadaten holen
final MutableMetadataNode mmr = doc.getMutableMetadataRoot();

/*
 * Wir hängen unter den Wurzelknoten einen Datensatz, der zum Beispiel im Archiv als Indexdatensatz
 * hinterlegt sein könnte. Der MutableMetadataNode erlaubt mit seinem Fluent Interface eine -
 * für Java-Verhältnisse - recht kompakte Formulierung dieser Aufgabe.
 */
mmr.addNode("index-data") // liefert den Knoten "index-data" zurück!
  .addAttribute("id", "123456789")
  // nun legen wir einige Knoten, jeweils mit Attribute und Textinhalt an. addText(...) springt
  // automatisch zum Elternknoten zurück.
  .addNode("Versicherungsnehmer").addAttribute("type", "string").addText("Max Mustermann")
  .addNode("Versicherungsnummer").addAttribute("type", "number").addText("876492148913")
  .addNode("Vertragsart").addAttribute("type", "string").addText("KFZ-Haftpflicht")
  .addNode("Eingangsdatum").addAttribute("type", "date").addText("2010-02-11")
  .addNode("Schluesselworte").addAttribute("type", "list-of-strings")
    .addNode("entry").addText("Schaden")
    .addNode("entry").addText("Gutachten")
    .addNode("entry").addText("Kasko");

// Metadaten ausgeben
System.out.println(doc.getMetadata());

Die Ausgabe ist automatisch »schön« formatiert:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document>
  <index-data id="123456789">
    <Versicherungsnehmer type="string">Max Mustermann</Versicherungsnehmer>
    <Versicherungsnummer type="number">876492148913</Versicherungsnummer>
    <Vertragsart type="string">KFZ-Haftpflicht</Vertragsart>
    <Eingangsdatum type="date">2010-02-11</Eingangsdatum>
    <Schluesselworte type="list-of-strings">
      <entry>Schaden</entry>
      <entry>Gutachten</entry>
      <entry>Kasko</entry>
    </Schluesselworte>
  </index-data>
</document>

Wenn die Metadaten bereits als XML vorliegen, können wir diese direkt einbinden:

/*
 * Der MetadataBuilder übernimmt die Erzeugung eines Metadata-Baums. Er nimmt noch viele 
 * andere Formen des Input, zum Beispiel InputStreams, Files, Reader und so weiter, entgegen.
 */
final MutableMetadataNode md = MetadataBuilder.from(
    "<wetter>"
  + "  <temp einheit=\"celsius\">9</temp>"
  + "  <niederschlag menge=\"2l/qm\" risiko=\"94%\"/>"
  + "</wetter>", 
false);

/*
 * Das XML enthält zusätzlichen "whitespace", der das Pretty-Printing stört. Wir räumen
 * diesen deshalb zunächst auf:
 */
md.getDocument().trimWhitespace();

// nun müssen wir den Knoten nur noch einhängen:
doc.getMutableMetadataRoot().addNode(md);
[jadice® document platform 5 Dokumentation. Erstellungsdatum: 2011-08-12]
loading table of contents...