Search in sources :

Example 1 with BindingEnvironment

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;
}
Also used : BuiltinException(org.apache.jena.reasoner.rulesys.BuiltinException) Matcher(java.util.regex.Matcher) Node(org.apache.jena.graph.Node) BindingEnvironment(org.apache.jena.reasoner.rulesys.BindingEnvironment)

Example 2 with BindingEnvironment

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;
}
Also used : Node(org.apache.jena.graph.Node) BindingEnvironment(org.apache.jena.reasoner.rulesys.BindingEnvironment)

Example 3 with BindingEnvironment

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);
}
Also used : XSDDateTime(org.apache.jena.datatypes.xsd.XSDDateTime) Node(org.apache.jena.graph.Node) BindingEnvironment(org.apache.jena.reasoner.rulesys.BindingEnvironment)

Aggregations

Node (org.apache.jena.graph.Node)3 BindingEnvironment (org.apache.jena.reasoner.rulesys.BindingEnvironment)3 Matcher (java.util.regex.Matcher)1 XSDDateTime (org.apache.jena.datatypes.xsd.XSDDateTime)1 BuiltinException (org.apache.jena.reasoner.rulesys.BuiltinException)1