Skip to content

Commit

Permalink
fix(PyRule): add check condition for Python triples that are converte…
Browse files Browse the repository at this point in the history
…d to a java.List
  • Loading branch information
ashleycaselli committed May 28, 2024
1 parent 02d20f7 commit 39f05c3
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions src/main/java/org/topbraid/shacl/rules/PyRule.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,22 +79,26 @@ public void execute(RuleEngine ruleEngine, List<RDFNode> focusNodes, Shape shape
Object result = engine.invokeFunction(functionName, bindings);
if (ScriptEngineUtil.isArray(result)) {
for (Object tripleO : ScriptEngineUtil.asArray(result)) {
Node subject;
Node predicate;
Node object;
if (ScriptEngineUtil.isArray(tripleO)) {
List<Object> nodes = ScriptEngineUtil.asArray(tripleO);
Node subject = PyFactory.getNode(nodes.get(0));
Node predicate = PyFactory.getNode(nodes.get(1));
Node object = PyFactory.getNode(nodes.get(2));
ruleEngine.infer(Triple.create(subject, predicate, object), this, shape);
} else if (tripleO instanceof Map) {
@SuppressWarnings("rawtypes")
Map triple = (Map) tripleO;
Node subject = PyFactory.getNode(triple.get("subject"));
Node predicate = PyFactory.getNode(triple.get("predicate"));
Node object = PyFactory.getNode(triple.get("object"));
ruleEngine.infer(Triple.create(subject, predicate, object), this, shape);
subject = PyFactory.getNode(nodes.get(0));
predicate = PyFactory.getNode(nodes.get(1));
object = PyFactory.getNode(nodes.get(2));
} else if (tripleO instanceof @SuppressWarnings("rawtypes")Map triple) {
subject = PyFactory.getNode(triple.get("subject"));
predicate = PyFactory.getNode(triple.get("predicate"));
object = PyFactory.getNode(triple.get("object"));
} else if (tripleO instanceof List triple) {
subject = PyFactory.getNode(triple.get(0));
predicate = PyFactory.getNode(triple.get(1));
object = PyFactory.getNode(triple.get(2));
} else {
throw new SHACLException("Array members produced by rule must be either arrays with three nodes, or Py objects with subject, predicate and object");
throw new SHACLException("Array members produced by rule must be either Arrays/Lists with three nodes, or Python objects with subject, predicate and object");
}
ruleEngine.infer(Triple.create(subject, predicate, object), this, shape);
}
}
} catch (ScriptException ex) {
Expand Down

0 comments on commit 39f05c3

Please sign in to comment.