Skip to content
This repository has been archived by the owner on Feb 22, 2020. It is now read-only.

Commit

Permalink
#743 minor cleanup and copyright notice
Browse files Browse the repository at this point in the history
  • Loading branch information
hmottestad committed Feb 14, 2018
1 parent d7628c3 commit 69711f1
Show file tree
Hide file tree
Showing 45 changed files with 425 additions and 283 deletions.
Expand Up @@ -12,22 +12,18 @@
import org.eclipse.rdf4j.model.Literal;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.BufferedTupleFromFilter;
import org.eclipse.rdf4j.sail.shacl.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.planNodes.DirectTupleFromFilter;
import org.eclipse.rdf4j.sail.shacl.planNodes.ExternalTypeFilterNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.GroupByCount;
import org.eclipse.rdf4j.sail.shacl.planNodes.LoggingNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.MaxCountFilter;
import org.eclipse.rdf4j.sail.shacl.planNodes.MergeNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.MinCountFilter;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.TrimTuple;
import org.eclipse.rdf4j.sail.shacl.planNodes.Unique;

Expand All @@ -36,13 +32,13 @@

public class MaxCountPropertyShape extends PathPropertyShape {

public long maxCount;
private long maxCount;

public MaxCountPropertyShape(Resource id, SailRepositoryConnection connection, Shape shape) {
MaxCountPropertyShape(Resource id, SailRepositoryConnection connection, Shape shape) {
super(id, connection, shape);

try (Stream<Statement> stream = Iterations.stream(connection.getStatements(id, SHACL.MAX_COUNT, null, true))) {
maxCount = stream.map(Statement::getObject).map(v -> (Literal) v).map(Literal::longValue).findAny().get();
maxCount = stream.map(Statement::getObject).map(v -> (Literal) v).map(Literal::longValue).findAny().orElseThrow(() -> new RuntimeException("Expected to find sh:maxCount on " + id));
}

}
Expand All @@ -55,12 +51,11 @@ public String toString() {
public PlanNode getPlan(ShaclSailConnection shaclSailConnection, Shape shape) {



PlanNode planAddedStatements = new LoggingNode(shape.getPlanAddedStatements(shaclSailConnection, shape));

PlanNode planAddedStatements1 = new LoggingNode(super.getPlanAddedStatements(shaclSailConnection, shape));

if(shape instanceof TargetClass){
if (shape instanceof TargetClass) {
planAddedStatements1 = new LoggingNode(((TargetClass) shape).getTypeFilterPlan(shaclSailConnection, planAddedStatements1));
}

Expand All @@ -83,7 +78,7 @@ public PlanNode getPlan(ShaclSailConnection shaclSailConnection, Shape shape) {

DirectTupleFromFilter directTupleFromFilter = new DirectTupleFromFilter();

new MaxCountFilter(groupByCount, null, directTupleFromFilter, maxCount);
new MaxCountFilter(groupByCount, null, directTupleFromFilter, maxCount);

PlanNode mergeNode1 = new MergeNode(new LoggingNode(directTupleFromFilter), new LoggingNode(invalidValues));

Expand Down
Expand Up @@ -18,14 +18,14 @@
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.planNodes.DirectTupleFromFilter;
import org.eclipse.rdf4j.sail.shacl.planNodes.GroupByCount;
import org.eclipse.rdf4j.sail.shacl.planNodes.LeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.planNodes.LoggingNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.MergeNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.MinCountFilter;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.Select;
import org.eclipse.rdf4j.sail.shacl.planNodes.TrimTuple;
import org.eclipse.rdf4j.sail.shacl.planNodes.Unique;
Expand All @@ -37,13 +37,15 @@
*/
public class MinCountPropertyShape extends PathPropertyShape {

public long minCount;
private long minCount;
private boolean optimizeWhenNoStatementsRemoved = true;

public MinCountPropertyShape(Resource id, SailRepositoryConnection connection, Shape shape) {

MinCountPropertyShape(Resource id, SailRepositoryConnection connection, Shape shape) {
super(id, connection, shape);

try (Stream<Statement> stream = Iterations.stream(connection.getStatements(id, SHACL.MIN_COUNT, null, true))) {
minCount = stream.map(Statement::getObject).map(v -> (Literal) v).map(Literal::longValue).findAny().get();
minCount = stream.map(Statement::getObject).map(v -> (Literal) v).map(Literal::longValue).findAny().orElseThrow(() -> new RuntimeException("Expect to find sh:minCount on " + id));
}

}
Expand All @@ -57,9 +59,8 @@ public PlanNode getPlan(ShaclSailConnection shaclSailConnection, Shape shape) {

PlanNode topNode;

boolean optimizeWhenNoStatementsRemoved = true;

if(!optimizeWhenNoStatementsRemoved || shaclSailConnection.stats.hasRemoved()){
if (!optimizeWhenNoStatementsRemoved || shaclSailConnection.stats.hasRemoved()) {
PlanNode planRemovedStatements = new LoggingNode(new TrimTuple(new LoggingNode(super.getPlanRemovedStatements(shaclSailConnection, shape)), 1));

PlanNode filteredPlanRemovedStatements = planRemovedStatements;
Expand All @@ -80,18 +81,17 @@ public PlanNode getPlan(ShaclSailConnection shaclSailConnection, Shape shape) {
// Persumably BulkedExternalLeftOuterJoin will be high if super.getPlanAddedStatements has a high number of statements for other subjects that in "unique"
//topNode = new LoggingNode(new BulkedExternalLeftOuterJoin(unique, shaclSailConnection.addedStatements, path.getQuery()));

}else {
} else {
String query = "";
if(shape instanceof TargetClass){
query = ((TargetClass)shape).getQuery();
if (shape instanceof TargetClass) {
query = ((TargetClass) shape).getQuery();
}

query += "\n OPTIONAL { "+path.getQuery()+" }";
query += "\n OPTIONAL { " + path.getQuery() + " }";
topNode = new LoggingNode(new Select(shaclSailConnection.addedStatements, query));
}



PlanNode groupBy = new LoggingNode(new GroupByCount(topNode));

DirectTupleFromFilter filteredStatements = new DirectTupleFromFilter();
Expand All @@ -108,10 +108,7 @@ public PlanNode getPlan(ShaclSailConnection shaclSailConnection, Shape shape) {
DirectTupleFromFilter filteredStatements2 = new DirectTupleFromFilter();
new MinCountFilter(groupBy2, null, filteredStatements2, minCount);

PlanNode minCountFilter2 = new LoggingNode(filteredStatements2);


return minCountFilter2;
return new LoggingNode(filteredStatements2);

}

Expand Down
21 changes: 7 additions & 14 deletions shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/AST/Path.java
Expand Up @@ -8,39 +8,32 @@

package org.eclipse.rdf4j.sail.shacl.AST;

import org.eclipse.rdf4j.IsolationLevels;
import org.eclipse.rdf4j.common.iteration.Iterations;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
import org.eclipse.rdf4j.query.Query;
import org.eclipse.rdf4j.query.parser.QueryParserFactory;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryResult;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.repository.sparql.query.SPARQLTupleQuery;

import java.util.stream.Stream;

/**
* @author Heshan Jayasinghe
*/
public class Path implements RequiresEvalutation, QueryGenerator{
public class Path implements RequiresEvalutation, QueryGenerator {

IRI path;
private IRI path;

Resource id;
private Resource id;


Path(Resource id, SailRepositoryConnection connection) {
this.id = id;

try (Stream<Statement> stream = Iterations.stream(connection.getStatements(id, SHACL.PATH, null, true))) {
path = stream.map(Statement::getObject).map(v -> (IRI) v).findAny().get();
path = stream.map(Statement::getObject).map(v -> (IRI) v).findAny().orElseThrow(() -> new RuntimeException("Expected to find sh:path on " + id));
}

}
Expand All @@ -54,11 +47,11 @@ public String toString() {
public boolean requiresEvalutation(Repository addedStatements, Repository removedStatements) {
boolean requiresEvalutation;
try (RepositoryConnection addedStatementsConnection = addedStatements.getConnection()) {
requiresEvalutation = addedStatementsConnection.hasStatement(null,path, null, false);
requiresEvalutation = addedStatementsConnection.hasStatement(null, path, null, false);
}

try (RepositoryConnection removedStatementsConnection = removedStatements.getConnection()) {
requiresEvalutation |= removedStatementsConnection.hasStatement(null,path, null, false);
requiresEvalutation |= removedStatementsConnection.hasStatement(null, path, null, false);
}

return requiresEvalutation;
Expand All @@ -67,7 +60,7 @@ public boolean requiresEvalutation(Repository addedStatements, Repository remove
@Override
public String getQuery() {

return "?a <"+path+"> ?c. ";
return "?a <" + path + "> ?c. ";

}
}
Expand Up @@ -8,13 +8,11 @@

package org.eclipse.rdf4j.sail.shacl.AST;

import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.Select;

/**
Expand Down
Expand Up @@ -8,8 +8,8 @@

package org.eclipse.rdf4j.sail.shacl.AST;

import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;

/**
* @author Heshan Jayasinghe
Expand All @@ -19,6 +19,7 @@ public interface PlanGenerator {
PlanNode getPlan(ShaclSailConnection shaclSailConnection, Shape shape);

PlanNode getPlanAddedStatements(ShaclSailConnection shaclSailConnection, Shape shape);

PlanNode getPlanRemovedStatements(ShaclSailConnection shaclSailConnection, Shape shape);


Expand Down
Expand Up @@ -13,14 +13,12 @@
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.repository.RepositoryResult;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand All @@ -29,12 +27,12 @@
*/
public class PropertyShape implements PlanGenerator, RequiresEvalutation {

Resource id;
private Resource id;

Shape shape;


public PropertyShape(Resource id, Shape shape) {
PropertyShape(Resource id, Shape shape) {
this.id = id;
this.shape = shape;
}
Expand Down
@@ -1,7 +1,12 @@
package org.eclipse.rdf4j.sail.shacl.AST;
/*******************************************************************************
* Copyright (c) 2016 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
* which accompanies this distribution, and is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*******************************************************************************/

import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.query.Query;
package org.eclipse.rdf4j.sail.shacl.AST;

public interface QueryGenerator {
String getQuery();
Expand Down
@@ -1,3 +1,11 @@
/*******************************************************************************
* Copyright (c) 2016 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
* which accompanies this distribution, and is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*******************************************************************************/

package org.eclipse.rdf4j.sail.shacl.AST;

import org.eclipse.rdf4j.repository.Repository;
Expand Down
Expand Up @@ -14,9 +14,9 @@
import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;

import java.util.List;
import java.util.Objects;
Expand All @@ -28,7 +28,7 @@
*/
public class Shape implements PlanGenerator, RequiresEvalutation {

List<PropertyShape> propertyShapes;
private List<PropertyShape> propertyShapes;

public Shape(Resource id, SailRepositoryConnection connection) {
propertyShapes = PropertyShape.Factory.getProprtyShapes(id, connection, this);
Expand Down Expand Up @@ -70,8 +70,7 @@ public static List<Shape> getShapes(SailRepositoryConnection connection) {
return stream.map(Statement::getSubject).map(shapeId -> {
if (hasTargetClass(shapeId, connection)) {
return new TargetClass(shapeId, connection);
}
else {
} else {
return null; // target class shapes are the only supported shapes
}
})
Expand Down
Expand Up @@ -8,7 +8,6 @@

package org.eclipse.rdf4j.sail.shacl.AST;

import org.eclipse.rdf4j.IsolationLevels;
import org.eclipse.rdf4j.common.iteration.Iterations;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
Expand All @@ -18,24 +17,24 @@
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.plan.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.ExternalTypeFilterNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.PlanNode;
import org.eclipse.rdf4j.sail.shacl.planNodes.Select;

import java.util.stream.Stream;

/**
* @author Heshan Jayasinghe
*/
public class TargetClass extends Shape implements QueryGenerator{
public class TargetClass extends Shape implements QueryGenerator {

Resource targetClass;

TargetClass(Resource id, SailRepositoryConnection connection) {
super(id, connection);

try (Stream<Statement> stream = Iterations.stream(connection.getStatements(id, SHACL.TARGET_CLASS, null))) {
targetClass = stream.map(Statement::getObject).map(v -> (Resource) v).findAny().get();
targetClass = stream.map(Statement::getObject).map(v -> (Resource) v).findAny().orElseThrow(() -> new RuntimeException("Expected to find sh:targetClass on " + id));
}

}
Expand Down Expand Up @@ -68,7 +67,7 @@ public boolean requiresEvalutation(Repository addedStatements, Repository remove

@Override
public String getQuery() {
return "?a a <"+targetClass+">";
return "?a a <" + targetClass + ">";
}

public PlanNode getTypeFilterPlan(ShaclSailConnection shaclSailConnection, PlanNode parent) {
Expand Down

0 comments on commit 69711f1

Please sign in to comment.