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.
Ausdruck | Beschreibung | Beispiel |
---|---|---|
goal-query | Ein Audruck der zu einer Liste von Goals evaluiert | (Expertensystem, *, *).value |
rule-query | Ein Ausdruck der zu einem Liste von Rules evaluiert | (Expertensystem, *, *) |
goal-combination | Verknüpfung zweier Goals durch die Experten-Operatoren +, -, / und . | red + green |
braced-goal | Goals können geklammert werden, um die Priorität festzulegen. | (red + green) / (green + blue) |
goal-selector | Ein Rule-Goal kann durch die drei Selektoren object, attribute oder value in ein Goal verwandelt werden | (Expertensystem, *, *).value |
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 Combination | Bezeichnung | Beschreibung |
---|---|---|
+ | Union | Das Zusammenfügen beider Goal-Mengen. Es entstehen keine Doppelten Goals, diese werden ausgefiltert. |
- | Subtraction | Als 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. |
/ | Intersection | Es wird die Schnittmenge zwischen den Links-Goals und den Rechts-Goals berechnet. |
. | Transformation | Eine 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. |