2.1 :action()

Die Methode :action() gibt es in zwei verschiedenen Ausprägungen:

2.1.1 :action() (mapping)

Diese Methode definiert, wie Daten während einer Transformation an einzelnen Knoten transformiert werden sollen, das heißt aus dem Src-Parameter in den Dest-Parameter übertragen werden sollen.

Jedes mapping-Objekt besitzt eine :action()-Methode, die als Default-Implementierung einfach nur true zurückliefert. Diese Methode kann vom IDM-Programmierer überdefiniert werden (ähnlich wie :init()). Somit kann hier festgelegt werden, in welcher Weise die Daten vom Src-Parameter zum Dest-Parameter übertragen werden.

Die Methode :action() wird während einer Transformation vom Vater des mapping-Objektes (transformer) aufgerufen (genauer von der :action()-Methode dieses transformers), falls eine Entsprechung zwischen einem Knoten in einem XML-Baum bzw. einer IDM-Objekthierarchie und dem dazugehörigen mapping-Objekt gefunden wird (siehe hierzu Dokumentation des transformer-Objekts).

Definition

boolean :action
(
  anyvalue Src  input,
  anyvalue Dest input output
)

Parameter

anyvalue Src input

Hier wird der aktuelle Knoten übergeben, an dem die Transformation gerade steht. Dabei ist zwischen zwei Fällen zu unterscheiden.

  • Ein XML-Baum wird transformiert:

    In Src wird ein Doccursor-Objekt übergeben, das auf den aktuellen Knoten im XML-Baum verweist.

  • IDM-Objekthierarchie wird transformiert:

    In Src wird ein IDM-Objekt übergeben, das den aktuellen Knoten repräsentiert.

anyvalue Dest input output
Hier wird stets der Wert durchgeschleust, der beim Aufruf von :apply() als Dest übergeben oder in einem der früheren Aufrufe von :action()-Methoden verändert wurde.

Rückgabewert

Wenn die Methode true zurückliefert, so wird angenommen, das der aktuelle Knoten komplett abgearbeitet worden ist und kein weiteres mapping-Objekt auf die Entsprechung mit dem Knoten geprüft wird. Es werden also keine weiteren :action()-Methoden aufgerufen auch wenn weitere passende mapping-Objekte existieren.

Wird false zurückgeliefert, so wird der aktuelle Knoten mit den weiteren mapping-Objekten verglichen und gegebenenfalls deren :action()-Methoden aufgerufen.

Objekte mit dieser Methode

mapping

2.1.2 :action() (transformer)

Diese Methode wird von der :apply()-Methode des transformers iterativ für jeden besuchten Knoten eines XML-Baumes bzw. einer IDM-Objekthierarchie aufgerufen. Die Methode muss dann alle mapping-Kinder des Transformers durchgehen und testen, ob Muster in deren .name-Attributen auf den aktuellen Knoten (Src-Parameter) passen. Die Reihenfolge in der die mappings getestet werden, entspricht der Definitionsreihenfolge im .mapping[]-Vektor, wobei die geerbten Mappings als letzte drankommen.

Achtung

Die geerbten mappings sind nicht im .mapping[]-Vektor des Vaters enthalten. Auf sie kann deswegen nur über die Vererbungshierarchie zugegriffen werden. Das ist anders als bei normaler IDM-Vererbung.

Wird eine Übereinstimmung gefunden, so wird die :action()-Methode des dazugehörigen mapping-Objekts aufgerufen, wobei Src- und Dest-Parameter einfach übergeben werden. Der Rückgabewert dieser :action()-Methode bestimmt, ob verbleibende mapping-Objekte noch untersucht werden und gegebenenfalls deren :action()-Methoden auch für diesen Knoten aufgerufen werden (Rückgabewert ist false), oder ob der Knoten als abgearbeitet angesehen wird und die :action()-Methode des transformers beendet wird (Rückgabewert ist true).

Diese Methode kann überdefiniert werden (ähnlich zu :init()).

Definition

boolean :action
(
  anyvalue Src  input,
  anyvalue Dest input output
)

Parameter

anyvalue Src input

Hier wird der zu untersuchende Knoten übergeben.

  • Enthält das .root Attribut des transformers einen String, so wird hier ein doccursor-Objekt erwartet, das auf den XML-Knoten verweist. Dieser Knoten wird dann mit den mappings verglichen.
  • Enthält das .root Attribut des transformers ein IDM-Objekt, so wird hier das IDM-Objekt erwartet, das den aktuellen Knoten repräsentiert. Dieses Objekt wird dann mit den mappings verglichen.
anyvalue Dest input output
Hier wird stets der Wert durchgeschleust, der beim Aufruf von :apply() als Dest übergeben oder in einem der früheren Aufrufe von :action()-Methoden verändert wurde.

Rückgabewert

Die Methode gibt true zurück, falls die Verarbeitung ohne Fehler durchlief, sonst false.

Objekte mit dieser Methode

transformer