package euler; import euler.output.ILogger; import euler.output.Outputter; import euler.output.StdOutputter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Date; import java.util.Hashtable; import java.util.Vector; public class EulerRunner { /** * Main method invoked via java euler.EulerRunner * * @param args * command line arguments */ public static void main(String[] args) { if (args.length == 0 || args[0].endsWith("-help")) { System.err.println("Version: " + Configuration.getInstance().getVersion() + "\n" + "Usage: euler [--rules|--trules] uris --query|--tquery uri\n" + "options:\n" + "--prolog translate to prolog\n" + "--prolog-bchain translate to prolog backchain-only\n" + "--sem translate to SEM\n" + "--sql translate to SQL\n" + "--pass pass-thru the N3\n" + "--json translate to JSON\n" + "--prover9 translate to prover9\n" + "--nope no proof explanation\n" + "--nobe no belief explanation\n" + "--nefq no ex falso quodlibet\n" + "--quiet shorter explanation\n" + "--quick optimized runtime\n" + "--think give all solutions\n" + "--step count maximum number of reasoning steps\n" + "--debug output debug info via stderr\n" + "--trace output trace info via stderr\n" + "--test output test run\n" + "--test-as output test run as service\n" + "--profile enable profiling\n" + "--help show help"); } else { try { PrintStream out = System.out; out.println(doProof(args)); if (out != System.out) out.close(); } catch (Throwable t) { t.printStackTrace(); } } } public static synchronized String doProof(String[] args) { try { Euler.runner++; Euler.z = null; Euler e = new Euler(); Parser np = new Parser(); int n = args.length - 1; String c = e.toURI(np.parse('<' + args[n] + '>')); for (int j = 0; j < n; j++) { if (args[j].endsWith("-think")) Configuration.getInstance().setThink(true); else if (args[j].endsWith("-nope")) Configuration.getInstance().setProofExplanation(false); else if (args[j].endsWith("-step")) Configuration.getInstance().setSteps(Long.parseLong(args[++j])); else if (args[j].endsWith("-local")) Configuration.getInstance().setRunLocal(true); else if (args[j].endsWith("-debug")) StdOutputter.getInstance().setLogLevel(ILogger.FINE); else if (args[j].endsWith("-trace")) StdOutputter.getInstance().setLogLevel(ILogger.FINER); else if (!args[j].startsWith("-")) e.load(e.toURI(np.parse('<' + args[j] + '>'))); else if (args[j].endsWith("-graph")) { Euler el = new Euler(); el.load(e.toURI(np.parse('<' + args[++j] + '>'))); StringBuffer sb = new StringBuffer("data:,"); for (Enumeration en = el.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(el.ext.ns.get(nsx)).append(".\n"); } String s = el.ext.baseURI; while (el.near != null) { sb.append('{').append(el.near).append("} q:source <").append(s).append(">.\n"); el = el.near; } e.load(sb.toString()); } else if (args[j].endsWith("-filter") || args[j].endsWith("-query")) { Euler el = new Euler(); el.uid = -1; el.load(e.toURI(np.parse('<' + args[++j] + '>'))); StringBuffer sb = new StringBuffer("data:,"); for (Enumeration en = el.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(el.ext.ns.get(nsx)).append(".\n"); } while (el.near != null) { if (el.near.verb == Euler.LOGimplies) { for (Euler er = el.near.obj; er != null; er = er.near) { sb.append('{'); for (Euler ee = el.near.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(el.near.subj, er)); sb.append("} => {_:").append(el.near.uid).append(' ').append(Euler.Qselect).append(" {"); e.rewrite(false, er, np); bnc(er); sb.append(er).append("}}. "); } el = el.near; } else if (el.near.verb == Euler.Qselect && el.near.near.verb == Euler.Qwhere) { for (Euler er = el.near.obj; er != null; er = er.near) { sb.append('{'); for (Euler ee = el.near.near.obj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(el.near.near.obj, er)); sb.append("} => {").append(el.near.subj).append(' ').append(Euler.Qselect).append(" {"); e.rewrite(false, er, np); bnc(er); sb.append(er).append("}}. \n"); } el = el.near.near; } else if (el.near.verb.equals("WHERE")) { if (!el.near.obj.verb.equals("")) { Euler et = new Euler(); et.subj = el.near.obj; el.near.obj = et; } for (Euler er = el.near.subj; er != null; er = er.near) { for (Euler ev = el.near.obj; ev != null; ev = ev.near) { sb.append('{'); for (Euler ee = ev.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ev.subj, er)); sb.append("} => {_:e").append(el.near.subj.uid).append(' ').append(Euler.Qselect).append(" {"); e.rewrite(false, er, np); bnc(er); sb.append(er).append("}}. \n"); } } el = el.near; } else el = el.near; } c = sb.toString(); e.load(c); e.ext.loaded.addElement('<' + e.toURI(np.parse('<' + args[j] + '>')) + '>'); } else if (args[j].endsWith("-prolog") || args[j].endsWith("-pterm")) { Euler.prolog = true; boolean pterm = args[j].endsWith("-pterm"); boolean tas = false; boolean think = false; boolean nope = false; boolean profile = false; Euler el = new Euler(); el.uid = -1; int jq = j; StringBuffer sa = new StringBuffer("feed(fpath(["); while (j < n) { j++; if (args[j].endsWith("-test-as")) tas = true; else if (args[j].endsWith("-think")) think = true; else if (args[j].endsWith("-nope")) nope = true; else if (args[j].endsWith("-profile")) profile = true; else if (args[j].endsWith("-query") || args[j].endsWith("-filter")) { j++; jq = j; if (sa.charAt(sa.length() - 1) != '[') sa.append(','); sa.append("fpath('<").append(el.testURI(args[j])).append(">','log:semantics')"); Euler ell = new Euler(); ell.uid = -1; ell.ext = new EulerExt(); ell.ext.kc = true; ell.load(e.toURI(np.parse('<' + args[j] + '>'))); StringBuffer sb = new StringBuffer("data:,"); for (Enumeration en = ell.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(ell.ext.ns.get(nsx)).append(".\n"); } Hashtable ens = ell.ext.ns; while (ell.near != null) { if (ell.near.verb == Euler.LOGimplies) { for (Euler elr = ell.near.obj; elr != null; elr = elr.near) { sb.append('{'); for (Euler ee = ell.near.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ell.near.subj, elr)).append("} case {").append(elr).append("}. "); } ell = ell.near; } else if (ell.near.verb == Euler.Qselect && ell.near.near.verb == Euler.Qwhere) { for (Euler elr = ell.near.obj; elr != null; elr = elr.near) { sb.append('{'); for (Euler ee = ell.near.near.obj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ell.near.near.obj, elr)).append("} case {").append(elr).append("}. "); } ell = ell.near.near; } else if (ell.near.verb.equals("WHERE")) { if (!ell.near.obj.verb.equals("")) { Euler et = new Euler(); et.subj = ell.near.obj; ell.near.obj = et; } for (Euler ev = ell.near.obj; ev != null; ev = ev.near) { sb.append('{'); for (Euler ee = ev.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ev.subj, ell.near.subj)).append("} case {").append(ell.near.subj).append( "}. "); } ell = ell.near; } else ell = ell.near; } el.load(sb.toString()); } else if (args[j].startsWith("-")) ; else { if (sa.charAt(sa.length() - 1) != '[') sa.append(','); sa.append("fpath('<").append(el.testURI(args[j])).append(">','log:semantics')"); el.load(e.toURI(np.parse('<' + args[j] + '>'))); } } if (pterm) return el.near != null ? el.near.toPrologString(true, true, false) + "." : ""; StringBuffer sb = new StringBuffer(); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { String nsx = (String) enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); sb.append("pfx('").append(nsx).append("','").append(nsy).append("').\n"); } sb.append('\n'); StringBuffer rb = new StringBuffer(); Hashtable dp = new Hashtable(); while (el.near != null) { if (el.near.verb == Euler.LOGimplies) { Euler te = el.near.near; el.near.near = null; Euler ve = el.near.copy(); el.near.near = te; Vector vt = new Vector(); StringBuffer vb = new StringBuffer("@forAll "); StringBuffer vb2 = new StringBuffer(); getVars(false, ve, vt, vb, vb2); vb.append(". "); if (vb.length() == 10) vb = new StringBuffer(); boolean begin = true; rb.append("'log:implies'(lf(("); for (Euler er = el.near.subj; er != null; er = er.near) { dpp(dp, er); if (!begin) rb.append(", "); if (er.verb.equals(Euler.Efindall) || er.verb.equals(Euler.LOGnotIncludes)) er.src = "e" + er.uid; else er.src = "_"; rb.append(er.toPrologString(false, false, false)); begin = false; } if (el.near.obj.cverb.charAt(0) == '?') { if (!begin) rb.append(", "); if (nope) el.near.src = "_"; rb.append("atom(").append(el.toPrologString(el.near.obj.cverb)).append("), _U").append( el.near.obj.uid).append("=..[").append(el.toPrologString(el.near.obj.cverb)).append(',') .append(el.near.obj.subj.toPrologString(true, true, false)).append(',').append( el.near.obj.obj.toPrologString(true, true, false)).append(",'").append(el.near.src) .append("']"); } rb.append(", instrument('" + vb + ve + "'," + vt + ')'); rb.append(")), lf(("); for (Euler er = el.near.obj; er != null; er = er.near) { dpp(dp, er); if (er.verb.equals(Euler.LOGimplies)) { for (Euler erp = er.subj; erp != null; erp = erp.near) dpp(dp, erp); } if (el.near.obj.cverb.charAt(0) == '?') rb.append("_U" + el.near.obj.uid); else { er.src = nope ? "_" : "'" + er.src + "'"; rb.append(er.toPrologString(false, false, false)); } begin = false; } rb.append(")),_).\n"); } else if (el.near.verb == "case") { Euler te = el.near.near; el.near.near = null; Euler ve = el.near.copy(); el.near.near = te; Vector vt = new Vector(); StringBuffer vb = new StringBuffer("@forAll "); StringBuffer vb2 = new StringBuffer(); getVars(false, ve, vt, vb, vb2); vb.append(". "); if (vb.length() == 10) vb = new StringBuffer(); boolean begin = true; rb.append("'log:implies'(lf(("); for (Euler er = el.near.subj; er != null; er = er.near) { dpp(dp, er); if (!begin) rb.append(", "); if (er.verb.equals(Euler.Efindall) || er.verb.equals(Euler.LOGnotIncludes)) er.src = "e" + er.uid; else er.src = "_"; rb.append(er.toPrologString(false, false, false)); begin = false; } if (el.near.obj.cverb.charAt(0) == '?') { if (!begin) rb.append(", "); if (nope) el.near.src = "_"; rb.append("atom(").append(el.toPrologString(el.near.obj.cverb)).append("), _U").append( el.near.obj.uid).append("=..[").append(el.toPrologString(el.near.obj.cverb)).append(',') .append(el.near.obj.subj.toPrologString(true, true, false)).append(',').append( el.near.obj.obj.toPrologString(true, true, false)).append(",'").append(el.near.src) .append("']"); } ve.cverb = "=>"; rb.append(", instrument('" + vb + ve + "'," + vt + ')'); rb.append(")), lf(case("); for (Euler er = el.near.obj; er != null; er = er.near) { dpp(dp, er); if (el.near.obj.cverb.charAt(0) == '?') rb.append("_U" + el.near.obj.uid); else { er.src = nope ? "_" : "'<" + args[jq] + ">'"; rb.append(er.toPrologString(false, false, false)); } begin = false; } rb.append(")),_).\n"); } else { dpp(dp, el.near); if (el.near.verb == Euler.RDFSdomain) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFSrange) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFSsubPropertyOf) { dpp(dp, el.near.subj); dpp(dp, el.near.obj); } if (el.near.verb == Euler.OWLinverseOf) { dpp(dp, el.near.subj); dpp(dp, el.near.obj); } if (el.near.verb == Euler.OWLonProperty) dpp(dp, el.near.obj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLDatatypeProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLObjectProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLSymmetricProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLTransitiveProperty) dpp(dp, el.near.subj); el.near.src = nope ? "_" : "'" + el.near.src + "'"; rb.append(el.near.toPrologString(false, false, false)).append(".\n"); } el = el.near; } sb.append(sa).append("],'log:conjunction'),").append(Euler.runner).append(").\n"); if (nope) sb.append("flag('e:nope').\n"); else sb.append("flag('e:pe').\n"); if (Codd.port != 80) sb.append("flag(port(").append(Codd.port).append(")).\n"); if (profile) sb.append("flag(profile).\n"); sb.append('\n'); sb.append(":- style_check(-discontiguous).\n"); sb.append(":- style_check(-singleton).\n"); sb.append('\n'); for (Enumeration enr = dp.keys(); enr.hasMoreElements();) sb.append(":- dynamic(").append(enr.nextElement()).append("/3).\n"); sb.append('\n'); if (think) { for (Enumeration enr = dp.keys(); enr.hasMoreElements();) sb.append("'rdf:type'(").append(enr.nextElement()).append(",'rdf:Property',_).\n"); sb.append('\n'); } String th = sb.append(rb).toString(); Euler.prolog = false; if (tas) return new Euler().fromWeb("http://localhost:" + Codd.port + "/.euler5s+data:," + Codd.urlEncode(th)); else return th; } else if (args[j].endsWith("-prolog-bchain")) { Euler.prolog = true; Euler.prologBChain = true; boolean tas = false; boolean think = false; boolean nope = false; boolean nobe = false; boolean nefq = false; boolean profile = false; Euler el = new Euler(); el.uid = -1; StringBuffer sa = new StringBuffer("feed(fpath(["); while (j < n) { j++; if (args[j].endsWith("-test-as")) tas = true; else if (args[j].endsWith("-think")) think = true; else if (args[j].endsWith("-nope")) nope = true; else if (args[j].endsWith("-nobe")) { nope = true; nobe = true; } else if (args[j].endsWith("-nefq")) nefq = true; else if (args[j].endsWith("-profile")) profile = true; else if (args[j].endsWith("-query") || args[j].endsWith("-filter")) { j++; if (sa.charAt(sa.length() - 1) != '[') sa.append(','); sa.append("fpath('<").append(el.testURI(args[j])).append(">','log:semantics')"); Euler ell = new Euler(); ell.uid = -1; ell.ext = new EulerExt(); ell.ext.kc = true; ell.load(e.toURI(np.parse('<' + args[j] + '>'))); StringBuffer sb = new StringBuffer("data:,"); for (Enumeration en = ell.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(ell.ext.ns.get(nsx)).append(".\n"); } Hashtable ens = ell.ext.ns; while (ell.near != null) { if (ell.near.verb == Euler.LOGimplies) { ell.near.cverb = "case"; sb.append(ell.near); } else sb.append("{_: e:true 1} case {").append(ell.near).append("}. "); ell = ell.near; } el.load(sb.toString()); } else if (args[j].startsWith("-")) ; else { if (sa.charAt(sa.length() - 1) != '[') sa.append(','); sa.append("fpath('<").append(el.testURI(args[j])).append(">','log:semantics')"); el.load(e.toURI(np.parse('<' + args[j] + '>'))); } } StringBuffer sb = new StringBuffer(); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { String nsx = (String) enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); sb.append("pfx('").append(nsx).append("','").append(nsy).append("').\n"); } sb.append('\n'); StringBuffer rb = new StringBuffer(); Hashtable dp = new Hashtable(); while (el.near != null) { boolean begin = true; boolean etrue = false; if (el.near.verb == Euler.LOGimplies) { rb.append("rule("); if (el.near.obj.cverb.charAt(0) == '?') { rb.append("vv([").append(el.near.obj.toPrologBChainString(el.near.obj.cverb)).append(',') .append(el.near.obj.subj.toPrologBChainString(true, true)).append(",") .append(el.near.obj.obj.toPrologBChainString(true, true)).append(",'") .append(el.near.obj.src).append("'])"); } else { dpp(dp, el.near.obj); el.near.obj.src = "'" + el.near.obj.src + "'"; rb.append(el.near.obj.toPrologBChainString(false, false)); } rb.append(",("); for (Euler er = el.near.subj; er != null; er = er.near) { dpp(dp, er); if (!begin) rb.append(','); er.src = "_"; if (er.verb == Euler.Etrue) { er.subj.cverb = "_:"; etrue = true; } rb.append(er.toPrologBChainString(false, false)); begin = false; } if (!etrue) rb.append(",'e:true'(_,1,_)"); rb.append(")).\n"); if (el.near.obj.verb == Euler.Eboolean && nefq) { rb.append("rule("); begin = true; if (el.near.obj.obj.cverb.equals("e:T")) el.near.obj.obj.cverb = "e:F"; else if (el.near.obj.obj.cverb.equals("e:F")) el.near.obj.obj.cverb = "e:T"; rb.append(el.near.obj.toPrologBChainString(false, false)); rb.append(",("); for (Euler er = el.near.subj; er != null; er = er.near) { if (!begin) rb.append(','); if (er.verb == Euler.Etrue) rb.append("'math:difference'([1.0,").append(er.obj.toPrologBChainString(false, false)) .append("],_U").append(er.obj.uid).append(",_),'e:true'(_,_U").append(er.obj.uid) .append(",_)"); else rb.append(er.toPrologBChainString(false, false)); begin = false; } if (!etrue) rb.append(",'e:true'(_,0,_)"); rb.append(")).\n"); } } else if (el.near.verb == "case") { dpp(dp, el.near.obj); rb.append("goal("); el.near.obj.src = "_"; if (el.near.obj.verb == Euler.Eboolean) el.near.obj.obj = np.parse("?B" + el.near.obj.uid); rb.append(el.near.obj.toPrologBChainString(false, false)); rb.append(",("); for (Euler er = el.near.subj; er != null; er = er.near) { dpp(dp, er); if (!begin) rb.append(','); er.src = "_"; rb.append(er.toPrologBChainString(false, false)); begin = false; } rb.append(")).\n"); } else { dpp(dp, el.near); if (el.near.verb == Euler.RDFSdomain) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFSrange) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFSsubPropertyOf) { dpp(dp, el.near.subj); dpp(dp, el.near.obj); } if (el.near.verb == Euler.OWLinverseOf) { dpp(dp, el.near.subj); dpp(dp, el.near.obj); } if (el.near.verb == Euler.OWLonProperty) dpp(dp, el.near.obj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLDatatypeProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLObjectProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLSymmetricProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLTransitiveProperty) dpp(dp, el.near.subj); el.near.src = "'" + el.near.src + "'"; rb.append(nobe ? "" : "rule(").append(el.near.toPrologBChainString(false, false)).append( nobe ? ".\n" : ",('e:true'(_,1,_))).\n"); if (el.near.verb == Euler.Eboolean && nefq) { rb.append("rule("); if (el.near.obj.cverb.equals("e:T")) el.near.obj.cverb = "e:F"; else if (el.near.obj.cverb.equals("e:F")) el.near.obj.cverb = "e:T"; rb.append(el.near.toPrologBChainString(false, false)).append(",('e:true'(_,0,_))).\n"); } } el = el.near; } sb.append(sa).append("],'log:conjunction'),").append(Euler.runner).append(").\n"); sb.append("flag('e:bchain').\n"); if (nope) sb.append("flag('e:nope').\n"); else sb.append("flag('e:pe').\n"); if (nobe) sb.append("flag('e:nobe').\n"); else sb.append("flag('e:be').\n"); if (Codd.port != 80) sb.append("flag(port(").append(Codd.port).append(")).\n"); if (profile) sb.append("flag(profile).\n"); sb.append('\n'); sb.append(":- style_check(-discontiguous).\n"); sb.append(":- style_check(-singleton).\n"); sb.append('\n'); for (Enumeration enr = dp.keys(); enr.hasMoreElements();) sb.append(":- dynamic(").append(enr.nextElement()).append("/3).\n"); sb.append('\n'); if (think) { for (Enumeration enr = dp.keys(); enr.hasMoreElements();) sb.append("'rdf:type'(").append(enr.nextElement()).append(",'rdf:Property',_).\n"); sb.append('\n'); } String th = sb.append(rb).toString(); Euler.prolog = false; Euler.prologBChain = false; if (tas) return new Euler().fromWeb("http://localhost:" + Codd.port + "/.euler5s+data:," + Codd.urlEncode(th)); else return th; } else if (args[j].endsWith("-sem") || args[j].endsWith("-semterm") || args[j].endsWith("-semquery")) { Euler.sem = true; boolean semterm = args[j].endsWith("-semterm"); boolean semquery = args[j].endsWith("-semquery"); boolean test = false; boolean tas = false; boolean nope = false; boolean nobranch = false; boolean quiet = false; boolean quick = false; boolean think = false; boolean tquery = false; boolean answer = false; String scope = ""; String marker = "e:rules"; Euler el = new Euler(); Euler.doc = 1; Euler.docv = new Vector(); Euler.uidc = 1; el.uid = -1; int jq = j; long step = 500000; while (j < n) { j++; if (args[j].endsWith("-test")) test = true; else if (args[j].endsWith("-test-as")) tas = true; else if (args[j].endsWith("-nope")) nope = true; else if (args[j].endsWith("-no-branch")) nobranch = true; else if (args[j].endsWith("-quiet")) quiet = true; else if (args[j].endsWith("-quick")) quick = true; else if (args[j].endsWith("-think")) think = true; else if (args[j].endsWith("-step")) step = Long.parseLong(args[++j]); else if (args[j].endsWith("-rules")) el.load("data:,_: e:marker e:rules."); else if (args[j].endsWith("-trules")) el.load("data:,_: e:marker e:trules."); else if (args[j].endsWith("-query") || args[j].endsWith("-filter")) el.load("data:,_: e:marker e:query."); else if (args[j].endsWith("-tquery")) { tquery = true; el.load("data:,_: e:marker e:tquery."); } else if (args[j].endsWith("-pass")) el.load("data:,_: e:marker e:query. {?S ?P ?O} => {?S ?P ?O}."); else if (args[j].startsWith("-")) ; else { el.load(e.toURI(np.parse('<' + args[j] + '>'))); if (!args[j-1].endsWith("-query") && !args[j-1].endsWith("-filter") && !args[j-1].endsWith("-tquery")) scope = scope + (scope.equals("")?"":",") + np.parse("'<" + args[j] + ">'"); else answer = false; el.load("data:,_: e:marker e:rules."); } } if (semterm) return el.near != null ? el.near.toSemString(true, true, false) + "." : ""; StringBuffer rb = new StringBuffer(); Hashtable dp = new Hashtable(); if (!semquery) { for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { String nsx = (String) enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); rb.append("pfx('").append(nsx).append("','").append(nsy).append("').\n"); } rb.append('\n'); } while (el.near != null) { StringBuffer cb = new StringBuffer(); if (marker.equals("e:trules")) { dp.put("'e:conditional'", new Object()); cb.append("'e:conditional'(["); } if (marker.equals("e:tquery")) cb.append("'e:biconditional'(["); if (el.near.cverb.equals("e:marker")) { marker = el.near.obj.cverb; if (marker.equals("e:query") || marker.equals("e:tquery")) answer = true; else if (answer && (marker.equals("e:rules") || marker.equals("e:trules"))) { rb.append("[] := answer(_) => goal.\n"); answer = false; } } else if (el.near.verb == Euler.LOGimplies) { boolean begin = true; if (marker.equals("e:trules") || marker.equals("e:tquery")) cb.append(el.near.obj.toSemString(true, true, false)); Euler te = el.near.near; el.near.near = null; Euler ve = el.near.subj.copy(); if (marker.equals("e:trules") || marker.equals("e:tquery")) ve = el.near.copy(); el.near.near = te; Vector vt = new Vector(); StringBuffer vb = new StringBuffer("@forAll "); StringBuffer vb2 = new StringBuffer(); getVars(true, ve, vt, vb, vb2); if (marker.equals("e:tquery")) { if (vb.charAt(vb.length() - 1) != ' ') vb.append(','); vb.append("var:TQUERY"); if (vb2.length() != 0) vb2.append(','); vb2.append("_TQUERY"); } vb.append(". "); if (vb.length() == 10) vb = new StringBuffer(); rb.append("[").append(el.toSemString(el.near.src, false)); if (vb2.length() != 0) rb.append(",").append(vb2); rb.append("] := "); int rbl = rb.length(); for (Euler er = el.near.subj; er != null; er = er.near) { dpp(dp, er); if (er.cverb.equals("e:findall")) dpp(dp, er.obj.getRest().getFirst()); if ((marker.equals("e:trules") || marker.equals("e:tquery")) && er.cverb.equals("e:boolean")) cb.append(',').append(er.toSemString(false, true, false)); else if (marker.equals("e:trules") && er.cverb.equals("e:true")) cb.append("],").append(er.obj.toSemString(false, false, false)).append(')'); else { if (!begin) rb.append(", "); rb.append(er.toSemString(false, false, false)); begin = false; } } //if (el.near.obj.cverb.charAt(0) == '?' && el.near.obj.subj != null && el.near.obj.obj != null) { // if (!begin) // rb.append(", "); // rb.append("atom(").append(el.toSemString(el.near.obj.cverb, false)).append("), _U").append( // el.near.obj.uid).append(" =.. [").append(el.toSemString(el.near.obj.cverb, false)).append(',') // .append(el.near.obj.subj.toSemString(true, true, false)).append(',').append( // el.near.obj.obj.toSemString(true, true, false)) // .append("]"); //} if (marker.equals("e:trules")) { if (rb.length() == rbl) rb.append("true"); if (cb.indexOf("]") == -1) cb.append("],1.0)"); rb.append(" => ").append(cb); } else if (marker.equals("e:tquery")) { cb.append("],_TQUERY)"); if (rb.charAt(rb.length()-1) != ' ') rb.append(", "); rb.append(cb).append(" => ").append("answer(").append(cb).append(')'); } else { rb.append(" => "); if (marker.equals("e:query")) rb.append("answer(("); if (el.near.obj.verb.equals("{}") || el.near.obj.verb.equals("\"false\"^^xsd:boolean") || el.near.obj.cverb.equals("^^") && el.near.obj.subj.verb.equals("\"false\"") && el.near.obj.obj.verb.equals(Euler.XSDboolean)) rb.append("false"); else { begin = true; for (Euler er = el.near.obj; er != null; er = er.near) { dpp(dp, er); if (er.verb.equals(Euler.LOGimplies)) { for (Euler erp = er.subj; erp != null; erp = erp.near) dpp(dp, erp); } if (!begin) rb.append(", "); if (el.near.obj.cverb.charAt(0) == '?' && el.near.obj.subj != null && el.near.obj.obj != null) //rb.append("_U" + el.near.obj.uid); rb.append("varpred(").append(el.near.obj.subj.toSemString(true, true, false)).append(',') .append(el.near.obj.toSemString(el.near.obj.cverb, false)).append(',') .append(el.near.obj.obj.toSemString(true, true, false)).append(')'); else rb.append(er.toSemString(false, false, false)); begin = false; } } if (marker.equals("e:query")) { rb.append("))"); if (semquery) return rb.toString(); } } rb.append(".\n"); } else { dpp(dp, el.near); if (el.near.verb == Euler.RDFSdomain) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFSrange) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFSsubPropertyOf) { dpp(dp, el.near.subj); dpp(dp, el.near.obj); } if (el.near.verb == Euler.OWLinverseOf) { dpp(dp, el.near.subj); dpp(dp, el.near.obj); } if (el.near.verb == Euler.OWLonProperty) dpp(dp, el.near.obj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLDatatypeProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLObjectProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLSymmetricProperty) dpp(dp, el.near.subj); if (el.near.verb == Euler.RDFtype && el.near.obj.verb == Euler.OWLTransitiveProperty) dpp(dp, el.near.subj); if (marker.equals("e:trules")) { cb.append(el.near.toSemString(false, true, false)).append("],1.0)"); rb.append("[").append(el.toSemString(el.near.src, false)).append("] := true => ").append(cb).append(".\n"); rb.append(el.near.toSemString(false, false, false)).append(".\n"); } else if (marker.equals("e:tquery")) { cb.append(el.near.toSemString(false, true, false)).append("],_TQUERY)"); rb.append("[").append(el.toSemString(el.near.src, false)).append("] := ").append(cb).append(" => answer(").append(cb).append(").\n"); } else rb.append(el.near.toSemString(false, false, true)).append(". steps([").append(el.toSemString(el.near.src, false)).append("],true,") .append(el.near.toSemString(false, false, true)).append(",([").append(el.toSemString(el.near.src, false)).append("] := true => ") .append(el.near.toSemString(false, false, true)).append(")).\n"); } el = el.near; } if (answer) { rb.append("[] := answer(_) => goal.\n"); answer = false; } StringBuffer sb = new StringBuffer(); sb.append(":- op(1200,xfx,':=').\n"); sb.append(":- op(1199,xfx,'=>').\n"); sb.append('\n'); if (tas) { sb.append(":- style_check(-discontiguous).\n"); sb.append(":- style_check(-singleton).\n"); sb.append('\n'); sb.append(":- dynamic(answer/1).\n"); for (Enumeration enr = dp.keys(); enr.hasMoreElements();) sb.append(":- dynamic(").append(enr.nextElement()).append("/2).\n"); sb.append('\n'); } if (Codd.port != 80) sb.append("flag(port(").append(Codd.port).append(")).\n"); if (nope) sb.append("flag(nope).\n"); if (nobranch) sb.append("flag('no-branch').\n"); if (quiet) sb.append("flag(quiet).\n"); if (quick) sb.append("flag(quick).\n"); if (think) sb.append("flag(think).\n"); if (tquery) sb.append("flag(tquery).\n"); sb.append("flag(step(").append(step).append(")).\n"); sb.append("flag(scope([").append(scope).append("])).\n"); sb.append('\n'); if (tas && !Euler.semgen.equals("")) { sb.append(Euler.semgen).append('\n'); Euler.semgen = ""; } sb.append(rb); String th = sb.toString(); Euler.sem = false; /*if (test) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); jPrologAPI api = new jPrologAPI(Codd.nativeToAscii(Euler.euler + th), null, pw, null, null); Hashtable result = api.query("main.", new Hashtable()); while (result != null) result = api.retry(); pw.flush(); return baos.toString(); } else*/ if (tas) return new Euler().fromWeb("http://localhost:" + Codd.port + "/.sem+data:," + Codd.urlEncode(th)); else return th; } else if (args[j].endsWith("-semi")) { boolean test = false; boolean tas = false; boolean nope = false; String th = null; while (j < n) { j++; if (args[j].endsWith("-test")) test = true; else if (args[j].endsWith("-test-as")) tas = true; else if (args[j].endsWith("-nope")) nope = true; else if (args[j].startsWith("-")) ; else th = new Euler().fromWeb(args[j]); } if (nope) th = th + "flag(nope).\n"; /*if (test) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter pw = new PrintWriter(baos); jPrologAPI api = new jPrologAPI(Codd.nativeToAscii(Euler.euler + th), null, pw, null, null); Hashtable result = api.query("main.", new Hashtable()); while (result != null) result = api.retry(); pw.flush(); return baos.toString(); } else*/ if (tas) return new Euler().fromWeb("http://localhost:" + Codd.port + "/.sem+data:," + Codd.urlEncode(th)); else return th; } else if (args[j].endsWith("-sql")) { Euler el = new Euler(); Euler.doc = 1; Euler.docv = new Vector(); Euler.uidc = 1; el.uid = -1; while (j < n) { j++; if (args[j].endsWith("-query") || args[j].endsWith("-filter")) j++; else if (args[j].startsWith("-")) ; else el.load(e.toURI(np.parse('<' + args[j] + '>'))); } System.out.println("BEGIN TRANSACTION;"); System.out.println("CREATE TABLE pfx(prefix varchar(8192), namespace varchar(8192));"); System.out.println("CREATE TABLE rdf(subject varchar(8192), predicate varchar(8192), object varchar(8192), source varchar(8192));"); System.out.println(); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { String nsx = (String) enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); System.out.println("INSERT INTO pfx VALUES('" + nsx + "','" + nsy + "');"); } System.out.println(); while (el.near != null) { System.out.println("INSERT INTO rdf VALUES('" + el.near.subj.toN3String().replace("'", "''") + "','" + el.near.cverb + "','" + el.near.obj.toN3String().replace("'", "''") + "','" + el.near.src + "');"); el = el.near; } System.out.println(); System.out.println("CREATE INDEX subject_index ON rdf (subject);"); System.out.println("CREATE INDEX object_index ON rdf (object);"); System.out.println("COMMIT;"); return ""; } else if (args[j].endsWith("-pass")) { boolean why = false; boolean once = false; boolean debug = false; boolean tas = false; Euler.doc = 1; Euler.docv = new Vector(); Euler.uidc = 1; while (j < n) { j++; if (args[j].endsWith("-test-as")) tas = true; else if (args[j].endsWith("-why")) why = true; else if (args[j].endsWith("-once")) once = true; else if (args[j].endsWith("-debug")) debug = true; else if (args[j].endsWith("-trules")) { Euler el = new Euler(); el.uid = -1; el.load(e.toURI(np.parse('<' + args[++j] + '>'))); StringBuffer rb = new StringBuffer(); Hashtable dp = new Hashtable(); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { String nsx = (String) enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); rb.append("@prefix ").append(nsx).append(" ").append(nsy).append(".\n"); } rb.append('\n'); while (el.near != null) { StringBuffer cb = new StringBuffer(); cb.append('('); if (el.near.verb == Euler.LOGimplies) { boolean begin = true; cb.append('{').append(el.near.obj).append('}'); int rbl = rb.length(); for (Euler er = el.near.subj; er != null; er = er.near) { if (er.cverb.equals("e:boolean")) cb.append(" {").append(er).append('}'); else if (er.cverb.equals("e:true")) cb.append(") e:conditional ").append(er.obj); else { if (begin) rb.append('{'); rb.append(er); begin = false; } } if (cb.indexOf(")") == -1) cb.append(") e:conditional 1.0"); if (rb.length() == rbl) rb.append(cb); else rb.append("} => {").append(cb).append('}'); rb.append(".\n"); } else rb.append(el.near).append("\n"); el = el.near; } return rb.toString(); } else if (args[j].endsWith("-query") || args[j].endsWith("-filter")) { Euler el = new Euler(); el.uid = -1; el.load(e.toURI(np.parse('<' + args[++j] + '>'))); StringBuffer sb = new StringBuffer("data:,"); for (Enumeration en = el.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(el.ext.ns.get(nsx)).append(".\n"); } Hashtable ens = el.ext.ns; while (el.near != null) { if (el.near.verb == Euler.LOGimplies) { for (Euler er = el.near.obj; er != null; er = er.near) { sb.append('{'); for (Euler ee = el.near.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(el.near.subj, er)); e.rewrite(false, er, np); bnc(er); sb.append("} => {(").append(er).insert(sb.length() - 2, ")}").append("{(").append(er) .insert(sb.length() - 2, ")} => []"); } el = el.near; } else if (el.near.verb == Euler.Qselect && el.near.near.verb == Euler.Qwhere) { for (Euler er = el.near.obj; er != null; er = er.near) { sb.append('{'); for (Euler ee = el.near.near.obj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(el.near.near.obj, er)); e.rewrite(false, er, np); bnc(er); sb.append("} => {(").append(er).insert(sb.length() - 2, ")}").append("{(").append(er) .insert(sb.length() - 2, ")} => []"); } el = el.near.near; } else if (el.near.verb.equals("WHERE")) { if (!el.near.obj.verb.equals("")) { Euler et = new Euler(); et.subj = el.near.obj; el.near.obj = et; } for (Euler er = el.near.subj; er != null; er = er.near) { for (Euler ev = el.near.obj; ev != null; ev = ev.near) { sb.append('{'); for (Euler ee = ev.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ev.subj, er)); e.rewrite(false, er, np); bnc(er); if (er.toString().endsWith(". ")) sb.append("} => {(").append(er).insert(sb.length() - 2, ")}").append("{(").append( er).insert(sb.length() - 2, ")} => []"); else sb.append("} => {(").append(er).append(")}. ").append("{(").append(er).append( ")} => []. "); } } el = el.near; } else el = el.near; } e.load(sb.toString()); } else if (args[j].startsWith("-")) ; else e.load(e.toURI(np.parse('<' + args[j] + '>'))); } StringBuffer sb = new StringBuffer(); for (Enumeration en = e.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(e.ext.ns.get(nsx)).append(".\n"); } sb.append('\n'); while (e.near != null) { sb.append(e.near).setCharAt(sb.length() - 1, '\n'); e = e.near; } String th = sb.toString(); if (tas) return new Euler().fromWeb("http://localhost:" + Codd.port + "/.euler3+" + (why ? "--why+" : "") + (once ? "--once+" : "") + (debug ? "--debug+" : "") + "data:," + Codd.urlEncode(th)); else return th; } else if (args[j].endsWith("-json")) { boolean tas = false; Euler el = new Euler(); el.uid = -1; while (j < n) { j++; if (args[j].endsWith("-test-as")) tas = true; else if (args[j].endsWith("-query") || args[j].endsWith("-filter")) { Euler ell = new Euler(); ell.uid = -1; ell.ext = new EulerExt(); ell.ext.kc = true; ell.load(e.toURI(np.parse('<' + args[++j] + '>'))); StringBuffer sb = new StringBuffer("data:,"); for (Enumeration en = ell.ext.ns.keys(); en.hasMoreElements();) { Object nsx = en.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(ell.ext.ns.get(nsx)).append(".\n"); } Hashtable ens = ell.ext.ns; while (ell.near != null) { if (ell.near.verb == Euler.LOGimplies) { sb.append('{'); for (Euler ee = ell.near.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ell.near.subj, ell.near.obj)).append("} => {}. "); ell = ell.near; } else if (ell.near.verb == Euler.Qselect && ell.near.near.verb == Euler.Qwhere) { sb.append('{'); for (Euler ee = ell.near.near.obj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ell.near.near.obj, ell.near.obj)).append("} => {}. "); ell = ell.near.near; } else if (ell.near.verb.equals("WHERE")) { if (!ell.near.obj.verb.equals("")) { Euler et = new Euler(); et.subj = ell.near.obj; ell.near.obj = et; } for (Euler ev = ell.near.obj; ev != null; ev = ev.near) { sb.append('{'); for (Euler ee = ev.subj; ee != null; ee = ee.near) { e.rewrite(false, ee, np); bnp(ee); sb.append(ee); } sb.append(sfg(ev.subj, ell.near.subj)).append("} => {}. "); } ell = ell.near; } else ell = ell.near; } el.load(sb.toString()); } else if (args[j].startsWith("-")) ; else el.load(e.toURI(np.parse('<' + args[j] + '>'))); } StringBuffer sb = new StringBuffer(); sb.append("{\n \"GND\":{\n "); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { Object nsx = enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); if (sb.charAt(sb.length() - 1) != ' ') sb.append(",\n "); sb.append("\"").append(nsx).append("\":\"").append(nsy.substring(1, nsy.length() - 1)).append("\""); } sb.append("\n }"); Hashtable cases = new Hashtable(); while (el.near != null) { if (el.near.verb == Euler.LOGimplies) { String hk = el.near.obj.cverb; if (hk.equals("{}")) hk = ""; StringBuffer rb = (StringBuffer) cases.get(hk); if (rb == null) rb = new StringBuffer(); if (rb.length() > 0) rb.append(",\n "); rb.append("{head:").append(el.near.obj.toJsonString(false, false)).append(", body:[").append( el.near.subj.toJsonString(true, false)).append("]}"); cases.put(hk, rb); } else { String hk = el.near.cverb; StringBuffer rb = (StringBuffer) cases.get(hk); if (rb == null) rb = new StringBuffer(); if (rb.length() > 0) rb.append(",\n "); rb.append("{head:").append(el.near.toJsonString(false, false)).append(", body:[]}"); cases.put(hk, rb); } el = el.near; } for (Enumeration enr = cases.keys(); enr.hasMoreElements();) { Object v = enr.nextElement(); if (sb.charAt(sb.length() - 1) != ' ') sb.append(",\n "); sb.append('"').append(v).append("\":[\n ").append(cases.get(v)).append("\n ]"); } sb.append("\n}"); String th = sb.toString(); if (tas) { String t = "http://localhost:" + Codd.port + "/.euler4+data:," + Codd.urlEncode(th); return new Euler().fromWeb("http://localhost:" + Codd.port + "/.json+" + Codd.urlEncode(t)); } else return th; } else if (args[j].endsWith("-prover9")) { Euler el = new Euler(); el.uid = -9; while (j < n) el.load(e.toURI(np.parse('<' + args[++j] + '>'))); StringBuffer sb = new StringBuffer(); sb.append("set(auto).\n"); int eh = sb.length(); sb.append("clauses(sos).\n\n"); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { Object nsx = enr.nextElement(); String nsy = (String) el.ext.ns.get(nsx); sb.append("qname(\"").append(nsx).append("\") = iri(\"").append(nsy.substring(1, nsy.length() - 1)).append( "\").\n"); } sb.append('\n'); while (el.near != null) { if (el.near.verb == Euler.LOGimplies) { boolean begin = true; if (el.near.subj.cverb != "{}") { for (Euler er = el.near.subj; er != null; er = er.near) { if (!begin) sb.append(" | "); if (er.verb == Euler.LOGimplies) { sb.append(" "); sb.append(er.subj.toProver9String()); } else { sb.append("- "); sb.append(er.toProver9String()); } begin = false; } } if (el.near.obj.cverb != "{}") { for (Euler er = el.near.obj; er != null; er = er.near) { if (!begin) sb.append(" | "); sb.append(er.toProver9String()); begin = false; } } sb.append(".\n"); } else { sb.append(el.near.toProver9String()).append(".\n"); if (el.near.verb == Euler.Ehint) sb.insert(eh, el.getLit(el.near.obj)); } el = el.near; } sb.append("end_of_list.\n"); if (Outputter.log) Outputter.getInstance().log("EulerRunner", "-prover9", sb.toString(), ILogger.FINE); File f = new File(System.getProperty("java.io.tmpdir"), "prover9.in"); PrintStream ps = new PrintStream(new FileOutputStream(f), true); ps.print(sb); ps.close(); Process rp = new Process("prover9 -f " + f, null); rp.start(); long steps = Configuration.getInstance().getSteps(); if (steps == -1) { while (rp.isRunning()) Thread.sleep(100); } else { while (rp.isRunning() && steps > 0) { Thread.sleep(100); steps = steps - 100; } if (steps <= 0) { rp.stop(); return "# No proof found: timeout"; } } return "[] = \"\"\"Euler-" + Configuration.getInstance().getVersion() + " " + new Date().toGMTString() + "\n" + rp.getOutput() + "\"\"\"."; } else if (args[j].startsWith("-")) ; } e.prepare(); String p = e.proof(c); if (!Configuration.getInstance().getProofExplanation()) { Euler el = new Euler(); el.uid = -1; el.load("data:," + p); StringBuffer sb = new StringBuffer(); for (Enumeration enr = el.ext.ns.keys(); enr.hasMoreElements();) { Object nsx = enr.nextElement(); sb.append("@prefix ").append(nsx).append(' ').append(el.ext.ns.get(nsx)).append(".\n"); } sb.append('\n'); for (Euler eu = el; eu.near != null; eu = eu.near) { if (eu.near.verb == Euler.Qselect) { Euler en = eu.near.near; eu.near = eu.near.obj; eu.near.near = en; } } while (el.near != null) { Euler eu = el.near.near; while (eu != null) { if (eu.unify(el.near, e, null)) break; eu = eu.near; } if (eu == null && el.near.cverb != "vv") sb.append(el.near).append('\n'); el = el.near; } p = sb.toString(); } Configuration.getInstance().setThink(false); Configuration.getInstance().setProofExplanation(true); Configuration.getInstance().setSteps(-1); Configuration.getInstance().setRunLocal(false); return p; } catch (Throwable t) { t.printStackTrace(); return null; } } static void getVars(boolean f, Euler er, Vector vt, StringBuffer vb, StringBuffer vb2) { if (er.subj != null) getVars(true, er.subj, vt, vb, vb2); if (er.obj != null) getVars(true, er.obj, vt, vb, vb2); if (er.cverb != null && er.cverb.length() > 1 && er.cverb.charAt(0) == '?') { String vs = "'\"http://localhost/var#" + er.cverb.substring(1) + "\"'"; if (!vt.contains(vs)) { vt.addElement(vs); vt.addElement("_" + er.cverb.substring(1)); if (vb.charAt(vb.length() - 1) != ' ') vb.append(','); vb.append("var:" + er.cverb.substring(1)); if (vb2.length() != 0) vb2.append(','); vb2.append("_" + er.cverb.substring(1)); } er.cverb = "var:" + er.cverb.substring(1); } if (f && er.near != null) getVars(true, er.near, vt, vb, vb2); } static void dpp(Hashtable dp, Euler er) { if (er.cverb.length() > 0 && er.cverb.charAt(0) != '?' && !er.cverb.equals("=") && !er.cverb.equals("=>") && !er.cverb.equals("!") && !er.cverb.startsWith("log:") && !er.cverb.startsWith("math:") && !er.cverb.startsWith("list:") && !er.cverb.startsWith("str:") && !er.cverb.startsWith("fn:") && !er.cverb.startsWith("time:") && !er.cverb.startsWith("e:") && !er.cverb.equals("rdf:first") && !er.cverb.equals("rdf:rest") && !er.cverb.equals("fl:pi") || er.cverb.equals("list:notIn") || er.cverb.equals("list:subListOf") || er.cverb.equals("list:hasLenght") || er.cverb.equals("e:columns") || er.cverb.equals("e:depends") || er.cverb.equals("e:bayesian") || er.cverb.equals("e:boolean") || er.cverb.equals("e:conditional") || er.cverb.equals("e:possibleModel") || er.cverb.equals("e:falseModel") || er.cverb.equals("e:counterModel") || er.cverb.equals("e:because") || er.cverb.equals("e:integrityConstraint") || er.cverb.equals("e:selected") || er.cverb.equals("e:triple") || er.cverb.equals("e:ancestors") || er.cverb.equals("e:decendents") || er.cverb.equals("e:falseAncestors") || er.cverb.equals("e:falseDecendents") || er.cverb.equals("e:consistentGives")) dp.put(er.toPrologString(er.cverb), new Object()); if (er.verb == Euler.Eoptional) { for (Euler el = er.obj; el != null; el = el.near) dpp(dp, el); } } static void bnp(Euler el) { if (el.subj != null) { if (el.verb.equals(Euler.LOGimplies)) { for (Euler ej = el.subj; ej != null; ej = ej.near) bnp(ej); } else bnp(el.subj); } if (el.cverb.startsWith("_:")) el.cverb = "?P" + el.cverb.substring(2); if (el.obj != null) bnp(el.obj); } static void bnc(Euler el) { if (el.subj != null) { if (el.verb.equals(Euler.LOGimplies)) { for (Euler ej = el.subj; ej != null; ej = ej.near) bnc(ej); } else bnc(el.subj); } if (el.cverb.startsWith("_:")) el.cverb = "?C" + el.cverb.substring(2); if (el.obj != null) bnc(el.obj); } static String sfg(Euler ev, Euler er) { StringBuffer sb = new StringBuffer(); Vector wt = new Vector(); ev.getX(true, wt); if (er.subj != null && er.subj.cverb != null && er.subj.cverb.startsWith("_:")) { sb.append("?C").append(er.subj.cverb.substring(2)).append(" e:tuple ("); for (Enumeration e = wt.elements(); e.hasMoreElements();) { String ne = (String) e.nextElement(); if (ne.startsWith("?")) sb.append(ne).append(' '); } sb.append("). "); } if (er.obj != null && er.obj.cverb != null && er.obj.cverb.startsWith("_:")) { sb.append("?C").append(er.obj.cverb.substring(2)).append(" e:tuple ("); for (Enumeration e = wt.elements(); e.hasMoreElements();) { String ne = (String) e.nextElement(); if (ne.startsWith("?")) sb.append(ne).append(' '); } sb.append("). "); } return (sb.toString()); } }