Benutzerdefinierte Vorlagen
Benutzerdefinierte Vorlagen sind Vorlagen für Elemente, die durch einen von Ihnen definierten XPath-Ausdruck generiert wurden. Dabei kann es sich um atomare Werte oder Nodes handeln. Beachten Sie in der Abbildung unten, in der Sie drei benutzerdefinierte Vorlagen sehen, das Symbol für eine benutzerdefinierte Vorlage (grüne Figur) auf der linken Seite der Tags. Benutzerdefinierte Vorlagen sind sehr nützlich, da sie beim Erstellen von Vorlagen besonders viel Flexibilität bieten.
![UserDefTemplates](./images/userdeftemplates.png)
Der XPath-Ausdruck in den drei in der obigen Abbildung gezeigten benutzerdefinierten Vorlagen bewirkt Folgendes:
•Ein Node in einem Quellschema wird ausgewählt. Mit Hilfe eines XPath-Ausdrucks kann jeder beliebige Node in jeder beliebigen Schemaquelle von jedem Kontext-Node aus ausgewählt werden. Wenn es einen eindeutigen Node gibt, der von StyleVision ausgewählt werden kann, so wird die Vorlage automatisch von einer benutzerdefinierten Vorlage in eine normale Vorlage umgewandelt. Wenn es sich um eine benutzerdefinierte Vorlage handelt, so wird dies durch ein grünes Symbol für eine benutzerdefinierte Vorlage am linken Rand des Vorlagen-Tags gekennzeichnet.
•Ein Node wird ausgewählt, der eine durch das for Konstrukt von XPath 2.0 und 3.0 definierte Bedingung erfüllt. Solche Vorlage können niemals zu normalen Vorlagen aufgelöst werden (sondern bleiben benutzerdefinierte Vorlagen), da das for Konstrukt es nicht zulässt, dass StyleVision das Ziel anhand der derzeit verfügbaren Schemainformationen eindeutig aufgelöst wird.
•Eine Sequenz atomarer Werte {1, 2, 3} wird ausgewählt. Es ist zwar zulässig, eine Vorlage für einen atomaren Wert zu erstellen, doch kann in einer solchen Vorlage der Platzhalter Inhalt nicht verwendet werden. Der Grund hierfür ist, dass die Anweisung xsl:apply-templates (also das, was der Platzhalter Inhalt generiert) nur auf Node-Elemente (nicht aber auf atomare Werte) angewendet werden kann. Sie könnten jedoch eine automatische Berechnung in Kombination mit einem Design-Element wie z.B. einer Liste, verwenden. So würde die benutzerdefinierte Vorlage in der Abbildung auf der linken Seite die Ausgabe auf der rechten Seite generieren.
![UDefTemplateAtomicValsDes](./images/udeftemplateatomicvalsdes.png)
![UDefTemplateAtomicValsOut](./images/udeftemplateatomicvalsout.png)
Anmerkung: | Wenn im SPS XSLT 1.0 verwendet wird, so muss der von Ihnen eingegebene XPath-Ausdruck ein Node-Set zurückgeben, da sonst ein Fehler gemeldet wird. |
Vorteil der Verwendung von XPath zur Auswahl eines Vorlagen-Node
Der Vorteil der Auswahl eines Schema-Node mittels eines XPath-Ausdrucks (benutzerdefinierte Vorlagen) ist, dass man mit Hilfe des XPath-Selektors jeden beliebigen Node, bzw. jede beliebige Elementsequenz auswählen kann und Filter und Bedingungen bei der Node-Auswahl einsetzen kann. Dadurch können spezifische XML-Dokument-Nodes für jede angegebene Vorlage adressiert werden. So wählt z.B. der XPath-Ausdruck //Office/Department[@Location="NY"] nur diejenigen Department Nodes aus, die ein Location Attribut mit dem Wert NY haben. Siehe auch die anderen Beispiele in diesem Abschnitt.
Anmerkung: | Wenn ein XPath-Ausdruck mehrere location path-Schritte enthält, dann macht es - v.a. beim Gruppieren und Sortieren - einen Unterschied, ob die verschiedenen location path-Schritte in Klammern gesetzt werden oder nicht. So wird der XPath-Ausdruck /Org/Office/Dept z.B. anders verarbeitet als (/Org/Office/Dept). Beim ersten Ausdruck (ohne Klammern) führt der Prozessor eine Schleifenverarbeitung der einzelnen location-Schritte durch. Beim zweiten Ausdruck (mit Klammern) werden alle Dept Elemente aller Office Elemente in einem einzigen Nodeset zurückgegeben. |
Klammern | Zugrunde liegende XSLT-Methode | Ergebnis |
Nein | <xsl:for-each select="Org"> <xsl:for-each select="Office"> <xsl:for-each select="Dept"> ... </xsl:for-each> </xsl:for-each> </xsl:for-each> | Jedes Office Element hat seine eigene Dept Population. Dadurch kann die Gruppierung und Sortierung innerhalb der einzelnen OfficeElemente durchgeführt werden. |
Ja | <xsl:for-each select="/Org/Office/Dept"> ... </xsl:for-each> | Die Dept Population umfasst alle Office Elements und alle Org Elemente. |
Dieser Unterschied in der Auswertung von XPath-Ausdrücken kann sich auf die Gruppierung und Sortierung auswirken.
Einfügen einer benutzerdefinierten Vorlage
Um eine benutzerdefinierte Vorlage einzufügen, gehen Sie folgendermaßen vor:
1.Klicken Sie in der Symbolleiste "Design-Elemente" auf die Schaltfläche Benutzerdefinierte Vorlage einfügen und klicken Sie anschließend an die Stelle im Design, an der die Vorlage eingefügt werden soll. Als Alternative können Sie auch mit der rechten Maustaste an die gewünschte Stelle im Design klicken und aus dem Kontextmenü anschließend den Befehl Benutzerdefinierte Vorlage einfügen auswählen.
2.Geben Sie im Dialogfeld XPath-Ausdruck bearbeiten, das nun angezeigt wird, den gewünschten XPath-Ausdruck ein und klicken Sie auf OK. Beachten Sie, dass der Kontext-Node des XPath-Ausdrucks derjenige Node sein wird, in den Sie hineingeklickt haben. Daraufhin wird eine leere Node-Vorlage erstellt. Manchmal wird ein verbundener Node erstellt. Wenn ein Node verbunden wird, werden die Ziel-Instanznodes so ausgewählt, als befänden sie sich auf einer einzigen Ebene, während die Node-Auswahl bei nicht verbundenen Nodes (d.h. wenn er auf mehrere hierarchische Ebenen aufgeteilt ist) durch Schleifenverarbeitung der einzelnen Instanz-Nodes auf den einzelnen Ebenen erfolgt. Das zurückgegebene Nodeset ist in beiden Fällen (bei verbundenen und getrennten Nodes) dasselbe, es sei denn ein Gruppierungs- oder Sortierkriterium wurde definiert. Nähere Informationen darüber, wie sich verbundene Nodes auf die Gruppierung und Sortierung auswirken, finden Sie unter Node-Vorlagen-Operationen.
Bearbeiten einer Vorlagenauswahl
Die Node-Auswahl jeder Node-Vorlage (benutzerdefiniert oder normal) kann über einen XPath-Ausdruck geändert werden, sodass ein neuer Suchausdruck ausgewählt wird. Um die Vorlagenauswahl einer Node-Vorlage zu bearbeiten, klicken Sie mit der rechten Maustaste auf die Node-Vorlage und wählen Sie den Befehl Vorlagenauswahl ändern. Daraufhin wird das Dialogfeld "XPath-Ausdruck bearbeiten" angezeigt, in dem Sie den XPath-Ausdruck zur Auswahl des neuen Node eingeben können. Klicken Sie anschließend auf OK.
Hinzufügen von Nodes zu benutzerdefinierten Vorlagen
Wenn ein Node aus der Schemastruktur zu einer benutzerdefinierten Vorlage hinzugefügt wird, ist der Kontext für den neuen Node unbekannt, wenn die benutzerdefinierte Vorlage für einen Node oder eine Sequenz erstellt wurde, der/die nicht in den Kontext der Schemaquelle des SPS platziert werden kann. Sie werden daher gefragt (Abbildung unten), wie der neue Node referenziert werden soll: (i) durch seinen Namen (im Wesentlichen ein relativer Pfad) oder (ii) durch einen vollständigen Pfad von der Root der Schemaquelle aus.
![UnknownContextNode](./images/unknowncontextnode.png)
Standardmäßig werden Sie gefragt, wie der Node referenziert werden soll. Sie können dieses Standardverhalten auf dem Register "Design" des Dialogfelds Extras | Optionen ändern.