Dynamische Tabelle mit sich wiederholenden Spalten
Wenn sich eine Spalte innerhalb einer Tabellenzeile wiederholt, können diese Wiederholungen mit Hilfe dynamischer Spalten angezeigt werden. Die Spalte wird mit einem sich wiederholenden Element einer Seitenquelle verknüpft. Wenn die Tabelle dargestellt wird, wird die Anzahl der Spalten dynamisch an die Anzahl der Instanzen des verknüpften Elements angepasst.
Dynamische Spalten können in zwei Arten von Zeilenkontexten vorkommen:
•Statische Zeilen, dynamische Spalten: In dieser Situation wächst die Tabelle horizontal anstatt vertikal (vergleichen Sie die Tabelle unten mit einer dymanischenTabelle mit sich wiederholenden Zeilen). Die vorangestellte Spalte fungiert in diesem Fall als "Kopfspalte"; Sie kann die Namen der Zeilen enthalten. (Eine vorangestellte Spalte kann bei der Erstellung der Tabelle hinzugefügt werden; da es sich jedoch um eine statische Spalte handelt, kann sie auch zu einem späteren Zeitpunkt erstellt werden).
| <Person> | <Person> | <Person> |
<First> |
|
|
|
<Last> |
|
|
|
<Phone> |
|
|
|
•Dynamische Zeilen, dynamische Spalten: Die Tabelle kann sowohl in vertikaler Richtung (zusätzliche Zeilen) als auch in horizontaler Richtung (zusätzliche Spalten) wachsen. Um diese Art von Tabelle zu erstellen, muss die Anzahl von Spaltenelementinstanzen in der Seitenquelle für alle Zeilen dieselbe sein. So enthält etwa in der Tabelle unten jedes der vier week-Elemente (von denen jedes einer Zeile in der Tabelle entspricht) genau drei day-Elemente (die Spalten der Tabellen). Wenn ein week-Element eine andere Anzahl von day-Elementen als drei enthält, kann die Tabelle nicht korrekt gezeichnet werden. Beachten Sie außerdem, dass normalerweise (i) Spaltenelemente sowohl in der Seitenquelle als auch im Tabellendesign innerhalb von Zeilenelementen vorkommen; (ii) die Namen von Zeilenelementen so wie auch die Namen der Spaltenelemente identisch sind. Keiner dieser beiden Punkte ist jedoch unbedingt eine Voraussetzung dafür, dass diese Art von dynamischer Tabelle erstellt werden kann: (i) Spaltenelemente können außerhalb von Zeilenelementen vorkommen und (ii) die Namen von Zeilen/Spalten können unterschiedlich sein.
| <day> | <day> | <day> |
<week> |
|
|
|
<week> |
|
|
|
<week> |
|
|
|
<week> |
|
|
|
Anmerkung: | Ein Datenstream kann anhand eines XPath/XQuery-Ausdrucks generiert und als Datenquelle verwendet werden. Diese Art von Datenquelle wird jedoch nur für die aktuelle Verwendung erstellt und kann nicht als Seitenquelle für die Verwendung an einer anderen Stelle im Dokument aufgerufen werden. |
Beispiel: dynamische Spalten für Tage innerhalb dynamischer Zeilen für Wochen
In der Abbildung unten sehen Sie ein calendar-Element, das vier week-Elemente enthält, wobei jedes week-Element sieben day-Elemente enthält. Wir können eine Tabelle erstellen, die dynamische Zeilen für week-Elemente und dynamische Spalten (innerhalb jedes week-Elements) für die day-Elemente enthält. Beachten Sie, dass sich (i) die day-Elemente in der Datenstruktur innerhalb der week-Elemente befinden und (ii) die Anzahl der day-Elemente innerhalb der einzelnen week-Elemente dieselbe ist, nämlich sieben.
Erstellen von dynamischen Spalten innerhalb von dynamischen Zeilen
Ziehen Sie ein Tabellen-Steuerelement an die gewünschte Stelle im Design. Aktivieren Sie im Dialogfeld "Neue Tabelle" (Abbildung unten) die Optionen für dynamische Zeilen und Spalten. Wählen Sie aus, wie oft die Zeilen und Spalten für die einzelnen Instanzen des jeweiligen Elements, das der Zeile bzw. Spalte entspricht, wiederholt werden sollen. Vorangestellte/Nachgestellte Spalten entsprechen der Kopf- bzw. Fußzeile. Beachten Sie, dass Sie Anhängen/Löschen-Steuerelemente für dynamische Zeilen, nicht aber für dynamische Spalten hinzufügen können.
Die Tabelle wird im Design erstellt. In der Abbildung unten sehen Sie das fertige Design einer Tabelle mit dynamischen Zeilen und Spalten. Beachten Sie die folgenden Punkte:
•Die Felder, die die dynamischen Zeilen und Spalten der Felder darstellen, werden durch Symbole einer Zeile bzw. Spalte markiert.
•Diese Felder müssen mit den Seitenquellen-Nodes, die die Daten für die Zeilen und Spalten der Tabelle bereitstellen, verknüpft werden. Das mit der Spalte verknüpfte Element muss in der Seitenquelle in dem mit der Zeile verknüpften Element enthalten sein. Beachten Sie jedoch, dass sich das Zeilenfeld im Design innerhalb des Spaltenfelds befindet.
•Beachten Sie außerdem die XPath-Ausdrücke, mit denen die Zeilen- und Spaltenfelder mit Seitenquellen-Nodes verknüpft werden. Der Ausdruck zur Auswahl des Elements für das Zeilenfeld muss alle Instanzen des entsprechenden Elements auswählen. Der XPath-Ausdruck in der Abbildung oben wählt alle week Child-Elemente des Elements calendar aus: $XML1/calendar/week. Hingegen muss der XPath-Ausdruck für das Spaltenfeld nur das Spaltenelement innerhalb der aktuellen Zeile auswählen. Daher würde ein XPath-Ausdruck wie $XML1/calendar/week/day nicht funktionieren, da damit alle day Child-Elemente aller week-Elemente ausgewählt würden. Beachten Sie außerdem, dass der XPath-Kontext für das Spaltenfeld das mit der Zeile verknüpfte Element ist. In unserem Beispiel ist der Kontext-Node des Spaltenfelds week. Infolgedessen würde ein XPath-Ausdruck day die day Child-Elemente des aktuellen week-Elements auswählen.
•Es gibt im Design eine einzige Zelle am Schnittpunkt der Zeilen- und Spaltenfelder. Der Kontext-Node dieser Zelle ist das Element, das dem Zeilenfeld entspricht (in unserem Beispiel dem Element week). XPath-Ausdrücke in dieser Zelle müssen innerhalb dieses Kontexts konstruiert werden. Wenn die Tabelle erstellt wird, wird innerhalb jedes "Zeilenelements" (in unserem Beispiel das Element week) eine Zelle für jede einzelne Spalte erstellt. Der XPath-Ausdruck wird für die Zelle jeder Spalte im Kontext der aktuellen Zeile ausgewertet. Um den Inhalt des Elements, das dem Spaltenfeld entspricht, zu erreichen, steht eine spezielle Variable zur Verfügung: $MT_TableColumnContext. Diese Variable enthält zur Laufzeit das Element, das der aktuellen Spalte entspricht (in unserem Beispiel das aktuelle day-Element im aktuellen week-Element). All das lässt sich am besten anhand eines Beispiels erklären. In der Abbildung oben enthält die Zelle im Design, die sich am Schnittpunkt der Zeilen- und Spaltenfelder befindet, ein Beschriftungssteuerelement. Dieses Steuerelement enthält Text, der über einen XPath-Ausdruck bereitgestellt wird: concat(@id, $MT_TableColumnContext/@id). Die Funktion concat() verkettet zwei Strings miteinander: die ID der aktuellen Woche - abgerufen über @id - und die ID des aktuellen Tags innerhalb der aktuellen Woche - abgerufen mittels $MT_TableColumnContext/@id. Da der Kontext-Node des gesamten XPath-Ausdrucks das (mit den Zeilen verknüpfte) Element week ist, liefert @id den Wert des aktuellen week/@id-Attributs, während der Ausdruck $MT_TableColumnContext/@id den Inhalt des aktuellen day/@id-Attributs im aktuellen week-Element abruft.
Die Ausgabe des in der Abbildung oben gezeigten Tabellendesigns sieht ungefähr folgendermaßen aus:
•Jedes week-Element in der Seitenquelle wird in einer Zeile angezeigt (W1 bis W4).
•Jedes day-Element innerhalb einer Woche (week) wird innerhalb der entsprechenden Spalte angezeigt (D1 bis D7).
•Die Verkettung der beiden IDs wird separat für die 28 Zellen von W1D1 bis W4D7 ausgeführt.
Informationen zum Überspannen dynamischer Spalten finden Sie im Abschnitt Verbinden und Überspannen von Zeilen/Spalten.