From 72813eb50f2f1114166324bd51f219e691d856aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Sun, 24 Dec 2023 15:40:56 +0100 Subject: [PATCH] code cleanup (+1 squashed commit) Squashed commits: [fff7976510] code cleanup --- .../AbstractPairwiseConstraintComponent.java | 97 +++++-------------- .../DisjointConstraintComponent.java | 2 +- .../EqualsConstraintComponent.java | 2 +- .../LessThanConstraintComponent.java | 2 +- .../LessThanOrEqualsConstraintComponent.java | 2 +- ...DisjointValuesBasedOnPathAndPredicate.java | 7 -- ...nOrEqualValuesBasedOnPathAndPredicate.java | 10 -- ...LessThanValuesBasedOnPathAndPredicate.java | 7 -- 8 files changed, 27 insertions(+), 102 deletions(-) diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractPairwiseConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractPairwiseConstraintComponent.java index 08fc8df2470..b299317689f 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractPairwiseConstraintComponent.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractPairwiseConstraintComponent.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Eclipse RDF4J contributors. + * Copyright (c) 2023 Eclipse RDF4J contributors. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Distribution License v1.0 @@ -7,7 +7,7 @@ * http://www.eclipse.org/org/documents/edl-v10.php. * * SPDX-License-Identifier: BSD-3-Clause - *******************************************************************************/ + ******************************************************************************/ package org.eclipse.rdf4j.sail.shacl.ast.constraintcomponents; @@ -49,11 +49,17 @@ public AbstractPairwiseConstraintComponent(IRI predicate, Shape shape) { this.shape = shape; } - abstract IRI getIRI(); + /** + * The abstract method that is implemented by the subclasses to return the IRI of the constraint component, e.g. + * sh:equals, sh:disjoint etc. + * + * @return The IRI of the constraint component + */ + abstract IRI getConstraintIri(); @Override public void toModel(Resource subject, IRI predicate, Model model, Set cycleDetection) { - model.add(subject, getIRI(), this.predicate); + model.add(subject, getConstraintIri(), this.predicate); } @Override @@ -112,6 +118,18 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections return getPairwiseCheck(connectionsGroup, validationSettings, allTargets, subject, object, targetQueryFragment); } + /** + * The abstract method that is implemented by the subclasses to add the pairwise check as a PlanNode to the + * validation plan. + * + * @param connectionsGroup + * @param validationSettings + * @param allTargets + * @param subject + * @param object + * @param targetQueryFragment + * @return The PlanNode that performs the pairwise check + */ abstract PlanNode getPairwiseCheck(ConnectionsGroup connectionsGroup, ValidationSettings validationSettings, PlanNode allTargets, StatementMatcher.Variable subject, StatementMatcher.Variable object, SparqlFragment targetQueryFragment); @@ -136,55 +154,6 @@ private PlanNode getAllTargetsBasedOnPredicate(ConnectionsGroup connectionsGroup return Unique.getInstance(UnionNode.getInstance(targetFilter1, targetFilter2), false); } -// @Override -// public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope, -// StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) { -// assert scope == Scope.propertyShape; -// -// PlanNode allTargetsPlan = getTargetChain() -// .getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(), -// stableRandomVariableProvider) -// .getPlanNode(connectionsGroup, dataGraph, Scope.nodeShape, true, null); -// -// allTargetsPlan = new ShiftToPropertyShape(allTargetsPlan); -// -// // removed statements that match predicate could affect sh:or -// if (connectionsGroup.getStats().hasRemoved()) { -// PlanNode deletedPredicates = new UnorderedSelect(connectionsGroup.getRemovedStatements(), null, predicate, -// null, dataGraph, UnorderedSelect.Mapper.SubjectScopedMapper.getFunction(Scope.propertyShape)); -// deletedPredicates = getTargetChain() -// .getEffectiveTarget(Scope.propertyShape, connectionsGroup.getRdfsSubClassOfReasoner(), -// stableRandomVariableProvider) -// .getTargetFilter(connectionsGroup, dataGraph, deletedPredicates); -// deletedPredicates = getTargetChain() -// .getEffectiveTarget(Scope.propertyShape, connectionsGroup.getRdfsSubClassOfReasoner(), -// stableRandomVariableProvider) -// .extend(deletedPredicates, connectionsGroup, dataGraph, Scope.propertyShape, EffectiveTarget.Extend.left, -// false, -// null); -// allTargetsPlan = UnionNode.getInstanceDedupe(allTargetsPlan, deletedPredicates); -// } -// -// // added statements that match predicate could affect sh:not -// if (connectionsGroup.getStats().hasAdded()) { -// PlanNode addedPredicates = new UnorderedSelect(connectionsGroup.getAddedStatements(), null, predicate, -// null, dataGraph, UnorderedSelect.Mapper.SubjectScopedMapper.getFunction(Scope.propertyShape)); -// addedPredicates = getTargetChain() -// .getEffectiveTarget(Scope.propertyShape, connectionsGroup.getRdfsSubClassOfReasoner(), -// stableRandomVariableProvider) -// .getTargetFilter(connectionsGroup, dataGraph, addedPredicates); -// addedPredicates = getTargetChain() -// .getEffectiveTarget(Scope.propertyShape, connectionsGroup.getRdfsSubClassOfReasoner(), -// stableRandomVariableProvider) -// .extend(addedPredicates, connectionsGroup, dataGraph, Scope.propertyShape, EffectiveTarget.Extend.left, -// false, -// null); -// allTargetsPlan = UnionNode.getInstanceDedupe(allTargetsPlan, addedPredicates); -// } -// -// return Unique.getInstance(new TrimToTarget(allTargetsPlan), false); -// } - @Override public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope, StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) { @@ -291,26 +260,6 @@ public boolean requiresEvaluation(ConnectionsGroup connectionsGroup, Scope scope || connectionsGroup.getAddedStatements().hasStatement(null, predicate, null, true, dataGraph); } - @Override - public ValidationApproach getPreferredValidationApproach(ConnectionsGroup connectionsGroup) { - return ValidationApproach.Transactional; - } - - @Override - public ValidationApproach getOptimalBulkValidationApproach() { - return ValidationApproach.Transactional; - } - - @Override - public ConstraintComponent deepClone() { - throw new UnsupportedOperationException(); - } - - @Override - public List getDefaultMessage() { - return List.of(); - } - @Override public boolean equals(Object o) { if (this == o) { @@ -327,7 +276,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return predicate.hashCode() + "LessThanConstraintComponent".hashCode(); + return predicate.hashCode() + "AbstractPairwiseConstraintComponent".hashCode(); } @Override diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DisjointConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DisjointConstraintComponent.java index 81ff9101913..fda7e0a1e35 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DisjointConstraintComponent.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DisjointConstraintComponent.java @@ -34,7 +34,7 @@ public DisjointConstraintComponent(IRI predicate, Shape shape) { } @Override - IRI getIRI() { + IRI getConstraintIri() { return SHACL.DISJOINT; } diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/EqualsConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/EqualsConstraintComponent.java index b780365a345..893c8de370c 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/EqualsConstraintComponent.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/EqualsConstraintComponent.java @@ -34,7 +34,7 @@ public EqualsConstraintComponent(IRI predicate, Shape shape) { } @Override - IRI getIRI() { + IRI getConstraintIri() { return SHACL.EQUALS; } diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanConstraintComponent.java index 7423dabb891..287982ea1a3 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanConstraintComponent.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanConstraintComponent.java @@ -34,7 +34,7 @@ public LessThanConstraintComponent(IRI predicate, Shape shape) { } @Override - IRI getIRI() { + IRI getConstraintIri() { return SHACL.LESS_THAN; } diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanOrEqualsConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanOrEqualsConstraintComponent.java index 4808dbed68e..84be3c440ac 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanOrEqualsConstraintComponent.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/LessThanOrEqualsConstraintComponent.java @@ -34,7 +34,7 @@ public LessThanOrEqualsConstraintComponent(IRI predicate, Shape shape) { } @Override - IRI getIRI() { + IRI getConstraintIri() { return SHACL.LESS_THAN_OR_EQUALS; } diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckDisjointValuesBasedOnPathAndPredicate.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckDisjointValuesBasedOnPathAndPredicate.java index ed1849eb356..fe6dce073ff 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckDisjointValuesBasedOnPathAndPredicate.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckDisjointValuesBasedOnPathAndPredicate.java @@ -24,13 +24,6 @@ import com.google.common.collect.Sets; -/** - * Used by sh:equals to return any targets and values where the target has values by path that are not values by the - * predicate, or vice versa. It returns the targets and any symmetricDifference values when comparing the set of values - * by path and by predicate. - * - * @author Håvard Ottestad - */ public class CheckDisjointValuesBasedOnPathAndPredicate extends AbstractPairwisePlanNode { public CheckDisjointValuesBasedOnPathAndPredicate(SailConnection connection, Resource[] dataGraph, PlanNode parent, diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanOrEqualValuesBasedOnPathAndPredicate.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanOrEqualValuesBasedOnPathAndPredicate.java index 6f4b715ba8f..b9d9d8e5eac 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanOrEqualValuesBasedOnPathAndPredicate.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanOrEqualValuesBasedOnPathAndPredicate.java @@ -19,24 +19,14 @@ import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.query.algebra.Compare; import org.eclipse.rdf4j.query.algebra.evaluation.util.QueryEvaluationUtility; -import org.eclipse.rdf4j.query.algebra.evaluation.util.ValueComparator; import org.eclipse.rdf4j.sail.SailConnection; import org.eclipse.rdf4j.sail.shacl.ast.Shape; import org.eclipse.rdf4j.sail.shacl.ast.SparqlFragment; import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher; import org.eclipse.rdf4j.sail.shacl.ast.constraintcomponents.ConstraintComponent; -/** - * Used by sh:equals to return any targets and values where the target has values by path that are not values by the - * predicate, or vice versa. It returns the targets and any symmetricDifference values when comparing the set of values - * by path and by predicate. - * - * @author Håvard Ottestad - */ public class CheckLessThanOrEqualValuesBasedOnPathAndPredicate extends AbstractPairwisePlanNode { - private final ValueComparator valueComparator = new ValueComparator(); - public CheckLessThanOrEqualValuesBasedOnPathAndPredicate(SailConnection connection, Resource[] dataGraph, PlanNode parent, IRI predicate, StatementMatcher.Variable subject, StatementMatcher.Variable object, SparqlFragment targetQueryFragment, Shape shape, diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanValuesBasedOnPathAndPredicate.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanValuesBasedOnPathAndPredicate.java index 027e5cf10c7..41f42559618 100644 --- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanValuesBasedOnPathAndPredicate.java +++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/CheckLessThanValuesBasedOnPathAndPredicate.java @@ -26,13 +26,6 @@ import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher; import org.eclipse.rdf4j.sail.shacl.ast.constraintcomponents.ConstraintComponent; -/** - * Used by sh:equals to return any targets and values where the target has values by path that are not values by the - * predicate, or vice versa. It returns the targets and any symmetricDifference values when comparing the set of values - * by path and by predicate. - * - * @author Håvard Ottestad - */ public class CheckLessThanValuesBasedOnPathAndPredicate extends AbstractPairwisePlanNode { private final ValueComparator valueComparator = new ValueComparator();