Gruppieren
Die Gruppierungsfunktion steht in XSLT 2.0 und 3.0 SPSs und für HTML-Ausgabedokumente zur Verfügung.
Mit der Gruppierungsfunktion können Sie Elemente (im Allgemeinen Nodes) in Gruppen verarbeiten. Nehmen wir als Beispiel eine Autoinventarliste, in der die Details zu den einzelnen Autos unter dem Element car enthalten sind. Wenn das Element car z.B. ein Attribut brand hat, können die Autos nach Marken (brand) gruppiert werden. Dies kann aus verschiedensten Gründen hilfreich sein. z.B:
•Alle Autos einer einzigen Marke können unter der Überschrift des Markennamens in der Ausgabe angezeigt werden.
•Operationen können innerhalb einer Gruppe ausgeführt werden und die Ergebnisse dieser Operation können separat für jede einzelne Gruppe angezeigt werden. So kann z.B. die Anzahl der für die einzelnen Marken verfügbaren Modelle aufgelistet werden.
Außerdem kann eine Gruppe weiter in Untergruppen unterteilt und verarbeitet werden. So können Autos z.B. innerhalb der einzelnen Marken nach Modell und anschließend Jahr gruppiert werden.
Gruppierungskriterien
Elemente können nach zwei allgemeinen Kriterien gruppiert werden: (i) einem Gruppierungsschlüssel, der normalerweise den Wert eines Node überprüft und (ii) der relativen Position des Elements. Es stehen die folgenden spezifischen Gruppierungskriterien zur Verfügung:
•group-by: Gruppiert die Elemente auf Basis eines XPath-definierten Schlüssels. So können z.B. car Elemente nach ihren brand Attributen gruppiert werden. Die Gruppierung wird nach dem Element car vorgenommen. Ein XPath-Ausdruck wählt das brand Attribut aus.
•group-adjacent verwendet eine Kombination von Gruppierungsschlüsseln und Positionskriterien. Alle benachbarten Elemente, die denselben Wert für den Gruppierungsschlüssel haben, werden in eine Gruppe inkludiert. Wenn sich der Gruppierungsschlüsselwert eines Elements von dem des vorhergehenden Elements unterscheidet, wird mit diesem Element eine neue Gruppe begonnen.
•group-starting-with beginnt eine neue Gruppe, wenn ein Node einem definierten XPath-Muster entspricht. Wenn ein Node nicht mit dem definierten XPath-Muster übereinstimmt, wird er der aktuellen Gruppe zugewiesen.
•group-ending-with beendet eine Gruppe, wenn ein Node einem definierten XPath-Muster entspricht; der übereinstimmende Node ist der letzte in dieser Gruppe. Der nächste Node beginnt eine neue Gruppe. Wenn ein darauf folgender Node, der eine Gruppe beginnt, nicht dem definierten XPath-Muster entspricht, wird er der aktuellen Gruppe zugeordnet.
Erstellen von Gruppen
Gruppen können über das Kontextmenü entweder an einem Node oder einer Vorlage für eine aktuelle Gruppe erstellt werden. Klicken Sie zum Erstellen einer Gruppe mit der rechten Maustaste auf einen Node oder eine current-group-Vorlage und wählen Sie im daraufhin angezeigten Kontextmenü den Befehl Gruppieren nach. Daraufhin wird das Dialogfeld "Gruppierung der Ausgabe definieren" angezeigt (Abbildung unten).
![DlgGroupingOview](./images/dlggroupingoview.png)
Aktivieren Sie in dem Dialogfeld das Kontrollkästchen "Gruppierung aktivieren", wählen Sie anschließend den Gruppierungstyp aus und geben Sie im Textfeld "XPath" den XPath-Ausdruck ein, der den Gruppierungsschlüssel (für die Optionen group-by und group-adjacent) oder das gewünschte Muster (für die Optionen group-starting-with und group-ending-with) definiert. Wenn Sie auf OK klicken, wird ein Dialogfeld angezeigt, in dem Sie gefragt werden, ob die Gruppe alphabetisch (in aufsteigender Reihenfolge) sortiert werden soll. Sie können Gruppen auch später noch sortieren oder die Sortierung aufheben. In der Abbildung unten werden Nodes und current-group-Vorlagen angezeigt, zu denen eine Gruppierung hinzugefügt wurde.
![DesViewGrouping](./images/desviewgrouping.png)
In der Abbildung oben wurde der Node person gruppiert und die erzeugten Gruppen wurden sortiert. Wenn z.B. die person Elemente nach Abteilung gruppiert wurden, können die verschiedenen Abteilungen alphabetisch in aufsteigender Reihenfolge sortiert werden. Die dadurch erstellten Gruppen wurden in Untergruppen unterteilt, indem an der current-group()-Vorlage eine Gruppierung erstellt wurde. Auf diese Art können die person Elemente z.B. zuerst nach Abteilung und anschließend nach Anstellungsart gruppiert werden.
Sortieren von Gruppen
Nachdem Sie eine Gruppendefinition bestätigt haben, erscheint ein Fenster, in dem Sie gefragt werden, ob die Gruppen in aufsteigender Reihenfolge sortiert werden sollen. Sie können die Sortierung später jederzeit definieren, ändern oder aufheben.
Um die Sortierung später definieren, ändern oder aufheben zu können, klicken Sie mit der rechten Maustaste auf die Gruppierungsvorlage und wählen Sie den Befehl Sortieren nach. Daraufhin erscheint das Dialogfeld Sortierreihenfolge der Ausgabe definieren. Eine Beschreibung zur Verwendung dieses Dialogfelds finden Sie im Abschnitt Sortieren. Beachten Sie dabei: Um Gruppen anhand ihres Gruppierungsschlüssels zu sortieren, müssen Sie die XPath-Funktion current-grouping-key() als Sortierschlüssel auswählen. Als Beispiele dienen die in den folgenden Abschnitten beschriebenen Dateien.
Anzeigen und Bearbeiten von Gruppierungs- und Sortierungseinstellungen
Um die Gruppierung und Sortierung in einer Vorlage anzuzeigen und zu bearbeiten, klicken Sie mit der rechten Maustaste auf die Vorlage und wählen Sie "Gruppieren nach" bzw. "Sortieren nach". Daraufhin erscheint das entsprechende Dialogfeld, in dem Sie die Einstellungen anzeigen oder ändern können.
Benutzerdefinierte Vorlagen
Benutzerdefinierte Vorlagen, sind Vorlagen, die auf Elemente angewendet werden, die durch einen von Ihnen definierten XPath-Ausdruck ausgewählt werden. Die Nodes, die durch den XPath-Ausdruck einer benutzerdefinierten Vorlage ausgewählt werden, können auch gruppiert werden. In diesem Fall wird die Gruppierung an der benutzerdefinierten Vorlage angewendet.