/** * Return a new Node array containing the bound versions of this Functor's arguments */ public Node[] getBoundArgs(BindingEnvironment env) { Node[] boundargs = new Node[args.length]; for (int i = 0; i < args.length; i++) { boundargs[i] = env.getGroundVersion(args[i]); } return boundargs; }
/** * Return a new Node array containing the bound versions of this Functor's arguments */ public Node[] getBoundArgs(BindingEnvironment env) { Node[] boundargs = new Node[args.length]; for (int i = 0; i < args.length; i++) { boundargs[i] = env.getGroundVersion(args[i]); } return boundargs; }
/** * Returns true if the functor is fully ground in the given environment */ public boolean isGround(BindingEnvironment env) { for ( Node n : args ) { if ( env.getGroundVersion( n ).isVariable() ) { return false; } } return true; }
/** * Return the n'th argument node after dereferencing by what ever type of * rule engine binding environment is appropriate. */ public Node getArg(int n, Node[] args, RuleContext context) { return context.getEnv().getGroundVersion(args[n]); }
/** * Return the n'th argument node after dereferencing by what ever type of * rule engine binding environment is appropriate. */ public Node getArg(int n, Node[] args, RuleContext context) { return context.getEnv().getGroundVersion(args[n]); }
/** * Returns true if the functor is fully ground in the given environment */ public boolean isGround(BindingEnvironment env) { for ( Node n : args ) { if ( env.getGroundVersion( n ).isVariable() ) { return false; } } return true; }
/** * Score a Node in terms of groundedness - heuristic. * Treats a variable as better than a wildcard because it constrains * later clauses. Treats rdf:type as worse than any other ground node * because that tends to link to lots of expensive rules. */ public static int scoreNodeBoundness(Node n, BindingEnvironment env) { if (n instanceof Node_ANY) { return 0; } else if (n instanceof Node_RuleVariable) { Node val = env.getGroundVersion(n); if (val == null) { return 1; } else if (val.equals(RDF.type.asNode())) { return 2; } else { return 3; } } else { return 3; } }
/** * Score a Node in terms of groundedness - heuristic. * Treats a variable as better than a wildcard because it constrains * later clauses. Treats rdf:type as worse than any other ground node * because that tends to link to lots of expensive rules. */ public static int scoreNodeBoundness(Node n, BindingEnvironment env) { if (n instanceof Node_ANY) { return 0; } else if (n instanceof Node_RuleVariable) { Node val = env.getGroundVersion(n); if (val == null) { return 1; } else if (val.equals(RDF.type.asNode())) { return 2; } else { return 3; } } else { return 3; } }
/** * Close a single node. */ private Node cloneNode(Node nIn, Map<Node_RuleVariable, Node> vmap, BindingEnvironment env) { Node n = (env == null) ? nIn : env.getGroundVersion(nIn); if (n instanceof Node_RuleVariable) { Node_RuleVariable nv = (Node_RuleVariable)n; Node c = vmap.get(nv); if (c == null) { c = ((Node_RuleVariable)n).cloneNode(); vmap.put(nv, c); } return c; } else if (Functor.isFunctor(n)) { Functor f = (Functor)n.getLiteralValue(); return Functor.makeFunctorNode(cloneFunctor(f, vmap, env)); } else { return n; } }
/** * Close a single node. */ private Node cloneNode(Node nIn, Map<Node_RuleVariable, Node> vmap, BindingEnvironment env) { Node n = (env == null) ? nIn : env.getGroundVersion(nIn); if (n instanceof Node_RuleVariable) { Node_RuleVariable nv = (Node_RuleVariable)n; Node c = vmap.get(nv); if (c == null) { c = ((Node_RuleVariable)n).cloneNode(); vmap.put(nv, c); } return c; } else if (Functor.isFunctor(n)) { Functor f = (Functor)n.getLiteralValue(); return Functor.makeFunctorNode(cloneFunctor(f, vmap, env)); } else { return n; } }