GeneralWhat is drools?
What happened to 1.0?
AlgorithmsWhat's Rete?Rete is an algorithm devised by Charles Forgy in the early 1980's to efficiently match conditions of rules when many objects are being observed by many rules. It's basically a structure to allow progressive relational joins across tables. What's Rete-OO?Rete-OO is Bob McWhirter's adaptation of Charles Forgy's original Rete algorithm, tailored for object-oriented constructs. The base algorithm is the same, but extra nodes in the network have been created. These nodes aide the binding to object-oriented semantics systems. How do the graphs differ?In Rete, all 1-input/1-output nodes were conditions which filtered passing tuples.
Rete-OO adds two other types of 1-input/1-output node: the parameter and extraction nodes. An object by itself constitutes a fact. The object may be unnamed and anonymous. The parameter nodes serve to create the initial tuple wrapper with a single column and then bind the object to the column. Parameter effectively act as the initial symbol-table populator so that rules have a named handle for accessing the object. The extraction nodes serve to model inter-object navigation and relationships. Given a single object, more information can be derived, or extracted , by following references to other objects. These nodes then store the extracted data in new column in the tuple.
SemanticsWhat's a Semantic Module?Rules are written against objects, but the concept of an 'object' is fairly arbitrary and completely customizable using Semantic Modules . A Java Semantic Module may regard any XML document simply as an object of type org.dom4j.Document , while an XML Semantic Module may differentiate between documents based upon their root element's name and namespace-uri. It's up to you. A SemanticModule simply aggregates and packages a collection of SemanticComponents . The semantic components simply define the concepts of "object type", "fact extraction" and "filter condition" that are used by the Rete-OO engine. What's a Semantic Componet?The Rete-OO algorithm works in terms of abstract interfaces to to various semantic-implying components, such as ObjectType , Condition and Extractor . Each semantic component has a very minimal interface that is implemented in order to inject application-specific semantics into the core algorithmic engine. |