Beispiel: Group-By (Scores.sps)
Im Beispiel Scores.sps, das auf dem Schema Scores.xsd basiert, wird als XML-Arbeitsdatei Scores.xml verwendet. Es befindet sich im Ordner (Eigene) Dateien, C:\Documents and Settings\<username>\My Documents\Altova\StyleVision2025\StyleVisionExamples\Tutorials\Grouping\Scores\. Die Struktur des XML-Dokuments ist die folgende: Ein Dokumentelement results enthält ein oder mehrere group Elemente sowie ein oder mehrere match Elemente. Ein group Element enthält ein oder mehrere team Elemente und ein match Element ist wie im folgenden Beispiel strukturiert:
<match group="A" date="2007-10-12">
<team name="Brazil" for="2" points="3"/>
<team name="Germany" for="1" points="0"/>
</match>
Das Design besteht aus drei Teilen (Abbildung unten): (i) den Matchergebnissen, aufgelistet nach Tag (gruppiert nach //match/@date); (ii) den Matchergebnissen, aufgelistet nach Gruppe (gruppiert nach //match/@group); und (iii) Gruppentabellen mit einer Rangliste nach Gruppe (eine dynamische Tabelle des group-Elements, wobei die benötigten Daten mittels einer automatischen Berechnung ermittelt werden).
Strategie
Für die beiden Abschnitte, die die Match-Ergebnisse enthalten, gruppieren wir Matches nach Datum und Turniergruppe. Für die Mitglieder der einzelnen Gruppen (Datum und Turniergruppe) erstellen wir randlose Tabellen (um den Inhalt ausrichten zu können). Auf diese Weise befinden sich Matches, die an einem bestimmten Datum stattfinden, in einer separaten Tabelle und alle Match-Ergebnisse einer einzelnen Turniergruppe befinden sich ebenfalls in einer separaten Tabelle (z.B. Matches der Gruppe A). Für den Abschnitt der Gruppentabellen wird das group Element als dynamische Tabelle erstellt, wobei die benötigten Daten mittels einer automatischen Berechnung ermittelt werden.
Erstellen des SPS
Das Design wurde folgendermaßen erstellt:
1.Ziehen Sie das /results/match Element aus der Schemastruktur und erstellen Sie es als Inhalt.
2.Klicken Sie mit der rechten Maustaste auf den Element-Tag match und wählen Sie im Kontextmenü den Befehl Gruppieren nach.
3.Aktivieren Sie im Dialogfeld "Gruppierung der Ausgabe definieren" die Option group-by, setzen Sie den XPath-Ausdruck im Textfeld "XPath" auf @date und klicken Sie auf OK.
4.Daraufhin wird ein Dialogfeld angezeigt, in dem Sie gefragt werden, ob die Gruppen sortiert werden sollen. Da die Gruppen nach der Standardsortierung alphabetisch in aufsteigender Reihenfolge sortiert werden sollen, klicken Sie auf Ja. (Die Sortierung kann später jederzeit definiert, geändert oder aufgehoben werden.)
5.Da jede Gruppe (in diesem Fall das Datum) in Form einer separaten Tabelle angelegt werden soll, erstellen Sie die aktuelle Gruppe als Tabelle. Klicken Sie dazu mit der rechten Maustaste auf den Tag current-group() und wählen Sie den Befehl Ändern in | Tabelle, wobei Sie die untergeordneten Nodes team/@name und team/@for als Spalten der Tabelle auswählen (siehe Abbildung unten).
6.Setzen Sie einen Bindestrich in jede Zelle, die ausgegeben wird, wenn das Match nicht das letzte in der aktuellen Gruppe ist (Verwenden Sie dazu eine Bedingungsvorlage mit einer Bedingung position() != last(). Als Ergebnis erhalten Sie dann z.B.: Brazil - Germany oder 2 - 1.
7.Fügen Sie in die Kopfzeile der Tabelle eine automatische Berechnung ein, die den aktuellen Gruppierungsschlüssel für die entsprechende Gruppe ausgibt (XPath-Ausdruck: current-grouping-key()).
8.Formatieren Sie die Tabelle wie gewünscht.
9.Um die Matches nach Turniergruppe zu gruppieren, wiederholen Sie den gesamten Vorgang, gruppieren Sie die Matches dieses Mal aber nach dem group Attribut von match.
10.Erstellen Sie für die Gruppentabellen (im dritten Abschnitt des Designs), die die Rangliste der Teams in der Gruppe enthalten, das /results/group Element als dynamische Tabelle. Fügen Sie wie erforderlich (mit Hilfe der Befehle Tabelle | Spalte anhängen oder Tabelle | Spalte einfügen) Spalten hinzu. Definieren Sie in jeder Spalte automatische Berechnungen, um die erforderliche Ausgabe zu berechnen (3 Punkte für einen Sieg; 1 Punkt für ein Unentschieden; 0 Punkte für eine Niederlage). Und sortieren Sie abschließend die Tabelle nach der Gesamtzahl der Punkte in absteigender Reihenfolge. Um den XPath-Ausdruck zur Berechnung dieser Ergebnisse zu sehen, klicken Sie mit der rechten Maustaste auf die automatische Berechnung bzw. die sortierte Vorlage und wählen Sie XPath bearbeiten bzw. Sortieren nach.