InDesign XML Regeln
Mit der Version InDesign "CS3" hat Adobe die Funktion "Xml-Regeln" ausgeliefert. Dieses Feature hat kein Interface und kann nur über Scripting gesteuert werden. Mit den InDesign XML-Regeln lassen sich importierte XML Dateien sehr leicht weiterverarbeiten, wie z.B. eine Formatierung hinzufügen oder ein zusätzliches Leerzeichen einsetzen. Ziel dieser Einheit ist es, einen Katalog-Eintrag für ein T-Shirt zu generieren (wie in der Abbildung unten zu sehen).
![]() |
Ein fertiger Katalogeintrag aus XML Daten und mit InDesign XML Regeln erstellt |
Text zum XML
<?xml version="1.0" encoding="UTF-8"?> <Data> <Item id="16"> <Name>Women’s White Tee</Name> <Number>#0003471</Number> <Description>This tee is a nice twist on a classic. Regular fit. Made in the USA.</Description> <Detail>Machine Wash</Detail> <Detail>25” from shoulder to hem</Detail> <Detail>100% Cotton</Detail> <Price>$18.00</Price> <Size>S, M, L, XL</Size> <Image>female_tshirt_8.jpg</Image> </Item> </Data>
Das gewünschte InDesign Layout besitzt einen Platzhalter-Rahmen für das Bild und einen
Textrahmen für die Produkt-Beschreibung. Das Original-XML bildet diese Struktur so nicht
ab. Aber Du kannst die Struktur mit einer XSL-Transformation angleichen, so dass nach
dem Import des XML alle Elemente in die vorgesehenen Rahmen einfliessen.
![]() |
Die InDesign Vorlage mit den XML-Tags <textcontainer> und <Image> |
Hier kannst Du dir das komplette XML des Katalogeintrages downloaden:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method = "xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="Data"> <xsl:element name="Data"> <xsl:element name="textcontainer"> <xsl:copy-of select="Item/Name"/> <xsl:copy-of select="Item/Number"/> <xsl:copy-of select="Item/Description"/> <xsl:copy-of select="Item/Detail"/> <xsl:copy-of select="Item/Price"/> <xsl:copy-of select="Item/Size"/> </xsl:element> <xsl:copy-of select="Item/Image"/> </xsl:element> <!-- End Data--> </xsl:template> </xsl:stylesheet>
Die XSL-Transformation generiert das folgende XML für den InDesign Import aus dem
Original XML. Die Produkt-ID <Item id="16"> wird nicht benötigt und ist deshalb
im XSL nicht berücksichtigt. Ausserdem werden Text und Bild in die Xml-Elemente
<textcontainer> und <image> gesplittet.
<?xml version="1.0" encoding="UTF-8"?> <Data> <textcontainer> <Name>Women's White Tee</Name> <Number>#0003471</Number> <Description>This tee is a nice twist on a classic. Regular fit. Made in the USA.</Description> <Detail>Machine Wash</Detail> <Detail>25" from shoulder to hem</Detail> <Detail>100% Cotton</Detail> <Price>$18.00</Price> <Size>S, M, L, XL</Size> </textcontainer> <Image>female_tshirt_8.jpg</Image> </Data>
Die in der InDesign Vorlage vorhandenen Absatzformate "item_name" und "item_number"
werden jetzt beispielhaft über eine XML-Regel per Skript zugewiesen.
Das Format "item_name" wird dem Element //textcontainer/Name zugewiesen während
das Element //textcontainer/Number das Format "item_number" erhält.
Absatz- und Zeichenformate lassen auch über die XML-Attribute "aid:pstyle" oder
"aid:cstyle" schon über das importierte XML zuweisen. Die InDesign Funktion
"XML-Tag zu Formaten zuweisen" kann hier auch zum Einsatz kommen. Um die
Arbeitsweise der InDesign XML-Regeln zu verdeutlichen, werden hier die XML-Regeln
für das Zuweisen der Formate verwendet.
var myGlueCodePath = app.filePath + "/Scripts/xml rules/glue code.jsx"; var myFile = File(myGlueCodePath); app.doScript(myFile); main(); function main(){ var myDocument = app.documents.item(0); var myRuleSet = new Array ( new processName, new processNumber ); with(myDocument){ var elements = xmlElements; __processRuleSet(elements.item(0), myRuleSet); }} function processName(){ this.name = "processName"; this.xpath = "//textcontainer/Name"; this.apply = function(myElement, myRuleProcessor){ myElement.applyParagraphStyle("item_name"); return false; } } function processNumber(){ this.name = "processNumber"; this.xpath = "//textcontainer/Number"; this.apply = function(myElement, myRuleProcessor){ myElement.applyParagraphStyle("item_number"); return false; } }
KatalogImNu und XML Regeln
Das Tool "KatalogImNu" verbindet InDesign Template, XSL-Datei, XML-Regeln und
XML-Dateien. In einer einzigen Datei lässt sich definieren, welches InDesign Template
und welche XML-Regeln für die Batch-Verarbeitung der XML Dokumente verwendet
werden sollen.
Mit etwas Skripting-Erfahrung lassen sich so sehr leicht aus den XML-Dateien verschiedene
Layout-Varianten (z.B. Hochformat und Querformat für das iPad) generieren.
KatalogImNu.INDESIGN_TEMPLATE_NAME = "Demo.indt"; KatalogImNu.XSL_FILENAME = "demo.xsl"; KatalogImNu.TEXT = "TEXT"; KatalogImNu.BILD = "BILD"; KatalogImNu.prototype.run = function (curDocument, curOptions) { this.processContent(curDocument); this.placeContent(curDocument); this.preProcessImages(curDocument, curOptions); this.placeImages(curDocument); } /* ... XML-Regeln definieren ... */
Vorlagen für KatalogImNu benötigen keine XML-Tags, sondern ein Skript-Etikett
(früher: Skriptbezeichnung). Über dieses Label werden die XML-Elemente dann zugeordnet.
![]() |
Die Rahmen für den XML-Import sind mit den Labeln "BILD" und "TEXT" versehen. |
Weitere Informationen und eine Demoversion findest Du hier.
© InDesignScript.de, Stefan Rakete


