blob: b5188edf503b0e7f9571cf610b15320784d6b20c [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.5/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.0" xmi:id="-J09_IJ2SO7r5n_TcsOe6yg"
name="new_term_definition,_QQcSoEXXEdy14e5PT9v3HQ" guid="-J09_IJ2SO7r5n_TcsOe6yg"
authors="Jerome Boyer" changeDate="2007-08-27T11:37:19.002-0700">
<copyrightStatement href="uma://_NFyDwAjqEdyj5bYZ0eCR5g#_hRkAkAjqEdyj5bYZ0eCR5g"/>
<mainDescription>&lt;a id=&quot;XE_rule_engine&quot; name=&quot;XE_rule_engine&quot;>&lt;/a> &#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Software component used to execute business rule. The rule engine uses two major entities:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
&lt;div class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt&quot;>&#xD;
a &lt;a class=&quot;elementLink&quot; href=&quot;./../../../abrd/guidances/termdefinitions/rule_set_4D4C8DB1.html&quot;&#xD;
guid=&quot;_DdvcwBCQEdyJtJ3PbfdVDw&quot;>Rule Set&lt;/a>: The set of rules that are processed by the rule engine, and rule&#xD;
execution flow information.&#xD;
&lt;/div>&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;div class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt&quot;>&#xD;
an object set: The set of objects to be treated by rules.&#xD;
&lt;/div>&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
A rule engine is executing a cycle consisting of three action states: &lt;span style=&quot;mso-bidi-font-style: italic&quot;>match&#xD;
rules&lt;/span>, &lt;span style=&quot;mso-bidi-font-style: italic&quot;>select rules&lt;/span>, and &lt;span&#xD;
style=&quot;mso-bidi-font-style: italic&quot;>execute rules until there is no more rule to execute.&lt;/span>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The rule engine evaluates the conditions of rules in the ruleset against the objects to determine (match) which rules&#xD;
are eligible to be executed. During execution, the engine collects all eligible rules in an “agenda”.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The object set is referenced in the engine’s working memory, which also contains the current state of the objects which&#xD;
lead to the current rules in the agenda.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
All objects are examined by all rules. The effects of the execution are to create new data, or to modify existing&#xD;
ones.&lt;br />&#xD;
&lt;span style=&quot;mso-bidi-language: HE&quot;>The agenda&lt;/span> &lt;a id=&quot;6838&quot; name=&quot;6838&quot;>&lt;span lang=&quot;EN&quot;&#xD;
style=&quot;mso-ansi-language: EN&quot;>&lt;span style=&quot;mso-spacerun: yes&quot;>&amp;nbsp;&lt;/span>is a logical workspace where rule instances&#xD;
that have conditions matching objects in the working memory are put. There can be several rule instances for the same&#xD;
rule&lt;/span>&lt;/a>&lt;span lang=&quot;EN&quot; style=&quot;mso-ansi-language: EN&quot;>.&lt;/span> &lt;span style=&quot;mso-bidi-language: HE&quot;>When all the&#xD;
candidate rule are match the engine turns to the agenda for rule execution&lt;/span>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;span style=&quot;mso-bidi-language: HE&quot;>One execution mode is the RetePlus algorithm used to match many patterns with many&#xD;
objects, it helps to minimize the number of rules and conditions that need to be evaluated,&lt;/span> &lt;a id=&quot;5021&quot;&#xD;
name=&quot;5021&quot;>&lt;span lang=&quot;EN&quot; style=&quot;mso-ansi-language: EN&quot;>compute which rules should be executed, and identify in which&#xD;
order these rules should be fired&lt;/span>&lt;/a>&lt;span lang=&quot;EN&quot; style=&quot;mso-ansi-language: EN&quot;>.&lt;/span>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;span style=&quot;mso-bidi-language: HE&quot;>Rules engine is &lt;span style=&quot;mso-spacerun: yes&quot;>&amp;nbsp;&lt;/span>designed to be&#xD;
complete, and ensure that the effects of one rule execution (or firing) is propagated so that everything that can be&#xD;
inferred&lt;span style=&quot;mso-spacerun: yes&quot;>&amp;nbsp;&lt;/span> is done in one run.&lt;/span>&#xD;
&lt;/p>&lt;span&#xD;
style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-bidi-language: HE; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US&quot;>The&#xD;
power of rule engines comes from the fact that complex behaviors result from simple rules, this is known as rule chaining.&#xD;
There is a change in the programming mode for the developer point of view. There is no more static control structure of the&#xD;
program where function is calling one another, rules are “communicating” with other rule only by way of the data. This is a&#xD;
data change that trigger potential rule execution. Rule are not executed s&lt;/span> &lt;span&#xD;
style=&quot;FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-bidi-language: AR-SA; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US&quot;>sequentially&#xD;
and it is not always possible to determine through inspection of a set of rules which rule will be executed first or cause&#xD;
the inference engine to terminate.&lt;/span></mainDescription>
</org.eclipse.epf.uma:ContentDescription>