6 Das mapping-Objekt

Das Mapping-Objekt dient dem Zweck, eine semantische Aktion zu definieren, die während einer Transformation für einen bestimmten Knoten (in einem XML-Baum oder in der IDM-Objekthierarchie) aufgerufen werden soll, wenn eine Übereinstimmung zwischen diesem Mapping-Objekt und dem Knoten gefunden wird. Die Mapping-Objekte werden als Kinder eines Transformer-Objekts definiert und beschreiben zusammen mit diesem eine Transformation von Daten.

Definition

{ export | reexport } { model } mapping { <Bezeichner> }
{
  [ <Attributdefinition> ]
  [ <Methodendefinition> ]
}

Ereignisse

keine

Kinder

document

record

transformer

Vater

transformer

Menü

keins

Methoden

:action()

6.1 Attribute

.document[integer]

.external

.external[integer]

.firstrecord

.label

.lastrecord

.name

.model

.parent

.record[integer]

.recordcount

.scope

.transformer[integer]

.userdata

6.2 Objektspezifische Attribute

.name

Hier wird ein Muster (ein XPath ähnlicher Ausdruck) angegeben, das definiert, auf welche Knoten in einem XML-Baum oder in der IDM-Objekthierarchie das Mapping-Objekt passt. Dieses bestimmt, ob während einer Transformation die action Methode für den Knoten aufgerufen wird oder nicht.

6.3 Muster für .name

Ein Muster ist ähnlich zu einem Dialog Manager Bezeichner. Das Muster bildet einen Pfad von Elementnamen. Der Pfad beginnt bei der Wurzel des Dokuments oder IDM-Objekthierarchie (also Dialog oder Modul). Jede Hierarchiestufe wird mit dem entsprechenden Teil des Pfades verglichen. Zudem können noch bestimmte Eigenschaften wie Vorhandensein eines Attributs oder die Position innerhalb der Kinder bzw. des Vaters angegeben werden:

{ <Name> [[.<Attr>{<Op>"<Value>"}]] {[<Idx>]} }
  [ .<Name> [[.<Attr>{<Op>"<Value>"}]] {[<Idx>]} ]

<Name>

XML: Wird mit dem name Attribut des Cursors verglichen. Der Cursor muss den nodetype nodetype_element besitzen. Alternativ kann hier auch * angegeben werden, dann wird das name Attribute nicht beachtet.

IDM: Wird mit dem Label eines IDM-Objekts verglichen. Alternativ kann hier auch * angegeben werden, dann ist jedes Label passend.

<Attr>

XML: Der XML-Knoten, auf den der Cursor zeigt, muss das angegebene Attribut besitzen.

IDM: Das IDM-Objekt muss das angegebene Attribut besitzen.

<Op>

XML und IDM: Vergleichsoperator, um das in <Attr> angegebene Attribut mit dem <Value> zu vergleichen. Es kann auf gleich = und ungleich <> verglichen werden.

<Value>

XML und IDM: Der Wert gegen den das <Attr> verglichen wird.

<Idx>

XML: Der XML-Knoten muss an dieser Position innerhalb der Kinder seines Vaters stehen.

IDM: Das IDM-Objekt muss an dieser Position innerhalb der Kinder seines Vaters stehen. Dabei werden alle Kinder aus hierarchischen Attributen zusammengefasst betrachtet.

Besonderheiten

.

XML: Beginnt das Muster mit einem Punkt, dann ist es relativ zum aktuellen Knoten. Der Pfad beginnt also beim aktuellen Knoten.

..

XML und IDM: Zwei aufeinander folgende Punkte überspringen beliebig viele Hierarchiestufen.

[<Idx>]

XML: Ein Index ohne weitere Angaben selektiert den XML-Knoten an dieser Position. Der nodetype des Knotens bleibt dabei unberücksichtigt. Jeder Knoten kann somit durch einen Ausdruck der Form {[<Idx>][.[<Idx>]]} eindeutig referenziert werden (path Attribut).

Bei allen Vergleichen wird zwischen Groß- und Kleinschreibung unterschieden.

Beispiel

Das Muster ..CD[.Title = Yellow] referenziert innerhalb eines XML-Baums alle Knoten (egal wo in der Hierarchie) mit dem Tag CD, die ein Attribut .Title mit dem Wert Yellow haben.

Das gleiche Muster auf IDM-Objekte angewandt wird alle Objekte mit dem Label CD auswählen, die das benutzerdefinierte Attribut .Title mit dem Wert Yellow haben.

6.4 Objektspezifische Methoden

:action()

Diese Methode wird von der :action-Methode des Vater-Transformers aufgerufen, wenn eine Entsprechung zwischen einem Knoten in einem XML-Baum bzw. einer IDM-Objekthierarchie und dem Muster im .name-Attribut des Mapping-Objektes gefunden wurde. Die Default-Implementierung dieser Methode tut nichts und liefert immer true zurück.

Da diese Methode überdefiniert werden kann, kann der IDM-Programmierer hier festlegen, was mit den Daten aus dem Knoten geschehen soll.