/// <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);
            }
        }