示例#1
0
 /// <summary>
 /// Construct Fact
 /// </summary>
 /// <param name="ID"></param>
 /// <param name="xPath"></param>
 /// <param name="valueType"></param>
 /// <param name="modelId"></param>
 /// <param name="parent"></param>
 //[System.Diagnostics.DebuggerHidden]
 public Fact(string ID, int priority, string xPath, Type valueType, string modelId)
     : base(ID, priority)
 {
     //xml
     IEvidenceValue x = new Xml(xPath, valueType, modelId);
     EvidenceValue = x;
 }
示例#2
0
        public void node2()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model   = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address", typeof(XmlNode), modelname);
            RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/dis", typeof(XmlNode), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;
            y.Changed     += Changed;
            y.ModelLookup += ModelLookup;
            x.Evaluate();
            y.Evaluate();

            //change the value and see if it was updated
            changed = false;
            x.Value = y.Value;

            Assert.AreEqual("dis", ((XmlNode)x.Value).Name);
            Assert.AreEqual(true, changed);
        }
示例#3
0
        public void clone1()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model   = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            Assert.Equal("Joe", x.Value);
            Assert.Equal(true, changed);

            //clone
            RuleEngine.Evidence.EvidenceValue.Xml y = (RuleEngine.Evidence.EvidenceValue.Xml)x.Clone();
            y.Changed     += Changed;
            y.ModelLookup += ModelLookup;

            //change the model, update this xpath expression.
            changed = false;
            model["person"]["firstname"].InnerText = "bob";
            y.Evaluate();

            Assert.Equal(true, changed);
            Assert.Equal("bob", (string)y.Value);
        }
示例#4
0
        public void modelupdate1()
        {
            //init variables
            modelname = "xml.xml";
            changed   = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;

            //init model
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            x.Evaluate();

            Assert.Equal(true, changed);
            Assert.Equal("Joe", (string)x.Value);

            //change the model, dont update this xpath expression.
            changed = false;
            model["person"]["address"].InnerText = "bob";
            x.Evaluate();

            Assert.Equal(false, changed);
            Assert.Equal("Joe", (string)x.Value);
        }
示例#5
0
        public void boolean1()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/attribute::node()[name(.)='optional']", typeof(bool), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            Assert.AreEqual(true, x.Value);
            Assert.AreEqual(true, changed);
        }
示例#6
0
        public void boolean1()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model   = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/attribute::node()[name(.)='optional']", typeof(bool), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            Assert.Equal(true, x.Value);
            Assert.Equal(true, changed);
        }
示例#7
0
        public void string3()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model   = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname", typeof(string), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            Assert.Equal("Joe", x.Value);
            Assert.Equal(true, changed);
        }
示例#8
0
        public void boolean6()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model   = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/@optional", typeof(bool), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            //change the value and see if it was updated
            changed = false;
            x.Value = false;

            Assert.Equal(false, x.Value);
            Assert.Equal(true, changed);
        }
示例#9
0
        public void double8()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model   = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/pin/attribute::node()[name(.)='id']", typeof(double), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            //change the value and see if it was updated
            changed = false;
            x.Value = 555;

            Assert.Equal(555, x.Value);
            Assert.Equal(true, changed);
        }
示例#10
0
        public void modelUpdate3()
        {
            //init variables
            modelname = "xml.xml";
            changed   = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            x.Changed     += Changed;
            x.ModelLookup += ModelLookup;

            RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            y.Changed     += Changed;
            y.ModelLookup += ModelLookup;

            //init model
            XmlDocument doc = new XmlDocument();

            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            x.Evaluate();
            y.Evaluate();
            changed = false;

            x.Value = "JOEJOE";

            Assert.True((string)x.Value == "JOEJOE");
            Assert.True((string)y.Value != "JOEJOE");

            if (changed)
            {
                x.Evaluate();
                y.Evaluate();
            }

            Assert.True((string)x.Value == "JOEJOE");
            Assert.True((string)y.Value == "JOEJOE");
        }
