Show TOC Anfang des Inhaltsbereichs

Syntaxdokumentation Nicht-literale Attribute  Dokument im Navigationsbaum lokalisieren

Die nicht-literalen Attribute eines ST-Programms werden über den Befehl tt:attribute definiert. Ein nicht-literales Attribut ist einem Attribut eines XML-Elements des XML-Dokuments zugeordnet. Bei der Serialisierung setzt der Inhalt eines nicht-literalen Attributs den Wert des Attributs im XML-Dokument, bei der Deserialisierung wird der Wert des Attributs im XML-Dokument gelesen und verarbeitet.

Allgemeine Form

Die Syntax für allgemeine nicht-literale Attribute ist wie folgt:

 

<tt:attribute name=″attr[ref=″node]>

  ...

</tt:attribute>

 

Diese Anweisung darf einmal oder mehrmals innerhalb eines literalen XML-Elements vor dessen Unterlementen aufgeführt werden. Jede Anweisung definiert ein nicht-literales Attribut des aktuellen XML-Elements mit dem in name angegebenen Namen attr. Das optionale Attribut ref setzt den aktuellen Knoten node für den Kontext des nicht-literalen Attributs attr.

Serialisierung nicht-literaler Attribute

Bei der Serialisierung wird der Name attr des Attributs zusammen mit =″ oder =′ in die Definition des aktuellen XML-Elements geschrieben. Danach wird der Inhalt von tt:attribute serialisiert und das Ergebnis hinter attr=″ bzw. attr=′ geschrieben. Das Ergebnis der Serialisierung darf nicht strukturiert sein, d.h., darf keine Unterelemente enthalten. Schließlich wird das Attribut mit bzw. abgeschlossen.

Hinweis

In einem gültigen XML-Dokument müssen die Namen der Attribute eines XML-Elements eindeutig sein. Dies wird bei der Serialisierung nicht-literaler Attribute aus Gründen der Performance nicht überprüft, sondern muss vom Anwendungsentwickler selbst beachtet werden.

Deserialisierung nicht-literaler Attribute

Bei der Deserialisierung wird der Name des Attributs mit den Attributen des aktuellen XML-Elements im Ausgangs-XML-Dokument abgeglichen. Die Reihenfolge der Attribute spielt keine Rolle. Die Deserialisierung schlägt fehl, wenn das Attribut nicht im Eingangsstrom vorhanden ist. Danach wird der Wert des Attributs gemäß dem Inhalt von tt:attribute deserialisiert und das Abschlusszeichen abgeglichen. Die Deserialisierung schlägt fehl, wenn nicht der vollständige Inhalt des Attibuts deserialisiert wird. Überzählige Attribute des Eingangsstroms werden ignoriert.

 

Spezialform nicht-literaler Attibute

Eine Spezialform nicht-literaler Attribute kombiniert den tt:value-Befehl mit obiger Syntax:

 

<tt:attribute name=″attr value-ref=″node
                          [map=mapping_list] />

 

Diese Spezialform ist eine Kurzform von:

 

<tt:attribute name=″attr>
  <tt:value ref=″node [map=mapping_list] />
</tt:attribute>

 

Dadurch kann der häufige Anwendungsfall, einen elementaren Wert als Inhalt eines Attributs auszudrücken, einfach formuliert werden.

 

Beispiel

Im folgenden ST-Programm werden die Werte der Datenwurzeln ROOT1 und ROOT2 als Werte der Attribute attr1 und attr2 des Elements X serialisiert bzw. aus diesen deserialisiert.

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

  <tt:root name="ROOT1"/>
  <tt:root name="ROOT2"/>

  <tt:template>
    <X>
      <tt:attribute name="attr1" value-ref="ROOT1" />
      <tt:attribute name="attr2" value-ref="ROOT2" />
      <Y>...</Y>
    </X>
  </tt:template>

</tt:transform>

 

Wenn an ROOT1 und ROOT2 die Werte “Text1“ und “Text2“ übergeben werden, ist das Ergebnis einer Serialisierung wie folgt:

 

<X attr1="Text1" attr2="Text2">
  <Y>...</Y>
</X>

 

Mit folgendem ST-Programm kann obiges Ergebnis wieder deserialisiert werden, obwohl die Reihenfolge der Attribute unterschiedlich ist.

 

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

  <tt:root name="ROOT1"/>
  <tt:root name="ROOT2"/>

  <tt:template>
    <X>
      <tt:attribute name="attr2" value-ref="ROOT2" />
      <tt:attribute name="attr1" value-ref="ROOT1" />
      <Y>...</Y>
    </X>
  </tt:template>

</tt:transform>

 

 

 

Ende des Inhaltsbereichs