Bild und Legende

Über mangelnde XML-Funktionen von InDesign wurde schon viel geschrieben. Praktisch ist das nachträgliche Erstellen von XML-Strukturen in einem klassisch aufgebauten InDesign-Dokument nur mit einfachsten Strukturen und Dokumenten möglich.

Über die Funktion Formate zu Tags zuweisen und die Tagging Voreinstellungen aus dem Kontext-Menu der Strukturpalette lassen sich Block-Level- und Inline-Elemente verknüpfen, Bilder und Tabellen werden zumindest ausgezeichnet.

einfache_story

Mit InDesign Bordmitteln lässt sich maximal das Folgende XML-Ergebnis erzielen:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Root>  <textrahmen> <u1>Überschrift 
</u1>  <p>Lorem ipsum <bold>dolor sit amet</bold>, consetetur ....</p>  </textrahmen> <textrahmen>  <legende><Figure href="file:///C:/Dokumente%20und%20Einstellungen/hp/Desktop/bild.png"/>
 Diese Bild zeigt das Logo des InDesign-Blogs </legende> </textrahmen>  <textrahmen>  <p>2tes Lorem ipsum dolor sit amet, consetetur ...</p>  </textrahmen> </Root>

Das aber auch nur, wenn das Bild als verankertes Objekt im Textrahmen der Legende platziert ist. In den meisten Fällen wird so allerdings nicht gearbeitet und Legende und Bild haben keinerlei Verknüpfung mehr. Die Anordnung der textrahmen-Elemente (Es handelt sich eigentlich um Stories, also auch verknüpfte Textrahmen) innerhalb der Strukur entspricht dem Erstellungszeitraum und nicht dem optischen Eindruck, was die Ergebnisse der meisten Exporte noch weitaus verwirrender gestaltet als das obige Beispiel.

Für ein produktives Konvertieren von alten Daten bietet sich ein Skripting-Workaround an. Als Konvetion wird festgelegt, das Legende und Abbildungspaar immer gruppiert sein müssen.

Das Skript-Snippet ist sehr einfach, für eine bessere Übersichtlichkeit verzichte ich auf das Handling der Gruppen und verarbeite nur die erste:

var _group = app.activeDocument.groups[0];
if (_group.allGraphics.length == 1 && _group.textFrames.length == 1) {
  var _xmlAbb = app.activeDocument.xmlElements[0].xmlElements.add("abbildung");
  // Falls die Grafik bereits verknüpft ist entfernen ich den Tag
  if (_group.allGraphics[0].associatedXMLElement != null) _group.allGraphics[0].associatedXMLElement.untag();
  _xmlAbb.xmlElements.add("bild", _group.allGraphics[0]);
  // Falls der Textrahmen bereits verknüpft ist entfernen ich den Tag
  if (_group.textFrames[0].associatedXMLElement != null) _group.textFrames[0].associatedXMLElement.untag();
  _xmlAbb.xmlElements.add("legende", _group.textFrames[0]);
}

Jede Gruppe die genau eine Abbildung und einen Textrahmen enthält wird damit  in die folgende Struktur, die eher einer sinnvollen XML-Struktur genügt,  gebracht:

<abbildung>
   <bild href="...bild.png"></bild>
   <legende>Diese Bild zeigt das Logo des InDesign-Blogs </legende>
</abbildung>

Eine Lösung für die Anordnung der Elmente in der richtigen Reihenfolge steht noch aus. Genauso ist es natürlich denkbar per Skript nah beeinander stehende Bild/Legende Objekte zu suchen und nicht den Umweg über die Gruppierung zu gehen.