示例#11
0
        private static void LoadFacts(ROM rom, XmlDocument document)
        {
            XmlNodeList facts = document.SelectNodes("RuleEngine/Facts//Fact");

            foreach (XmlNode factNode in facts)
            {
                string id = factNode.Attributes["id"].Value;
                string type = factNode.Attributes["type"].Value;
                string desc = factNode.Attributes["desc"].Value;
                string modelId = factNode.Attributes["modelId"].Value;
                Type valueType = null;

                //ensure same rule wont be entered twice
                if (rom[id]!=null)
                    throw new Exception("Fact has already been loaded: " + id);

                //determine priority
                int priority = 500;
                if (factNode.Attributes["priority"]!=null)
                    priority = Int32.Parse(factNode.Attributes["priority"].Value);

                IFact fact = null;
                if (factNode["xpath"].InnerText != String.Empty)
                {
                    //determine xpath
                    string xpath = factNode["xpath"].InnerText;

                    //determine value type
                    switch (type) //deterrmine the type of value returned by xpath
                    {
                        case "double":
                            valueType = typeof(double);
                            break;
                        case "boolean":
                            valueType = typeof(bool);
                            break;
                        case "string":
                            valueType = typeof(string);
                            break;
                        default:
                            throw new Exception("Invalid type: " + id + " " + type);
                    }

                    //determine value
                    Xml x = new Xml(xpath, valueType, modelId);

                    //create fact and add it to the rom
                    fact = new Fact(id, priority, xpath, valueType, modelId);
                }
                else
                {
            /*
                    //determine value type
                    switch (type) //deterrmine the type of value returned by xpath
                    {
                        case "double":
                            valueType = typeof(double);
                            break;
                        case "boolean":
                            valueType = typeof(bool);
                            break;
                        case "string":
                            valueType = typeof(string);
                            break;
                        default:
                            throw new Exception("Invalid type: " + id + " " + type);
                    }

                    //determine value
                    Naked x = new Naked(value, valueType);

                    //create fact and add it to the rom
                    fact = new Fact(id, priority, valueType,);
             */
                }

                rom.AddEvidence(fact);
            }
        }
示例#12
0
 /// <summary>
 /// 
 /// </summary>
 /// <returns></returns>
 //[System.Diagnostics.DebuggerHidden]
 public object Clone()
 {
     Xml xml = new Xml(xPath, valueType, modelId);
     return xml;
 }
示例#13
0
        public void double8()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/pin/attribute::node()[name(.)='id']", typeof(double), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            //change the value and see if it was updated
            changed = false;
            x.Value = 555;

            Assert.AreEqual(555, x.Value);
            Assert.AreEqual(true, changed);
        }
示例#14
0
        public void string6()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address/@optional", typeof(string), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            //change the value and see if it was updated
            changed = false;
            x.Value = "false";

            Assert.AreEqual("false", x.Value);
            Assert.AreEqual(true, changed);
        }
示例#15
0
        public void string3()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname", typeof(string), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;
            x.Evaluate();

            Assert.AreEqual("Joe", x.Value);
            Assert.AreEqual(true, changed);
        }
示例#16
0
        public void node2()
        {
            modelname = "xml.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/address", typeof(XmlNode), modelname);
            RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/dis", typeof(XmlNode), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;
            y.Changed += Changed;
            y.ModelLookup += ModelLookup;
            x.Evaluate();
            y.Evaluate();

            //change the value and see if it was updated
            changed = false;
            x.Value = y.Value;

            Assert.AreEqual("dis", ((XmlNode)x.Value).Name );
            Assert.AreEqual(true, changed);
        }
示例#17
0
        public void modelUpdate3()
        {
            //init variables
            modelname = "xml.xml";
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;

            RuleEngine.Evidence.EvidenceValue.Xml y = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            y.Changed += Changed;
            y.ModelLookup += ModelLookup;

            //init model
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            x.Evaluate();
            y.Evaluate();
            changed = false;

            x.Value = "JOEJOE";

            Assert.IsTrue((string)x.Value == "JOEJOE");
            Assert.IsTrue((string)y.Value != "JOEJOE");

            if (changed)
            {
                x.Evaluate();
                y.Evaluate();
            }

            Assert.IsTrue((string)x.Value == "JOEJOE");
            Assert.IsTrue((string)y.Value == "JOEJOE");
        }
示例#18
0
        public void modelupdate2()
        {
            //init variables
            modelname = "xml.xml";
            changed = false;

            RuleEngine.Evidence.EvidenceValue.Xml x = new RuleEngine.Evidence.EvidenceValue.Xml("/root/person/firstname/text()", typeof(string), modelname);
            x.Changed += Changed;
            x.ModelLookup += ModelLookup;

            //init model
            XmlDocument doc = new XmlDocument();
            doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\..\..\Xml\" + modelname);
            model = doc.DocumentElement;
            x.Evaluate();

            Assert.AreEqual(true, changed);
            Assert.AreEqual("Joe", (string)x.Value);

            //change the model, update this xpath expression.
            changed = false;
            model["person"]["firstname"].InnerText = "bob";
            x.Evaluate();

            Assert.AreEqual(true, changed);
            Assert.AreEqual("bob", (string)x.Value);
        }