gif gif up gif contents
Nächste Seite: 5.1.2 Auswertung der Sichten Vorige Seite: 5.1 Sichten in ConceptBase

5.1.1 Definition der Sichten

Sichten sind in ConceptBase Instanzen der Systemklasse View. Die Klasse View ist eine Spezialisierung der Klasse GenericQueryClass, also kann man Sichten genauso definieren wie normale Anfragen. Jedoch sind in Sichten einige syntaktische Erweiterungen zugelassen, die einerseits eine höhere Ausdruckskraft für Sichten ermöglichen und andererseits dem Anwender die Definition von Sichten erleichtern.

Im Gegensatz zu normalen Anfragen können Sichten in ConceptBase verschachtelt sein. Das bedeutet, daßdie Attributwerte nicht nur einfache Objektnamen darstellen können, sondern auch Objekte mit weiteren Attributen sein können. Dadurch können mehrstellige Beziehungen ausgedrückt werden, wohingegen mit nicht-verschachtelten Anfragen nur zweistellige Beziehungen zwischen einem Objekt und seinen Attributen dargestellt werden können.

  Die Sicht EmpDept enthält alle Angestellten mit ihren Abteilungen und den dazugehörigen Managern. Das Attribut dept ist verschachtelt, weswegen es zusätzlich zur Attributkategorie partof gehört.
View EmpDept isA Employee with
  retrieved_attribute,partof
    dept : Department with
      retrieved_attribute
        head : Manager
    end
end
Solche mehrstelligen Beziehungen zwischen Angestellten, Abteilungen und Managern sind mit den Anfrageklassen QueryClass und GenericQueryClass nicht möglich.

Des weiteren kann man in der Definition der Sichten Aufzählungen und Pfadausdrücke benutzen, so daßdas Formulieren von Nebenbedingungen für den Benutzer einfacher wird. Die Pfadausdrücke können innerhalb von logischen Formeln oder auch als Typdefinition für ein Attribut benutzt werden. In Pfadausdrücken können die Operatoren . und | benutzt werden. Der Ausdruck object.label entspricht der Menge der Werte des Attributs mit der Bezeichnung label für das Objekt object. Durch den Ausdruck object|label wird die Menge der Attributverbindungen beschrieben, die vom Objekt object ausgehen, und die Bezeichnung label haben. Es können auch Ketten von solchen Ausdrücken gebildet werden, d.h. object.label1. .labelN, wobei die Operatoren in beliebiger Kombination auftreten können. Die Mengen können auch durch Restriktionen begrenzt werden: object.(label:[A1, ,An]) schränkt die Menge der Attributwerte auf A1 bis An ein. Die Syntax der Pfadausdrücke als Teil der Sichtendefinition ist in Anhang F.1 beschrieben.

View EmpDept2 isA Employee with
  retrieved_attribute
    dept : John.dept;
    salary : [10000,15000,20000]
end
Diese Sicht wählt die Angestellten aus, die in einer Abteilung arbeiten, in der auch John arbeitet, und die 10000, 15000 oder 20000 DM verdienen.

In dem verschachtelten Teil einer Sicht können auch die Objekte des übergeordneten Frames angesprochen werden. Dafür wird der Operator :: verwendet, der mit dem Scope Resolution Operator in C++ [Str91] vergleichbar ist. Innerhalb einer verschachtelten Sichtendefinition repräsentiert this immer das Hauptobjekt der Sicht, die Objekte der Teilanfragen werden durch this::label referenziert, wobei label die entsprechende Attributbezeichnung ist.

  Diese Sicht enthält die Angestellten, die in einer Abteilung arbeiten und den Abteilungsleiter mögen. Die Attribute dept und head sind hier notwendig (necessary) für die Objekte der Antwortmenge.
View EmpDept_likes_head isA Employee with
  retrieved_attribute,partof,necessary
    dept : Department with
      retrieved_attribute,partof,necessary
        head : Manager with
          constraint
            c: $ A(this,likes,this::dept::head) $
        end
    end
end
In der logischen Formel für die Bedingung der Sicht steht this für eine Instanz der Klasse Employee und this::dept::head bezeichnet die zugehörige Instanz der Klasse Manager. Mit this::dept könnte man auf die entsprechenden Departments zugreifen.



gif gif up gif contents

Christoph Quix
31. Juli 1996