Ejemplo n.º 1
0
        private void RunVisio2003ImplicationProperties_3_0(bool strict)
        {
            using(Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-3_0" + (strict?"-strict":"") + ".vdx",
                                                             FileAccess.Read,
                                                             strict)) {

                CommonVisio2003ImplicationProperties(1, 5, va, false);

                foreach(Implication i in va.Implications) {
                    if (i.Label == "imp1") {
                        Assert.IsTrue(i.Deduction.HasFormula, "imp1: HasFormula");
                        Atom atom = (Atom)i.AtomGroup.Members[0];
                        Assert.IsTrue(atom.HasSlot, "Has Slot");

                        Assert.IsInstanceOfType(typeof(byte[]), atom.GetPredicateValue(1), "Typed predicate support");

                        Assert.IsInstanceOfType(typeof(Function), atom.Members[2], "Basic slot type predicate support");
                        Assert.AreEqual("Size", atom.SlotNames[2], "Basic slot name predicate support");

                        Assert.IsInstanceOfType(typeof(int), atom.GetPredicateValue(3), "Typed slot type predicate support");
                        Assert.AreEqual("Year", atom.SlotNames[3], "Typed slot name predicate support");
                        Assert.AreEqual(2006, atom.GetPredicate("Year").Value, "Typed slot value support");
                        break;
                    }
                }

                Assert.AreEqual(1, va.IntegrityQueries.Count, "Integrity Queries Count");
                Assert.AreEqual("iq1", va.IntegrityQueries[0].Label, "Integrity Query Label");

                Assert.AreEqual(2, va.Equivalents.Count, "Equivalents count");
                foreach(Equivalent equivalent in va.Equivalents) Assert.AreEqual("eq1", equivalent.Label, "Equivalent label");

                List<string> expected = new List<string>(new string[] {"own{?person,?stuff} == possess{?person,?stuff}", "own{?person,?stuff} == belong{?stuff,?person}"});
                foreach(Equivalent equivalent in va.Equivalents) {
                    Assert.IsTrue(expected.Contains(equivalent.ToString()), equivalent.ToString() + " found.");
                    expected.Remove(equivalent.ToString());
                }
            }
        }
Ejemplo n.º 2
0
        private void CommonVisio2003ImplicationProperties(int expectedQueryCount, int expectedImplicationCount, Visio2003Adapter va, bool onlyAssert)
        {
            Assert.AreEqual(expectedQueryCount, va.Queries.Count, "expectedQueryCount");

            foreach(Query q in va.Queries) {
              	if (q.Label == "q1") {
                    Assert.AreEqual(1, q.AtomGroup.AllAtoms.Count, "Count of query atoms");
              	}
            }

            Assert.AreEqual(expectedImplicationCount, va.Implications.Count, "expectedImplicationCount");

            foreach(Implication i in va.Implications) {
                if (i.Label == "imp1") {
                    Assert.AreEqual(70, i.Priority, "imp1: Priority");
                    Assert.AreEqual("imp2", i.Mutex, "imp1: Mutex");
                    Assert.AreEqual("imp3", i.Precondition, "imp1: Precondition");
                    Assert.AreEqual(ImplicationAction.Assert, i.Action, "imp1: Assert");
                }
                else if (i.Label == "imp2") {
                    Assert.AreEqual(20, i.Priority, "imp2: Priority");
                    Assert.AreEqual("imp1", i.Mutex, "imp2: Mutex");
                    Assert.AreEqual("imp3", i.Precondition, "imp2: Precondition");
                    Assert.AreEqual(onlyAssert?ImplicationAction.Assert:ImplicationAction.Retract, i.Action, "imp2: Retract");
                }
                else if (i.Label == "imp3") {
                    Assert.AreEqual(50, i.Priority, "imp3: Priority");
                    Assert.AreEqual(String.Empty, i.Mutex, "imp3: Mutex");
                    Assert.AreEqual(String.Empty, i.Precondition, "imp3: Precondition");
                    Assert.AreEqual(ImplicationAction.Assert, i.Action,  "imp3: Assert");
                }
                else if (i.Label == "imp4") {
                    Assert.AreEqual(50, i.Priority, "imp4: Priority");
                    Assert.AreEqual(String.Empty, i.Mutex, "imp4: Mutex");
                    Assert.AreEqual(String.Empty,i.Precondition,  "imp4: Precondition");
                    Assert.AreEqual(onlyAssert?ImplicationAction.Assert:ImplicationAction.Count, i.Action, "imp4: Count");
                }
                else if (i.Label == "imp5") {
                    Assert.AreEqual(50, i.Priority, "imp5: Priority");
                    Assert.AreEqual(String.Empty, i.Mutex, "imp5: Mutex");
                    Assert.AreEqual(String.Empty, i.Precondition, "imp5: Precondition");
                    Assert.AreEqual(onlyAssert?ImplicationAction.Assert:ImplicationAction.Modify, i.Action, "imp4: Modify");
                }
            }
        }
