Die Expert Query Language ist Bestandteil des Intersult Expert Systems.

Verwendung#

Der Expert Parser wird durch die Klasse com.intersult.expert.query.ExpertParser angesprochen oder implizit durch ExpertService.

Hintergrund#

Die Expert Query Language wird durch den Parser Lambda geparst, einem effizienten und zugleich simplen Parser.

Primitiven#

Die Expert Query Language kennt nur zwei Primitive:
  • Literale: Einfache Literale können ohne jegliche Anführungsstriche geschrieben werden. Als Anführungsstriche sind Hochkomma und Anführungszeichen erlaubt. Folgende Ausdrücke sind vollkommen gleichwertig: test, 'test' und "test".
  • Variable: Ausdrücke die mit einem Fragezeichen (?) beginnen, können als Variablen dienen. Diese können sowohl zur Parse-Zeit als auch zur Compile-Zeit ersetzt werden. Beispiel wären ?object, ?parameter oder ?var.

Variablen spielen insbesondere beim Einbetten der Expert Query Language in andere Systeme eine Rolle. Wie zum Beispiel in JSF durch das Intersult Expert.

Rules und Goals#

Grundsätzlich werden Goal- und Rule-Querys unterschieden:
  • Goal-Query: Diese Query evaluiert zu einer Liste von Strings und kann wieder für andere Goals herangezogen werden.
  • Rule-Query: Diese Query evaluiert zu einer Liste von Rule-Objekten. Mit diesen kann ebenfalls wieder weitergearbeitet werden, vor allem durch einen goal-selector wieder in eine Goal-Query umgewandelt werden.

AusdruckBeschreibungBeispiel
goal-queryEin Audruck der zu einer Liste von Goals evaluiert(Expertensystem, *, *).value
rule-queryEin Ausdruck der zu einem Liste von Rules evaluiert(Expertensystem, *, *)
goal-combinationVerknüpfung zweier Goals durch die Experten-Operatoren +, -, / und .red + green
goal-restrictionEinschränkung eines Goals durch die Attribut-Operatoren =, !=, <, <=, >, >=*.contains = Knowledge
braced-goalGoals können geklammert werden, um die Priorität festzulegen.(red + green) / (green + blue)
goal-selectorEin Rule-Goal kann durch die drei Selektoren object, attribute oder value in ein Goal verwandelt werden(Expertensystem, *, *).value
goal-singleSelektion eines Goals aus einer Menge durch die Operatoren ! (erstes Goal) und # (zufälliges Goal)(*.example)!

Goal Combinations#

Wie schon beschrieben, gibt es vier Goal Combinations. Der Goal-Operator +, -, / und . steht zwischen den Goals. Das Goal links vom Goal-Operator wird auch als Links-Goal und das Goal rechts davon entsprechend als Rechts-Goal bezeichnet.

Goal CombinationBezeichnungBeschreibung
+UnionDas Zusammenfügen beider Goal-Mengen. Es entstehen keine Doppelten Goals, diese werden ausgefiltert.
-SubtractionAls Grundmenge dient die Links-Goals, davon werden die Rechts-Goals entfernt. Goals die in den Rechts-Goals vorkommen, jedoch nicht in den Links-Goals sind dabei ebenfalls nicht enthalten.
/IntersectionEs wird die Schnittmenge zwischen den Links-Goals und den Rechts-Goals berechnet.
.TransformationEine Kurzschreibweise für (left, right, *).value. Die Ergebnis-Goals sind die Values alles Attributes mit dem Namen der Rechts-Goals von den Links-Goals. Zum Beispiel kann haus.wohnfläche zum Ergebnis 110qm führen.

Goal Restrictions#

Goals können auch eingeschränkt werden. Dabei wird ebenfalls der Operator . verwendet, nach dem Rechts-Goal folgt allerdings ein weiterer Operator aus =, !=, <, <=, > und >= mit einem weiteren Goal, also <object>.<attribute>.<value>.

OperatorBeschreibung
=Der Equal-Operator selektiert alle Objekte, deren Attributswert sich in der gegebenen Liste befindet.
!=Der Not-Equal-Operator selektiert alle Objekte, deren Attributswert sich nicht in der gegebenen Liste befindet.
<Der Less-Operator selektiert alle Objekte, deren Attributswert kleiner als der gegebene Wert ist. In der Liste darf sich nur ein Wert befinden.
<=Der Less-Equal-Operator selektiert alle Objekte, deren Attributswert kleiner oder gleich als der gegebene Wert ist. In der Liste darf sich nur ein Wert befinden.
>Der Less-Operator selektiert alle Objekte, deren Attributswert größer als der gegebene Wert ist. In der Liste darf sich nur ein Wert befinden.
>=Der Less-Operator selektiert alle Objekte, deren Attributswert größer oder gleich als der gegebene Wert ist. In der Liste darf sich nur ein Wert befinden.

Ziel einer Restriction ist es, eine Menge von Goals einzuschränken. Dies ist generell gleichwertig zu einer Rule-Query mit anschließender Objekt-Selektion (<object>, <attribute>, <value>).object, allerdings immer mit Equals.