001: /******************************************************************
002: * File: FRuleEngineI.java
003: * Created by: Dave Reynolds
004: * Created on: 11-Jun-2003
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: FRuleEngineI.java,v 1.9 2008/01/02 12:06:15 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.reasoner.rulesys.impl;
010:
011: import com.hp.hpl.jena.graph.Triple;
012: import com.hp.hpl.jena.reasoner.Finder;
013:
014: //import java.util.List;
015:
016: /**
017: * Rule engines implement the internals of forward rule inference
018: * graphs and the forward part of hybrid graphs. This interface
019: * abstracts the interface onto such engines to allow a graph to
020: * switch between direct and RETE style implementations.
021: *
022: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
023: * @version $Revision: 1.9 $ on $Date: 2008/01/02 12:06:15 $
024: */
025: public interface FRuleEngineI {
026:
027: /**
028: * Process all available data. This should be called once a deductions graph
029: * has be prepared and loaded with any precomputed deductions. It will process
030: * the rule axioms and all relevant existing exiting data entries.
031: * @param ignoreBrules set to true if rules written in backward notation should be ignored
032: * @param inserts the set of triples to be processed, normally this is the
033: * raw data graph but may include additional deductions made by preprocessing hooks
034: */
035: public void init(boolean ignoreBrules, Finder inserts);
036:
037: /**
038: * Process all available data. This version expects that all the axioms
039: * have already be preprocessed and the rules have been compiled
040: * @param inserts the set of triples to be processed, normally this is the
041: * raw data graph but may include additional deductions made by preprocessing hooks
042: */
043: public void fastInit(Finder inserts);
044:
045: /**
046: * Add one triple to the data graph, run any rules triggered by
047: * the new data item, recursively adding any generated triples.
048: */
049: public void add(Triple t);
050:
051: /**
052: * Remove one triple to the data graph.
053: * @return true if the effects could be correctly propagated or
054: * false if not (in which case the entire engine should be restarted).
055: */
056: public boolean delete(Triple t);
057:
058: /**
059: * Return the number of rules fired since this rule engine instance
060: * was created and initialized
061: */
062: public long getNRulesFired();
063:
064: /**
065: * Return true if the internal engine state means that tracing is worthwhile.
066: * It will return false during the axiom bootstrap phase.
067: */
068: public boolean shouldTrace();
069:
070: /**
071: * Set to true to enable derivation caching
072: */
073: public void setDerivationLogging(boolean recordDerivations);
074:
075: /**
076: * Access the precomputed internal rule form. Used when precomputing the
077: * internal axiom closures.
078: */
079: public Object getRuleStore();
080:
081: /**
082: * Set the internal rule from from a precomputed state.
083: */
084: public void setRuleStore(Object ruleStore);
085:
086: /**
087: * Compile a list of rules into the internal rule store representation.
088: * @param rules the list of Rule objects
089: * @param ignoreBrules set to true if rules written in backward notation should be ignored
090: * @return an object that can be installed into the engine using setRuleStore.
091: */
092: // public void compile(List rules, boolean ignoreBrules);
093: }
094:
095: /*
096: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
097: All rights reserved.
098:
099: Redistribution and use in source and binary forms, with or without
100: modification, are permitted provided that the following conditions
101: are met:
102:
103: 1. Redistributions of source code must retain the above copyright
104: notice, this list of conditions and the following disclaimer.
105:
106: 2. Redistributions in binary form must reproduce the above copyright
107: notice, this list of conditions and the following disclaimer in the
108: documentation and/or other materials provided with the distribution.
109:
110: 3. The name of the author may not be used to endorse or promote products
111: derived from this software without specific prior written permission.
112:
113: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
114: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
115: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
116: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
117: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
118: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
119: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
120: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
121: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
122: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
123: */
|