From ffe0f3f5ad43f4e8c14c389206ff6aa43055001f Mon Sep 17 00:00:00 2001 From: "Nazarov, Rodion" Date: Thu, 20 Jul 2023 12:41:53 +0200 Subject: [PATCH] [Upd] Add support of kbss:iterationCount and kbss:onlyIfTripleCountChanges for Rdf4jUpdateModule --- .../rdf4j-update/rdf4j-update.sms.ttl | 2 ++ .../cz/cvut/spipes/constants/KBSS_MODULE.java | 1 + .../spipes/modules/Rdf4jUpdateModule.java | 26 ++++++++++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/doc/examples/rdf4j-update/rdf4j-update.sms.ttl b/doc/examples/rdf4j-update/rdf4j-update.sms.ttl index 20ca2c6f..9e12d1bf 100644 --- a/doc/examples/rdf4j-update/rdf4j-update.sms.ttl +++ b/doc/examples/rdf4j-update/rdf4j-update.sms.ttl @@ -50,6 +50,8 @@ INSERT { } """ ; ]; + kbss:has-max-iteration-count 5 ; + kbss:only-if-triple-count-changes false; rdf4j:p-rdf4j-server-url "http://localhost:8080/rdf4j-server/" ; rdf4j:p-rdf4j-repository-name "test-update" ; . diff --git a/s-pipes-core/src/main/java/cz/cvut/spipes/constants/KBSS_MODULE.java b/s-pipes-core/src/main/java/cz/cvut/spipes/constants/KBSS_MODULE.java index b55659fe..bdf554bd 100644 --- a/s-pipes-core/src/main/java/cz/cvut/spipes/constants/KBSS_MODULE.java +++ b/s-pipes-core/src/main/java/cz/cvut/spipes/constants/KBSS_MODULE.java @@ -20,6 +20,7 @@ protected static final Property property(String local ) public static final Property is_parse_text = property("is-parse-text"); public static final Property has_max_iteration_count = property("has-max-iteration-count"); public static final Property has_resource_uri = property("has-resource-uri"); + public static final Property only_if_triple_count_changes = property("only-if-triple-count-changes"); /** returns the URI for this schema diff --git a/s-pipes-modules/module-rdf4j/src/main/java/cz/cvut/spipes/modules/Rdf4jUpdateModule.java b/s-pipes-modules/module-rdf4j/src/main/java/cz/cvut/spipes/modules/Rdf4jUpdateModule.java index 219d64ae..6187a063 100644 --- a/s-pipes-modules/module-rdf4j/src/main/java/cz/cvut/spipes/modules/Rdf4jUpdateModule.java +++ b/s-pipes-modules/module-rdf4j/src/main/java/cz/cvut/spipes/modules/Rdf4jUpdateModule.java @@ -42,6 +42,16 @@ public class Rdf4jUpdateModule extends AbstractModule { private List updateQueries; private Repository updateRepository; + private int iterationCount; + private boolean onlyIfTripleCountChanges; + + public int getIterationCount() { + return iterationCount; + } + + public void setIterationCount(int iterationCount) { + this.iterationCount = iterationCount; + } public String getRdf4jServerURL() { return rdf4jServerURL; @@ -77,7 +87,12 @@ ExecutionContext executeSelf() { for (Resource updateQueryResource : updateQueries) { String updateQuery = updateQueryResource.getProperty(SP.text).getLiteral().getString(); - makeUpdate(updateQuery, updateConnection); + for(int i = 0;i < iterationCount;i++) { + long oldTriplesCount = updateConnection.size(); + makeUpdate(updateQuery, updateConnection); + long newTriplesCount = updateConnection.size(); + if(onlyIfTripleCountChanges && (newTriplesCount == oldTriplesCount) )break; + } } } catch (RepositoryException e) { throw new RepositoryAccessException(rdf4jRepositoryName, e); @@ -117,8 +132,13 @@ public String getTypeURI() { @Override public void loadConfiguration() { - String rdf4jServerURL = getEffectiveValue(P_RDF4J_SERVER_URL).asLiteral().getString(); - String rdf4jRepositoryName = getEffectiveValue(P_RDF4J_REPOSITORY_NAME).asLiteral().getString(); + rdf4jServerURL = getEffectiveValue(P_RDF4J_SERVER_URL).asLiteral().getString(); + rdf4jRepositoryName = getEffectiveValue(P_RDF4J_REPOSITORY_NAME).asLiteral().getString(); + iterationCount = getPropertyValue(KBSS_MODULE.has_max_iteration_count,1); + onlyIfTripleCountChanges = getPropertyValue(KBSS_MODULE.only_if_triple_count_changes,false); + LOG.debug("Iteration count={}\nOnlyIf...Changes={}" + ,iterationCount + ,onlyIfTripleCountChanges); updateRepository = new SPARQLRepository(rdf4jServerURL + "repositories/" + rdf4jRepositoryName + "/statements"); updateQueries = getResourcesByProperty(SML.updateQuery); }