protected void Page_Load(object sender, EventArgs e) { SNetwork net = new SNetwork(processes); string connectionString = System.Configuration.ConfigurationManager .ConnectionStrings["KnowledgeBaseConnectionString"].ConnectionString; try { KnowledgeBase.DataBase.CreateConnection(connectionString); KnowledgeBase.DataBase.DataFromSemanticNetwork(net); KnowledgeBase.DataBase.WriteToDataBase(); } catch { Response.Redirect("application?db=failed"); } }
protected void ButtonShowGraph_Click(object sender, EventArgs e) { SNetwork snet = new SNetwork(processes); snet.SaveToPng(Server.MapPath("graph.png")); HyperLink link = new HyperLink(); link.NavigateUrl = "/graph.png"; Image imgControl = new Image(); imgControl.ImageUrl = "/graph.png"; imgControl.BorderStyle = BorderStyle.Groove; imgControl.ID = "Graph"; imgControl.Visible = true; link.Controls.Add(imgControl); ResultsPlaceholder.Controls.Add(link); System.Diagnostics.Debug.WriteLine(snet.GetDefinition("Cat")); }
/// <summary> /// Заполнить объект данными из семантической сети /// </summary> /// <param name="net">Семантическая сеть</param> public static void DataFromSemanticNetwork(SNetwork net) { _predicates.Clear(); _instanses.Clear(); _axioms.Clear(); _predicates.Add(new Predicate("x has value y", "HasVal", new Arg("x"), new Arg("y"))); foreach (var n in net.Objects) { if (n.DataType == NodeType.Instance) _instanses.Add(n.Name); else _predicates.Add(new Predicate(String.Format("x is {0}", n.Name), n.Name, new Arg("x"))); } foreach (var action in net.Actions) { if (GetPredicate(action.Name) == null) { if (action.Target != null) _predicates.Add(new Predicate(String.Format("x {0} y",action.Name),action.Name,new Arg("x"),new Arg("y"))); else _predicates.Add(new Predicate(String.Format("x {0}", action.Name), action.Name, new Arg("x"))); } if (action.Value != "" && !_instanses.Contains(action.Value)) _instanses.Add(action.Value); } foreach (var action in net.Actions) { if (!action.IsDepended) { Dictionary<string, string> args = new Dictionary<string, string>(); StringBuilder sb = new StringBuilder(); StringBuilder sb_args = new StringBuilder(); int arg_num = 0; if (action.Name == "is a") { if (action.Object.DataType == NodeType.Object) { _axioms.Add(new Axiom(String.Format("Ɐx: {0}(x)→{1}(x)", action.Object.Name, action.Target.Name))); } else _axioms.Add(new Axiom(String.Format("{1}({0})", action.Object.Name, action.Target.Name))); } else { Edge curr = action; do { if (!args.ContainsKey(curr.Object.Name)) { if (curr.Object.DataType == NodeType.Object) { args[curr.Object.Name] = String.Format("x{0}", arg_num); sb_args.Append(String.Format("Ɐx{0}", arg_num++)); if (curr.IsDepended) sb.Insert(0,String.Format("{0}({1})˄", curr.Object.Name, args[curr.Object.Name])); else sb.Insert(0, String.Format("{0}({1})→(", curr.Object.Name, args[curr.Object.Name])); } else args[curr.Object.Name] = curr.Object.Name; } if (curr.Target != null) { if (!args.ContainsKey(curr.Target.Name)) { if (curr.Target.DataType == NodeType.Object) { args[curr.Target.Name] = String.Format("x{0}", arg_num); sb_args.Append(String.Format("Ɐx{0}", arg_num++)); sb.Insert(0,String.Format("{0}({1})˄", curr.Target.Name, args[curr.Target.Name])); } else args[curr.Target.Name] = curr.Target.Name; } sb.Append(String.Format("{0}({1},{2})", curr.Name, args[curr.Object.Name], args[curr.Target.Name])); if (curr.Value != "") sb.AppendFormat("˄HasVal({0},{1})", curr.Target, curr.Value); } else sb.Append(String.Format("{0}({1})", curr.Name, args[curr.Object.Name])); if (curr.ChainEdge != null) sb.Append("→"); curr = curr.ChainEdge; } while (curr != null); sb.Insert(0, sb_args.ToString() + ":"); sb.Append(")"); _axioms.Add(new Axiom(sb.ToString())); } } } }