<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Lightweight Architecture of an ECA Rule Engine for Web Browsers</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Emilian Pascalau</string-name>
          <email>emilian.pascalau@hpi.uni-potsdam.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Adrian Giurca</string-name>
          <email>giurca@tu-cottbus.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Brandenburg University of Technology</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Hasso Plattner Institute</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>There is a large literature concerning rule engines (forward chaining or backward chaining). During the last thirty years there were various proposals such as RETE, TREAT and the derived Gator algorithm. Signi cantly, RETE was embedded into various expert systems such as Clips and its successor Jess, and Drools including in a number of commercial rule engines and was extended various times including with support for ECA rules. However, none of them is able to directly process DOM Events. The goal of this paper is to present the architecture of a forward chaining Event-Condition-Action (ECA) rule engine capable to handle Document-Object-Model Events. This architecture is instantiated into a JavaScript-based rule engine working with JSON rules.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Motivation</title>
      <p>
        There is a large literature concerning rule engines (forward chaining or backward
chaining). During the last thirty years there were various proposals such as
RETE [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], TREAT [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] and the Gator algorithm [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] which is derived from the
other two. Signi cantly, RETE was embedded into various expert systems such
as Clips and its successor Jess[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], and Drools [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. RETE [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] was extended various
times including with support for ECA rules [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        However, none of them is able to directly process DOM Events. The goal
of this paper is to present the architecture of a forward chaining ECA rule
engine capable to handle Document-Object-Model Events. This architecture is
instantiated into a JavaScript-based rule engine working with JSON rules [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>
        The main goals this design should address are:
{ to move the reasoning process to the client-side resulting in reduced network
tra c and faster response;
{ to handle complex business work ows;
{ information can be fetched and displayed in anticipation of the user response;
{ pages can be incrementally updated in response to the user input, including
the usage of cached data;
{ to o er support for intelligent user interfaces;
{ enable users to collaborate and share information on the WWW through
real-time communication channels (rule sharing and interchange);
Complex event processing (CEP), is a methodology of processing events
taking into consideration processing multiple events with the goal of identifying
the meaningful events within a speci c time-frame or event cloud. CEP employs
techniques such as detection of complex patterns, event correlation, event
abstraction, event hierarchies, and relationships between events such as causality,
membership, and timing, and event-driven processes. A number of projects were
developed in the last ten years on these issues. However, there is one event
ontology which o ers large opportunities to be exploited in the context of actual
technologies such as Asynchronous JavaScript and XML (AJAX) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] allowing the
development of intelligent Rich Internet Applications (RIAs) i.e. web
applications that typically run in a web browser, and do not require software installation
([
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]) - The Document Object Model Events (DOM Events). This event ontology1
provides a large amount of events types designed with two main goals: (1) the
design of an event system allowing registration of event listeners and describing
event ow through a tree structure (the DOM), and (2) de ning standard
modules of events for user interface control and noti cations of document mutation,
including de ned contextual information for each of these event modules.
      </p>
      <p>This ontology is already implemented into browsers giving extremely
powerful capabilities to RIAs which use it. Nowadays, several Web 2.0 applications
use heavily AJAX in order to provide desktop-like behavior to the user. The
number of RIAs is increasing because of the broad bandwidth of today's
Internet connections, as well as the availability of powerful and cheap personal
computers. However, traditional ways of programming Internet applications no
longer meet the demands of intelligent (rule-enabled) RIAs. For example a highly
responsive Web 2.0 application such as Google Mail, can be much easily
personalized/customized using rules towards a declarative description of its behavior.</p>
      <p>Implementing intelligent RIAs require reasoning possibilities inside the
browser. In addition, using Event-Condition-Action (ECA) Rules to represent
knowledge unveils the opportunity to design and run rule-based applications in
the browser.
2</p>
      <p>The Architecture of an ECA Rule Engine for Web
Browsers
2.1</p>
      <sec id="sec-1-1">
        <title>The Components View</title>
        <p>As depicted in Figure 1, the complete system comprises the Event Manager,
Rule Repository, Inference Engine and Working Memory.</p>
        <p>
          The main design goal of this architecture was to comply with the principles
of Software as a Service (SaaS) architectures [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. Therefore, the main capabilities
considered in this design were:
{ Distributed Architecture - all these components can act in di erent network
locations.
1 http://www.w3.org/TR/DOM-Level-3-Events/
        </p>
        <sec id="sec-1-1-1">
          <title>EventManager InferenceEngine</title>
        </sec>
        <sec id="sec-1-1-2">
          <title>RulesRepository</title>
        </sec>
        <sec id="sec-1-1-3">
          <title>WorkingMemory</title>
          <p>{ Event-driven architecture - We emphasize that both human agents and
software agents interact with this architecture by creating events i.e. the
reasoning is event driven. Moreover, the architecture instantiation gets translated
into a full event driven engine.</p>
          <p>This architecture is a live system i.e. an event-based system that is reactive
and proactive. It is reactive because it reacts based on the events it receives.
It is proactive because by itself generates events, that can be consumed also by
other entities being part of the whole system.
2.2</p>
        </sec>
      </sec>
      <sec id="sec-1-2">
        <title>The Working Memory</title>
        <p>
          In the database community the main goal of designing ECA engines was to
provide generic functionality independent from the actual languages and semantics
of event detection, queries, and actions (see for example, [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] and [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]). However,
two main issues make the di erence: (a) in the case of an ECA architecture the
Working Memory besides the usual standard facts it contains also event-facts
and (b) the distinction between facts and event-facts is that the last ones are
immediately consumed while traditionally facts are kept until speci c deleting
actions are performed.
2.3
        </p>
      </sec>
      <sec id="sec-1-3">
        <title>The Event Manager</title>
        <p>
          During the last years there is an intense work either on de ning design patterns
for complex event processing [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] or theoretical work on how
Event-ConditionAction rules can be combined with event algebras for speci cation of the event
part [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
        </p>
        <p>Our goal is to provide a light Event Manager capable to process faster simple
events without duration. Particularly, this architecture must handle DOM Level
3 Events. However, the extension points in the Event Manager make possible
future extensions for complex events processing if we will be able to provide
motivating use cases.</p>
        <p>Basically the Event Manager (depicted in Figure 2) has an event vocabulary
and listen for events. Its main activity is to create an event queue to be processed
by the inference engine.</p>
        <p>Inference</p>
        <p>Engine
Consumed
events</p>
        <p>WM events
ActionProcessor
events</p>
        <p>resetEventQueue
listenForWMEvents
addEventToQueue
consumeActionProcessorEvents</p>
        <p>The Event Manager keeps on catching Working Memory (WM) event-facts
and stores them in an event queue. In addition, it listens for two internal Action
Processor messages:
{ busy - The Event Manager keeps on catching WM events and storing them
in the working queue of events.
{ idle - The Action Processor informs that it is not working right now. The
Event Manager pro-actively takes control and send its own message to the
Inference Engine with the actual working queue of events. Each time an
event is caught by the Event Manager it tries to nd out about the state of
the Action Processor. If there is no new message from the Action Processor it
keeps going on based on its actual knowledge of the Action Processor state.
It changes its knowledge when it receives a new message from the Action
Processor.</p>
        <p>Finally, the manager handles the inference engine consumed events. Our
model looks for mandatory handling of engine consumed events as the default
mechanism to achieve the event consumption. Therefore if there are events which
are not processed/consumed by the inference engine they are kept by the
manager on its lifetime or until they are consumed by rules.
2.4</p>
      </sec>
      <sec id="sec-1-4">
        <title>The Inference Engine</title>
        <p>Our goal were not to use RETE and its variants (although in uences exist)
but to build a lightweight engine. Our goals were not to embed strong e cient
execution algorithms rather to o er a simple, extensible and fast rule execution
engine. All these design goals were coming from our main goal: running rules in
the Web browser.</p>
        <p>receiveEventsQueue
EventManager
events queue
extractEvent
noMoreEvents</p>
        <p>sendActions
action queue</p>
        <p>yes
addAction
extractRule
Consumed Events</p>
        <p>noRules</p>
        <p>
          The basic activities inside the Inference Engine (see the Figure 3) are to
consume events (from the events queue delivered by the Event Manager ) match rule
conditions (match) and deliver action queue to the Action Processor (sendActions).
Despite other architectures where the actions are consumed inside the inference
engine, we decided for a separate component since the Action Processor is not
just a blind action executor but is able to perform various consistency checks
after it has received its queue of actions. The rules intended to be handled by
this architecture are JSON Rules [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] (see 1 for a small rule example) which
provide priorities for handling rule order execution. Our engine does not provide
any con ict resolution mechanism i.e. does not handle any speci city, recency or
refractoriness principles, but it can be extended to support such mechanisms.
Finally the engine has no formal semantics such as other expert systems paradigms
[
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. The syntax of a JSON rule is similar to JSON notation.
        </p>
        <p>Example 1 (JSON Rule example).
{"id": "rule101",
"appliesTo": ["http://mail.yahoo.com/"],
"eventExpression": {"type": "click",
"target": "$X"
},
"condition": [
}</p>
        <p>],
"actions":["append($X.textContent)"]
2.5</p>
      </sec>
      <sec id="sec-1-5">
        <title>The Rules Repository</title>
        <p>"$X:HTMLAnchorElement($hrefVal:href)",
"new RegExp(/showMessage\?fid=Inbox/).test($hrefVal)"
As we already know, the purpose of business rules repositories is to support the
business rule information needs of all the rule owners in a business rules-based
approach in the initial development of systems and their lifetime enhancement.
Speci cally, the purpose of a business rules repository is to provide: (a) Support
for the rule-related requirements of all business, (b) Query and reporting
capability for impact analysis, traceability and business rule reuse including web-based
publication and (c) Security for the integrity of business rule and rule-related
information.</p>
        <p>
          Parts of our previous work (see for example, [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]) introduced the architecture
of such a registry. Basically, inside this architecture, the Rules Repository is
responsible to handle loading and deploying of rule sets.
3
        </p>
        <p>
          JSON Rules - Architecture Instantiation
We introduce the instantiation of our architecture in the JSON Rules context.
Recall from [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] that JSON Rules where introduced and de ned to tackle a
particular environment which is the Web Browser. While the rst part of this
work addresses the architectural issues from the Platform-Independent Model
(PIM) [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] perspective, this part addresses it from the Platform-speci c
Model (PSM) perspective.
        </p>
        <p>
          According to the reference architecture for Web Browsers introduced in [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]
the system introduced here nds itself as part of the Rendering Engine. In the
general perspective the JSON Rules engine will come as part of the accessed
resource.
        </p>
        <p>
          In the case of the Mozilla 2 browser's architecture [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] the system might be
either part of the Rendering Engine or part of the UI Toolkit (XPFE3 - Mozilla's
cross-platform front end) if the system is packed as a browser add-on. The second
approach gives greater exibility since the UI of Mozilla browsers is XML based
and as such uses an extended version of the rendering engine used to display the
content of a speci ed resource. Based on this the JSON Rules engine introduced
here seams quite feasible to be used to change also the UI and behavior of the
browser itself.
        </p>
        <p>The general components view depicted in Figure 1 gets instantiated in the
JSON Rules context as depicted in Figure 4.</p>
        <p>
          Depicted in Figure 4 are the main packages of the JSON Rules engine. While
the engine and repository packages are self explanatory to some extent lang
package contains all the JSON Rules language entities. The utils package
contains entities dealing with di erent aspects such as: JSON parsing, or object
introspection and so on. The io package provides the necessary entities
managing IO operations. The engine package contains the following sub-packages:
eventmanager, actionprocessor, and matcher. The general ow of the whole
system is described in the Figure 5 (initially introduced in [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]).
util
uses
uses
engine
repository
        </p>
        <p>io</p>
        <p>WorkingMemory</p>
        <p>FireEvents
ComputePossibleRulesToFire</p>
        <p>InformOfEvents
FireRules</p>
        <p>ChangeWorkingMemory
The MainSystem (Figure 6) is the interface through which the inference engine
is accessed. As seen in the Figure 6 the only mandatory input is an Uniform
Resource Identi er (URI) pointing towards a rule repository, from where rules
will be loaded.
2 http://www.mozilla.com/
3 http://www.mozilla.org/xpfe/
m
e
t
s
y
S
n
i
a
M</p>
        <p>run</p>
        <p>Although not concretely depicted here through this interface a user could also
specify other settings such as di erent event type for which the event manager
should listen for.</p>
        <p>Having speci ed a repository location the MainSystem performs the run
activity.</p>
        <p>The lifetime of the rule engine is in the scope of the lifetime of the current
DOM inside the browser. Using the engine is simple. Firstly one must load the
engine e.g. this
&lt;script type="text/javascript"</p>
        <p>src="http://www.domain.com/jsonRulesEngine_Version.js"&gt;
&lt;/script&gt;.</p>
        <p>Secondly one must create an instance of the engine, for example:
var jsonRulesEngine=new org.jsonrules.JSONRulesMainSystem();
Having the engine instantiated, it is now possible to run it by calling run() with
the URI of location of the repository as input parameter:</p>
        <p>In a basic application the main steps that happen are:
{ When an event is raised, the EventManager catches that event. Then the</p>
        <p>EventManager checks the ActionProcessor's state.
{ If the ActionProcessor is running, then EventManager stores the event in
the queue of events that the InferenceEngine must later on process.
{ However if the ActionProcessor is idle then the EventManager sends a
message to the InferenceEngine containing the queue of events that must be
processed. The InferenceEngine responds back to the EventManager, and
informs it that it has received/consumed the queue such that the EventManager
can reset its own queue.
{ Events are processed one by one. For each event rules triggered by that
event will be matched against the WorkingMemory. The action of each
executable rule is added to the list of executable actions (to be processed by
the ActionProcessor) according with possible priority of rules.
{ The list of executable actions it is send to the ActionProcessor, to execute
them.
3.2</p>
      </sec>
      <sec id="sec-1-6">
        <title>Working Memory</title>
        <p>
          As already introduced in [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] the WorkingMemory consists of the loaded DOM
for the current active resource. Recall that by resource we mean the content
which a browser loads in the form of a DOM representation from a speci ed
URI. WorkingMemory facts are based on the DOM content. Moreover, in the
context of our architecture, WorkingMemory is driven by events and contains
event-facts. This type of behavior is imposed by the event-based nature of the
DOM.
3.3
        </p>
      </sec>
      <sec id="sec-1-7">
        <title>Event Manager</title>
        <p>In addition to DOM Level 3 Events, the DOM speci cation provides the
necessary interfaces through which an user-de ned event can be created. However, in
general, DOM events are simple events even though users could create their own
events. There is also the possibility to use and de ne complex events by means
of user de ned APIs such as Yahoo YUI4, Dojo toolkit5 etc. To deal with such
user de ned APIs the EventManager uses the concept of adapter. An adapter
can be written for each API and in this way events de ned using those APIs
could also be tackled by the EventManager.</p>
        <p>Another signi cant aspect of the browser based instantiation is that the whole
ow is by nature sequential. Actual browsers' JavaScript engines are sequential,
and because of this, so is the whole engine introduced here. However in the
eventuality of a browser with capabilities to run parallel JavaScript tasks then
the general architecture could be instantiated following the ability to run parallel
tasks.</p>
      </sec>
      <sec id="sec-1-8">
        <title>3.4 Inference Engine</title>
        <p>
          While a more detailed perspective on rule repositories has been already
introduced in [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] here we use a simpli ed version of that. Rules de ned in the
repos4 http://developer.yahoo.com/yui/
5 http://www.dojotoolkit.org/
y
r
o
m
e
M
g
n
i
k
r
o
W
m
e
t
s
y
S
n
i
a
M
y
r
o
it
s
o
p
e
R
e
l
u
R
m
e
t
s
y
S
n
i
a
M
e
n
i
g
n
E
e
c
n
e
r
e
f
n
        </p>
        <p>I
repositoryURI
page
page</p>
        <p>run
instantiateInferenceEngine
itory refer to a speci c URI. This means that a speci c rule can be used in the
context of a speci c resource. Rules referring to the same URI are grouped in
rule sets.</p>
        <p>Figure 8 depicts the interaction between the MainSystem and the
RuleRepository. Basically, the MainSystem triggers a RuleRepository instance.
The repository loads the rules from the repositoryURI speci ed location.
Readers may notice that the repository might contain rules that do not refer to the
current active resource. As such the MainSystem requests the URI of the
current resource from the WorkingMemory. Based on that URI it requests from the
repository the rule set referring to the current resource. Finally, based on this
information (i.e. the URI of the current resource and the rule set associated) the
MainSystem creates a Page object which will be used by the InferenceEngine.
4</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Conclusion</title>
      <p>This paper describes the general architecture of an ECA rule-based and forward
chaining engine for web browsers. The design of such an engine derives from the
goal to perform intelligent RIAs. The instantiation of the architecture results
in a JavaScript-based ECA rule engine capable to load and execute ECA rule
sets in the browser. This way we achieve a main goal: Implementing intelligent
RIAs require reasoning possibilities inside the browser. The next steps related to
this research are: (1) to investigate the capabilities of this engine to handle
rulebased mashups on the Web and (2) to analyze scalability of the engine against
the main browsers.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Jeremy</given-names>
            <surname>Allaire</surname>
          </string-name>
          .
          <article-title>Macromedia Flash MXA next-generation rich client</article-title>
          . http://www. adobe.com/devnet/flash/whitepapers/richclient.pdf,
          <year>March 2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Erik</given-names>
            <surname>Behrends</surname>
          </string-name>
          , Oliver Fritzen, Wolfgang May, and
          <string-name>
            <given-names>Franz</given-names>
            <surname>Schenk</surname>
          </string-name>
          .
          <article-title>Embedding Event Algebras and Process for ECA Rules for the Semantic Web</article-title>
          .
          <source>Fundamenta Informaticae</source>
          ,
          <volume>82</volume>
          (
          <issue>3</issue>
          ):
          <volume>237</volume>
          {
          <fpage>263</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Erik</given-names>
            <surname>Behrends</surname>
          </string-name>
          , Oliver Fritzen, Wolfgang May, and
          <string-name>
            <given-names>Daniel</given-names>
            <surname>Schubert</surname>
          </string-name>
          .
          <article-title>An ECA Engine for Deploying Heterogeneous Component Languages in the Semantic Web</article-title>
          .
          <source>In Current Trends in Database Technology - EDBT Worshops</source>
          , pages
          <volume>887</volume>
          {
          <fpage>898</fpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Keith</given-names>
            <surname>Bennett</surname>
          </string-name>
          , Paul Layzell, David Budgen,
          <string-name>
            <given-names>Pearl</given-names>
            <surname>Brereton</surname>
          </string-name>
          , Linda Macaulay, and
          <string-name>
            <given-names>Malcolm</given-names>
            <surname>Munro</surname>
          </string-name>
          .
          <article-title>Service-Based Software: The Future for Flexible Software</article-title>
          .
          <source>In Proceedings of the Seventh Asia-Paci c Software Engineering Conference (APSEC2000)</source>
          , pages
          <fpage>214</fpage>
          {
          <fpage>221</fpage>
          . IEEE Computer Society,
          <year>2000</year>
          . http: //www.bds.ie/Pdf/ServiceOriented1.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Bruno</given-names>
            <surname>Berstel</surname>
          </string-name>
          .
          <article-title>Extending the RETE Algorithm for Event Management</article-title>
          .
          <source>In TIME</source>
          , pages
          <volume>49</volume>
          {
          <fpage>51</fpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Charles</given-names>
            <surname>Forgy</surname>
          </string-name>
          .
          <article-title>Rete { A Fast Algorithm for the Many Pattern / Many Object Pattern Match Problem</article-title>
          .
          <source>Arti cial Intelligence</source>
          ,
          <volume>19</volume>
          :
          <fpage>17</fpage>
          {
          <fpage>37</fpage>
          ,
          <year>1982</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>E.</given-names>
            <surname>Friedman-Hill</surname>
          </string-name>
          .
          <article-title>Jess The Rule Engine for the Java Platform</article-title>
          . http://www. jessrules.com/jess/docs/Jess71p2.pdf,
          <year>November 2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Jesse</given-names>
            <surname>James Garrett. Ajax</surname>
          </string-name>
          :
          <article-title>A new approach to web applications</article-title>
          . http://www. adaptivepath.com/ideas/essays/archives/000385.php,
          <year>February 2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Dragan</given-names>
            <surname>Gasevic</surname>
          </string-name>
          , Dragan Djuric, and
          <string-name>
            <given-names>Vladan</given-names>
            <surname>Devedzic</surname>
          </string-name>
          .
          <source>Model Driven Architecture and Ontology Development</source>
          . Springer Verlag,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>A.</given-names>
            <surname>Giurca</surname>
          </string-name>
          and
          <string-name>
            <given-names>E. Pascalau. JSON</given-names>
            <surname>Rules</surname>
          </string-name>
          .
          <source>In Proceedings of the Proceedings of 4th Knowledge Engineering and Software Engineering</source>
          ,
          <string-name>
            <surname>KESE</surname>
          </string-name>
          <year>2008</year>
          , volume
          <volume>425</volume>
          , pages
          <fpage>7</fpage>
          <lpage>{</lpage>
          18. CEUR Workshop Proceedings,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>Alan</given-names>
            <surname>Grosskurth</surname>
          </string-name>
          and
          <string-name>
            <given-names>Michael W.</given-names>
            <surname>Godfrey</surname>
          </string-name>
          .
          <article-title>A Reference architecture for web browsers</article-title>
          .
          <source>In Proceedings of the 21st IEEE international conference on software maintenance (ICSM'05)</source>
          , page 661664. IEEE Computer Society,
          <year>2005</year>
          . http: //grosskurth.ca/papers/browser-archevol-
          <volume>20060619</volume>
          .pdf.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12. Object Management Group.
          <source>MDA Guide Version 1.0</source>
          .1. http://www.omg.org/ docs/omg/03-06-01.pdf,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. E. Hanson and
          <string-name>
            <given-names>M.</given-names>
            <surname>Hasan</surname>
          </string-name>
          . Gator:
          <article-title>An optimized discrimination network for active database rule condition testing</article-title>
          .
          <source>Technical report</source>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>Antoni</given-names>
            <surname>Ligeza</surname>
          </string-name>
          .
          <article-title>Logical Foundations for Rule-Based Systems</article-title>
          , volume
          <volume>11</volume>
          <source>of Studies in Computational Intelligence. Springer Verlag, 2nd edition edition</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>D.</given-names>
            <surname>Miranker</surname>
          </string-name>
          .
          <article-title>Treat: A better match algorithm for AI production systems</article-title>
          .
          <source>In Proceedings of the AAAI'87 Conference</source>
          ,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>Emilian</given-names>
            <surname>Pascalau</surname>
          </string-name>
          and
          <string-name>
            <given-names>Adrian</given-names>
            <surname>Giurca</surname>
          </string-name>
          .
          <article-title>Towards enabling SaaS for Business Rules</article-title>
          .
          <source>In Business Process, Services Computing and Intelligent Service</source>
          , pages
          <volume>207</volume>
          {
          <fpage>222</fpage>
          ,
          <year>2009</year>
          . http://bpt.hpi.uni-potsdam.de/pub/Public/EmilianPascalau/ism2009.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>Adrian</given-names>
            <surname>Paschke</surname>
          </string-name>
          .
          <article-title>Design Patterns for Complex Event Processing</article-title>
          . CoRR, abs/0806.1100,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>Mark</given-names>
            <surname>Proctor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Michael</given-names>
            <surname>Neale</surname>
          </string-name>
          , Michael Frandsen,
          <source>Sam Gri th Jr</source>
          .,
          <string-name>
            <surname>Edson</surname>
            <given-names>Tirelli</given-names>
          </string-name>
          , Fernando Meyer, and Kris Verlaenen.
          <source>Drools 4.0</source>
          .7. http://downloads.jboss. com/drools/docs/4.0.7.19894.GA/html_single/index.html.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Marco</surname>
          </string-name>
          <article-title>Seirio</article-title>
          and
          <string-name>
            <given-names>Mikael</given-names>
            <surname>Berndtsson</surname>
          </string-name>
          .
          <article-title>Design and Implementation of an ECA Rule Markup Language</article-title>
          . In RuleML, pages
          <volume>98</volume>
          {
          <fpage>112</fpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>