static public Part RdfToPart(INode node, RdfRules triples)
            {
                SIProlog.checkNode(node);
                if (node is IVariableNode)
                {
                    var vnode = (IVariableNode)node;
                    return(new Variable(vnode.VariableName));
                }
                if (node is IGraphLiteralNode)
                {
                    var vnode = (IGraphLiteralNode)node;
                    throw ErrorBadOp("RDFToPart: on " + vnode);
                }
                if (node is IBlankNode)
                {
                    var vnode = (IBlankNode)node;
                    var atom  = Atom.MakeNodeAtom(vnode);
                    return(atom);

                    node = triples.def.CreateUriNode(UriFactory.Create("_:" + vnode.InternalID));
                }

                if (node is IUriNode)
                {
                    var vnode = (IUriNode)node;
                    var atom  = Atom.MakeNodeAtom(vnode);
                    return(atom);
                }

                // all the below are now Literal Nodes of some type  (we divide into  "strings", numbers and "strings with"^"meaning" and
                ILiteralNode litnode = node as ILiteralNode;

                if (litnode == null)
                {
                    throw ErrorBadOp("Cant find the nodetype on  " + node);
                }
                return(Atom.MakeNodeAtomFixme(litnode));
            }
        private void GetMiniMt(object results, string assertTemplate, string graphKBName, PNode repo, bool show, ICollection <Rule> newRules, TextWriter ruleSources, RdfRules ruleDefs)
        {
            assertTemplate = assertTemplate ?? "triple($?s$,$?p$,$?o$).\n";
            bool MakeRules = newRules != null && assertTemplate.Trim().EndsWith(".");
            var  outMap    = new Dictionary <string, string>();

            outMap["s"]  = "unknownSubject";
            outMap["p"]  = "unknownPredicate";
            outMap["o"]  = "unknownObject";
            outMap["mt"] = Atom.aq(repo.Id);

            if (results is SparqlResultSet)
            {
                //SELECT/ASK queries give a SparqlResultSet
                SparqlResultSet rset = (SparqlResultSet)results;
                if (show)
                {
                    ConsoleWriteLine("SparqlResultSet.Count = {0}", rset.Count);
                    ConsoleWriteLine("SparqlResultSet:{0}", rset.ToString());
                }
                foreach (SparqlResult r in rset)
                {
                    //Do whatever you want with each Result
                    if (show)
                    {
                        ConsoleWriteLine("SparqlResult.Count = {0}", r.Count);
                        ConsoleWriteLine("SparqlResult:{0}", r.ToString());
                    }

                    var assertIt = assertTemplate;
                    //Do whatever you want with each Triple
                    foreach (string vname in r.Variables)
                    {
                        INode value0 = r[vname];
                        SIProlog.checkNode(value0);
                        //Graph into = FindGraph(baseURI.AbsoluteUri);
                        INode  value  = value0.CopyWNode(repo.rdfGraph);
                        string strVal = GraphWithDef.PlReadble(value, ruleDefs);
                        assertIt = assertIt.Replace("$?" + vname + "$", strVal);
                        if (show)
                        {
                            ConsoleWriteLine("BIND: {0} = {1}", vname, strVal);
                        }
                    }
                    if (assertIt.Contains("$?s$"))
                    {
                        foreach (KeyValuePair <string, string> map in outMap)
                        {
                            assertIt = assertIt.Replace("$?" + map.Key + "$", map.Value);
                        }
                    }
                    if (MakeRules)
                    {
                        Rule rule = ParseRule(new Tokeniser(assertIt), graphKBName);
                        if (show)
                        {
                            ConsoleWriteLine("RULE_IG: {0}", rule);
                        }
                        newRules.Add(rule);
                    }
                    else
                    {
                        if (show)
                        {
                            ConsoleWriteLine("TRIPLE_IG: {0}", assertIt);
                        }
                    }
                    if (ruleSources != null)
                    {
                        ruleSources.WriteLine(assertIt);
                    }
                }
            }
            else if (results is IGraph)
            {
                //CONSTRUCT/DESCRIBE queries give a IGraph
                IGraph resGraph = (IGraph)results;
                var    rset     = resGraph.Triples;
                outMap["mt"] = "<" + resGraph.BaseUri.AbsoluteUri + ">";
                if (show)
                {
                    ConsoleWriteLine("IGraphResultSet.Count = {0}", rset.Count);
                    ConsoleWriteLine("IGraphResultSet:{0}", rset.ToString());
                }
                foreach (Triple t in rset)
                {
                    var assertIt = assertTemplate;
                    //Do whatever you want with each Triple
                    outMap["s"] = GraphWithDef.PlReadble(t.Subject, ruleDefs);
                    outMap["p"] = GraphWithDef.PlReadble(t.Predicate, ruleDefs);
                    outMap["o"] = GraphWithDef.PlReadble(t.Object, ruleDefs);
                    foreach (KeyValuePair <string, string> map in outMap)
                    {
                        assertIt = assertIt.Replace("$?" + map.Key + "$", map.Value);
                    }
                    if (MakeRules)
                    {
                        Rule rule = ParseRule(new Tokeniser(assertIt), graphKBName);
                        if (show)
                        {
                            ConsoleWriteLine("RULE_IG: {0}", rule);
                        }
                        newRules.Add(rule);
                    }
                    else
                    {
                        if (show)
                        {
                            ConsoleWriteLine("TRIPLE_IG: {0}", assertIt);
                        }
                    }
                    if (ruleSources != null)
                    {
                        ruleSources.WriteLine(assertIt);
                    }
                }
            }
            else
            {
                //If you don't get a SparqlResutlSet or IGraph something went wrong
                //but didn't throw an exception so you should handle it here
                if (results == null)
                {
                    throw ErrorBadOp("ERROR: no Results From NULL Query Object for " + graphKBName);
                }
                throw ErrorBadOp("ERROR: Cant how understand " + results.GetType() + " " + results + " to import to " +
                                 graphKBName);
            }
        }