2.1 :action()
Die Methode :action() gibt es in zwei verschiedenen Ausprägungen:
- Am mapping-Objekt definiert sie, wie Daten an den einzelnen Knoten transformiert werden
- Am transformer-Objekt wird sie von dessen :apply()-Methode für jeden besuchten Knoten aufgerufen
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
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
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