Babylon Query Language (BQL) ============================ Die folgenden Seiten befassen sich mit einer in babylon3 eingebrachten Erweiterung des Leistungs- umfangs der von der GMD realisierten hybriden Schale Babylon2, der Babylon Query Language (BQL). Durch sie soll ein Zugriff auf das Faktenwissen ermöglicht werden, wie er von Datenbankanwendungen her bekannt ist. Der gesamte Leistungsumfang der BQL ist unter EMA- XPS nachgebildet worden. auf die einführenden Seiten zur WISSENSVERARBEITUNG und SETs sei verwie- sen. Die Organisation dieses Kapitels ist angelehnt an die des Kapitels 2 der babylon3 Dokumentation. Im weiteren folgen die Begriffsbestimmungen, die im Zusammenhang mit der BQL Verwendung finden: BQL-EXPRESSION ============== Syntax: <bql-Ausdruck> ::= {<ask-Ausdruck> | <tell-Ausdruck> | <untell-Ausdruck> | <retell-Ausdruck>} ASK, TELL, UNTELL und RETELL sind BQL-Ausdrücke, mit denen man Wissen aus der Wissensbasis abfragen kann bzw. die Wissensbasis verändern kann. EINFACHE-PRÄDIKATION ===================== Syntax: [<Frame-Name> {Instanz | <bql-Variable>] [<Relations-Name> {Instanz | <bql-Variable>} {Wert | <bql-Variable>}] Eine einfache Prädikation kann einstellig oder zwei- stellig sein. Eine einstellige Prädikation beschreibt eine Frame-Instanz Beziehung. Eine zweistellige Prädikation beschreibt eine Instanz- Wert Beziehung. Dabei ist unerheblich, ob eine Bestandteil- oder eine Merkmal-Relation zwischen der Instanz und den Werten besteht. In Verbindung mit TELL, UNTELL oder RETELL wird die zweistellige Prädikation verwendet. In Ver- bindung mit ASK kann die Prädikation einstellig oder zweistellig sein. Die Ausdrücke in der Prädikation werden in babylon von links nach rechts abgearbeitet. Dieses Verhalten ist aber als quasi-parallel zu betrachten. COMPOUND-PREDICATION ==================== Compound-predications sind Prädikationen, die mit AND, OR oder NOT verknüpft sind ([and...; [or...; [not...). Sie dürfen nur innerhalb von bql-Ausdrücken oder Regeln benutzt werden. Warnung: nicht zu verwechseln mit '(and...'. BQL-VARIABLE ============ Syntax: <logische Variable> ::= <Lisp-Typ: Symbol> Eine logische Variable ist eine Variable mit einem Unterstrich, die in allen bql- Ausdrücken stehen kann. Sie wird sequentiell an die Werte gebunden, die in der Wissensbasis gefunden werden. Beispiel: >(ask [Computer _x] (kb-format "~% Es steht folgender Computer zur Verfügung: ~% ~A" (name-of _x))) Es steht folgender Computer zur Verfügung: SIEMENS-NIXDORF Es steht folgender Computer zur Verfügung: WANG NIL BABYLON-VARIABLE ================ Syntax: <babylon-variable> Eine babylon-Variable ist eine Variable ohne Unterstrich und wird als Platzhalter benutzt. Beispiel: >(define-behavior ausstattung :primary ((ein-computer computer) (eine-option optionen)) :documentation " " :explanation nil (kb-confirm "Würden Sie gerne eine ~: (~A~) in Ihrem Computer haben?" (name-of eine-option))) => #<Behavior-Method AUSSTATTUNG (COMPUTER OPTIONEN)> In diesem Beispiel sind "ein-computer" und "eine-option" babylon-Variablen. LISP-TYP ======== Syntax: <Lisp-Typ: T> Dies kann ein beliebiger Lisp-Ausdruck sein oder babylon-Ausdruck, der sich wie ein Lisp- Aufruf verhält und einen definierten Rückgabe- wert besitzt. Ein Lisp-Ausdruck kann sein: eine Zahl, eine Zeichenkette, ein Symbol, eine Liste oder ein Funktionsaufruf. CONTINUATION ============ Syntax: <bql-continuation> ::= {<Lisp-Typ::=T> ...} Die <continuation> kann nur zusammen mit einem ASK-Ausdruck vergleichbar dem DANN-Teil einer Regel benutzt werden. Sie besteht aus babylon- Ausdrücken, die logische Variablen enthalten dürfen, sofern diese auch in der zugehörigen Prädikation auftreten. Die <continuation> wird wiederholt, bis keine unterschiedlichen Belegungen für die logischen Variablen mehr existieren. BQL-ANONYMUS ============ Syntax: <anonyme Variable> ::= _ Die anonyme Variable ist nur durch einen Unterstrich gekennzeichnet und kann zusammen mit den Funktionen RETELL und UNTELL benutzt werden. Diese Variable kann anstelle eines Wertes gesetzt werden. Sie kann auch eine Menge von Werten vertreten. Die anonyme Variable hat keine Belegung. Beispiel: >(untell [Optionen Computer _]) überführt die Relation "Optionen" für die Instanz "Computer" in den Zustand unbestimmt.