EMA-XPS Online
BABYLON-QUERY-LANGUAGE
Babylon Query Language (BQL)
============================
The following pages concentrate on a babylon3
extension to GMD's hybrid shell Babylon2, the
Babylon Query Language (BQL). It is intended to
offer access to facts via queries in a way
database applications use.
EMA-XPS offers a complete emulation of the BQL.
See the introducing pages on KNOWLEDGE-HANDLING
and SETs.
The organisation of this capter is close to
chapter 2 of the babylon3 documentation.
The rest of this page introduces the notation
of the BQL:
BQL-EXPRESSION
==============
Syntax: <bql-expression> ::=
{<ask-expression> |
<tell-expression> |
<untell-expression> |
<retell-expression>}
ASK, TELL, UNTELL and RETELL are bql-expressions, with
which you can question or change the knowledge base.
SIMPLE-PREDICATION
==================
Syntax: [<framename> {instance | <bql-variable>]
[<relation-name> {instance | <bql-variable>}
{value | <bql-variable>}]
A simple predication can be a one-argument-predication
or a two-argument-predication. A one-argument predica-
tion describes a frame-instance relation. A two-argu-
ment predication describes an instance-value relation.
It is insignificant, if a part- or a characteristic-
relation between the instance and the values exists.
The two-argument-predication is used in connection
with TELL, UNTELL and RETELL. In connection with
ASK, the predication can be a one-argument- or
a two-argument-predication.
The expressions in the predication will be worked
out from the left to the right, but should be regarded
as quasi-parallel.
COMPOUND-PREDICATION
====================
Compound-predications are predications that
are bound with AND, OR or NOT ([and... ;
[or... ; [not...).
they may only be used in bql-expressions or
with rules. Warning: do not use '(and...' for
mistake.
BQL-VARIABLE
============
Syntax: <bql-variable> ::= <lisp-type: symbol>
A bql-variable is a variable with an under-
line, that can be used in every bql-expression.
It will sequentially be bound to the values
which are found in the knowledge base.
Example: >(ask [computer _x]
(kb-format "~% the base of
knowledge contains the following
computer: ~% ~A" (name-of _x)))
the base of knowledge contains the
following computer:
SIEMENS-NIXDORF
the base of knowledge contains the
following computer:
WANG
NIL
BABYLON-VARIABLE
================
Syntax: <babylon-variable>
A babylon-variable is a variable without an
underline and is used as a placeholder.
Example: >(define-behavior equipment
:primary ((a-computer computer)
(an-option options))
:documentation " "
:explanation nil
(kb-confirm "Would you like to
have ~: (~A~) in your computer?"
(name-of an-option)))
=>
#<Behavior-Method EQUIPMENT
(COMPUTER OPTIONS)>
In this example a-computer and an-option are
babylon variables.
LISP-TYPE
=========
Syntax: <lisp-type: T>
This can be any lisp-expression or babylon-
expression, that has the same behaviour like
a lisp-expression and returns a defined value.
A lisp-expression can be: a number, a string,
a symbol, a list or a functioncall.
CONTINUATION
============
Syntax: <bql-continuation> ::=
{<lisp-type::=T> ...}
The continuation can only be used together
with the ASK-expression similarly the THEN-part
of a rule. It consists of babylon-expressions,
which may contain logical variables sofar these
are used in the corresponding predication.
The continuation will be repeated until no
further bindings of logical variables may be
achieved.
BQL-ANONYMUS
============
Syntax: <bql-anonymus> ::= _
The anonymus variable is only characterized by
an underline and can be used together with
the functions RETELL and UNTELL. This variable
can be used instead of a value. It can
represent a quantity of values too. The
anonymus variable has no content.
Example: >(untell [options computer _])
T
brings the relation options for the
instance computer in the condition "indefinite".
EMA-XPS Online