Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Aktueller Knoten  Dokument im Navigationsbaum lokalisieren

An jeder Stelle einer Simple Transformation (statisch und während der Programmausführung) kann genau ein Knoten der Baumstrukturen des aktuellen Templates als aktueller Knoten gesetzt sein. Der aktuelle Knoten verschattet die Datenwurzeln in dem Sinne, dass eine Referenz "name" sich nicht auf eine Wurzel “name“ bezieht, sondern auf die Komponente “name“ des aktuellen Knotens (siehe Adressierung von Unterknoten). Wenn der aktuelle Knoten definiert ist, ist er impliziter Operand vieler ST-Befehle, kann aber auch explizit über $ref adressiert werden.

Dieser Abschnitt zeigt, wie der aktuelle Knoten explizit mit [tt:]ref gesetzt wird. Daneben setzt auch die Anweisung tt:loop zur Transformation interner Tabellen den aktuellen Knoten.

 

Hinweis

An Stellen, an denen der aktuelle Knoten nicht explizit gesetzt ist, ist er undefiniert und nicht über $ref adressierbar. An diesen Stellen werden die Datenwurzeln nicht verschattet und können über name angesprochen werden.

 

Aktuellen Knoten setzen

Um den aktuellen Knoten explizit zu setzen, gibt es folgende Möglichkeiten:

 

Setzen über Befehl

Zum Setzen des aktuellen Knotens dient der ST-Befehl:

 

<tt:ref name=“node“>
  ...
</tt:ref>

 

Der Befehl tt:ref setzt den aktuellen Knoten auf den in node angegebenen Knoten. Für node kann jeder adressierbare Datenknoten angegeben werden. Falls kein gültiger Knoten angegeben ist, ist der aktuelle Knoten undefiniert (siehe oben).

Der Befehl tt:ref ist schachtelbar. Er spannt einen Kontext auf, in dem der gesetzte aktuelle Knoten gültig ist. Außerhalb des zugehörigen XML-Elements gilt nach wie vor der äußere aktuelle Knoten. Auf oberster Ebene ist der aktuelle Knoten immer undefiniert.

Der Befehl tt:ref hat selbst keinen operationalen Effekt, sondern beeinflusst nur die Wirkung der in ihm geschachtelten Befehle.

Hinweis

Wegen den Adressierungsregeln kann ein neu gesetzter aktueller Knoten außer beim Setzen auf eine Datenwurzel nur ein Unterknoten des aktuellen Knotens sein.

 

Setzen über Attribut eines Befehls

Bei vielen ST-Befehlen kann der aktuelle Knoten wie folgt als Attribut angegeben werden:

 

<tt:instructionref=“node“>
  ...
</tt:instruction>

 

Dabei ist instruction ein ST-Befehl, der das Attribut ref enthalten kann. Für node gilt das gleiche wie beim Setzen über den Befehl tt:ref. Wenn kein Attribut ref angegeben ist, bezieht sich der Befehl auf den im Kontext aktuellen Knoten

Der gesetzte aktuelle Knoten ist genau im Kontext des ST-Befehls gültig.

 

Setzen über Attribut eines literalen XML-Elements

In den literalen XML-Elementen eines Templates kann der aktuelle Knoten wie folgt gesetzt werden:

 

<element... tt:ref=“node“>
  ...
</element>

 

Dabei ist element ein literales XML-Element. Das spezielle Attribut tt:ref (im Namensraum der ST-Befehle) setzt den aktuellen Knoten. Für node gilt das gleiche, wie beim Setzen über den Befehl tt:ref..

Der gesetzte aktuelle Knoten ist genau im Kontext des XML-Elements gültig.

 

Beispiel

Das folgende ST-Programm ist geeignet, eine geschachtelte ABAP-Struktur zu serialisieren.

 

<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">

  <tt:root name="ROOT"/>

  <tt:template>
    <X tt:ref="ROOT">
      <X1>
        <tt:value ref="COL1" />
      </X1>
      <X2>
        <tt:value ref="COL2" />
      </X2>
      <X3 tt:ref="STRUC2">
        <X1>
          <tt:value ref="COL1" />
        </X1>
        <X2>
          <tt:value ref="COL2" />
        </X2>
      </X3>
    </X>
  </tt:template>

</tt:transform>

 

Der aktuelle Knoten wird wie folgt geändert:

Siehe das Beispiel im Abschnitt Strukturen für einen Aufruf der Transformation.

Ende des Inhaltsbereichs