IDML

Mit IDML gibt es seit CS4 eine von Adobe vorgesehene Repräsentation von InDesign-Dokumenten in XML. Viele fragen mich, was das eigentlich bedeutet bzw. ob IDML für ihren Workflow relevant ist.

Zunächst einmal: Das Schnittstellenformat richtet sich an Solution-Provider und wird für den durchschnittlichen Anwender eher unbedeutend bleiben. Die eigentlichen Neuigkeiten sind, dass Adobe IDML im Gegensatz zu INX offiziell unterstützt, die Spezifikation veröffentlicht wurde und dass das Dateiformat deutlich übersichtlicher geworden ist.
Ganz grundsätzlich bleibt natürlich das Problem, dass ein extern generiertes IDML die Ergebnisse der InDesign-Satz-Engine praktisch nicht vorhersehen kann. Somit sind keine interaktiven Bedingungen und Gestaltungsregeln umsetzbar, die sich erst nach dem endgültigen Satz  auswerten lassen. Im Endeffekt erreicht man damit dann einen typischen XSL-FO Automatisierungsgrad. Für Kataloge und datenbankorientierte Produkte wahrscheinlich ein kleineres Problem.

IDML wird wahrscheinlich für die folgende, natürlich nicht vollständige, Sammlung von Aufgaben verwendet werden:

  • Dokumente außerhalb von InDesign erstellen und verarbeiten z.B. aus Datenbanken oder XML-Dateien.
  • Gut vorstellbar ist auch, dass Übersetzungstools auf der Basis von IDML arbeiten (so wie es jetzt schon Tools auf der Basis von INX gibt).
  • Vollautomatische Inhaltsanpassungen in Musterdokumenten, z.B. in Web-Applikationen.
  • Zusammenstellen von Dokumenten aus verschieden Teilkomponenten.
  • Einsatz innerhalb von XSLT-Workflows.

Um das zu erreichen hat sich Adobe einige Ziele für IDML gesetzt:

  • Vollständigkeit Alle Objekte, Attribute und Voreinstellungen sollen durch IDML repräsentiert werden können.
  • Lesbarkeit Gutes XML-Grammatiken sind auch von Entwicklern lesbar und verständlich, XML-Standard-Tools sollten sowieso keine Probleme haben.
  • Robustheit Sollte eine Selbstverständlichkeit sein.
  • Kompatibilität IDML soll ähnlich wie INX zur jeweils vorigen Version kompatibel sein.
  • Performance Die InDesign Standalone Applikation zu schlagen ist nicht so schwer :-)

Ganz interessant ist auch der Ansatz von Adobe, dass Skripting Objektmodell als Grundlage von IDML zu verwenden. Dies bedeutet, dass mit einem skriptbaren Plugin IDML mit den hinzugekommen Fähigkeiten erweitert werden kann. Dazu ist ein Schema-Generator vorgesehen, der für die jeweils aktuelle Konfiguration von InDesign ein Schema generiert. Mit dem so erstellten Relax-NG Schema kann man dann seine XML-Instanzen validieren.

Zur IDML Familie gehören noch die folgenden Formate, die letztlich auf der gleichen Grammatik beruhen:

  • IDMS (InDesign Markup Snippet) Zur Wiederverwendung von in InDesign gestalteten Objekten
  • ICML (InCopy Markup Language) Inhalte in InCopy bearbeiten
  • ICMA (InDesign Markup Assignment) Hier können Inhalte einem Autor zur Bearbeitung in InCopy zugewiesen werden.

Spätestens seit Microsofts Open XML Standard wissen wir allerdings, dass ungeprüfte Ankündigungen solcher Art nicht das Papier Wert sind auf dem sie stehen. Ich habe mich bis jetzt nur kurz mit IDML beschäftigen können. Erste Tests sind aber vielversprechend, wobei mir dabei natürlich zugutekommt, dass ich das Skripting Objektmodell schon kenne.

Um eine Vorstellung vom Format zu bekommen lohnt ein Blick in eine IDML-Datei. Ganz ähnlich wie andere datenzentrierte XML-Formate ist die Datei ein ZIP-Container, der verschiedene, untereinander verlinkte, XML-Dateien enthält. Die wichtigsten Inhalte sind:

  • Eine Übersichtsdatei designmap.xml
  • Die Typdefinition mimetype
  • Encoding und Dateiaufbau im Ordner META-INF
  • Eine Datei pro Musterseite im Ordner MasterSpreads
  • Formatangaben, Schriften, Farben, Voreinstellungen im Ordner Resources
  • Die Inhaltsseiten und deren Objekte im Ordner Spreads
  • Der Eigentliche Inhalt im Ordner Content
  • Die XML-Tags des InDesign Dokuments befinden sich im Ordner XML

Die XML-Grammatik orientiert sich am Objektmodell. Als Beispiel dazu

<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Absatzformat">
   <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
     <Content>Hallo Welt ich bin </Content>
   </CharacterStyleRange>
   <CharacterStyleRange AppliedCharacterStyle="CharacterStyle/fett">
     <Content>fett</Content>
   </CharacterStyleRange>
</ParagraphStyleRange>

Im Prinzip recht ähnlich zu den Eigenschaften der Klasse TextStyleRange im Skripting.

Mehr Information findet in der InDesign developer documentation von Adobe. Hier ist das Kochbuch empfehlenswert. Sobald ich eigene Erfahrungen mit IDML gesammelt habe natürlich auch hier.