use of org.apache.jena.reasoner.rulesys.BindingEnvironment in project jena by apache.
the class Regex method bodyCall.
/**
* This method is invoked when the builtin is called in a rule body.
* @param args the array of argument values for the builtin, this is an array
* of Nodes, some of which may be Node_RuleVariables.
* @param length the length of the argument list, may be less than the length of the args array
* for some rule engines
* @param context an execution context giving access to other relevant data
* @return return true if the buildin predicate is deemed to have succeeded in
* the current environment
*/
@Override
public boolean bodyCall(Node[] args, int length, RuleContext context) {
if (length < 2)
throw new BuiltinException(this, context, "Must have at least 2 arguments to " + getName());
String text = getString(getArg(0, args, context), context);
String pattern = getString(getArg(1, args, context), context);
Matcher m = Pattern.compile(pattern).matcher(text);
if (!m.matches())
return false;
if (length > 2) {
// bind any capture groups
BindingEnvironment env = context.getEnv();
for (int i = 0; i < Math.min(length - 2, m.groupCount()); i++) {
String gm = m.group(i + 1);
Node match = (gm != null) ? NodeFactory.createLiteral(gm) : NodeFactory.createLiteral("");
if (!env.bind(args[i + 2], match))
return false;
}
}
return true;
}
use of org.apache.jena.reasoner.rulesys.BindingEnvironment in project jena by apache.
the class Quotient method bodyCall.
/**
* This method is invoked when the builtin is called in a rule body.
* @param args the array of argument values for the builtin, this is an array
* of Nodes, some of which may be Node_RuleVariables.
* @param length the length of the argument list, may be less than the length of the args array
* for some rule engines
* @param context an execution context giving access to other relevant data
* @return return true if the buildin predicate is deemed to have succeeded in
* the current environment
*/
@Override
public boolean bodyCall(Node[] args, int length, RuleContext context) {
checkArgs(length, context);
BindingEnvironment env = context.getEnv();
Node n1 = getArg(0, args, context);
Node n2 = getArg(1, args, context);
if (n1.isLiteral() && n2.isLiteral()) {
Object v1 = n1.getLiteralValue();
Object v2 = n2.getLiteralValue();
Node sum = null;
if (v1 instanceof Number && v2 instanceof Number) {
Number nv1 = (Number) v1;
Number nv2 = (Number) v2;
if (v1 instanceof Float || v1 instanceof Double || v2 instanceof Float || v2 instanceof Double) {
sum = Util.makeDoubleNode(nv1.doubleValue() / nv2.doubleValue());
} else {
sum = Util.makeLongNode(nv1.longValue() / nv2.longValue());
}
return env.bind(args[2], sum);
}
}
// Doesn't (yet) handle partially bound cases
return false;
}
use of org.apache.jena.reasoner.rulesys.BindingEnvironment in project jena by apache.
the class Now method bodyCall.
/**
* This method is invoked when the builtin is called in a rule body.
* @param args the array of argument values for the builtin, this is an array
* of Nodes, some of which may be Node_RuleVariables.
* @param context an execution context giving access to other relevant data
* @return return true if the buildin predicate is deemed to have succeeded in
* the current environment
*/
@Override
public boolean bodyCall(Node[] args, int length, RuleContext context) {
checkArgs(length, context);
BindingEnvironment env = context.getEnv();
Node now = NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(new XSDDateTime(Calendar.getInstance())));
return env.bind(args[0], now);
}
Aggregations