Ejemplo n.º 3
0
 public void Visio2003ImplicationProperties_2_2()
 {
     using(Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-2_2.vdx", FileAccess.Read)) {
         CommonVisio2003ImplicationProperties(0, 4, va, false);
     }
 }
Ejemplo n.º 4
0
 public void Visio2003ImplicationProperties_2_3()
 {
     using(Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-2_3.vdx", FileAccess.Read)) {
         CommonVisio2003ImplicationProperties(1, 5, va, false);
         foreach(Implication i in va.Implications) {
             if (i.Label == "imp1") {
                 Assert.IsTrue(i.Deduction.HasFormula, "imp1: HasFormula");
                 break;
             }
         }
     }
 }
Ejemplo n.º 5
0
            public void LoadRules()
            {
                // prepare the rule base adapter for reading the rule file
                string ruleFileFullPath = configurationFolder + Path.DirectorySeparatorChar + RuleFile;

                if (Logger.IsInferenceEngineVerbose)
                    Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose,
                                                   0,
                                                   "Loading rule file: "
                                                   + ruleFileFullPath
                                                   + " of format: "
                                                   + engineConfiguration.Rules.Format);

                IRuleBaseAdapter ruleBaseAdapter = null;

                switch(engineConfiguration.Rules.Format) {
                    case RulesFormat.HRF086:
                        ruleBaseAdapter = new HRF086Adapter(ruleFileFullPath, FileAccess.Read);
                        break;

                    case RulesFormat.RuleML08Datalog:
                        ruleBaseAdapter = new RuleML08DatalogAdapter(ruleFileFullPath, FileAccess.Read);
                        break;

                    case RulesFormat.RuleML086Datalog:
                        ruleBaseAdapter = new RuleML086DatalogAdapter(ruleFileFullPath, FileAccess.Read);
                        break;

                    case RulesFormat.RuleML086NafDatalog:
                        ruleBaseAdapter = new RuleML086NafDatalogAdapter(ruleFileFullPath, FileAccess.Read);
                        break;

                    case RulesFormat.RuleML09NafDatalog:
                        ruleBaseAdapter = new RuleML09NafDatalogAdapter(ruleFileFullPath, FileAccess.Read);
                        break;

                    case RulesFormat.Visio2003:
                        ruleBaseAdapter = new Visio2003Adapter(ruleFileFullPath, FileAccess.Read);
                        break;
                }

                // estimate if a binder is present
                if (engineConfiguration.Binder != null) {
                    if (engineConfiguration.Binder is CSharpBinderConfiguration) {
                        CSharpBinderConfiguration cSharpBinderConfiguration = (CSharpBinderConfiguration)engineConfiguration.Binder;
                        binderFile = cSharpBinderConfiguration.File;

                        if (Logger.IsInferenceEngineVerbose)
                            Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose,
                                                           0,
                                                           "Using CSharp binder file: "
                                                           + binderFile);

                        // we load the binder code in a string and then compile it: this method is more reliable than
                        // providing a file path directly
                        using (StreamReader sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) {
                            engine.LoadRuleBase(ruleBaseAdapter,
                                                CSharpBinderFactory.LoadFromString(cSharpBinderConfiguration.Class, sr.ReadToEnd()));
                        }
                    }
                    else if (engineConfiguration.Binder is VisualBasicBinderConfiguration) {
                        VisualBasicBinderConfiguration visualBasicBinderConfiguration = (VisualBasicBinderConfiguration)engineConfiguration.Binder;
                        binderFile = visualBasicBinderConfiguration.File;

                        if (Logger.IsInferenceEngineVerbose)
                            Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose,
                                                           0,
                                                           "Using Visual Basic binder file: "
                                                           + binderFile);

                        // we load the binder code in a string and then compile it: this method is more reliable than
                        // providing a file path directly
                        using (StreamReader sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) {
                            engine.LoadRuleBase(ruleBaseAdapter,
                                                VisualBasicBinderFactory.LoadFromString(visualBasicBinderConfiguration.Class, sr.ReadToEnd()));
                        }
                    }
                    else if (engineConfiguration.Binder is NxBRE.InferenceEngine.Registry.FlowEngineBinderConfiguration) {
                        NxBRE.InferenceEngine.Registry.FlowEngineBinderConfiguration flowEngineBinderConfiguration = (NxBRE.InferenceEngine.Registry.FlowEngineBinderConfiguration)engineConfiguration.Binder;
                        binderFile = flowEngineBinderConfiguration.File;

                        if (Logger.IsInferenceEngineVerbose)
                            Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose,
                                                           0,
                                                           "Using FlowEngine binder file: "
                                                           + binderFile);

                        engine.LoadRuleBase(ruleBaseAdapter,
                                            new NxBRE.InferenceEngine.IO.FlowEngineBinder(configurationFolder + Path.DirectorySeparatorChar + binderFile, flowEngineBinderConfiguration.Type));
                    }
                    else {
                        throw new BREException("Unexpected type of binder object in registry configuration: " + engineConfiguration.Binder.GetType().FullName);
                    }
                }
                else {
                    // no binder specified
                    binderFile = null;
                    engine.LoadRuleBase(ruleBaseAdapter);
                }
            }