/// <summary> /// Tries to create a Rule. /// </summary> /// <param name="t">Triple.</param> private void TryCreateRule(Triple t) { String[] rule = new String[2]; Dictionary <INode, INode> variableMap = new Dictionary <INode, INode>(); int nextVarID = 1; VariableContext vars = null; if (t.Context != null && t.Context is VariableContext) { vars = (VariableContext)t.Context; } StringBuilder output = new StringBuilder(); // Generate the INSERT part of the Command output.AppendLine("INSERT"); output.AppendLine("{"); foreach (Triple x in ((IGraphLiteralNode)t.Object).SubGraph.Triples) { if (vars == null) { output.AppendLine(_formatter.Format(x)); } else { if (vars.IsVariable(x.Subject)) { if (!variableMap.ContainsKey(x.Subject)) { variableMap.Add(x.Subject, new VariableNode(null, "autoRuleVar" + nextVarID)); nextVarID++; } output.Append(_formatter.Format(variableMap[x.Subject])); } else { output.Append(_formatter.Format(x.Subject)); } output.Append(' '); if (vars.IsVariable(x.Predicate)) { if (!variableMap.ContainsKey(x.Predicate)) { variableMap.Add(x.Predicate, new VariableNode(null, "autoRuleVar" + nextVarID)); nextVarID++; } output.Append(_formatter.Format(variableMap[x.Predicate])); } else { output.Append(_formatter.Format(x.Predicate)); } output.Append(' '); if (vars.IsVariable(x.Object)) { if (!variableMap.ContainsKey(x.Object)) { variableMap.Add(x.Object, new VariableNode(null, "autoRuleVar" + nextVarID)); nextVarID++; } output.Append(_formatter.Format(variableMap[x.Object])); } else { output.Append(_formatter.Format(x.Object)); } output.AppendLine(" ."); } } output.AppendLine("}"); rule[0] = output.ToString(); // Generate the WHERE part of the Command output = new StringBuilder(); output.AppendLine("WHERE"); output.AppendLine("{"); foreach (Triple x in ((IGraphLiteralNode)t.Subject).SubGraph.Triples) { if (vars == null) { output.AppendLine(_formatter.Format(x)); } else { if (vars.IsVariable(x.Subject)) { if (!variableMap.ContainsKey(x.Subject)) { variableMap.Add(x.Subject, new VariableNode(null, "autoRuleVar" + nextVarID)); nextVarID++; } output.Append(_formatter.Format(variableMap[x.Subject])); } else { output.Append(_formatter.Format(x.Subject)); } output.Append(' '); if (vars.IsVariable(x.Predicate)) { if (!variableMap.ContainsKey(x.Predicate)) { variableMap.Add(x.Predicate, new VariableNode(null, "autoRuleVar" + nextVarID)); nextVarID++; } output.Append(_formatter.Format(variableMap[x.Predicate])); } else { output.Append(_formatter.Format(x.Predicate)); } output.Append(' '); if (vars.IsVariable(x.Object)) { if (!variableMap.ContainsKey(x.Object)) { variableMap.Add(x.Object, new VariableNode(null, "autoRuleVar" + nextVarID)); nextVarID++; } output.Append(_formatter.Format(variableMap[x.Object])); } else { output.Append(_formatter.Format(x.Object)); } output.AppendLine(" ."); } } output.AppendLine("}"); rule[1] = output.ToString(); ISyntaxValidationResults results = _validator.Validate(rule[0] + rule[1]); if (results.IsValid) { _rules.Add(rule); } }