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.