diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ShaclSail.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ShaclSail.java index 8f992f8d16..81adf25db1 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ShaclSail.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ShaclSail.java @@ -314,8 +314,8 @@ public static List getSupportedShaclPredicates() { SHACL.TARGET_PROP, SHACL.INVERSE_PATH, SHACL.ALTERNATIVE_PATH, - SHACL.ONE_OR_MORE_PATH, - SHACL.ZERO_OR_MORE_PATH, +// SHACL.ONE_OR_MORE_PATH, +// SHACL.ZERO_OR_MORE_PATH, SHACL.NODE, SHACL.QUALIFIED_MAX_COUNT, SHACL.QUALIFIED_MIN_COUNT, diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/OneOrMorePath.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/OneOrMorePath.java index eb7ebc6845..bab4e2c8e9 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/OneOrMorePath.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/OneOrMorePath.java @@ -97,7 +97,7 @@ public PlanNode getAnyAdded(ConnectionsGroup connectionsGroup, Resource[] dataGr @Override public boolean isSupported() { - return true; + return false; } @Override diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/ZeroOrMorePath.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/ZeroOrMorePath.java index 59af1e127e..f1973fca58 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/ZeroOrMorePath.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/ZeroOrMorePath.java @@ -98,7 +98,7 @@ public PlanNode getAnyAdded(ConnectionsGroup connectionsGroup, Resource[] dataGr @Override public boolean isSupported() { - return true; + return false; } @Override diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DatatypeFilter.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DatatypeFilter.java index deeb33dfe2..16221da155 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DatatypeFilter.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DatatypeFilter.java @@ -36,7 +36,6 @@ public DatatypeFilter(PlanNode parent, IRI datatype, ConnectionsGroup connection super(parent, connectionsGroup); this.datatype = datatype; this.xsdDatatype = CoreDatatype.from(datatype).asXSDDatatype().orElse(null); -// stackTrace = Thread.currentThread().getStackTrace(); } @Override diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DebugPlanNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DebugPlanNode.java index b64d75baa9..0dd48ca7e9 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DebugPlanNode.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/DebugPlanNode.java @@ -37,7 +37,7 @@ public DebugPlanNode(PlanNode parent, String message, Consumer public DebugPlanNode(PlanNode parent, String message) { this.parent = parent; this.message = message; - // this.stackTrace = Thread.currentThread().getStackTrace(); + this.stackTrace = Thread.currentThread().getStackTrace(); } diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/EqualsJoinValue.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/EqualsJoinValue.java index b91933c5aa..593e22d9d6 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/EqualsJoinValue.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/EqualsJoinValue.java @@ -15,8 +15,13 @@ import org.apache.commons.text.StringEscapeUtils; import org.eclipse.rdf4j.common.iteration.CloseableIteration; import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class EqualsJoinValue implements PlanNode { + + static private final Logger logger = LoggerFactory.getLogger(EqualsJoinValue.class); + private final PlanNode left; private final PlanNode right; private final boolean useAsFilter; @@ -29,8 +34,9 @@ public EqualsJoinValue(PlanNode left, PlanNode right, boolean useAsFilter, Conne this.right = PlanNodeHelper.handleSorting(this, right, connectionsGroup); this.useAsFilter = useAsFilter; -// this.stackTrace = Thread.currentThread().getStackTrace(); - + if (logger.isDebugEnabled()) { + this.stackTrace = Thread.currentThread().getStackTrace(); + } } @Override diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicateObject.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicateObject.java index 6c6e49e583..cd9dc265ca 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicateObject.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicateObject.java @@ -26,6 +26,8 @@ import org.eclipse.rdf4j.sail.SailException; import org.eclipse.rdf4j.sail.memory.MemoryStoreConnection; import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -35,6 +37,8 @@ */ public class FilterByPredicateObject implements PlanNode { + static private final Logger logger = LoggerFactory.getLogger(FilterByPredicateObject.class); + private final SailConnection connection; private final boolean includeInferred; private final Set filterOnObject; @@ -54,6 +58,7 @@ public class FilterByPredicateObject implements PlanNode { public FilterByPredicateObject(SailConnection connection, Resource[] dataGraph, IRI filterOnPredicate, Set filterOnObject, PlanNode parent, boolean returnMatching, FilterOn filterOn, boolean includeInferred, ConnectionsGroup connectionsGroup) { + this.dataGraph = dataGraph; this.parent = PlanNodeHelper.handleSorting(this, parent, connectionsGroup); this.connection = connection; @@ -75,7 +80,9 @@ public FilterByPredicateObject(SailConnection connection, Resource[] dataGraph, && RDF.TYPE.equals(filterOnPredicate)) { typeFilterWithInference = true; } -// this.stackTrace = Thread.currentThread().getStackTrace(); + if (logger.isDebugEnabled()) { + this.stackTrace = Thread.currentThread().getStackTrace(); + } } @Override diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterPlanNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterPlanNode.java index a1879503fc..c44f511f61 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterPlanNode.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterPlanNode.java @@ -35,11 +35,13 @@ public abstract class FilterPlanNode implements MultiStreamPlanNode, PlanNode { private CloseableIteration iterator; private ValidationExecutionLogger validationExecutionLogger; private boolean closed; + StackTraceElement[] stackTrace; abstract boolean checkTuple(Reference t); public FilterPlanNode(PlanNode parent, ConnectionsGroup connectionsGroup) { this.parent = PlanNodeHelper.handleSorting(this, parent, connectionsGroup); +// this.stackTrace = Thread.currentThread().getStackTrace(); } public PlanNode getTrueNode(Class type) { diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToNodeShape.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToNodeShape.java index e78962815f..5f1752dbc4 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToNodeShape.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToNodeShape.java @@ -19,11 +19,14 @@ import org.apache.commons.text.StringEscapeUtils; import org.eclipse.rdf4j.common.iteration.CloseableIteration; import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Håvard Ottestad */ public class ShiftToNodeShape implements PlanNode { + static private final Logger logger = LoggerFactory.getLogger(ShiftToNodeShape.class); private StackTraceElement[] stackTrace; PlanNode parent; diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToPropertyShape.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToPropertyShape.java index 0e50147385..c9d88521e7 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToPropertyShape.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ShiftToPropertyShape.java @@ -19,11 +19,14 @@ import org.apache.commons.text.StringEscapeUtils; import org.eclipse.rdf4j.common.iteration.CloseableIteration; import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Håvard Ottestad */ public class ShiftToPropertyShape implements PlanNode { + static private final Logger logger = LoggerFactory.getLogger(ShiftToPropertyShape.class); private StackTraceElement[] stackTrace; PlanNode parent; diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/AbstractShaclTest.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/AbstractShaclTest.java index 53af6c3ce4..9a3d4f8afa 100644 --- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/AbstractShaclTest.java +++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/AbstractShaclTest.java @@ -113,7 +113,12 @@ abstract public class AbstractShaclTest { private static final Set ignoredTestCases = Set.of( "test-cases/path/oneOrMorePath", + "test-cases/nodeKind/oneOrMorePathComplex", + "test-cases/nodeKind/zeroOrMorePathComplex", + "test-cases/nodeKind/oneOrMorePathSimple", + "test-cases/minCount/oneOrMorePath", "test-cases/path/zeroOrMorePath", + "test-cases/minCount/zeroOrMorePath", "test-cases/path/zeroOrOnePath" ); diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/W3cComplianceTest.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/W3cComplianceTest.java index 965569a6ec..ecaf7e3c8f 100644 --- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/W3cComplianceTest.java +++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/W3cComplianceTest.java @@ -56,6 +56,9 @@ public class W3cComplianceTest { private final static Set TESTS_FAILING_DUE_TO_MISSING_FEATURES_FROM_THE_SPEC = Set.of( "/core/node/xone-001.ttl", "/core/node/xone-duplicate.ttl", + "/core/path/path-complex-001.ttl", + "/core/path/path-oneOrMore-001.ttl", + "/core/path/path-zeroOrMore-001.ttl", "/core/path/path-zeroOrOne-001.ttl", "/core/property/qualifiedMinCountDisjoint-001.ttl", "/core/property/qualifiedValueShapesDisjoint-001.ttl",