EMA-XPS Online


RELATION-SPECIFICATION

RELATION-SPECIFICATION
======================

Syntax: <Relation-Spezifikation> ::=
           [:GENERAL-RELATIONS 
              (<Rahmen-Relation>*)]
           [:PART-RELATIONS
              (<Rahmen-Relation>*)]

        <Rahmen-Relation> ::=
           ([:DOCUMENTATION <Dokumentation>]
           [:EXPLANATION <Erklärung>]
           [:VALUE-RESTRICTION
             {<Lisp-Typ: Symbol> |
             <Rahmen-Typ>}]
           [:NUMBER-RESTRICTION (<min><max>)]
           [:INITIAL-VALUE {<Instanz-Name>|
              <auswerten-nach-Menge> | 
              <Lisp-Typ: T}]
           [:INITABLE {T | NIL}]
           [:READ-ONLY {T | NIL}]
           [:IF-UNDETERMINED <Lisp-Typ: T>]
           [:READ-DEPENDENTS <Lisp-Typ: T>]
           [:WRITE-DEPENDENTS <Lisp-Typ: T>])

Warnung: Der Erklärungseintrag wird durch 
         EMA-XPS nicht unterstützt, d.h.
         :documentation und :explanation
         werden ignoriert.

Mit der Relationsspezifikation können Sie bei der
Rahmendefinition das angegebene Merkmal bzw. den
angegebenen Bestandteil genauer bestimmen. Unter
':documentation' und ':description' geben Sie den
Dokumentations- und Erklärungseintrag an.

Mit ':value-restriction' können Sie den Werte-
bereich für das angegebene Attribut einschränken.
Sie können hier Lisp-Typen angeben, wie string,
number, list oder einen Rahmennamen. Geben Sie
letzteres an, so können bei der Instanz-Relation
nur Instanzen des entsprechenden Rahmens eingetragen
werden.

Unter ':number-restriction' legen Sie die Anzahl der
Werte fest, die bei der Instanz-Relation einge-
tragen werden dürfen. Sie geben die minimale und
die maximale Anzahl von Werten an.

':initial-value' bezeichnet einen Standardwert, der
bei der Initialisierung eingetragen werden soll,
wenn bei der Instanzdefinition nichts anderes
angegeben wurde.

Mit ':initable' legen Sie fest, ob der Initial-Wert
bei der Instanziierung überschrieben werden darf
oder nicht. Wenn Sie T angeben, darf er über-
schrieben werden, bei der Angabe von NIL wird bei
der Initialisierung immer der Standardwert ein-
getragen.

':read-only' verhindert einen Schreibzugriff auf den
bei der Instanziierung gesetzten Wert, d.h. Sie
können nur lesend - beispielsweise mit einem ASK -
auf den Wert zugreifen. Sie können bei un-
bestimmten Werten diese nicht nachträglich ändern
oder durch ':if-undetermined' setzen.

Unter ':if-undetermined' können Sie angeben, welche
Aktionen ausgelöst werden sollen, falls der
Wert der jeweiligen Instanzrelation unbekannt ist.
Sie geben dazu in einer Liste die gewünschten
babylon-Ausdrücke an, die sequentiell nacheinander
ausgeführt werden sollen.

:read-dependents geben Ihnen die Möglichkeit, Lese-
zugriffe auf einen Wert differenzierter zu behandeln.
Sie können andere Instanzen benachrichtigen, wenn
auf einen Wert lesend zugegriffen wird. Bei dem Wert,
der eine Leseabhängigkeit haben soll, müssen Sie
lediglich die Instanz angeben, zu der die Nachricht
geschickt werden soll. Um die Nachricht zu verar-
beiten ist es notwendig, ein Behavior mit dem Namen
notify-read-dependent zu beschreiben, das die
Nachricht für Instanzen der jeweiligen Klasse
behandelt.

Mit ':write-dependents' verfahren Sie analog wie mit
':read-dependents', außer daß es sich hier um
Schreibzugriffe handelt.

Beispiel: >(define-frame Kunde
             :general-relations
             (urlaubsinteresse (:value-restriction
                symbol
             :if-undetermined (ask (match _x (start
             'erfrage-urlaubs-interesse))
             (tell [urlaubsinteresse instance _x])))
             vorschlag (:value-restriction laender)
             ziele (:value-restriction laender
             :if-undetermined (ask [laender _land]
             (tell [ziele instance _land])))))


EMA-XPS Online