JSONLD_MODE = new RioSettingImpl<>(
"org.eclipse.rdf4j.rio.jsonld_mode", "JSONLD Mode", JSONLDMode.EXPAND);
@@ -150,7 +142,6 @@ public class JSONLDSettings {
* Default to false
*
* Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.hierarchical_view}.
- *
*/
public static final BooleanRioSetting HIERARCHICAL_VIEW = new BooleanRioSetting(
"org.eclipse.rdf4j.rio.jsonld.hierarchical_view", "Hierarchical representation of the JSON", Boolean.FALSE);
@@ -161,38 +152,88 @@ public class JSONLDSettings {
* array of the desired values.
*
* Default:
- * {@code Set.of("http://www.w3.org/ns/anno.jsonld", "http://www.w3.org/ns/activitystreams.jsonld", "http://www.w3.org/ns/ldp.jsonld", "http://www.w3.org/ns/oa.jsonld", "http://www.w3.org/ns/hydra/context.jsonld", "http://schema.org/", "https://w3id.org/security/v1", "https://w3c.github.io/json-ld-rc/context.jsonld", "https://www.w3.org/2018/credentials/v1", "https://health-lifesci.schema.org/", "https://auto.schema.org/", "https://bib.schema.org/", "http://xmlns.com/foaf/spec/index.jsonld", "https://pending.schema.org/", "https://schema.org/", "https://schema.org/docs/jsonldcontext.jsonld", "https://schema.org/version/latest/schemaorg-current-https.jsonld", "https://schema.org/version/latest/schemaorg-all-http.jsonld", "https://schema.org/version/latest/schemaorg-all-https.jsonld", "https://schema.org/version/latest/schemaorg-current-http.jsonld", "https://schema.org/version/latest/schemaorg-all.jsonld", "https://schema.org/version/latest/schemaorg-current.jsonld", "https://project-open-data.cio.gov/v1.1/schema/catalog.jsonld", "https://geojson.org/geojson-ld/geojson-context.jsonld", "https://www.w3.org/2019/wot/td/v1");
- *
+ * {@code Set.of("http://www.w3.org/ns/anno.jsonld", "https://www.w3.org/ns/anno.jsonld", "http://www.w3.org/ns/anno", "https://www.w3.org/ns/anno", "http://www.w3.org/ns/activitystreams.jsonld", "https://www.w3.org/ns/activitystreams.jsonld", "http://www.w3.org/ns/activitystreams", "https://www.w3.org/ns/activitystreams", "http://www.w3.org/ns/ldp.jsonld", "https://www.w3.org/ns/ldp.jsonld", "http://www.w3.org/ns/ldp", "https://www.w3.org/ns/ldp", "http://www.w3.org/ns/oa.jsonld", "https://www.w3.org/ns/oa.jsonld", "http://www.w3.org/ns/oa", "https://www.w3.org/ns/oa", "http://www.w3.org/ns/hydra/context.jsonld", "https://www.w3.org/ns/hydra/context.jsonld", "http://www.w3.org/ns/hydra/context", "https://www.w3.org/ns/hydra/context", "http://www.w3.org/2018/credentials/v1.jsonld", "https://www.w3.org/2018/credentials/v1.jsonld", "http://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/v1", "http://www.w3.org/2019/wot/td/v1.jsonld", "https://www.w3.org/2019/wot/td/v1.jsonld", "http://www.w3.org/2019/wot/td/v1", "https://www.w3.org/2019/wot/td/v1", "http://w3c.github.io/json-ld-rc/context.jsonld", "https://w3c.github.io/json-ld-rc/context.jsonld", "http://schema.org/", "https://schema.org/", "http://health-lifesci.schema.org/", "https://health-lifesci.schema.org/", "http://auto.schema.org/", "https://auto.schema.org/", "http://bib.schema.org/", "https://bib.schema.org/", "http://pending.schema.org/", "https://pending.schema.org/", "http://schema.org", "https://schema.org", "http://health-lifesci.schema.org", "https://health-lifesci.schema.org", "http://auto.schema.org", "https://auto.schema.org", "http://bib.schema.org", "https://bib.schema.org", "http://pending.schema.org", "https://pending.schema.org", "http://schema.org/docs/jsonldcontext.jsonld", "https://schema.org/docs/jsonldcontext.jsonld", "http://schema.org/version/latest/schemaorg-current-https.jsonld", "https://schema.org/version/latest/schemaorg-current-https.jsonld", "http://schema.org/version/latest/schemaorg-all-http.jsonld", "https://schema.org/version/latest/schemaorg-all-http.jsonld", "http://schema.org/version/latest/schemaorg-all-https.jsonld", "https://schema.org/version/latest/schemaorg-all-https.jsonld", "http://schema.org/version/latest/schemaorg-current-http.jsonld", "https://schema.org/version/latest/schemaorg-current-http.jsonld", "http://schema.org/version/latest/schemaorg-all.jsonld", "https://schema.org/version/latest/schemaorg-all.jsonld", "http://schema.org/version/latest/schemaorg-current.jsonld", "https://schema.org/version/latest/schemaorg-current.jsonld", "http://project-open-data.cio.gov/v1.1/schema/catalog.jsonld", "https://project-open-data.cio.gov/v1.1/schema/catalog.jsonld", "http://geojson.org/geojson-ld/geojson-context.jsonld", "https://geojson.org/geojson-ld/geojson-context.jsonld", "http://w3id.org/security/v1", "https://w3id.org/security/v1", "http://xmlns.com/foaf/spec/index.jsonld", "https://xmlns.com/foaf/spec/index.jsonld", "http://xmlns.com/foaf/spec/", "https://xmlns.com/foaf/spec/", "http://xmlns.com/foaf/spec", "https://xmlns.com/foaf/spec")}
*/
public static final SetRioSetting WHITELIST = new SetRioSetting<>(
"org.eclipse.rdf4j.rio.jsonld_whitelist",
"Whitelist of remote/local resources that the JSON-LD parser can retrieve. Set of URIs as strings.",
Set.of(
"http://www.w3.org/ns/anno.jsonld",
+ "https://www.w3.org/ns/anno.jsonld",
+ "http://www.w3.org/ns/anno",
+ "https://www.w3.org/ns/anno",
"http://www.w3.org/ns/activitystreams.jsonld",
+ "https://www.w3.org/ns/activitystreams.jsonld",
+ "http://www.w3.org/ns/activitystreams",
+ "https://www.w3.org/ns/activitystreams",
"http://www.w3.org/ns/ldp.jsonld",
+ "https://www.w3.org/ns/ldp.jsonld",
+ "http://www.w3.org/ns/ldp",
+ "https://www.w3.org/ns/ldp",
"http://www.w3.org/ns/oa.jsonld",
+ "https://www.w3.org/ns/oa.jsonld",
+ "http://www.w3.org/ns/oa",
+ "https://www.w3.org/ns/oa",
"http://www.w3.org/ns/hydra/context.jsonld",
- "http://schema.org/",
- "https://w3id.org/security/v1",
- "https://w3c.github.io/json-ld-rc/context.jsonld",
+ "https://www.w3.org/ns/hydra/context.jsonld",
+ "http://www.w3.org/ns/hydra/context",
+ "https://www.w3.org/ns/hydra/context",
+ "http://www.w3.org/2018/credentials/v1.jsonld",
+ "https://www.w3.org/2018/credentials/v1.jsonld",
+ "http://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/v1",
+ "http://www.w3.org/2019/wot/td/v1.jsonld",
+ "https://www.w3.org/2019/wot/td/v1.jsonld",
+ "http://www.w3.org/2019/wot/td/v1",
+ "https://www.w3.org/2019/wot/td/v1",
+ "http://w3c.github.io/json-ld-rc/context.jsonld",
+ "https://w3c.github.io/json-ld-rc/context.jsonld",
+ "http://schema.org/",
+ "https://schema.org/",
+ "http://health-lifesci.schema.org/",
"https://health-lifesci.schema.org/",
+ "http://auto.schema.org/",
"https://auto.schema.org/",
+ "http://bib.schema.org/",
"https://bib.schema.org/",
- "http://xmlns.com/foaf/spec/index.jsonld",
+ "http://pending.schema.org/",
"https://pending.schema.org/",
- "https://schema.org/",
+ "http://schema.org",
+ "https://schema.org",
+ "http://health-lifesci.schema.org",
+ "https://health-lifesci.schema.org",
+ "http://auto.schema.org",
+ "https://auto.schema.org",
+ "http://bib.schema.org",
+ "https://bib.schema.org",
+ "http://pending.schema.org",
+ "https://pending.schema.org",
+ "http://schema.org/docs/jsonldcontext.jsonld",
"https://schema.org/docs/jsonldcontext.jsonld",
+ "http://schema.org/version/latest/schemaorg-current-https.jsonld",
"https://schema.org/version/latest/schemaorg-current-https.jsonld",
+ "http://schema.org/version/latest/schemaorg-all-http.jsonld",
"https://schema.org/version/latest/schemaorg-all-http.jsonld",
+ "http://schema.org/version/latest/schemaorg-all-https.jsonld",
"https://schema.org/version/latest/schemaorg-all-https.jsonld",
+ "http://schema.org/version/latest/schemaorg-current-http.jsonld",
"https://schema.org/version/latest/schemaorg-current-http.jsonld",
+ "http://schema.org/version/latest/schemaorg-all.jsonld",
"https://schema.org/version/latest/schemaorg-all.jsonld",
+ "http://schema.org/version/latest/schemaorg-current.jsonld",
"https://schema.org/version/latest/schemaorg-current.jsonld",
+ "http://project-open-data.cio.gov/v1.1/schema/catalog.jsonld",
"https://project-open-data.cio.gov/v1.1/schema/catalog.jsonld",
+ "http://geojson.org/geojson-ld/geojson-context.jsonld",
"https://geojson.org/geojson-ld/geojson-context.jsonld",
- "https://www.w3.org/2019/wot/td/v1"
+ "http://w3id.org/security/v1",
+ "https://w3id.org/security/v1",
+ "http://xmlns.com/foaf/spec/index.jsonld",
+ "https://xmlns.com/foaf/spec/index.jsonld",
+ "http://xmlns.com/foaf/spec/",
+ "https://xmlns.com/foaf/spec/",
+ "http://xmlns.com/foaf/spec",
+ "https://xmlns.com/foaf/spec"
));
/**
diff --git a/core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/RDFParserHelper.java b/core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/RDFParserHelper.java
index 3d9d0f5414e..fbb27d608ab 100644
--- a/core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/RDFParserHelper.java
+++ b/core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/RDFParserHelper.java
@@ -190,7 +190,7 @@ public static Literal createLiteral(String label, String lang, IRI datatype, Par
try {
// Removes datatype for langString datatype with no language tag when VERIFY_DATATYPE_VALUES is False.
if ((workingDatatype == null || RDF.LANGSTRING.equals(workingDatatype))
- && (!workingLang.isPresent() || workingLang.get().isEmpty())
+ && (workingLang.isEmpty() || workingLang.get().isEmpty())
&& !parserConfig.get(BasicParserSettings.VERIFY_DATATYPE_VALUES)) {
workingLang = Optional.ofNullable(null);
workingDatatype = null;
diff --git a/core/rio/binary/pom.xml b/core/rio/binary/pom.xml
index e59d2265ff9..4ff5469eddf 100644
--- a/core/rio/binary/pom.xml
+++ b/core/rio/binary/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-binary
RDF4J: Rio - Binary
diff --git a/core/rio/datatypes/pom.xml b/core/rio/datatypes/pom.xml
index 4b8d0d984f7..b9d9dcadcfb 100644
--- a/core/rio/datatypes/pom.xml
+++ b/core/rio/datatypes/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-datatypes
RDF4J: Rio - Datatypes
diff --git a/core/rio/hdt/pom.xml b/core/rio/hdt/pom.xml
index c8311ec8f3d..f3647663a65 100644
--- a/core/rio/hdt/pom.xml
+++ b/core/rio/hdt/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-hdt
jar
diff --git a/core/rio/jsonld-legacy/pom.xml b/core/rio/jsonld-legacy/pom.xml
index f9574448da9..7509ef4b834 100644
--- a/core/rio/jsonld-legacy/pom.xml
+++ b/core/rio/jsonld-legacy/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-jsonld-legacy
RDF4J: Rio - JSON-LD 1.0 (legacy)
diff --git a/core/rio/jsonld-legacy/src/main/java/org/eclipse/rdf4j/rio/jsonld/legacy/JSONLDInternalRDFParser.java b/core/rio/jsonld-legacy/src/main/java/org/eclipse/rdf4j/rio/jsonld/legacy/JSONLDInternalRDFParser.java
index f61f310ef3a..2bb9232b2e2 100644
--- a/core/rio/jsonld-legacy/src/main/java/org/eclipse/rdf4j/rio/jsonld/legacy/JSONLDInternalRDFParser.java
+++ b/core/rio/jsonld-legacy/src/main/java/org/eclipse/rdf4j/rio/jsonld/legacy/JSONLDInternalRDFParser.java
@@ -64,7 +64,7 @@ public void handleStatement(RDFDataset result, Statement nextStatement) {
// In RDF-1.1, RDF-1.0 Plain Literals are now Typed Literals with
// type xsd:String
- if (!literal.getLanguage().isPresent() && datatype == null) {
+ if (literal.getLanguage().isEmpty() && datatype == null) {
datatype = XSD.STRING.stringValue();
}
diff --git a/core/rio/jsonld/pom.xml b/core/rio/jsonld/pom.xml
index ba1528865a2..c817e4db0af 100644
--- a/core/rio/jsonld/pom.xml
+++ b/core/rio/jsonld/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-jsonld
RDF4J: Rio - JSON-LD
diff --git a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/CachingDocumentLoader.java b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/CachingDocumentLoader.java
index c4363a1f4db..aea446626c4 100644
--- a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/CachingDocumentLoader.java
+++ b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/CachingDocumentLoader.java
@@ -37,7 +37,7 @@ public class CachingDocumentLoader implements DocumentLoader {
private static final LoadingCache cache = CacheBuilder.newBuilder()
.maximumSize(1000) // Maximum 1000 documents in cache
.expireAfterWrite(1, TimeUnit.HOURS) // Expire after 1 hour
- .concurrencyLevel(8) // Optimize for 8 concurrent threads
+ .concurrencyLevel(Runtime.getRuntime().availableProcessors())
.build(new CacheLoader<>() {
@Override
public Document load(URI url) throws Exception {
diff --git a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDMode.java b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDMode.java
new file mode 100644
index 00000000000..819ecf284d1
--- /dev/null
+++ b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDMode.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Eclipse RDF4J contributors, Aduna, and others.
+ *
+ * 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.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *******************************************************************************/
+package org.eclipse.rdf4j.rio.jsonld;
+
+/**
+ * Specifies constants to identify various modes that are relevant to JSONLD documents.
+ *
+ * @author Peter Ansell
+ * @see JSONLD Features
+ *
+ */
+public enum JSONLDMode {
+
+ EXPAND("Expansion", "http://json-ld.org/spec/latest/json-ld-api/index.html#expansion"),
+
+ COMPACT("Compaction", "http://json-ld.org/spec/latest/json-ld-api/index.html#compaction"),
+
+ FLATTEN("Flattening", "http://json-ld.org/spec/latest/json-ld-api/index.html#flattening"),
+
+ FRAME("Framing", "https://www.w3.org/TR/json-ld11-framing/"),
+
+ ;
+
+ private final String label;
+
+ private final String reference;
+
+ JSONLDMode(String label, String reference) {
+ this.label = label;
+ this.reference = reference;
+ }
+
+ /**
+ * @return Returns the label.
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * @return Returns the reference URL for the given mode.
+ */
+ public String getReference() {
+ return reference;
+ }
+}
diff --git a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParser.java b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParser.java
index 69c09c92906..646b47958dc 100644
--- a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParser.java
+++ b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParser.java
@@ -10,16 +10,13 @@
*******************************************************************************/
package org.eclipse.rdf4j.rio.jsonld;
-import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.DOCUMENT_LOADER_CACHE;
-import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.SECURE_MODE;
-import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.WHITELIST;
-
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collection;
+import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
@@ -35,10 +32,11 @@
import org.eclipse.rdf4j.rio.RDFHandlerException;
import org.eclipse.rdf4j.rio.RDFParseException;
import org.eclipse.rdf4j.rio.RDFParser;
+import org.eclipse.rdf4j.rio.RioConfig;
import org.eclipse.rdf4j.rio.RioSetting;
import org.eclipse.rdf4j.rio.helpers.AbstractRDFParser;
import org.eclipse.rdf4j.rio.helpers.BasicParserSettings;
-import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
+import org.eclipse.rdf4j.rio.helpers.BasicWriterSettings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -91,6 +89,13 @@ public Collection> getSupportedSettings() {
result.add(JSONLDSettings.EXPAND_CONTEXT);
result.add(JSONLDSettings.EXCEPTION_ON_WARNING);
+ result.add(JSONLDSettings.SECURE_MODE);
+ result.add(JSONLDSettings.WHITELIST);
+ result.add(JSONLDSettings.DOCUMENT_LOADER);
+ result.add(JSONLDSettings.DOCUMENT_LOADER_CACHE);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.SECURE_MODE);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.WHITELIST);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.DOCUMENT_LOADER_CACHE);
return result;
}
@@ -133,9 +138,9 @@ private void parse(InputStream in, Reader reader, String baseURI)
BasicParserSettings.FAIL_ON_UNKNOWN_LANGUAGES);
}
- boolean secureMode = getParserConfig().get(SECURE_MODE);
- Set whitelist = getParserConfig().get(WHITELIST);
- boolean documentLoaderCache = getParserConfig().get(DOCUMENT_LOADER_CACHE);
+ boolean secureMode = getParserConfig().get(JSONLDSettings.SECURE_MODE);
+ Set whitelist = getParserConfig().get(JSONLDSettings.WHITELIST);
+ boolean documentLoaderCache = getParserConfig().get(JSONLDSettings.DOCUMENT_LOADER_CACHE);
JsonLdOptions opts = new JsonLdOptions();
opts.setUriValidation(false);
@@ -144,8 +149,13 @@ private void parse(InputStream in, Reader reader, String baseURI)
Document context = getParserConfig().get(JSONLDSettings.EXPAND_CONTEXT);
DocumentLoader defaultDocumentLoader = opts.getDocumentLoader();
- CachingDocumentLoader cachingDocumentLoader = new CachingDocumentLoader(secureMode, whitelist,
- documentLoaderCache);
+
+ DocumentLoader documentLoader;
+ if (getParserConfig().get(JSONLDSettings.DOCUMENT_LOADER) == null) {
+ documentLoader = new CachingDocumentLoader(secureMode, whitelist, documentLoaderCache);
+ } else {
+ documentLoader = getParserConfig().get(JSONLDSettings.DOCUMENT_LOADER);
+ }
if (context != null) {
@@ -162,14 +172,14 @@ private void parse(InputStream in, Reader reader, String baseURI)
return context;
}
- return cachingDocumentLoader.loadDocument(uri, options);
+ return documentLoader.loadDocument(uri, options);
});
}
}
- if (secureMode && opts.getDocumentLoader() == defaultDocumentLoader) {
- opts.setDocumentLoader(cachingDocumentLoader);
+ if (opts.getDocumentLoader() == defaultDocumentLoader) {
+ opts.setDocumentLoader(documentLoader);
}
if (baseURI != null && !baseURI.isEmpty()) {
diff --git a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDSettings.java b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDSettings.java
new file mode 100644
index 00000000000..d7774158959
--- /dev/null
+++ b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDSettings.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Eclipse RDF4J contributors, Aduna, and others.
+ *
+ * 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.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *******************************************************************************/
+package org.eclipse.rdf4j.rio.jsonld;
+
+import org.eclipse.rdf4j.rio.RioSetting;
+import org.eclipse.rdf4j.rio.helpers.BooleanRioSetting;
+import org.eclipse.rdf4j.rio.helpers.ClassRioSetting;
+import org.eclipse.rdf4j.rio.helpers.RioSettingImpl;
+import org.eclipse.rdf4j.rio.helpers.SetRioSetting;
+
+import no.hasmac.jsonld.document.Document;
+import no.hasmac.jsonld.loader.DocumentLoader;
+
+/**
+ * Settings that can be passed to JSONLD Parsers and Writers.
+ *
+ * @author Peter Ansell
+ * @see JSONLD Data Structures
+ */
+public class JSONLDSettings {
+
+ /**
+ * If set to true, the JSON-LD processor replaces arrays with just one element with that element during compaction.
+ * If set to false, all arrays will remain arrays even if they have just one element.
+ *
+ * Defaults to true.
+ *
+ * Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.compact_arrays}.
+ *
+ * @see JSONLD Data Structures
+ *
+ */
+ public static final BooleanRioSetting COMPACT_ARRAYS = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld.compact_arrays", "Compact arrays", Boolean.TRUE);
+
+ /**
+ * If specified, it is used to retrieve remote documents and contexts; otherwise the processor's built-in loader is
+ * used.
+ *
+ */
+ public static final RioSetting DOCUMENT_LOADER = new ClassRioSetting<>(
+ "org.eclipse.rdf4j.rio.jsonld.document_loader", "Document loader", null);
+
+ /**
+ * The JSON-LD context to use when expanding JSON-LD
+ *
+ * @see https://www.w3.org/TR/json-ld11-api/#dom-jsonldoptions-expandcontext.
+ */
+ public static final RioSetting EXPAND_CONTEXT = new ClassRioSetting<>(
+ "org.eclipse.rdf4j.rio.jsonld.expand_context",
+ "A no.hasmac.jsonld.document.Document that contains the expanded context as specified in https://www.w3.org/TR/json-ld11-api/#dom-jsonldoptions-expandcontext",
+ null);
+
+ public static final RioSetting FRAME = new ClassRioSetting<>(
+ "org.eclipse.rdf4j.rio.jsonld.frame_document",
+ "A no.hasmac.jsonld.document.Document that contains the frame used for framing as specified in https://www.w3.org/TR/json-ld11-framing/",
+ null);;
+
+ /**
+ * The JSON-LD processor will throw an exception if a warning is encountered during processing.
+ *
+ */
+ public static final BooleanRioSetting EXCEPTION_ON_WARNING = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld.exception_on_warning",
+ "Throw an exception when logging a warning.",
+ Boolean.FALSE);
+
+ /**
+ * If set to true, the JSON-LD processor is allowed to optimize the output of the
+ * Compaction algorithm to produce
+ * even compacter representations.
+ *
+ * Defaults to false.
+ *
+ * Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.optimize}.
+ *
+ * @see JSONLD Data Structures
+ *
+ */
+ public static final BooleanRioSetting OPTIMIZE = new BooleanRioSetting("org.eclipse.rdf4j.rio.jsonld.optimize",
+ "Optimize output", Boolean.FALSE);
+
+ /**
+ * If set to true, the JSON-LD processor may emit blank nodes for triple predicates, otherwise they will be omitted.
+ *
+ * Note: the use of blank node identifiers to label properties is obsolete, and may be removed in a future version
+ * of JSON-LD,
+ *
+ * Defaults to false.
+ *
+ * Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.produce_generalized_rdf}.
+ *
+ * @see JSONLD Data Structures
+ *
+ */
+ public static final BooleanRioSetting PRODUCE_GENERALIZED_RDF = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld.produce_generalized_rdf", "Produce generalized RDF", Boolean.FALSE);
+
+ /**
+ * If set to true, the JSON-LD processor will try to convert typed values to JSON native types instead of using the
+ * expanded object form when converting from RDF. xsd:boolean values will be converted to true or false. xsd:integer
+ * and xsd:double values will be converted to JSON numbers.
+ *
+ * Defaults to false for RDF compatibility.
+ *
+ * Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.use_native_types}.
+ *
+ * @see JSONLD Data Structures
+ *
+ */
+ public static final BooleanRioSetting USE_NATIVE_TYPES = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld.use_native_types", "Use Native JSON Types", Boolean.FALSE);
+
+ /**
+ * If set to true, the JSON-LD processor will use the expanded rdf:type IRI as the property instead of @type when
+ * converting from RDF.
+ *
+ * Defaults to false.
+ *
+ * Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.use_rdf_type}.
+ *
+ * @see JSONLD Data Structures
+ *
+ */
+ public static final BooleanRioSetting USE_RDF_TYPE = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld.use_rdf_type", "Use RDF Type", Boolean.FALSE);
+
+ /**
+ * The {@link JSONLDMode} that the writer will use to reorganise the JSONLD document after it is created.
+ *
+ * Defaults to {@link JSONLDMode#EXPAND} to provide maximum RDF compatibility.
+ *
+ * @see JSONLD Features
+ *
+ */
+ public static final RioSetting JSONLD_MODE = new RioSettingImpl<>(
+ "org.eclipse.rdf4j.rio.jsonld_mode", "JSONLD Mode", JSONLDMode.EXPAND);
+
+ /**
+ * If set to true, the JSON-LD processor will try to represent the JSON-LD object in a hierarchical view.
+ *
+ * Default to false
+ *
+ * Can be overridden by setting system property {@code org.eclipse.rdf4j.rio.jsonld.hierarchical_view}.
+ *
+ */
+ public static final BooleanRioSetting HIERARCHICAL_VIEW = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld.hierarchical_view", "Hierarchical representation of the JSON", Boolean.FALSE);
+
+ /**
+ * Whitelist of remote/local resources that the JSON-LD parser can retrieve. Set of URIs as strings. This can be
+ * overridden by setting a system property with the key {@code org.eclipse.rdf4j.rio.jsonld_whitelist} and a JSON
+ * array of the desired values.
+ *
+ * Default:
+ * {@code Set.of("http://www.w3.org/ns/anno.jsonld", "https://www.w3.org/ns/anno.jsonld", "http://www.w3.org/ns/anno", "https://www.w3.org/ns/anno", "http://www.w3.org/ns/activitystreams.jsonld", "https://www.w3.org/ns/activitystreams.jsonld", "http://www.w3.org/ns/activitystreams", "https://www.w3.org/ns/activitystreams", "http://www.w3.org/ns/ldp.jsonld", "https://www.w3.org/ns/ldp.jsonld", "http://www.w3.org/ns/ldp", "https://www.w3.org/ns/ldp", "http://www.w3.org/ns/oa.jsonld", "https://www.w3.org/ns/oa.jsonld", "http://www.w3.org/ns/oa", "https://www.w3.org/ns/oa", "http://www.w3.org/ns/hydra/context.jsonld", "https://www.w3.org/ns/hydra/context.jsonld", "http://www.w3.org/ns/hydra/context", "https://www.w3.org/ns/hydra/context", "http://www.w3.org/2018/credentials/v1.jsonld", "https://www.w3.org/2018/credentials/v1.jsonld", "http://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/v1", "http://www.w3.org/2019/wot/td/v1.jsonld", "https://www.w3.org/2019/wot/td/v1.jsonld", "http://www.w3.org/2019/wot/td/v1", "https://www.w3.org/2019/wot/td/v1", "http://w3c.github.io/json-ld-rc/context.jsonld", "https://w3c.github.io/json-ld-rc/context.jsonld", "http://schema.org/", "https://schema.org/", "http://health-lifesci.schema.org/", "https://health-lifesci.schema.org/", "http://auto.schema.org/", "https://auto.schema.org/", "http://bib.schema.org/", "https://bib.schema.org/", "http://pending.schema.org/", "https://pending.schema.org/", "http://schema.org/docs/jsonldcontext.jsonld", "https://schema.org/docs/jsonldcontext.jsonld", "http://schema.org/version/latest/schemaorg-current-https.jsonld", "https://schema.org/version/latest/schemaorg-current-https.jsonld", "http://schema.org/version/latest/schemaorg-all-http.jsonld", "https://schema.org/version/latest/schemaorg-all-http.jsonld", "http://schema.org/version/latest/schemaorg-all-https.jsonld", "https://schema.org/version/latest/schemaorg-all-https.jsonld", "http://schema.org/version/latest/schemaorg-current-http.jsonld", "https://schema.org/version/latest/schemaorg-current-http.jsonld", "http://schema.org/version/latest/schemaorg-all.jsonld", "https://schema.org/version/latest/schemaorg-all.jsonld", "http://schema.org/version/latest/schemaorg-current.jsonld", "https://schema.org/version/latest/schemaorg-current.jsonld", "http://project-open-data.cio.gov/v1.1/schema/catalog.jsonld", "https://project-open-data.cio.gov/v1.1/schema/catalog.jsonld", "http://geojson.org/geojson-ld/geojson-context.jsonld", "https://geojson.org/geojson-ld/geojson-context.jsonld", "http://w3id.org/security/v1", "https://w3id.org/security/v1", "http://xmlns.com/foaf/spec/index.jsonld", "https://xmlns.com/foaf/spec/index.jsonld", "http://xmlns.com/foaf/spec/", "https://xmlns.com/foaf/spec/")}
+ *
+ */
+ public static final SetRioSetting WHITELIST = new SetRioSetting<>(
+ "org.eclipse.rdf4j.rio.jsonld_whitelist",
+ "Whitelist of remote/local resources that the JSON-LD parser can retrieve. Set of URIs as strings.",
+ org.eclipse.rdf4j.rio.helpers.JSONLDSettings.WHITELIST.getDefaultValue()
+ );
+
+ /**
+ * Secure mode only allows loading remote/local resources (ex. context from url) that are whitelisted. This can be
+ * overridden by setting a system property with the key {@code org.eclipse.rdf4j.rio.jsonld_secure_mode} and a
+ * boolean value.
+ *
+ * Default: true
+ */
+ public static final BooleanRioSetting SECURE_MODE = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld_secure_mode",
+ "Secure mode only allows loading remote/local resources (ex. context from url) that are whitelisted.",
+ Boolean.TRUE);
+
+ /**
+ * The document loader cache is enabled by default. All loaded documents, such as remote contexts, are cached for 1
+ * hour, or until the cache is full. The cache holds up to 1000 documents. The cache is shared between all
+ * JSONLDParsers. The cache can be disabled by setting this value to false.
+ *
+ * Default: true
+ */
+ public static final BooleanRioSetting DOCUMENT_LOADER_CACHE = new BooleanRioSetting(
+ "org.eclipse.rdf4j.rio.jsonld_document_loader_cache",
+ "The document loader cache is enabled by default. All loaded documents, such as remote contexts, are cached for 1 hour, or until the cache is full. The cache holds up to 1000 documents. The cache is shared between all JSONLDParsers. The cache can be disabled by setting this value to false.",
+ Boolean.TRUE);
+
+ /**
+ * Private default constructor.
+ */
+ private JSONLDSettings() {
+ }
+
+}
diff --git a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriter.java b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriter.java
index d55f6118412..5633a9c6fc6 100644
--- a/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriter.java
+++ b/core/rio/jsonld/src/main/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriter.java
@@ -42,8 +42,6 @@
import org.eclipse.rdf4j.rio.WriterConfig;
import org.eclipse.rdf4j.rio.helpers.AbstractRDFWriter;
import org.eclipse.rdf4j.rio.helpers.BasicWriterSettings;
-import org.eclipse.rdf4j.rio.helpers.JSONLDMode;
-import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
import org.eclipse.rdf4j.rio.helpers.StatementCollector;
import com.github.jsonldjava.core.JsonLdConsts;
@@ -252,7 +250,7 @@ public int size() {
.useRdfType(writerConfig.get(JSONLDSettings.USE_RDF_TYPE))
.build();
- JSONLDMode mode = getWriterConfig().get(JSONLDSettings.JSONLD_MODE);
+ JSONLDMode mode = mapJsonLdMode(getWriterConfig().get(JSONLDSettings.JSONLD_MODE));
switch (mode) {
case EXPAND:
@@ -298,6 +296,16 @@ public int size() {
}
}
+ private JSONLDMode mapJsonLdMode(Object jsonldMode) {
+ if (jsonldMode instanceof JSONLDMode) {
+ return (JSONLDMode) jsonldMode;
+ }
+ if (jsonldMode instanceof org.eclipse.rdf4j.rio.helpers.JSONLDMode) {
+ return JSONLDMode.valueOf(jsonldMode.toString());
+ }
+ throw new IllegalArgumentException("Unknown JSONLDMode: " + jsonldMode);
+ }
+
private static RdfNQuad toRdfNQuad(Statement statement) {
return new RdfNQuadAdapter(statement);
}
@@ -398,6 +406,15 @@ public Collection> getSupportedSettings() {
result.add(JSONLDSettings.USE_NATIVE_TYPES);
result.add(JSONLDSettings.PRODUCE_GENERALIZED_RDF);
result.add(JSONLDSettings.EXCEPTION_ON_WARNING);
+ result.add(JSONLDSettings.FRAME);
+
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.COMPACT_ARRAYS);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.JSONLD_MODE);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.USE_RDF_TYPE);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.USE_NATIVE_TYPES);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.PRODUCE_GENERALIZED_RDF);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.EXCEPTION_ON_WARNING);
+ result.add(org.eclipse.rdf4j.rio.helpers.JSONLDSettings.FRAME);
return result;
}
diff --git a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomOldTest.java b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomOldTest.java
new file mode 100644
index 00000000000..6a2cdcd012a
--- /dev/null
+++ b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomOldTest.java
@@ -0,0 +1,375 @@
+/*******************************************************************************
+ * Copyright (c) 2018 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.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *******************************************************************************/
+package org.eclipse.rdf4j.rio.jsonld;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
+import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.SECURE_MODE;
+import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.WHITELIST;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.io.StringReader;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.ServiceLoader;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.io.FileUtils;
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Literal;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Value;
+import org.eclipse.rdf4j.model.impl.LinkedHashModel;
+import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
+import org.eclipse.rdf4j.model.vocabulary.FOAF;
+import org.eclipse.rdf4j.model.vocabulary.XSD;
+import org.eclipse.rdf4j.rio.RDFFormat;
+import org.eclipse.rdf4j.rio.RDFParseException;
+import org.eclipse.rdf4j.rio.RDFParser;
+import org.eclipse.rdf4j.rio.Rio;
+import org.eclipse.rdf4j.rio.helpers.ContextStatementCollector;
+import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
+import org.eclipse.rdf4j.rio.helpers.ParseErrorCollector;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.RepeatedTest;
+import org.junit.jupiter.api.Test;
+
+import jakarta.json.spi.JsonProvider;
+import no.hasmac.jsonld.document.Document;
+import no.hasmac.jsonld.document.JsonDocument;
+
+/**
+ * Custom (non-manifest) tests for JSON-LD parser.
+ *
+ * Tests with the old JSONLDSettings class
+ *
+ * @author Peter Ansell
+ */
+public class JSONLDParserCustomOldTest {
+
+ /**
+ * Backslash escaped "h" in "http"
+ */
+ private static final String BACKSLASH_ESCAPED_TEST_STRING = "[{\"@id\": \"\\http://example.com/Subj1\",\"http://example.com/prop1\": [{\"@id\": \"http://example.com/Obj1\"}]}]";
+
+ /**
+ * Java/C++ style comments
+ */
+ private static final String COMMENTS_TEST_STRING = "[{/*This is a non-standard java/c++ style comment\n*/\"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": [{\"@id\": \"http://example.com/Obj1\"}]}]";
+
+ /**
+ * Tests for NaN
+ */
+ private static final String NON_NUMERIC_NUMBERS_TEST_STRING = "[{\"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": NaN}]";
+
+ /**
+ * Tests for numeric leading zeroes
+ */
+ private static final String NUMERIC_LEADING_ZEROES_TEST_STRING = "[{\"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": 000042}]";
+
+ /**
+ * Tests for single-quotes
+ */
+ private static final String SINGLE_QUOTES_TEST_STRING = "[{\'@id\': \"http://example.com/Subj1\",\'http://example.com/prop1\': 42}]";
+
+ /**
+ * Tests for unquoted control char
+ */
+ private static final String UNQUOTED_CONTROL_CHARS_TEST_STRING = "[{\"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": \"42\u0009\"}]";
+
+ /**
+ * Tests for unquoted field names
+ */
+ private static final String UNQUOTED_FIELD_NAMES_TEST_STRING = "[{@id: \"http://example.com/Subj1\",\"http://example.com/prop1\": 42}]";
+
+ /**
+ * YAML style comments
+ */
+ private static final String YAML_COMMENTS_TEST_STRING = "[\n{#This is a non-standard yaml style comment/*\n\"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": [{\"@id\": \"http://example.com/Obj1\"}]}]";
+
+ /**
+ * Trailing comma
+ */
+ private static final String TRAILING_COMMA_TEST_STRING = "[{\"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": [{\"@id\": \"http://example.com/Obj1\"},]}]";
+
+ /**
+ * Strict duplicate detection
+ */
+ private static final String STRICT_DUPLICATE_DETECTION_TEST_STRING = "[{\"@context\": {}, \"@context\": {}, \"@id\": \"http://example.com/Subj1\",\"http://example.com/prop1\": [{\"@id\": \"http://example.com/Obj1\"}]}]";
+
+ /**
+ * Used for custom document loader
+ */
+ private static final String LOADER_CONTEXT = "{ \"@context\": {\"prop\": \"http://example.com/prop1\"} }";
+ private static final String LOADER_JSONLD = "{ \"@context\": \"http://example.com/context.jsonld\", \"@id\": \"http://example.com/Subj1\", \"prop\": \"Property\" }";
+
+ private RDFParser parser;
+
+ private ParseErrorCollector errors;
+
+ private Model model;
+
+ private final SimpleValueFactory F = SimpleValueFactory.getInstance();
+
+ private final IRI testSubjectIRI = F.createIRI("http://example.com/Subj1");
+ private final IRI testPredicate = F.createIRI("http://example.com/prop1");
+ private final IRI testObjectIRI = F.createIRI("http://example.com/Obj1");
+
+ private final Literal testObjectLiteralNotANumber = F.createLiteral("NaN", XSD.DOUBLE);
+ private final Literal testObjectLiteralNumber = F.createLiteral("42", XSD.INTEGER);
+ private final Literal testObjectLiteralUnquotedControlChar = F.createLiteral("42\u0009", XSD.STRING);
+
+ @BeforeEach
+ public void setUp() {
+ parser = Rio.createParser(RDFFormat.JSONLD);
+ errors = new ParseErrorCollector();
+ model = new LinkedHashModel();
+ parser.setParseErrorListener(errors);
+ parser.setRDFHandler(new ContextStatementCollector(model, F));
+ }
+
+ private void verifyParseResults(Resource nextSubject, IRI nextPredicate, Value nextObject) {
+ assertEquals(0, errors.getWarnings().size());
+ assertEquals(0, errors.getErrors().size());
+ assertEquals(0, errors.getFatalErrors().size());
+
+ assertEquals(1, model.size());
+ assertTrue(model.contains(nextSubject, nextPredicate, nextObject),
+ "model was not as expected: " + model.toString());
+ }
+
+ @Test
+ public void testSupportedSettings() {
+ assertEquals(19, parser.getSupportedSettings().size());
+ }
+
+ @Test
+ public void testAllowBackslashEscapingAnyCharacterDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(BACKSLASH_ESCAPED_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowBackslashEscapingAnyCharacterDisabled() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(BACKSLASH_ESCAPED_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+
+ }
+
+ @Test
+ public void testAllowCommentsDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(COMMENTS_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowNonNumericNumbersDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(NON_NUMERIC_NUMBERS_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowNumericLeadingZeroesDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(NUMERIC_LEADING_ZEROES_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowSingleQuotesDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(SINGLE_QUOTES_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowUnquotedControlCharactersDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(UNQUOTED_CONTROL_CHARS_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowUnquotedFieldNamesDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(UNQUOTED_FIELD_NAMES_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowYamlCommentsDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(YAML_COMMENTS_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testAllowTrailingCommaDefault() {
+ assertThatThrownBy(() -> parser.parse(new StringReader(TRAILING_COMMA_TEST_STRING), ""))
+ .isInstanceOf(RDFParseException.class)
+ .hasMessageContaining("Could not parse JSONLD");
+ }
+
+ @Test
+ public void testStrictDuplicateDetectionDefault() throws Exception {
+ parser.parse(new StringReader(STRICT_DUPLICATE_DETECTION_TEST_STRING), "");
+ verifyParseResults(testSubjectIRI, testPredicate, testObjectIRI);
+ }
+
+ @Test
+ public void testContext() throws Exception {
+
+ Document jsonDocument = JsonDocument.of(new StringReader(LOADER_CONTEXT));
+ jsonDocument.setDocumentUrl(URI.create("http://example.com/context.jsonld"));
+
+ parser.getParserConfig().set(JSONLDSettings.EXPAND_CONTEXT, jsonDocument);
+ parser.parse(new StringReader(LOADER_JSONLD), "");
+ assertTrue(model.predicates().contains(testPredicate));
+ }
+
+ @Test
+ public void testLocalFileSecurity() throws Exception {
+
+ String contextUri = JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/context.jsonld")
+ .toString();
+
+ String jsonld = FileUtils
+ .readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8)
+ .replace("file:./context.jsonld", contextUri);
+
+ // expect exception
+ RDFParseException rdfParseException = Assertions.assertThrowsExactly(RDFParseException.class, () -> {
+ parser.parse(new StringReader(jsonld), "");
+ });
+
+ Assertions.assertEquals("Could not load document from " + contextUri
+ + " because it is not whitelisted. See: JSONLDSettings.WHITELIST and JSONLDSettings.SECURE_MODE which can also be set as system properties.",
+ rdfParseException.getMessage());
+ }
+
+ @Test
+ public void testLocalFileSecurityWhiteList() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+ String contextUri = JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/context.jsonld")
+ .toString();
+ jsonld = jsonld.replace("file:./context.jsonld", contextUri);
+
+ parser.getParserConfig().set(WHITELIST, Set.of(contextUri));
+
+ parser.parse(new StringReader(jsonld), "");
+ assertTrue(model.objects().contains(FOAF.PERSON));
+ }
+
+ @Test
+ public void testLocalFileSecurityDisableSecurity() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+ jsonld = jsonld.replace("file:./context.jsonld",
+ JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/context.jsonld")
+ .toString());
+
+ parser.getParserConfig().set(SECURE_MODE, false);
+
+ parser.parse(new StringReader(jsonld), "");
+ assertTrue(model.objects().contains(FOAF.PERSON));
+ }
+
+ @Test
+ public void testLocalFileSecurityDisableSecuritySystemProperty() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+ jsonld = jsonld.replace("file:./context.jsonld",
+ JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/context.jsonld")
+ .toString());
+
+ try {
+ System.setProperty(SECURE_MODE.getKey(), "false");
+ parser.parse(new StringReader(jsonld), "");
+ assertTrue(model.objects().contains(FOAF.PERSON));
+ } finally {
+ System.clearProperty(SECURE_MODE.getKey());
+ }
+
+ }
+
+ @RepeatedTest(10)
+ public void testRemoteContext() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/remoteContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+
+ parser.getParserConfig().set(WHITELIST, Set.of("https://schema.org"));
+ parser.parse(new StringReader(jsonld), "");
+ assertEquals(59, model.size());
+ }
+
+ @Test
+ public void testRemoteContextSystemProperty() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/remoteContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+
+ try {
+ System.setProperty(WHITELIST.getKey(), "[\"https://schema.org\"]");
+ parser.parse(new StringReader(jsonld), "");
+ assertEquals(59, model.size());
+ } finally {
+ System.clearProperty(WHITELIST.getKey());
+ }
+
+ }
+
+ @Test
+ public void testRemoteContextException() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomOldTest.class.getClassLoader()
+ .getResource("testcases/jsonld/remoteContextException/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+
+ parser.getParserConfig().set(WHITELIST, Set.of("https://example.org/context.jsonld"));
+ RDFParseException rdfParseException = Assertions.assertThrowsExactly(RDFParseException.class, () -> {
+ parser.parse(new StringReader(jsonld), "");
+ });
+
+ assertEquals("Could not load document from https://example.org/context.jsonld", rdfParseException.getMessage());
+ }
+
+ @Test
+ public void testSPI() {
+ ServiceLoader load = ServiceLoader.load(JsonProvider.class);
+ List collect = load.stream()
+ .map(ServiceLoader.Provider::get)
+ .map(t -> t.getClass().getName())
+ .collect(Collectors.toList());
+ assertFalse(collect.isEmpty());
+ assertEquals("org.glassfish.json.JsonProviderImpl", collect.stream().findFirst().orElse(""));
+ }
+
+}
diff --git a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomTest.java b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomTest.java
index f0fb28e05fe..0d36fbc0e4b 100644
--- a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomTest.java
+++ b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDParserCustomTest.java
@@ -11,8 +11,6 @@
package org.eclipse.rdf4j.rio.jsonld;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
-import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.SECURE_MODE;
-import static org.eclipse.rdf4j.rio.helpers.JSONLDSettings.WHITELIST;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -24,6 +22,7 @@
import java.util.List;
import java.util.ServiceLoader;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import org.apache.commons.io.FileUtils;
@@ -41,7 +40,6 @@
import org.eclipse.rdf4j.rio.RDFParser;
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.helpers.ContextStatementCollector;
-import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
import org.eclipse.rdf4j.rio.helpers.ParseErrorCollector;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -49,8 +47,12 @@
import org.junit.jupiter.api.Test;
import jakarta.json.spi.JsonProvider;
+import no.hasmac.jsonld.JsonLdError;
import no.hasmac.jsonld.document.Document;
import no.hasmac.jsonld.document.JsonDocument;
+import no.hasmac.jsonld.loader.DocumentLoader;
+import no.hasmac.jsonld.loader.DocumentLoaderOptions;
+import no.hasmac.jsonld.loader.SchemeRouter;
/**
* Custom (non-manifest) tests for JSON-LD parser.
@@ -152,7 +154,7 @@ private void verifyParseResults(Resource nextSubject, IRI nextPredicate, Value n
@Test
public void testSupportedSettings() {
- assertEquals(15, parser.getSupportedSettings().size());
+ assertEquals(19, parser.getSupportedSettings().size());
}
@Test
@@ -276,7 +278,7 @@ public void testLocalFileSecurityWhiteList() throws Exception {
.toString();
jsonld = jsonld.replace("file:./context.jsonld", contextUri);
- parser.getParserConfig().set(WHITELIST, Set.of(contextUri));
+ parser.getParserConfig().set(JSONLDSettings.WHITELIST, Set.of(contextUri));
parser.parse(new StringReader(jsonld), "");
assertTrue(model.objects().contains(FOAF.PERSON));
@@ -292,12 +294,56 @@ public void testLocalFileSecurityDisableSecurity() throws Exception {
.getResource("testcases/jsonld/localFileContext/context.jsonld")
.toString());
- parser.getParserConfig().set(SECURE_MODE, false);
+ parser.getParserConfig().set(JSONLDSettings.SECURE_MODE, false);
parser.parse(new StringReader(jsonld), "");
assertTrue(model.objects().contains(FOAF.PERSON));
}
+ @Test
+ public void testLocalFileSecurityCustomDocumentLoader() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+ jsonld = jsonld.replace("file:./context.jsonld",
+ JSONLDParserCustomTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/context.jsonld")
+ .toString());
+
+ AtomicBoolean called = new AtomicBoolean(false);
+ parser.getParserConfig().set(JSONLDSettings.DOCUMENT_LOADER, (url, options) -> {
+ called.set(true);
+ return new CachingDocumentLoader(false, Set.of(), true).loadDocument(url, options);
+ });
+
+ parser.parse(new StringReader(jsonld), "");
+ assertTrue(model.objects().contains(FOAF.PERSON));
+ assertTrue(called.get());
+ }
+
+ @Test
+ public void testLocalFileSecurityCustomDocumentLoader2() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+ jsonld = jsonld.replace("file:./context.jsonld",
+ JSONLDParserCustomTest.class.getClassLoader()
+ .getResource("testcases/jsonld/localFileContext/context.jsonld")
+ .toString());
+
+ AtomicBoolean called = new AtomicBoolean(false);
+ parser.getParserConfig().set(JSONLDSettings.DOCUMENT_LOADER, (url, options) -> {
+ called.set(true);
+ return new CachingDocumentLoader(false, Set.of(), true).loadDocument(url, options);
+ });
+
+ parser.getParserConfig().set(JSONLDSettings.SECURE_MODE, false);
+
+ parser.parse(new StringReader(jsonld), "");
+ assertTrue(model.objects().contains(FOAF.PERSON));
+ assertTrue(called.get());
+ }
+
@Test
public void testLocalFileSecurityDisableSecuritySystemProperty() throws Exception {
String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomTest.class.getClassLoader()
@@ -309,22 +355,32 @@ public void testLocalFileSecurityDisableSecuritySystemProperty() throws Exceptio
.toString());
try {
- System.setProperty(SECURE_MODE.getKey(), "false");
+ System.setProperty(JSONLDSettings.SECURE_MODE.getKey(), "false");
parser.parse(new StringReader(jsonld), "");
assertTrue(model.objects().contains(FOAF.PERSON));
} finally {
- System.clearProperty(SECURE_MODE.getKey());
+ System.clearProperty(JSONLDSettings.SECURE_MODE.getKey());
}
}
- @RepeatedTest(10)
+ @RepeatedTest(100)
+ public void testRemoteContextDefaultWhitelist() throws Exception {
+ String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomTest.class.getClassLoader()
+ .getResource("testcases/jsonld/remoteContext/data.jsonld")
+ .getFile()), StandardCharsets.UTF_8);
+
+ parser.parse(new StringReader(jsonld), "");
+ assertEquals(59, model.size());
+ }
+
+ @RepeatedTest(100)
public void testRemoteContext() throws Exception {
String jsonld = FileUtils.readFileToString(new File(JSONLDParserCustomTest.class.getClassLoader()
.getResource("testcases/jsonld/remoteContext/data.jsonld")
.getFile()), StandardCharsets.UTF_8);
- parser.getParserConfig().set(WHITELIST, Set.of("https://schema.org"));
+ parser.getParserConfig().set(JSONLDSettings.WHITELIST, Set.of("https://schema.org"));
parser.parse(new StringReader(jsonld), "");
assertEquals(59, model.size());
}
@@ -336,11 +392,12 @@ public void testRemoteContextSystemProperty() throws Exception {
.getFile()), StandardCharsets.UTF_8);
try {
- System.setProperty(WHITELIST.getKey(), "[\"https://schema.org\"]");
+ System.setProperty(JSONLDSettings.WHITELIST.getKey(),
+ "[\"https://schema.org\",\"https://example.org/context.jsonld\"]");
parser.parse(new StringReader(jsonld), "");
assertEquals(59, model.size());
} finally {
- System.clearProperty(WHITELIST.getKey());
+ System.clearProperty(JSONLDSettings.WHITELIST.getKey());
}
}
@@ -351,7 +408,7 @@ public void testRemoteContextException() throws Exception {
.getResource("testcases/jsonld/remoteContextException/data.jsonld")
.getFile()), StandardCharsets.UTF_8);
- parser.getParserConfig().set(WHITELIST, Set.of("https://example.org/context.jsonld"));
+ parser.getParserConfig().set(JSONLDSettings.WHITELIST, Set.of("https://example.org/context.jsonld"));
RDFParseException rdfParseException = Assertions.assertThrowsExactly(RDFParseException.class, () -> {
parser.parse(new StringReader(jsonld), "");
});
diff --git a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterBackgroundTest.java b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterBackgroundTest.java
index 3caeafc6488..daa70f68ae9 100644
--- a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterBackgroundTest.java
+++ b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterBackgroundTest.java
@@ -16,6 +16,8 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashSet;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Literal;
@@ -121,12 +123,14 @@ protected RioSetting>[] getExpectedSupportedSettings() {
return new RioSetting[] {
BasicWriterSettings.BASE_DIRECTIVE,
BasicWriterSettings.PRETTY_PRINT,
- JSONLDSettings.COMPACT_ARRAYS,
- JSONLDSettings.JSONLD_MODE,
- JSONLDSettings.PRODUCE_GENERALIZED_RDF,
- JSONLDSettings.USE_RDF_TYPE,
- JSONLDSettings.USE_NATIVE_TYPES,
- JSONLDSettings.EXCEPTION_ON_WARNING
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.COMPACT_ARRAYS,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.JSONLD_MODE,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.USE_RDF_TYPE,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.USE_NATIVE_TYPES,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.PRODUCE_GENERALIZED_RDF,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.EXCEPTION_ON_WARNING,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.FRAME
+
};
}
}
diff --git a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterOldTest.java b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterOldTest.java
new file mode 100644
index 00000000000..263cd0eba25
--- /dev/null
+++ b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterOldTest.java
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Eclipse RDF4J contributors, Aduna, and others.
+ *
+ * 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.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *******************************************************************************/
+package org.eclipse.rdf4j.rio.jsonld;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Literal;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.model.Statement;
+import org.eclipse.rdf4j.model.impl.LinkedHashModel;
+import org.eclipse.rdf4j.model.vocabulary.DCTERMS;
+import org.eclipse.rdf4j.model.vocabulary.XSD;
+import org.eclipse.rdf4j.rio.ParserConfig;
+import org.eclipse.rdf4j.rio.RDFFormat;
+import org.eclipse.rdf4j.rio.RDFHandlerException;
+import org.eclipse.rdf4j.rio.RDFParseException;
+import org.eclipse.rdf4j.rio.RDFParser;
+import org.eclipse.rdf4j.rio.RDFWriter;
+import org.eclipse.rdf4j.rio.RDFWriterTest;
+import org.eclipse.rdf4j.rio.Rio;
+import org.eclipse.rdf4j.rio.RioSetting;
+import org.eclipse.rdf4j.rio.WriterConfig;
+import org.eclipse.rdf4j.rio.helpers.BasicParserSettings;
+import org.eclipse.rdf4j.rio.helpers.BasicWriterSettings;
+import org.eclipse.rdf4j.rio.helpers.JSONLDMode;
+import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
+import org.eclipse.rdf4j.rio.helpers.StatementCollector;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import no.hasmac.jsonld.JsonLdError;
+import no.hasmac.jsonld.document.Document;
+import no.hasmac.jsonld.document.JsonDocument;
+
+/**
+ * @author Peter Ansell
+ *
+ * Tests with the old JSONLDSettings class
+ */
+public class JSONLDWriterOldTest extends RDFWriterTest {
+ private final String exNs = "http://example.org/";
+
+ public JSONLDWriterOldTest() {
+ super(new JSONLDWriterFactory(), new JSONLDParserFactory());
+ }
+
+ @Override
+ protected void setupWriterConfig(WriterConfig config) {
+ super.setupWriterConfig(config);
+ config.set(JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT);
+ }
+
+ @Override
+ protected void setupParserConfig(ParserConfig config) {
+ super.setupParserConfig(config);
+ config.set(BasicParserSettings.FAIL_ON_UNKNOWN_DATATYPES, true);
+ config.set(BasicParserSettings.FAIL_ON_UNKNOWN_LANGUAGES, true);
+ }
+
+ @Test
+ @Override
+ @Disabled("TODO: Determine why this test is breaking")
+ public void testIllegalPrefix() throws RDFHandlerException, RDFParseException {
+ }
+
+ @Test
+ public void testEmptyNamespace() {
+ IRI uri1 = vf.createIRI(exNs, "uri1");
+ IRI uri2 = vf.createIRI(exNs, "uri2");
+
+ StringWriter w = new StringWriter();
+
+ RDFWriter rdfWriter = rdfWriterFactory.getWriter(w);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT);
+ rdfWriter.startRDF();
+ rdfWriter.handleNamespace("", exNs);
+ rdfWriter.handleNamespace(DCTERMS.PREFIX, DCTERMS.NAMESPACE);
+ rdfWriter.handleStatement(vf.createStatement(uri1, DCTERMS.TITLE, vf.createBNode()));
+ rdfWriter.handleStatement(vf.createStatement(uri1, uri2, vf.createBNode()));
+ rdfWriter.endRDF();
+
+ assertTrue(w.toString().contains("@vocab"), "Does not contain @vocab");
+ }
+
+ @Test
+ public void testRoundTripNamespaces() throws Exception {
+ IRI uri1 = vf.createIRI(exNs, "uri1");
+ IRI uri2 = vf.createIRI(exNs, "uri2");
+ Literal plainLit = vf.createLiteral("plain", XSD.STRING);
+
+ Statement st1 = vf.createStatement(uri1, uri2, plainLit);
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ RDFWriter rdfWriter = rdfWriterFactory.getWriter(out);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT);
+ rdfWriter.startRDF();
+ rdfWriter.handleNamespace("ex", exNs);
+ rdfWriter.handleStatement(st1);
+ rdfWriter.endRDF();
+
+ ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+ RDFParser rdfParser = rdfParserFactory.getParser();
+ ParserConfig config = new ParserConfig();
+ config.set(BasicParserSettings.FAIL_ON_UNKNOWN_DATATYPES, true);
+ config.set(BasicParserSettings.FAIL_ON_UNKNOWN_LANGUAGES, true);
+ rdfParser.setParserConfig(config);
+ rdfParser.setValueFactory(vf);
+ Model model = new LinkedHashModel();
+ rdfParser.setRDFHandler(new StatementCollector(model));
+
+ rdfParser.parse(in, "foo:bar");
+
+ assertEquals(1, model.size(), "Unexpected number of statements, found " + model.size());
+
+ assertTrue(model.contains(st1), "missing namespaced statement");
+
+ if (rdfParser.getRDFFormat().supportsNamespaces()) {
+ assertTrue(!model.getNamespaces().isEmpty(),
+ "Expected at least one namespace, found " + model.getNamespaces().size());
+ assertEquals(exNs, model.getNamespace("ex").get().getName());
+ }
+ }
+
+ /**
+ * Test if the JSON-LD writer honors the "native RDF type" setting.
+ */
+ @Test
+ public void testNativeRDFTypes() {
+ IRI subject = vf.createIRI(exNs, "uri1");
+ IRI predicate = vf.createIRI(exNs, "uri2");
+ Literal object = vf.createLiteral(true);
+ Statement stmt = vf.createStatement(subject, predicate, object);
+
+ StringWriter w = new StringWriter();
+ RDFWriter rdfWriter = rdfWriterFactory.getWriter(w);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.JSONLD_MODE, JSONLDMode.COMPACT);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.COMPACT_ARRAYS, true);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.USE_NATIVE_TYPES, true);
+
+ rdfWriter.startRDF();
+ rdfWriter.handleStatement(stmt);
+ rdfWriter.endRDF();
+
+ assertTrue(!w.toString().contains("@type"), "Does contain @type");
+ }
+
+ @Test
+ public void testFraming() throws IOException, JsonLdError {
+ Model data = Rio.parse(new StringReader("{\n" +
+ " \"@context\": {\n" +
+ " \"dc11\": \"http://purl.org/dc/elements/1.1/\",\n" +
+ " \"ex\": \"http://example.org/vocab#\",\n" +
+ " \"xsd\": \"http://www.w3.org/2001/XMLSchema#\",\n" +
+ " \"ex:contains\": {\n" +
+ " \"@type\": \"@id\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"@graph\": [\n" +
+ " {\n" +
+ " \"@id\": \"http://example.org/library\",\n" +
+ " \"@type\": \"ex:Library\",\n" +
+ " \"ex:contains\": \"http://example.org/library/the-republic\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"@id\": \"http://example.org/library/the-republic\",\n" +
+ " \"@type\": \"ex:Book\",\n" +
+ " \"dc11:creator\": \"Plato\",\n" +
+ " \"dc11:title\": \"The Republic\",\n" +
+ " \"ex:contains\": \"http://example.org/library/the-republic#introduction\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"@id\": \"http://example.org/library/the-republic#introduction\",\n" +
+ " \"@type\": \"ex:Chapter\",\n" +
+ " \"dc11:description\": \"An introductory chapter on The Republic.\",\n" +
+ " \"dc11:title\": \"The Introduction\"\n" +
+ " }\n" +
+ " ]\n" +
+ "}"), "", RDFFormat.JSONLD);
+
+ Document frame = JsonDocument.of(new StringReader("{\n" +
+ " \"@context\": {\n" +
+ " \"dc11\": \"http://purl.org/dc/elements/1.1/\",\n" +
+ " \"ex\": \"http://example.org/vocab#\"\n" +
+ " },\n" +
+ " \"@type\": \"ex:Library\",\n" +
+ " \"ex:contains\": {\n" +
+ " \"@type\": \"ex:Book\",\n" +
+ " \"ex:contains\": {\n" +
+ " \"@type\": \"ex:Chapter\"\n" +
+ " }\n" +
+ " }\n" +
+ "}"));
+
+ StringWriter stringWriter = new StringWriter();
+ RDFWriter rdfWriter = rdfWriterFactory.getWriter(stringWriter);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.JSONLD_MODE, JSONLDMode.FRAME);
+ rdfWriter.getWriterConfig().set(JSONLDSettings.FRAME, frame);
+ rdfWriter.getWriterConfig().set(BasicWriterSettings.PRETTY_PRINT, true);
+
+ rdfWriter.startRDF();
+ data.forEach(rdfWriter::handleStatement);
+ rdfWriter.endRDF();
+
+ assertEquals(
+ "{\n" +
+ " \"@id\": \"http://example.org/library\",\n" +
+ " \"@type\": \"ex:Library\",\n" +
+ " \"ex:contains\": {\n" +
+ " \"@id\": \"http://example.org/library/the-republic\",\n" +
+ " \"@type\": \"ex:Book\",\n" +
+ " \"ex:contains\": {\n" +
+ " \"@id\": \"http://example.org/library/the-republic#introduction\",\n" +
+ " \"@type\": \"ex:Chapter\",\n" +
+ " \"dc11:description\": \"An introductory chapter on The Republic.\",\n" +
+ " \"dc11:title\": \"The Introduction\"\n" +
+ " },\n" +
+ " \"dc11:creator\": \"Plato\",\n" +
+ " \"dc11:title\": \"The Republic\"\n" +
+ " },\n" +
+ " \"@context\": {\n" +
+ " \"dc11\": \"http://purl.org/dc/elements/1.1/\",\n" +
+ " \"ex\": \"http://example.org/vocab#\"\n" +
+ " }\n" +
+ "}",
+ stringWriter.toString());
+
+ }
+
+ @Override
+ protected RioSetting>[] getExpectedSupportedSettings() {
+ return new RioSetting[] {
+ BasicWriterSettings.BASE_DIRECTIVE,
+ BasicWriterSettings.PRETTY_PRINT,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.COMPACT_ARRAYS,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.JSONLD_MODE,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.USE_RDF_TYPE,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.USE_NATIVE_TYPES,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.PRODUCE_GENERALIZED_RDF,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.EXCEPTION_ON_WARNING,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.FRAME
+ };
+ }
+}
diff --git a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterTest.java b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterTest.java
index 7eb23ffe413..0a904b5ab8e 100644
--- a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterTest.java
+++ b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/jsonld/JSONLDWriterTest.java
@@ -38,8 +38,6 @@
import org.eclipse.rdf4j.rio.WriterConfig;
import org.eclipse.rdf4j.rio.helpers.BasicParserSettings;
import org.eclipse.rdf4j.rio.helpers.BasicWriterSettings;
-import org.eclipse.rdf4j.rio.helpers.JSONLDMode;
-import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
import org.eclipse.rdf4j.rio.helpers.StatementCollector;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@@ -245,12 +243,13 @@ protected RioSetting>[] getExpectedSupportedSettings() {
return new RioSetting[] {
BasicWriterSettings.BASE_DIRECTIVE,
BasicWriterSettings.PRETTY_PRINT,
- JSONLDSettings.COMPACT_ARRAYS,
- JSONLDSettings.JSONLD_MODE,
- JSONLDSettings.PRODUCE_GENERALIZED_RDF,
- JSONLDSettings.USE_RDF_TYPE,
- JSONLDSettings.USE_NATIVE_TYPES,
- JSONLDSettings.EXCEPTION_ON_WARNING
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.COMPACT_ARRAYS,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.JSONLD_MODE,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.USE_RDF_TYPE,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.USE_NATIVE_TYPES,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.PRODUCE_GENERALIZED_RDF,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.EXCEPTION_ON_WARNING,
+ org.eclipse.rdf4j.rio.jsonld.JSONLDSettings.FRAME
};
}
}
diff --git a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/ndjsonld/NDJSONLDWriterTest.java b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/ndjsonld/NDJSONLDWriterTest.java
index 90c793e9ddd..eed20b0bb6f 100644
--- a/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/ndjsonld/NDJSONLDWriterTest.java
+++ b/core/rio/jsonld/src/test/java/org/eclipse/rdf4j/rio/ndjsonld/NDJSONLDWriterTest.java
@@ -58,7 +58,8 @@ protected RioSetting>[] getExpectedSupportedSettings() {
JSONLDSettings.PRODUCE_GENERALIZED_RDF,
JSONLDSettings.USE_RDF_TYPE,
JSONLDSettings.USE_NATIVE_TYPES,
- JSONLDSettings.EXCEPTION_ON_WARNING
+ JSONLDSettings.EXCEPTION_ON_WARNING,
+ JSONLDSettings.FRAME
};
}
}
diff --git a/core/rio/languages/pom.xml b/core/rio/languages/pom.xml
index 6d671957f1f..b35931702bb 100644
--- a/core/rio/languages/pom.xml
+++ b/core/rio/languages/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-languages
RDF4J: Rio - Languages
diff --git a/core/rio/n3/pom.xml b/core/rio/n3/pom.xml
index 88783b054aa..54ae5fe573c 100644
--- a/core/rio/n3/pom.xml
+++ b/core/rio/n3/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-n3
RDF4J: Rio - N3 (writer-only)
diff --git a/core/rio/nquads/pom.xml b/core/rio/nquads/pom.xml
index e0319824e58..044216524fb 100644
--- a/core/rio/nquads/pom.xml
+++ b/core/rio/nquads/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-nquads
RDF4J: Rio - N-Quads
diff --git a/core/rio/ntriples/pom.xml b/core/rio/ntriples/pom.xml
index dfb56bd96ba..37553504ed5 100644
--- a/core/rio/ntriples/pom.xml
+++ b/core/rio/ntriples/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-ntriples
RDF4J: Rio - N-Triples
diff --git a/core/rio/pom.xml b/core/rio/pom.xml
index d7f3720f3cc..77fc1cee292 100644
--- a/core/rio/pom.xml
+++ b/core/rio/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-core
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio
pom
diff --git a/core/rio/rdfjson/pom.xml b/core/rio/rdfjson/pom.xml
index f9dc87e07e5..55a3e3ad374 100644
--- a/core/rio/rdfjson/pom.xml
+++ b/core/rio/rdfjson/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-rdfjson
RDF4J: Rio - RDF/JSON
diff --git a/core/rio/rdfxml/pom.xml b/core/rio/rdfxml/pom.xml
index b035b9b2499..08a1e0f6eb3 100644
--- a/core/rio/rdfxml/pom.xml
+++ b/core/rio/rdfxml/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-rdfxml
RDF4J: Rio - RDF/XML
diff --git a/core/rio/trig/pom.xml b/core/rio/trig/pom.xml
index cdff54ce2dd..2736b12a916 100644
--- a/core/rio/trig/pom.xml
+++ b/core/rio/trig/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-trig
RDF4J: Rio - TriG
diff --git a/core/rio/trix/pom.xml b/core/rio/trix/pom.xml
index 8ddf9023a38..a8b99df7634 100644
--- a/core/rio/trix/pom.xml
+++ b/core/rio/trix/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-trix
RDF4J: Rio - TriX
diff --git a/core/rio/turtle/pom.xml b/core/rio/turtle/pom.xml
index 1d6259265fb..087f4221601 100644
--- a/core/rio/turtle/pom.xml
+++ b/core/rio/turtle/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-rio
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-rio-turtle
RDF4J: Rio - Turtle
diff --git a/core/sail/api/pom.xml b/core/sail/api/pom.xml
index b454546a40d..94ba13deba0 100644
--- a/core/sail/api/pom.xml
+++ b/core/sail/api/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-api
RDF4J: Sail API
diff --git a/core/sail/base/pom.xml b/core/sail/base/pom.xml
index 23d9cddb9bf..37f440d24a5 100644
--- a/core/sail/base/pom.xml
+++ b/core/sail/base/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-base
RDF4J: Sail base implementations
diff --git a/core/sail/elasticsearch-store/pom.xml b/core/sail/elasticsearch-store/pom.xml
index 1f3791f76c6..8542f4a1aaa 100644
--- a/core/sail/elasticsearch-store/pom.xml
+++ b/core/sail/elasticsearch-store/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-elasticsearch-store
RDF4J: Elasticsearch Store
diff --git a/core/sail/elasticsearch/pom.xml b/core/sail/elasticsearch/pom.xml
index dc30ae7b5f5..022319c4697 100644
--- a/core/sail/elasticsearch/pom.xml
+++ b/core/sail/elasticsearch/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-elasticsearch
RDF4J: Elastic Search Sail Index
diff --git a/core/sail/elasticsearch/src/main/java/org/eclipse/rdf4j/sail/elasticsearch/ElasticsearchIndex.java b/core/sail/elasticsearch/src/main/java/org/eclipse/rdf4j/sail/elasticsearch/ElasticsearchIndex.java
index 910c6eb385b..9373162dd79 100644
--- a/core/sail/elasticsearch/src/main/java/org/eclipse/rdf4j/sail/elasticsearch/ElasticsearchIndex.java
+++ b/core/sail/elasticsearch/src/main/java/org/eclipse/rdf4j/sail/elasticsearch/ElasticsearchIndex.java
@@ -87,14 +87,13 @@
/**
* Requires an Elasticsearch cluster with the DeleteByQuery plugin.
- *
+ *
* Note that, while RDF4J is licensed under the EDL, several ElasticSearch dependencies are licensed under the Elastic
* license or the SSPL, which may have implications for some projects.
- *
+ *
* Please consult the ElasticSearch website and license FAQ for more information.
*
* @see Elastic License FAQ
- *
* @see LuceneSail
*/
public class ElasticsearchIndex extends AbstractSearchIndex {
@@ -409,13 +408,8 @@ protected SearchDocument getDocument(String id) throws IOException {
@Override
protected Iterable extends SearchDocument> getDocuments(String resourceId) throws IOException {
SearchHits hits = getDocuments(QueryBuilders.termQuery(SearchFields.URI_FIELD_NAME, resourceId));
- return Iterables.transform(hits, new Function<>() {
-
- @Override
- public SearchDocument apply(SearchHit hit) {
- return new ElasticsearchDocument(hit, geoContextMapper);
- }
- });
+ return Iterables.transform(hits,
+ (Function) hit -> new ElasticsearchDocument(hit, geoContextMapper));
}
@Override
@@ -577,18 +571,26 @@ protected Iterable extends DocumentScore> query(Resource subject, QuerySpec sp
}
SearchHits hits;
- if (subject != null) {
- hits = search(subject, request, qb);
+
+ int numDocs;
+
+ Integer specNumDocs = spec.getNumDocs();
+ if (specNumDocs != null) {
+ if (specNumDocs < 0) {
+ throw new IllegalArgumentException("numDocs must be >= 0");
+ }
+ numDocs = specNumDocs;
} else {
- hits = search(request, qb);
+ numDocs = -1;
}
- return Iterables.transform(hits, new Function<>() {
- @Override
- public DocumentScore apply(SearchHit hit) {
- return new ElasticsearchDocumentScore(hit, geoContextMapper);
- }
- });
+ if (subject != null) {
+ hits = search(subject, request, qb, numDocs);
+ } else {
+ hits = search(request, qb, numDocs);
+ }
+ return Iterables.transform(hits,
+ (Function) hit -> new ElasticsearchDocumentScore(hit, geoContextMapper));
}
/**
@@ -600,11 +602,24 @@ public DocumentScore apply(SearchHit hit) {
* @return search hits
*/
public SearchHits search(Resource resource, SearchRequestBuilder request, QueryBuilder query) {
+ return search(resource, request, query, -1);
+ }
+
+ /**
+ * Evaluates the given query only for the given resource.
+ *
+ * @param resource
+ * @param request
+ * @param query
+ * @param numDocs
+ * @return search hits
+ */
+ public SearchHits search(Resource resource, SearchRequestBuilder request, QueryBuilder query, int numDocs) {
// rewrite the query
QueryBuilder idQuery = QueryBuilders.termQuery(SearchFields.URI_FIELD_NAME,
SearchFields.getResourceID(resource));
QueryBuilder combinedQuery = QueryBuilders.boolQuery().must(idQuery).must(query);
- return search(request, combinedQuery);
+ return search(request, combinedQuery, numDocs);
}
@Override
@@ -686,13 +701,8 @@ protected Iterable extends DocumentResult> geoRelationQuery(String relation, I
SearchRequestBuilder request = client.prepareSearch();
SearchHits hits = search(request, QueryBuilders.boolQuery().must(qb).filter(fb));
- return Iterables.transform(hits, new Function<>() {
-
- @Override
- public DocumentResult apply(SearchHit hit) {
- return new ElasticsearchDocumentResult(hit, geoContextMapper);
- }
- });
+ return Iterables.transform(hits,
+ (Function) hit -> new ElasticsearchDocumentResult(hit, geoContextMapper));
}
private ShapeRelation toSpatialOp(String relation) {
@@ -712,25 +722,43 @@ private ShapeRelation toSpatialOp(String relation) {
* Evaluates the given query and returns the results as a TopDocs instance.
*/
public SearchHits search(SearchRequestBuilder request, QueryBuilder query) {
+ return search(request, query, -1);
+ }
+
+ /**
+ * Evaluates the given query and returns the results as a TopDocs instance.
+ */
+ public SearchHits search(SearchRequestBuilder request, QueryBuilder query, int numDocs) {
String[] types = getTypes();
- int nDocs;
- if (maxDocs > 0) {
- nDocs = maxDocs;
- } else {
+
+ if (numDocs < -1) {
+ throw new IllegalArgumentException("numDocs should be 0 or greater if defined by the user");
+ }
+
+ int size = defaultNumDocs;
+ if (numDocs >= 0) {
+ // If the user has set numDocs we will use that. If it is 0 then the implementation may end up throwing an
+ // exception.
+ size = Math.min(maxDocs, numDocs);
+ }
+
+ if (size < 0) {
+ // defaultNumDocs is not set
long docCount = client.prepareSearch(indexName)
.setTypes(types)
.setSource(new SearchSourceBuilder().size(0).query(query))
.get()
.getHits()
.getTotalHits().value;
- nDocs = Math.max((int) Math.min(docCount, Integer.MAX_VALUE), 1);
+ size = Math.max((int) Math.min(docCount, maxDocs), 1);
}
+
SearchResponse response = request.setIndices(indexName)
.setTypes(types)
.setVersion(false)
.seqNoAndPrimaryTerm(true)
.setQuery(query)
- .setSize(nDocs)
+ .setSize(size)
.execute()
.actionGet();
return response.getHits();
diff --git a/core/sail/extensible-store/pom.xml b/core/sail/extensible-store/pom.xml
index 6103dcbbd53..e8d6a1af491 100644
--- a/core/sail/extensible-store/pom.xml
+++ b/core/sail/extensible-store/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-extensible-store
RDF4J: Extensible Store
diff --git a/core/sail/inferencer/pom.xml b/core/sail/inferencer/pom.xml
index 1f6ad930f5b..45babf4a3e2 100644
--- a/core/sail/inferencer/pom.xml
+++ b/core/sail/inferencer/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-inferencer
RDF4J: Inferencer Sails
diff --git a/core/sail/lmdb/pom.xml b/core/sail/lmdb/pom.xml
index 1486dab2eaf..9a494fe3521 100644
--- a/core/sail/lmdb/pom.xml
+++ b/core/sail/lmdb/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-lmdb
RDF4J: LmdbStore
diff --git a/core/sail/lucene-api/pom.xml b/core/sail/lucene-api/pom.xml
index 0f4def0ee74..a52d440fc00 100644
--- a/core/sail/lucene-api/pom.xml
+++ b/core/sail/lucene-api/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-lucene-api
RDF4J: Lucene Sail API
diff --git a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/AbstractSearchIndex.java b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/AbstractSearchIndex.java
index d8f85a4ff58..ba3a7f3d35c 100644
--- a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/AbstractSearchIndex.java
+++ b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/AbstractSearchIndex.java
@@ -41,6 +41,7 @@
import org.eclipse.rdf4j.query.MalformedQueryException;
import org.eclipse.rdf4j.query.algebra.Var;
import org.eclipse.rdf4j.query.algebra.evaluation.QueryBindingSet;
+import org.eclipse.rdf4j.sail.Sail;
import org.eclipse.rdf4j.sail.SailException;
import org.eclipse.rdf4j.sail.lucene.util.MapOfListMaps;
import org.locationtech.spatial4j.context.SpatialContext;
@@ -65,7 +66,8 @@ public abstract class AbstractSearchIndex implements SearchIndex {
REJECTED_DATATYPES.add("http://www.w3.org/2001/XMLSchema#float");
}
- protected int maxDocs;
+ protected int defaultNumDocs = -1;
+ protected int maxDocs = Integer.MAX_VALUE;
protected Set wktFields = Collections.singleton(SearchFields.getPropertyField(GEO.AS_WKT));
@@ -75,8 +77,29 @@ public abstract class AbstractSearchIndex implements SearchIndex {
@Override
public void initialize(Properties parameters) throws Exception {
- String maxDocParam = parameters.getProperty(LuceneSail.MAX_DOCUMENTS_KEY);
- maxDocs = (maxDocParam != null) ? Integer.parseInt(maxDocParam) : -1;
+ String maxDocumentsParam = parameters.getProperty(LuceneSail.MAX_DOCUMENTS_KEY);
+ String defaultNumDocsParam = parameters.getProperty(LuceneSail.DEFAULT_NUM_DOCS_KEY);
+
+ if ((maxDocumentsParam != null)) {
+ maxDocs = Integer.parseInt(maxDocumentsParam);
+
+ // if maxDocs is set then defaultNumDocs is set to maxDocs if it is not set, because we now have a known
+ // upper limit
+ defaultNumDocs = (defaultNumDocsParam != null) ? Math.min(maxDocs, Integer.parseInt(defaultNumDocsParam))
+ : maxDocs;
+ } else {
+ // we can never return more than Integer.MAX_VALUE documents
+ maxDocs = Integer.MAX_VALUE;
+
+ // legacy behaviour is to return the number of documents that the query would return if there was no limit,
+ // so if the defaultNumDocs is not set, we set it to -1 to signal that there is no limit
+ defaultNumDocs = (defaultNumDocsParam != null) ? Integer.parseInt(defaultNumDocsParam) : -1;
+ }
+
+ if (defaultNumDocs > maxDocs) {
+ throw new IllegalArgumentException(LuceneSail.DEFAULT_NUM_DOCS_KEY + " must be less than or equal to "
+ + LuceneSail.MAX_DOCUMENTS_KEY + " (" + defaultNumDocs + " > " + maxDocs + ")");
+ }
String wktFieldParam = parameters.getProperty(LuceneSail.WKT_FIELDS);
if (wktFieldParam != null) {
@@ -146,7 +169,7 @@ public boolean accept(Literal literal) {
// we reject literals that aren't in the list of the indexed lang
if (indexedLangs != null
- && (!literal.getLanguage().isPresent()
+ && (literal.getLanguage().isEmpty()
|| !indexedLangs.contains(literal.getLanguage().get().toLowerCase()
))) {
return false;
@@ -353,11 +376,8 @@ public final synchronized void addRemoveStatements(Collection added,
// remove value from both property field and the
// corresponding text field
String field = SearchFields.getPropertyField(r.getPredicate());
- Set removedValues = removedOfResource.get(field);
- if (removedValues == null) {
- removedValues = new HashSet<>();
- removedOfResource.put(field, removedValues);
- }
+ Set removedValues = removedOfResource.computeIfAbsent(field,
+ k -> new HashSet<>());
removedValues.add(val);
}
}
@@ -545,7 +565,8 @@ private Iterable extends DocumentScore> evaluateQuery(QuerySpec query) {
hits = query(query.getSubject(), query);
}
} catch (Exception e) {
- logger.error("There was a problem evaluating query '" + query.getCatQuery() + "'!", e);
+ logger.error("There was a problem evaluating query '{}'!", query.getCatQuery(), e);
+ assert false : "There was a problem evaluating query '" + query.getCatQuery() + "'!";
}
return hits;
@@ -717,6 +738,8 @@ private Iterable extends DocumentDistance> evaluateQuery(DistanceQuerySpec que
} catch (Exception e) {
logger.error("There was a problem evaluating distance query 'within " + distance + getUnitSymbol(units)
+ " of " + from.getLabel() + "'!", e);
+ assert false : "There was a problem evaluating distance query 'within " + distance + getUnitSymbol(units)
+ + " of " + from.getLabel() + "'!";
}
return hits;
@@ -825,6 +848,8 @@ private Iterable extends DocumentResult> evaluateQuery(GeoRelationQuerySpec qu
} catch (Exception e) {
logger.error("There was a problem evaluating spatial relation query '" + query.getRelation() + " "
+ qgeom.getLabel() + "'!", e);
+ assert false : "There was a problem evaluating spatial relation query '" + query.getRelation() + " "
+ + qgeom.getLabel() + "'!";
}
return hits;
diff --git a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSail.java b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSail.java
index 37e6e8c0db8..f2d96ecc435 100644
--- a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSail.java
+++ b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSail.java
@@ -290,10 +290,17 @@ public class LuceneSail extends NotifyingSailWrapper {
public static final String LUCENE_RAMDIR_KEY = "useramdir";
/**
- * Set the key "maxDocuments=<n>" as sail parameter to limit the maximum number of documents to return from a
- * search query. The default is to return all documents. NB: this may involve extra cost for some SearchIndex
+ * Set the key "defaultNumDocs=<n>" as sail parameter to limit the maximum number of documents to return from
+ * a search query. The default is to return all documents. NB: this may involve extra cost for some SearchIndex
* implementations as they may have to determine this number.
*/
+ public static final String DEFAULT_NUM_DOCS_KEY = "defaultNumDocs";
+
+ /**
+ * Set the key "maxDocuments=<n>" as sail parameter to limit the maximum number of documents the user can
+ * query at a time to return from a search query. The default is the value of the {@link #DEFAULT_NUM_DOCS_KEY}
+ * parameter.
+ */
public static final String MAX_DOCUMENTS_KEY = "maxDocuments";
/**
diff --git a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSailSchema.java b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSailSchema.java
index 13e5d891818..78d56b24734 100644
--- a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSailSchema.java
+++ b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/LuceneSailSchema.java
@@ -52,6 +52,8 @@ public class LuceneSailSchema {
public static final IRI CONTEXT;
+ public static final IRI NUM_DOCS;
+
static {
ValueFactory factory = SimpleValueFactory.getInstance(); // compatible with beta4:
// creating a new factory
@@ -73,5 +75,6 @@ public class LuceneSailSchema {
WITHIN_DISTANCE = factory.createIRI(NAMESPACE + "withinDistance");
DISTANCE = factory.createIRI(NAMESPACE + "distance");
CONTEXT = factory.createIRI(NAMESPACE + "context");
+ NUM_DOCS = factory.createIRI(NAMESPACE + "numDocs");
}
}
diff --git a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpec.java b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpec.java
index c6886ccd084..0e647c592f7 100644
--- a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpec.java
+++ b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpec.java
@@ -16,7 +16,9 @@
import java.util.stream.Collectors;
import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Literal;
import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.query.algebra.QueryModelNode;
import org.eclipse.rdf4j.query.algebra.SingletonSet;
import org.eclipse.rdf4j.query.algebra.StatementPattern;
@@ -67,21 +69,43 @@ private static void append(Var var, StringBuilder buffer) {
private final StatementPattern idPattern;
+ private final StatementPattern numDocsPattern;
+
private final Resource subject;
private final String matchesVarName;
private final String scoreVarName;
+ private final Integer numDocs;
+
public QuerySpec(StatementPattern matchesPattern, Collection queryPatterns,
StatementPattern scorePattern, StatementPattern typePattern,
StatementPattern idPattern, Resource subject) {
+ this(matchesPattern, queryPatterns, scorePattern, typePattern, idPattern, null, subject);
+ }
+
+ public QuerySpec(StatementPattern matchesPattern, Collection queryPatterns,
+ StatementPattern scorePattern, StatementPattern typePattern,
+ StatementPattern idPattern, StatementPattern numDocsPattern, Resource subject) {
this.matchesPattern = matchesPattern;
this.queryPatterns = queryPatterns;
this.scorePattern = scorePattern;
this.typePattern = typePattern;
this.idPattern = idPattern;
+ this.numDocsPattern = numDocsPattern;
this.subject = subject;
+ if (numDocsPattern != null) {
+ Value val = numDocsPattern.getObjectVar().getValue();
+ if (val != null && val.isLiteral()) {
+ this.numDocs = ((Literal) val).intValue();
+ } else {
+ throw new IllegalArgumentException("numDocs should be constant literal value");
+ }
+ } else {
+ this.numDocs = null;
+ }
+
if (matchesPattern != null) {
this.matchesVarName = matchesPattern.getSubjectVar().getName();
} else {
@@ -101,9 +125,11 @@ public QuerySpec(String matchesVarName, String propertyVarName, String scoreVarN
this.matchesPattern = null;
this.scorePattern = null;
this.typePattern = null;
+ this.numDocsPattern = null;
this.queryPatterns = Set.of();
this.idPattern = null;
this.subject = subject;
+ this.numDocs = null;
}
@Override
@@ -121,6 +147,7 @@ public QueryModelNode removeQueryPatterns() {
replace(getScorePattern(), replacement);
replace(getTypePattern(), replacement);
replace(getIdPattern(), replacement);
+ replace(getNumDocsPattern(), replacement);
final QueryModelNode placeholder = new SingletonSet();
@@ -154,6 +181,10 @@ public StatementPattern getScorePattern() {
return scorePattern;
}
+ public StatementPattern getNumDocsPattern() {
+ return numDocsPattern;
+ }
+
/**
* The variable name associated with the query score
*
@@ -163,6 +194,10 @@ public String getScoreVariableName() {
return scoreVarName;
}
+ public Integer getNumDocs() {
+ return numDocs;
+ }
+
public StatementPattern getTypePattern() {
return typePattern;
}
diff --git a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilder.java b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilder.java
index c62a30266ab..73c88dc10f6 100644
--- a/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilder.java
+++ b/core/sail/lucene-api/src/main/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilder.java
@@ -15,6 +15,7 @@
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.INDEXID;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.LUCENE_QUERY;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.MATCHES;
+import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.NUM_DOCS;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.PROPERTY;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.QUERY;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.SCORE;
@@ -152,7 +153,7 @@ public void process(TupleExpr tupleExpr, BindingSet bindings, Collection queryPatterns;
try {
@@ -161,6 +162,7 @@ public void process(TupleExpr tupleExpr, BindingSet bindings, Collection boostPatterns = new ArrayList<>();
+ public ArrayList numDocsPatterns = new ArrayList<>();
+
/**
* Method implementing the visitor pattern that gathers all statements using a predicate from the LuceneSail's
* namespace.
@@ -487,6 +496,8 @@ public void meet(StatementPattern node) {
idPatterns.add(node);
} else if (BOOST.equals(predicate)) {
boostPatterns.add(node);
+ } else if (NUM_DOCS.equals(predicate)) {
+ numDocsPatterns.add(node);
} else if (TYPE.equals(predicate)) {
Value object = node.getObjectVar().getValue();
if (LUCENE_QUERY.equals(object)) {
diff --git a/core/sail/lucene-api/src/test/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilderTest.java b/core/sail/lucene-api/src/test/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilderTest.java
index 89c474e0d44..d7009f4f909 100644
--- a/core/sail/lucene-api/src/test/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilderTest.java
+++ b/core/sail/lucene-api/src/test/java/org/eclipse/rdf4j/sail/lucene/QuerySpecBuilderTest.java
@@ -14,6 +14,7 @@
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.BOOST;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.LUCENE_QUERY;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.MATCHES;
+import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.NUM_DOCS;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.QUERY;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.SCORE;
import static org.eclipse.rdf4j.sail.lucene.LuceneSailSchema.SNIPPET;
@@ -55,6 +56,7 @@ public void testQueryInterpretation() {
"<" + TYPE + "> <" + LUCENE_QUERY + ">; " +
"<" + QUERY + "> \"my Lucene query\"; " +
"<" + SCORE + "> ?Score; " +
+ "<" + NUM_DOCS + "> 76; " +
"<" + SNIPPET + "> ?Snippet ]. } ";
ParsedQuery query = parser.parseQuery(buffer, null);
TupleExpr tupleExpr = query.getTupleExpr();
@@ -69,6 +71,8 @@ public void testQueryInterpretation() {
assertEquals("Score", querySpec.getScorePattern().getObjectVar().getName());
assertEquals("Snippet", param.getSnippetPattern().getObjectVar().getName());
assertEquals(LUCENE_QUERY, querySpec.getTypePattern().getObjectVar().getValue());
+ assertEquals(76, querySpec.getNumDocs());
+ assertEquals(76, ((Literal) querySpec.getNumDocsPattern().getObjectVar().getValue()).intValue());
assertEquals("my Lucene query", param.getQuery());
assertNull(querySpec.getSubject());
}
@@ -80,11 +84,13 @@ public void testMultipleQueriesInterpretation() {
"<" + TYPE + "> <" + LUCENE_QUERY + ">; " +
"<" + QUERY + "> \"my Lucene query\"; " +
"<" + SCORE + "> ?score1; " +
+ "<" + NUM_DOCS + "> 86; " +
"<" + SNIPPET + "> ?snippet1 ]. " +
" ?sub2 <" + MATCHES + "> [ " +
"<" + TYPE + "> <" + LUCENE_QUERY + ">; " +
"<" + QUERY + "> \"second lucene query\"; " +
"<" + SCORE + "> ?score2; " +
+ "<" + NUM_DOCS + "> 13; " +
"<" + SNIPPET + "> ?snippet2 ]. " +
// and connect them both via any X in between, just as salt to make the
// parser do something
@@ -103,6 +109,7 @@ public void testMultipleQueriesInterpretation() {
// Matched the first
assertEquals("sub1", querySpec.getMatchesPattern().getSubjectVar().getName());
assertEquals(1, querySpec.getQueryPatterns().size());
+ assertEquals(86, querySpec.getNumDocs());
QuerySpec.QueryParam param = querySpec.getQueryPatterns().iterator().next();
assertEquals("my Lucene query",
((Literal) param.getQueryPattern().getObjectVar().getValue()).getLabel());
@@ -116,6 +123,7 @@ public void testMultipleQueriesInterpretation() {
// and the second
assertEquals("sub2", querySpec.getMatchesPattern().getSubjectVar().getName());
assertEquals(1, querySpec.getQueryPatterns().size());
+ assertEquals(13, querySpec.getNumDocs());
QuerySpec.QueryParam param = querySpec.getQueryPatterns().iterator().next();
assertEquals("second lucene query",
((Literal) param.getQueryPattern().getObjectVar().getValue()).getLabel());
diff --git a/core/sail/lucene/pom.xml b/core/sail/lucene/pom.xml
index 0bf14bb2dc4..530c6ac3c5d 100644
--- a/core/sail/lucene/pom.xml
+++ b/core/sail/lucene/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-lucene
RDF4J: Lucene Sail Index
diff --git a/core/sail/lucene/src/main/java/org/eclipse/rdf4j/sail/lucene/impl/LuceneIndex.java b/core/sail/lucene/src/main/java/org/eclipse/rdf4j/sail/lucene/impl/LuceneIndex.java
index 42174324308..5999a91cbe8 100644
--- a/core/sail/lucene/src/main/java/org/eclipse/rdf4j/sail/lucene/impl/LuceneIndex.java
+++ b/core/sail/lucene/src/main/java/org/eclipse/rdf4j/sail/lucene/impl/LuceneIndex.java
@@ -25,6 +25,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -751,11 +752,23 @@ protected Iterable extends DocumentScore> query(Resource subject, QuerySpec sp
highlighter = null;
}
+ int numDocs;
+
+ Integer specNumDocs = spec.getNumDocs();
+ if (specNumDocs != null) {
+ if (specNumDocs < 0) {
+ throw new IllegalArgumentException("numDocs must be >= 0");
+ }
+ numDocs = specNumDocs;
+ } else {
+ numDocs = -1;
+ }
+
TopDocs docs;
if (subject != null) {
- docs = search(subject, q);
+ docs = search(subject, q, numDocs);
} else {
- docs = search(q);
+ docs = search(q, numDocs);
}
return Iterables.transform(Arrays.asList(docs.scoreDocs),
(ScoreDoc doc) -> new LuceneDocumentScore(doc, highlighter, LuceneIndex.this));
@@ -960,12 +973,25 @@ public synchronized String getSnippet(String fieldName, String text, Highlighter
* @throws IOException
*/
public synchronized TopDocs search(Resource resource, Query query) throws IOException {
+ return search(resource, query, -1);
+ }
+
+ /**
+ * Evaluates the given query only for the given resource.
+ *
+ * @param resource
+ * @param query
+ * @param numDocs
+ * @return top documents
+ * @throws IOException
+ */
+ public synchronized TopDocs search(Resource resource, Query query, int numDocs) throws IOException {
// rewrite the query
TermQuery idQuery = new TermQuery(new Term(SearchFields.URI_FIELD_NAME, SearchFields.getResourceID(resource)));
BooleanQuery.Builder combinedQuery = new BooleanQuery.Builder();
combinedQuery.add(idQuery, Occur.MUST);
combinedQuery.add(query, Occur.MUST);
- return search(combinedQuery.build());
+ return search(combinedQuery.build(), numDocs);
}
/**
@@ -976,13 +1002,32 @@ public synchronized TopDocs search(Resource resource, Query query) throws IOExce
* @throws IOException
*/
public synchronized TopDocs search(Query query) throws IOException {
- int nDocs;
- if (maxDocs > 0) {
- nDocs = maxDocs;
- } else {
- nDocs = Math.max(getIndexReader().numDocs(), 1);
+ return search(query, -1);
+ }
+
+ /**
+ * Evaluates the given query and returns the results as a TopDocs instance.
+ *
+ * @param query
+ * @param numDocs
+ * @return top documents
+ * @throws IOException
+ */
+ public synchronized TopDocs search(Query query, int numDocs) throws IOException {
+ if (numDocs < -1) {
+ throw new IllegalArgumentException("numDocs should be 0 or greater if defined by the user");
+ }
+
+ int size = defaultNumDocs;
+ if (numDocs >= 0) {
+ // If the user has set numDocs we will use that. If it is 0 then the implementation may end up throwing an
+ // exception.
+ size = Math.min(maxDocs, numDocs);
+ }
+ if (size < 0) {
+ size = Math.max(getIndexReader().numDocs(), 1);
}
- return getIndexSearcher().search(query, nDocs);
+ return getIndexSearcher().search(query, size);
}
private QueryParser getQueryParser(IRI propertyURI) {
diff --git a/core/sail/memory/pom.xml b/core/sail/memory/pom.xml
index ec77c2ff18d..ae81a8c5531 100644
--- a/core/sail/memory/pom.xml
+++ b/core/sail/memory/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-memory
RDF4J: MemoryStore
diff --git a/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java b/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java
index 137a46c4059..187e7eb0e75 100644
--- a/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java
+++ b/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java
@@ -16,6 +16,7 @@
import static org.junit.Assert.assertTrue;
import java.io.IOException;
+import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
@@ -85,7 +86,7 @@ public class QueryPlanRetrievalTest {
"\n" +
"\n" +
" {\n" +
- " SELECT DISTINCT ?buyerrole ?countryID WHERE {\n" +
+ " SELECT DISTINCT ?buyerrole ?countryID WHERE {\n" +
" ?org epo:hasBuyerType ?buytype .\n" +
" FILTER (?buytype != )\n"
+
@@ -1153,4 +1154,174 @@ public void testArbitraryLengthPath() {
}
+ @Test
+ public void testHaving() {
+
+ String expected = "Order (resultSizeActual=4)\n" +
+ " OrderElem (ASC)\n" +
+ " Var (name=nbTerm)\n" +
+ " OrderElem (ASC)\n" +
+ " Var (name=nameSjb1)\n" +
+ " OrderElem (ASC)\n" +
+ " Var (name=idTerm3)\n" +
+ " Projection (resultSizeActual=4)\n" +
+ " ├── ProjectionElemList\n" +
+ " │ ProjectionElem \"nameSjb1\"\n" +
+ " │ ProjectionElem \"idCN1\"\n" +
+ " │ ProjectionElem \"nbTerm\"\n" +
+ " │ ProjectionElem \"idTerm3\"\n" +
+ " └── Join (JoinIterator) (resultSizeActual=4)\n" +
+ " ╠══ Projection (new scope) (resultSizeActual=2) [left]\n" +
+ " ║ ├── ProjectionElemList\n" +
+ " ║ │ ProjectionElem \"nameSjb1\"\n" +
+ " ║ │ ProjectionElem \"idCN1\"\n" +
+ " ║ │ ProjectionElem \"nbTerm\"\n" +
+ " ║ └── Extension (resultSizeActual=2)\n" +
+ " ║ ╠══ Extension (resultSizeActual=2)\n" +
+ " ║ ║ Filter (resultSizeActual=2)\n" +
+ " ║ ║ ╠══ Compare (<)\n" +
+ " ║ ║ ║ Var (name=nbTerm)\n" +
+ " ║ ║ ║ ValueConstant (value=\"3\"^^)\n" +
+ " ║ ║ ╚══ Group (nameSjb1, idCN1) (resultSizeActual=4)\n" +
+ " ║ ║ ├── LeftJoin (LeftJoinIterator) (resultSizeActual=11)\n" +
+ " ║ ║ │ ╠══ Join (JoinIterator) (resultSizeActual=11) [left]\n" +
+ " ║ ║ │ ║ ├── StatementPattern (costEstimate=54, resultSizeEstimate=4.00, resultSizeActual=4) [left]\n"
+ +
+ " ║ ║ │ ║ │ s: Var (name=idTerm1)\n" +
+ " ║ ║ │ ║ │ p: Var (name=_const_c6e40399_uri, value=http://iec.ch/TC57/2013/CIM-schema-cim16#Terminal.ConductingEquipment, anonymous)\n"
+ +
+ " ║ ║ │ ║ │ o: Var (name=idSjb1)\n" +
+ " ║ ║ │ ║ └── Join (JoinIterator) (resultSizeActual=11) [right]\n" +
+ " ║ ║ │ ║ ╠══ StatementPattern (costEstimate=1.00, resultSizeEstimate=4.00, resultSizeActual=4) [left]\n"
+ +
+ " ║ ║ │ ║ ║ s: Var (name=idSjb1)\n" +
+ " ║ ║ │ ║ ║ p: Var (name=_const_f5e5585a_uri, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)\n"
+ +
+ " ║ ║ │ ║ ║ o: Var (name=_const_6965b017_uri, value=http://iec.ch/TC57/2013/CIM-schema-cim16#BusbarSection, anonymous)\n"
+ +
+ " ║ ║ │ ║ ╚══ Join (JoinIterator) (resultSizeActual=11) [right]\n" +
+ " ║ ║ │ ║ ├── StatementPattern (costEstimate=2.12, resultSizeEstimate=13, resultSizeActual=4) [left]\n"
+ +
+ " ║ ║ │ ║ │ s: Var (name=idTerm1)\n" +
+ " ║ ║ │ ║ │ p: Var (name=_const_4395d870_uri, value=http://iec.ch/TC57/2013/CIM-schema-cim16#Terminal.ConnectivityNode, anonymous)\n"
+ +
+ " ║ ║ │ ║ │ o: Var (name=idCN1)\n" +
+ " ║ ║ │ ║ └── StatementPattern (costEstimate=4.24, resultSizeEstimate=13, resultSizeActual=11) [right]\n"
+ +
+ " ║ ║ │ ║ s: Var (name=idTermOfCN)\n" +
+ " ║ ║ │ ║ p: Var (name=_const_4395d870_uri, value=http://iec.ch/TC57/2013/CIM-schema-cim16#Terminal.ConnectivityNode, anonymous)\n"
+ +
+ " ║ ║ │ ║ o: Var (name=idCN1)\n" +
+ " ║ ║ │ ╚══ StatementPattern (resultSizeEstimate=4.00, resultSizeActual=11) [right]\n"
+ +
+ " ║ ║ │ s: Var (name=idSjb1)\n" +
+ " ║ ║ │ p: Var (name=_const_857da984_uri, value=http://iec.ch/TC57/2013/CIM-schema-cim16#IdentifiedObject.name, anonymous)\n"
+ +
+ " ║ ║ │ o: Var (name=nameSjb1)\n" +
+ " ║ ║ └── GroupElem (nbTerm)\n" +
+ " ║ ║ Count\n" +
+ " ║ ║ Var (name=idTermOfCN)\n" +
+ " ║ ╚══ ExtensionElem (nbTerm)\n" +
+ " ║ Count\n" +
+ " ║ Var (name=idTermOfCN)\n" +
+ " ╚══ StatementPattern (costEstimate=18, resultSizeEstimate=13, resultSizeActual=4) [right]\n" +
+ " s: Var (name=idTerm3)\n" +
+ " p: Var (name=_const_4395d870_uri, value=http://iec.ch/TC57/2013/CIM-schema-cim16#Terminal.ConnectivityNode, anonymous)\n"
+ +
+ " o: Var (name=idCN1)\n";
+ SailRepository sailRepository = new SailRepository(new MemoryStore());
+
+ try (SailRepositoryConnection connection = sailRepository.getConnection()) {
+ connection.add(new StringReader("@prefix rdf: .\n" +
+ "@prefix cim: .\n" +
+ "@prefix : .\n" +
+ "\n" +
+ "# Busbar Sections\n" +
+ ":BusbarSection1 rdf:type cim:BusbarSection ;\n" +
+ " cim:IdentifiedObject.name \"Busbar1\" .\n" +
+ "\n" +
+ ":BusbarSection2 rdf:type cim:BusbarSection ;\n" +
+ " cim:IdentifiedObject.name \"Busbar2\" .\n" +
+ "\n" +
+ ":BusbarSection3 rdf:type cim:BusbarSection ;\n" +
+ " cim:IdentifiedObject.name \"Busbar3\" .\n" +
+ "\n" +
+ ":BusbarSection4 rdf:type cim:BusbarSection ;\n" +
+ " cim:IdentifiedObject.name \"Busbar4\" .\n" +
+ "\n" +
+ "# Connectivity Nodes\n" +
+ ":ConnectivityNode1 a cim:ConnectivityNode .\n" +
+ ":ConnectivityNode2 a cim:ConnectivityNode .\n" +
+ ":ConnectivityNode3 a cim:ConnectivityNode .\n" +
+ ":ConnectivityNode4 a cim:ConnectivityNode .\n" +
+ ":ConnectivityNode5 a cim:ConnectivityNode .\n" +
+ ":ConnectivityNode6 a cim:ConnectivityNode .\n" +
+ "\n" +
+ "# Terminals connected to ConnectivityNode1 (3 terminals)\n" +
+ ":Terminal1 cim:Terminal.ConductingEquipment :BusbarSection1 ;\n" +
+ " cim:Terminal.ConnectivityNode :ConnectivityNode1 .\n" +
+ "\n" +
+ ":Terminal2 cim:Terminal.ConnectivityNode :ConnectivityNode1 .\n" +
+ ":Terminal3 cim:Terminal.ConnectivityNode :ConnectivityNode1 .\n" +
+ "\n" +
+ "# Terminals connected to ConnectivityNode2 (2 terminals)\n" +
+ ":Terminal4 cim:Terminal.ConductingEquipment :BusbarSection2 ;\n" +
+ " cim:Terminal.ConnectivityNode :ConnectivityNode2 .\n" +
+ "\n" +
+ ":Terminal5 cim:Terminal.ConnectivityNode :ConnectivityNode2 .\n" +
+ "\n" +
+ "# Terminal connected to ConnectivityNode3 (1 terminal)\n" +
+ ":Terminal6 cim:Terminal.ConnectivityNode :ConnectivityNode3 .\n" +
+ "\n" +
+ "# Terminals connected to ConnectivityNode4 (4 terminals)\n" +
+ ":Terminal7 cim:Terminal.ConductingEquipment :BusbarSection3 ;\n" +
+ " cim:Terminal.ConnectivityNode :ConnectivityNode4 .\n" +
+ "\n" +
+ ":Terminal8 cim:Terminal.ConnectivityNode :ConnectivityNode4 .\n" +
+ ":Terminal9 cim:Terminal.ConnectivityNode :ConnectivityNode4 .\n" +
+ ":Terminal10 cim:Terminal.ConnectivityNode :ConnectivityNode4 .\n" +
+ "\n" +
+ "# Terminals connected to ConnectivityNode5 (2 terminals)\n" +
+ ":Terminal11 cim:Terminal.ConductingEquipment :BusbarSection4 ;\n" +
+ " cim:Terminal.ConnectivityNode :ConnectivityNode5 .\n" +
+ "\n" +
+ ":Terminal12 cim:Terminal.ConnectivityNode :ConnectivityNode5 .\n" +
+ "\n" +
+ "# Terminal connected to ConnectivityNode6 (1 terminal)\n" +
+ ":Terminal13 cim:Terminal.ConnectivityNode :ConnectivityNode6 ."), "", RDFFormat.TURTLE);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ try (SailRepositoryConnection connection = sailRepository.getConnection()) {
+ TupleQuery query = connection.prepareTupleQuery(
+ "PREFIX rdf: \n" +
+ "PREFIX cim: \n" +
+ "" +
+ "select ?nameSjb1 ?idCN1 ?nbTerm ?idTerm3\n" +
+ "where {\n" +
+ " {\n" +
+ " select ?nameSjb1 ?idCN1 (count(?idTermOfCN) as ?nbTerm)\n" +
+ " where {\n" +
+ " ?idSjb1 rdf:type cim:BusbarSection .\n" +
+ " ?idTerm1 cim:Terminal.ConductingEquipment ?idSjb1 .\n" +
+ " ?idTerm1 cim:Terminal.ConnectivityNode ?idCN1 .\n" +
+ " ?idTermOfCN cim:Terminal.ConnectivityNode ?idCN1\n" +
+ " OPTIONAL { ?idSjb1 cim:IdentifiedObject.name ?nameSjb1 . }\n" +
+ " }\n" +
+ " group by ?nameSjb1 ?idCN1\n" +
+ " having (?nbTerm < 3)\n" +
+ " }\n" +
+ " ?idTerm3 cim:Terminal.ConnectivityNode ?idCN1\n" +
+ "}\n" +
+ "order by ?nbTerm ?nameSjb1 ?idTerm3");
+ String actual = query.explain(Explanation.Level.Executed).toString();
+
+ assertThat(actual).isEqualToNormalizingNewlines(expected);
+
+ }
+ sailRepository.shutDown();
+
+ }
+
}
diff --git a/core/sail/model/pom.xml b/core/sail/model/pom.xml
index a4593e109d3..531c473d10a 100644
--- a/core/sail/model/pom.xml
+++ b/core/sail/model/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-model
RDF4J: Sail Model
diff --git a/core/sail/nativerdf/pom.xml b/core/sail/nativerdf/pom.xml
index d143946697f..17dbcc1c962 100644
--- a/core/sail/nativerdf/pom.xml
+++ b/core/sail/nativerdf/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail-nativerdf
RDF4J: NativeStore
diff --git a/core/sail/pom.xml b/core/sail/pom.xml
index 6e5664ecf74..cbce9f38bc7 100644
--- a/core/sail/pom.xml
+++ b/core/sail/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-core
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-sail
pom
diff --git a/core/sail/shacl/pom.xml b/core/sail/shacl/pom.xml
index 8028c286e2c..9cae94fe046 100644
--- a/core/sail/shacl/pom.xml
+++ b/core/sail/shacl/pom.xml
@@ -4,7 +4,7 @@
org.eclipse.rdf4j
rdf4j-sail
- 5.0.4-SNAPSHOT
+ 5.1.0-SNAPSHOT
rdf4j-shacl
RDF4J: SHACL
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 f2b75e528ed..81adf25db1d 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,6 +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.NODE,
SHACL.QUALIFIED_MAX_COUNT,
SHACL.QUALIFIED_MIN_COUNT,
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/NodeShape.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/NodeShape.java
index 0688db2316e..dcd9291cba6 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/NodeShape.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/NodeShape.java
@@ -202,11 +202,12 @@ public SourceConstraintComponent getConstraintComponent() {
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
PlanNode planNode = constraintComponents.stream()
.map(c -> c.getAllTargetsPlan(connectionsGroup, dataGraph, Scope.nodeShape,
- new StatementMatcher.StableRandomVariableProvider()))
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings))
.distinct()
.reduce((nodes, nodes2) -> UnionNode.getInstanceDedupe(connectionsGroup, nodes, nodes2))
.orElse(EmptyNode.getInstance());
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/PropertyShape.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/PropertyShape.java
index 5735bf9276d..db324f3c020 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/PropertyShape.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/PropertyShape.java
@@ -255,10 +255,11 @@ constraintComponent, getSeverity(), t.getScope(), t.getContexts(),
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
PlanNode planNode = constraintComponents.stream()
.map(c -> c.getAllTargetsPlan(connectionsGroup, dataGraph, Scope.propertyShape,
- new StatementMatcher.StableRandomVariableProvider()))
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings))
.distinct()
.reduce((nodes, nodes2) -> UnionNode.getInstanceDedupe(connectionsGroup, nodes, nodes2))
.orElse(EmptyNode.getInstance());
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/SparqlFragment.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/SparqlFragment.java
index e3812aca1a2..c0bc9d2179d 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/SparqlFragment.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/SparqlFragment.java
@@ -24,7 +24,6 @@
import org.eclipse.rdf4j.model.Namespace;
import org.eclipse.rdf4j.model.Resource;
-import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
import org.eclipse.rdf4j.sail.shacl.ast.targets.EffectiveTarget;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup;
@@ -337,8 +336,10 @@ public String getNamespacesForSparql() {
return ShaclPrefixParser.toSparqlPrefixes(namespaces);
}
- public Stream getRoot(ConnectionsGroup connectionsGroup, Resource[] dataGraph,
- Path path, StatementMatcher currentStatementMatcher, List currentStatements) {
+ public Stream getRoot(ConnectionsGroup connectionsGroup,
+ Resource[] dataGraph,
+ Path path, StatementMatcher currentStatementMatcher,
+ List currentStatements) {
assert traceBackFunction != null;
return traceBackFunction.getRoot(connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements);
}
@@ -411,12 +412,12 @@ public int hashCode() {
public interface TraceBack {
- Stream getRoot(
+ Stream getRoot(
ConnectionsGroup connectionsGroup,
Resource[] dataGraph,
Path path,
StatementMatcher currentStatementMatcher,
- List currentStatements);
+ List currentStatements);
}
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/ValidationQuery.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/ValidationQuery.java
index f3b6fdd26b6..959b9b04c4b 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/ValidationQuery.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/ValidationQuery.java
@@ -232,8 +232,9 @@ private String getFullQueryString() {
} else {
extraVariablesString = "";
}
- } else
+ } else {
extraVariablesString = "";
+ }
if (scope_validationReport == ConstraintComponent.Scope.propertyShape
&& propertyShapeWithValue_validationReport) {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractConstraintComponent.java
index f3a6413a5cb..fedfe846162 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractConstraintComponent.java
@@ -103,7 +103,8 @@ public boolean requiresEvaluation(ConnectionsGroup connectionsGroup, Scope scope
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
throw new UnsupportedOperationException();
}
@@ -171,6 +172,9 @@ static PlanNode getAllTargetsIncludingThoseAddedByPath(ConnectionsGroup connecti
null);
allTargets = UnionNode.getInstance(connectionsGroup, addedTargets.getPlanNode(), addedByPath);
+
+ allTargets = Unique.getInstance(new TrimToTarget(allTargets, connectionsGroup), false, connectionsGroup);
+
return allTargets;
}
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 8b7dcde0f50..daba61bd6c0 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
@@ -161,7 +161,8 @@ private PlanNode getAllTargetsBasedOnPredicate(ConnectionsGroup connectionsGroup
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
PlanNode allTargetsPlan = getTargetChain()
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),
@@ -252,7 +253,7 @@ public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[]
}
- return Unique.getInstance(allTargetsPlan, false, connectionsGroup);
+ return Unique.getInstance(new TrimToTarget(allTargetsPlan, connectionsGroup), false, connectionsGroup);
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractSimpleConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractSimpleConstraintComponent.java
index c9f0c119ba7..9682bc42ee2 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractSimpleConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AbstractSimpleConstraintComponent.java
@@ -28,6 +28,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AllTargetsPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BufferedPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalInnerJoin;
@@ -135,7 +136,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
connectionsGroup.getPreviousStateConnection(),
b -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
top = UnionNode.getInstance(connectionsGroup, top, bulkedExternalInnerJoin);
@@ -218,7 +219,7 @@ private PlanNode getPlanNodeForOverrideTargetNode(ConnectionsGroup connectionsGr
Set.of()),
false, null,
BulkedExternalInnerJoin.getMapper("a", "c", scope, validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
planNode = connectionsGroup.getCachedNodeFor(planNode);
}
}
@@ -331,7 +332,8 @@ String literalToString(Literal literal) {
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AndConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AndConstraintComponent.java
index aa6bb4f8860..bfc71a8e135 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AndConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/AndConstraintComponent.java
@@ -121,10 +121,11 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
PlanNode planNode = and.stream()
.map(c -> c.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
- new StatementMatcher.StableRandomVariableProvider()))
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings))
.distinct()
.reduce((nodes, nodes2) -> UnionNode.getInstanceDedupe(connectionsGroup, nodes, nodes2))
.orElse(EmptyNode.getInstance());
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClassConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClassConstraintComponent.java
index 8dde6295aff..935c1cf3727 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClassConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClassConstraintComponent.java
@@ -29,6 +29,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AllTargetsPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BufferedSplitter;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalInnerJoin;
@@ -171,7 +172,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
false,
null,
BulkedExternalInnerJoin.getMapper("a", "c", scope, validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
if (connectionsGroup.getAddedStatements() != null) {
// filter by type against the added statements
@@ -236,7 +237,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
PlanNode allTargetsPlan = getTargetChain()
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClosedConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClosedConstraintComponent.java
index 64bf3dcc2f0..a12cc650c84 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClosedConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ClosedConstraintComponent.java
@@ -39,6 +39,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
import org.eclipse.rdf4j.sail.shacl.ast.paths.SimplePath;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BufferedSplitter;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalInnerJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.ExternalFilterByQuery;
@@ -192,7 +193,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
false,
null,
BulkedExternalInnerJoin.getMapper("a", "c", scope, validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
StatementMatcher.Variable subjectVariable = stableRandomVariableProvider.next();
StatementMatcher.Variable predicateVariable = stableRandomVariableProvider.next();
@@ -317,7 +318,10 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
}
return validationTuple;
},
- connectionsGroup);
+ connectionsGroup,
+ List.of(AbstractBulkJoinPlanNode.DEFAULT_VARS.get(0), AbstractBulkJoinPlanNode.DEFAULT_VARS.get(1),
+ predicateVariable)
+ );
return bulkedExternalInnerJoin;
}
@@ -326,7 +330,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
EffectiveTarget effectiveTarget = getTargetChain().getEffectiveTarget(scope,
connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider);
@@ -529,11 +534,6 @@ private String getFilter(StatementMatcher.Variable target,
return sparqlFragment.getFragment();
}
- @Override
- public ValidationApproach getPreferredValidationApproach(ConnectionsGroup connectionsGroup) {
- return super.getPreferredValidationApproach(connectionsGroup);
- }
-
@Override
public ValidationApproach getOptimalBulkValidationApproach() {
return ValidationApproach.SPARQL;
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ConstraintComponent.java
index 15a153cfc6c..e051b20057c 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/ConstraintComponent.java
@@ -63,7 +63,8 @@ boolean requiresEvaluation(ConnectionsGroup connectionsGroup, Scope scope, Resou
SourceConstraintComponent getConstraintComponent();
PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider);
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings);
SparqlFragment buildSparqlValidNodes_rsx_targetShape(Variable subject,
Variable object, RdfsSubClassOfReasoner rdfsSubClassOfReasoner, Scope scope,
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DashHasValueInConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DashHasValueInConstraintComponent.java
index 450b0ce4ecd..2839d3bcd71 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DashHasValueInConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/DashHasValueInConstraintComponent.java
@@ -31,6 +31,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher.Variable;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.EmptyNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.GroupByFilter;
@@ -113,7 +114,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider, Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
PlanNode invalidTargets = new GroupByFilter(joined, group -> {
return group.stream().map(ValidationTuple::getValue).noneMatch(hasValueIn::contains);
@@ -149,7 +150,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
PlanNode allTargetsPlan = getTargetChain()
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/HasValueConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/HasValueConstraintComponent.java
index 7dbfea97a80..a4f3d66b11c 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/HasValueConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/HasValueConstraintComponent.java
@@ -30,6 +30,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.EmptyNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.GroupByFilter;
@@ -98,16 +99,18 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
EffectiveTarget.Extend.left, false, null);
addedTargets = UnionNode.getInstance(connectionsGroup, addedByPath, addedTargets);
- addedTargets = Unique.getInstance(addedTargets, false, connectionsGroup);
}
+ addedTargets = Unique.getInstance(new TrimToTarget(addedTargets, connectionsGroup), false,
+ connectionsGroup);
+
PlanNode joined = new BulkedExternalLeftOuterJoin(addedTargets, connectionsGroup.getBaseConnection(),
validationSettings.getDataGraph(),
path.getTargetQueryFragment(new Variable<>("a"), new Variable<>("c"),
connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider, Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
PlanNode invalidTargets = new GroupByFilter(joined, group -> {
return group
@@ -144,7 +147,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
PlanNode allTargetsPlan = getTargetChain()
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MaxCountConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MaxCountConstraintComponent.java
index b9564ba2e35..f38c04ac44a 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MaxCountConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MaxCountConstraintComponent.java
@@ -32,6 +32,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalInnerJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.EmptyNode;
@@ -113,7 +114,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
false,
null,
BulkedExternalInnerJoin.getMapper("a", "c", scope, validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
} else {
relevantTargetsWithPath = new BulkedExternalLeftOuterJoin(
mergeNode,
@@ -126,7 +127,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
}
relevantTargetsWithPath = connectionsGroup.getCachedNodeFor(relevantTargetsWithPath);
@@ -140,7 +141,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
PlanNode allTargetsPlan = getTargetChain()
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MinCountConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MinCountConstraintComponent.java
index 19ebb4c0787..7f4f4af9ae6 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MinCountConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/MinCountConstraintComponent.java
@@ -29,6 +29,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.EmptyNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.GroupByCountFilter;
@@ -82,6 +83,10 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
PlanNode addedByPath = getTargetChain().getPath()
.get()
.getAnyAdded(connectionsGroup, validationSettings.getDataGraph(), null);
+
+ // we don't need to compress here because we are anyway going to trim to target later on
+ addedByPath = Unique.getInstance(addedByPath, false, connectionsGroup);
+
LeftOuterJoin leftOuterJoin = new LeftOuterJoin(target, addedByPath, connectionsGroup);
target = new GroupByCountFilter(leftOuterJoin, count -> count < minCount, connectionsGroup);
}
@@ -97,6 +102,10 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
PlanNode addedByPath = getTargetChain().getPath()
.get()
.getAnyAdded(connectionsGroup, validationSettings.getDataGraph(), null);
+
+ // we don't need to compress here because we are anyway going to trim to target later on
+ addedByPath = Unique.getInstance(addedByPath, false, connectionsGroup);
+
LeftOuterJoin leftOuterJoin = new LeftOuterJoin(target, addedByPath, connectionsGroup);
target = new GroupByCountFilter(leftOuterJoin, count -> count < minCount, connectionsGroup);
}
@@ -110,7 +119,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider, Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
relevantTargetsWithPath = connectionsGroup.getCachedNodeFor(relevantTargetsWithPath);
@@ -123,7 +132,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
return EmptyNode.getInstance();
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/NotConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/NotConstraintComponent.java
index a4d4a208b2d..40f793308ac 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/NotConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/NotConstraintComponent.java
@@ -101,7 +101,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
planNodeProvider = overrideTargetNode;
} else {
planNodeProvider = () -> getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
}
PlanNode planNode = not.generateTransactionalValidationPlan(
@@ -166,7 +166,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
PlanNode allTargets;
if (scope == Scope.propertyShape) {
@@ -186,7 +187,7 @@ public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[]
}
PlanNode notTargets = not.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
- new StatementMatcher.StableRandomVariableProvider());
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings);
return Unique.getInstance(UnionNode.getInstanceDedupe(connectionsGroup, allTargets, notTargets), false,
connectionsGroup);
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/OrConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/OrConstraintComponent.java
index db9c6744675..393e7cbd9a4 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/OrConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/OrConstraintComponent.java
@@ -121,7 +121,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
} else {
planNodeProvider = BufferedSplitter.getInstance(
getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider),
+ stableRandomVariableProvider, validationSettings),
false);
}
@@ -141,7 +141,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
PlanNode allTargets;
if (scope == Scope.propertyShape) {
@@ -162,7 +163,7 @@ public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[]
PlanNode planNode = or.stream()
.map(or -> or.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
- new StatementMatcher.StableRandomVariableProvider()))
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings))
.distinct()
.reduce((nodes, nodes2) -> UnionNode.getInstanceDedupe(connectionsGroup, nodes, nodes2))
.orElse(EmptyNode.getInstance());
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/PatternConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/PatternConstraintComponent.java
index 7e1f164a873..8536421133f 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/PatternConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/PatternConstraintComponent.java
@@ -17,6 +17,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
+import java.util.regex.Pattern;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Literal;
@@ -30,11 +31,16 @@
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PatternFilter;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNode;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class PatternConstraintComponent extends AbstractSimpleConstraintComponent {
+ private static final Logger logger = LoggerFactory.getLogger(PatternConstraintComponent.class);
+
String pattern;
String flags;
+ private final Pattern compiledPattern;
public PatternConstraintComponent(String pattern, String flags) {
super();
@@ -44,6 +50,52 @@ public PatternConstraintComponent(String pattern, String flags) {
if (flags == null) {
this.flags = "";
}
+
+ if (flags != null && !flags.isEmpty()) {
+ int flag = 0b0;
+
+ if (flags.contains("i")) {
+ flag = flag | Pattern.CASE_INSENSITIVE;
+ logger.trace("PatternFilter constructed with case insensitive flag");
+ }
+
+ if (flags.contains("d")) {
+ flag = flag | Pattern.UNIX_LINES;
+ logger.trace("PatternFilter constructed with UNIX lines flag");
+ }
+
+ if (flags.contains("m")) {
+ flag = flag | Pattern.MULTILINE;
+ logger.trace("PatternFilter constructed with multiline flag");
+ }
+
+ if (flags.contains("s")) {
+ flag = flag | Pattern.DOTALL;
+ logger.trace("PatternFilter constructed with dotall flag");
+ }
+
+ if (flags.contains("u")) {
+ flag = flag | Pattern.UNICODE_CASE;
+ logger.trace("PatternFilter constructed with unicode case flag");
+ }
+
+ if (flags.contains("x")) {
+ flag = flag | Pattern.COMMENTS;
+ logger.trace("PatternFilter constructed with comments flag");
+ }
+
+ if (flags.contains("U")) {
+ flag = flag | Pattern.UNICODE_CHARACTER_CLASS;
+ logger.trace("PatternFilter constructed with unicode character class flag");
+ }
+
+ this.compiledPattern = Pattern.compile(pattern, flag);
+ logger.trace("PatternFilter constructed with pattern: {} and flags: {}", pattern, flags);
+
+ } else {
+ this.compiledPattern = Pattern.compile(pattern, 0b0);
+ logger.trace("PatternFilter constructed with pattern: {} and no flags", pattern);
+ }
}
@Override
@@ -87,7 +139,7 @@ public ConstraintComponent deepClone() {
@Override
Function getFilterAttacher(ConnectionsGroup connectionsGroup) {
- return (parent) -> new PatternFilter(parent, pattern, flags, connectionsGroup);
+ return (parent) -> new PatternFilter(parent, compiledPattern, connectionsGroup);
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMaxCountConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMaxCountConstraintComponent.java
index 6394c2f9114..63b660bf6f5 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMaxCountConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMaxCountConstraintComponent.java
@@ -28,11 +28,14 @@
import org.eclipse.rdf4j.sail.shacl.ast.Cache;
import org.eclipse.rdf4j.sail.shacl.ast.NodeShape;
import org.eclipse.rdf4j.sail.shacl.ast.PropertyShape;
+import org.eclipse.rdf4j.sail.shacl.ast.ShaclParsingException;
import org.eclipse.rdf4j.sail.shacl.ast.ShaclProperties;
import org.eclipse.rdf4j.sail.shacl.ast.ShaclUnsupportedException;
import org.eclipse.rdf4j.sail.shacl.ast.Shape;
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
+import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.GroupByCountFilter;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.LeftOuterJoin;
@@ -120,22 +123,27 @@ public ValidationQuery generateSparqlValidationQuery(ConnectionsGroup connection
public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connectionsGroup,
ValidationSettings validationSettings,
PlanNodeProvider overrideTargetNode, Scope scope) {
- assert scope == Scope.propertyShape;
+
+ if (scope != Scope.propertyShape) {
+ throw new ShaclParsingException(
+ "QualifiedMaxCountConstraintComponent can only be used on property shapes!");
+ }
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider = new StatementMatcher.StableRandomVariableProvider();
PlanNode target;
+ EffectiveTarget effectiveTarget = getTargetChain().getEffectiveTarget(scope,
+ connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider);
+
if (overrideTargetNode != null) {
- target = getTargetChain()
- .getEffectiveTarget(scope, connectionsGroup.getRdfsSubClassOfReasoner(),
- stableRandomVariableProvider)
+ target = effectiveTarget
.extend(overrideTargetNode.getPlanNode(), connectionsGroup, validationSettings.getDataGraph(),
scope, EffectiveTarget.Extend.right,
false, null);
} else {
target = getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
}
PlanNode planNode = negated(connectionsGroup, validationSettings, overrideTargetNode, scope);
@@ -159,7 +167,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
if (overrideTargetNode == null) {
target = getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
} else {
target = getTargetChain()
.getEffectiveTarget(scope, connectionsGroup.getRdfsSubClassOfReasoner(),
@@ -182,7 +190,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
return new TupleMapper(relevantTargetsWithPath, t -> {
List targetChain = t.getTargetChain(true);
@@ -204,7 +212,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
if (overrideTargetNode == null) {
allTargetsPlan = getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
} else {
allTargetsPlan = getTargetChain()
.getEffectiveTarget(scope, connectionsGroup.getRdfsSubClassOfReasoner(),
@@ -226,7 +234,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider, Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
invalid = new NotValuesIn(allTargetsPlan, invalid, connectionsGroup);
@@ -236,20 +244,29 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
assert scope == Scope.propertyShape;
- PlanNode allTargets = getTargetChain()
+ EffectiveTarget effectiveTarget = getTargetChain()
.getEffectiveTarget(Scope.propertyShape, connectionsGroup.getRdfsSubClassOfReasoner(),
- stableRandomVariableProvider)
- .getPlanNode(connectionsGroup, dataGraph, Scope.propertyShape, true, null);
+ stableRandomVariableProvider);
- PlanNode subTargets = qualifiedValueShape.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
- new StatementMatcher.StableRandomVariableProvider());
+ Path path = getTargetChain().getPath().orElseThrow();
- return Unique
- .getInstance(new TrimToTarget(UnionNode.getInstanceDedupe(connectionsGroup, allTargets, subTargets),
- connectionsGroup), false, connectionsGroup);
+ PlanNode allTargets = getAllTargetsIncludingThoseAddedByPath(connectionsGroup, validationSettings, scope,
+ effectiveTarget, path, false);
+
+ PlanNode subTargets = qualifiedValueShape.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings);
+
+ return Unique.getInstance(
+ new TrimToTarget(
+ UnionNode.getInstanceDedupe(connectionsGroup, allTargets, subTargets),
+ connectionsGroup
+ ),
+ false, connectionsGroup
+ );
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMinCountConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMinCountConstraintComponent.java
index 69c499a0fbc..a3ad8f3a70e 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMinCountConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/QualifiedMinCountConstraintComponent.java
@@ -34,6 +34,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.Shape;
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AllTargetsPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalLeftOuterJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.GroupByCountFilter;
@@ -138,7 +139,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
false, null);
} else {
target = getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
}
PlanNode planNode = negated(connectionsGroup, validationSettings, overrideTargetNode, scope);
@@ -162,7 +163,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
if (overrideTargetNode == null) {
target = getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
} else {
PlanNode planNode = overrideTargetNode.getPlanNode();
if (planNode instanceof AllTargetsPlanNode) {
@@ -189,7 +190,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
return new TupleMapper(relevantTargetsWithPath, t -> {
List targetChain = t.getTargetChain(true);
@@ -210,7 +211,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
PlanNode allTargetsPlan;
if (overrideTargetNode == null) {
allTargetsPlan = getAllTargetsPlan(connectionsGroup, validationSettings.getDataGraph(), scope,
- stableRandomVariableProvider);
+ stableRandomVariableProvider, validationSettings);
} else {
allTargetsPlan = getTargetChain()
.getEffectiveTarget(scope, connectionsGroup.getRdfsSubClassOfReasoner(),
@@ -240,7 +241,7 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
Set.of()),
(b) -> new ValidationTuple(b.getValue("a"), b.getValue("c"), scope, true,
validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
}
invalid = new NotValuesIn(allTargetsPlan, invalid, connectionsGroup);
@@ -251,7 +252,8 @@ public PlanNode negated(ConnectionsGroup connectionsGroup, ValidationSettings va
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
assert scope == Scope.propertyShape;
PlanNode allTargets = getTargetChain()
@@ -260,7 +262,7 @@ public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[]
.getPlanNode(connectionsGroup, dataGraph, Scope.propertyShape, true, null);
PlanNode subTargets = qualifiedValueShape.getAllTargetsPlan(connectionsGroup, dataGraph, scope,
- new StatementMatcher.StableRandomVariableProvider());
+ new StatementMatcher.StableRandomVariableProvider(), validationSettings);
return Unique
.getInstance(new TrimToTarget(UnionNode.getInstanceDedupe(connectionsGroup, allTargets, subTargets),
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/SparqlConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/SparqlConstraintComponent.java
index 512ae5b338b..77af99c9376 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/SparqlConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/SparqlConstraintComponent.java
@@ -224,7 +224,8 @@ private PlanNode getPlanNodeForOverrideTargetNode(ConnectionsGroup connectionsGr
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
return getTargetChain()
.getEffectiveTarget(scope, connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider)
.getAllTargets(connectionsGroup, dataGraph, scope);
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/UniqueLangConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/UniqueLangConstraintComponent.java
index 453ff412372..99858731510 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/UniqueLangConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/UniqueLangConstraintComponent.java
@@ -27,6 +27,7 @@
import org.eclipse.rdf4j.sail.shacl.ast.ValidationApproach;
import org.eclipse.rdf4j.sail.shacl.ast.ValidationQuery;
import org.eclipse.rdf4j.sail.shacl.ast.paths.Path;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.AbstractBulkJoinPlanNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BulkedExternalInnerJoin;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.EmptyNode;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.InnerJoin;
@@ -120,7 +121,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
connectionsGroup.getRdfsSubClassOfReasoner(), stableRandomVariableProvider);
Optional path = getTargetChain().getPath();
- if (!path.isPresent() || scope != Scope.propertyShape) {
+ if (path.isEmpty() || scope != Scope.propertyShape) {
throw new IllegalStateException("UniqueLang only operates on paths");
}
@@ -142,7 +143,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
null,
BulkedExternalInnerJoin.getMapper("a", "c", scope, validationSettings.getDataGraph()),
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
PlanNode nonUniqueTargetLang = new NonUniqueTargetLang(relevantTargetsWithPath, connectionsGroup);
return Unique.getInstance(new TrimToTarget(nonUniqueTargetLang, connectionsGroup), false, connectionsGroup);
@@ -189,8 +190,7 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
false,
null,
BulkedExternalInnerJoin.getMapper("a", "c", scope, validationSettings.getDataGraph()),
-
- connectionsGroup);
+ connectionsGroup, AbstractBulkJoinPlanNode.DEFAULT_VARS);
PlanNode nonUniqueTargetLang = new NonUniqueTargetLang(relevantTargetsWithPath, connectionsGroup);
@@ -200,7 +200,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
if (scope == Scope.propertyShape) {
PlanNode allTargetsPlan = getTargetChain()
.getEffectiveTarget(Scope.nodeShape, connectionsGroup.getRdfsSubClassOfReasoner(),
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/VoidConstraintComponent.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/VoidConstraintComponent.java
index f2bdcc3d1e6..f658cf12b45 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/VoidConstraintComponent.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/constraintcomponents/VoidConstraintComponent.java
@@ -59,7 +59,8 @@ public PlanNode generateTransactionalValidationPlan(ConnectionsGroup connections
@Override
public PlanNode getAllTargetsPlan(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Scope scope,
- StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider) {
+ StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider,
+ ValidationSettings validationSettings) {
return EmptyNode.getInstance();
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/AlternativePath.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/AlternativePath.java
index 2d40f5430f0..b57c043de9b 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/AlternativePath.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/AlternativePath.java
@@ -19,7 +19,6 @@
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Resource;
-import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
import org.eclipse.rdf4j.sail.shacl.ast.ShaclAstLists;
import org.eclipse.rdf4j.sail.shacl.ast.SparqlFragment;
@@ -128,12 +127,12 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
return SparqlFragment.union(sparqlFragments,
(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Path path,
- StatementMatcher currentStatementMatcher, List currentStatements) -> {
-
+ StatementMatcher currentStatementMatcher,
+ List currentStatements) -> {
return sparqlFragments.stream()
.flatMap(sparqlFragment -> sparqlFragment.getRoot(connectionsGroup, dataGraph, path,
currentStatementMatcher, currentStatements))
- .filter(EffectiveTarget.StatementsAndMatcher::hasStatements);
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements);
}
);
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/InversePath.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/InversePath.java
index eb2b3f72be4..4dab52a839b 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/InversePath.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/InversePath.java
@@ -94,7 +94,7 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider, Set inheritedVarNames) {
return path.getTargetQueryFragment(object, subject, rdfsSubClassOfReasoner,
- stableRandomVariableProvider, Set.of());
+ stableRandomVariableProvider, inheritedVarNames);
}
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 1427206756b..bab4e2c8e96 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
@@ -11,21 +11,35 @@
package org.eclipse.rdf4j.sail.shacl.ast.paths;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
+import java.util.stream.Stream;
+import org.eclipse.rdf4j.common.iteration.CloseableIteration;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
-import org.eclipse.rdf4j.sail.shacl.ast.ShaclUnsupportedException;
+import org.eclipse.rdf4j.query.BindingSet;
+import org.eclipse.rdf4j.query.algebra.TupleExpr;
+import org.eclipse.rdf4j.sail.SailConnection;
import org.eclipse.rdf4j.sail.shacl.ast.SparqlFragment;
+import org.eclipse.rdf4j.sail.shacl.ast.SparqlQueryParserCache;
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
+import org.eclipse.rdf4j.sail.shacl.ast.constraintcomponents.ConstraintComponent;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNode;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeWrapper;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.SingletonBindingSet;
+import org.eclipse.rdf4j.sail.shacl.ast.targets.EffectiveTarget;
+import org.eclipse.rdf4j.sail.shacl.ast.targets.TargetChainRetriever;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.RdfsSubClassOfReasoner;
import org.eclipse.rdf4j.sail.shacl.wrapper.shape.ShapeSource;
+import com.google.common.collect.Sets;
+
public class OneOrMorePath extends Path {
private final Path path;
@@ -42,7 +56,7 @@ public OneOrMorePath(Resource id, Path path) {
@Override
public String toString() {
- return "ZeroOrOnePath{ " + path + " }";
+ return "OneOrMorePath{ " + path + " }";
}
@Override
@@ -54,7 +68,25 @@ public void toModel(Resource subject, IRI predicate, Model model, Set
@Override
public PlanNode getAllAdded(ConnectionsGroup connectionsGroup, Resource[] dataGraph,
PlanNodeWrapper planNodeWrapper) {
- throw new ShaclUnsupportedException();
+ var variables = List.of(new StatementMatcher.Variable<>("subject"),
+ new StatementMatcher.Variable<>("value"));
+
+ SparqlFragment targetQueryFragment = getTargetQueryFragment(variables.get(0), variables.get(1),
+ connectionsGroup.getRdfsSubClassOfReasoner(), new StatementMatcher.StableRandomVariableProvider(),
+ Set.of());
+
+ PlanNode targetChainRetriever = new TargetChainRetriever(connectionsGroup, dataGraph,
+ targetQueryFragment.getStatementMatchers(), List.of(), null, targetQueryFragment,
+ variables,
+ ConstraintComponent.Scope.propertyShape, true);
+
+ targetChainRetriever = connectionsGroup.getCachedNodeFor(targetChainRetriever);
+
+ if (planNodeWrapper != null) {
+ targetChainRetriever = planNodeWrapper.apply(targetChainRetriever);
+ }
+
+ return connectionsGroup.getCachedNodeFor(targetChainRetriever);
}
@Override
@@ -81,7 +113,88 @@ public String toSparqlPathString() {
public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject, StatementMatcher.Variable object,
RdfsSubClassOfReasoner rdfsSubClassOfReasoner,
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider, Set inheritedVarNames) {
- throw new ShaclUnsupportedException();
+
+ if (inheritedVarNames.isEmpty()) {
+ inheritedVarNames = Set.of(subject.getName());
+ } else {
+ inheritedVarNames = Sets.union(inheritedVarNames, Set.of(subject.getName()));
+ }
+
+ String variablePrefix = getVariablePrefix(subject, object);
+
+ String sparqlPathString = path.toSparqlPathString();
+
+ StatementMatcher.Variable pathStart = new StatementMatcher.Variable(subject, variablePrefix + "start");
+ StatementMatcher.Variable pathEnd = new StatementMatcher.Variable(subject, variablePrefix + "end");
+
+ SparqlFragment targetQueryFragmentMiddle = path.getTargetQueryFragment(pathStart, pathEnd,
+ rdfsSubClassOfReasoner, stableRandomVariableProvider,
+ inheritedVarNames);
+
+ SparqlFragment targetQueryFragmentExactlyOne = path.getTargetQueryFragment(subject, object,
+ rdfsSubClassOfReasoner, stableRandomVariableProvider,
+ inheritedVarNames);
+
+ String twoOrMore = subject.asSparqlVariable() + " (" + sparqlPathString + ")+ " + pathStart.asSparqlVariable()
+ + " .\n" +
+ targetQueryFragmentMiddle.getFragment() + "\n" +
+ pathEnd.asSparqlVariable() + " (" + sparqlPathString + ")* " + object.asSparqlVariable() + " .\n";
+
+ SparqlFragment twoOrMoreBgp = SparqlFragment.bgp(List.of(), twoOrMore,
+ targetQueryFragmentMiddle.getStatementMatchers());
+
+ var temp = inheritedVarNames;
+
+ return SparqlFragment.union(List.of(targetQueryFragmentExactlyOne, twoOrMoreBgp),
+ (connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements) -> {
+
+ Stream statementsAndMatcherStream1 = targetQueryFragmentExactlyOne
+ .getRoot(connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements)
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements);
+
+ Stream peek = targetQueryFragmentMiddle
+ .getRoot(connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements)
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements)
+ .map(a -> {
+ SailConnection baseConnection = connectionsGroup.getBaseConnection();
+
+ String subjectName = a.getStatementMatcher().getSubjectName();
+ assert subjectName.equals(pathStart.getName());
+
+ String query = "select distinct " + subject.asSparqlVariable() + " where {\n"
+ + subject.asSparqlVariable() + " (" + sparqlPathString + ")+ "
+ + pathStart.asSparqlVariable() + "\n}";
+
+ TupleExpr tupleExpr = SparqlQueryParserCache.get(query);
+
+ List statements = new ArrayList<>();
+
+ for (EffectiveTarget.SubjectObjectAndMatcher.SubjectObject statement : a
+ .getStatements()) {
+ try (CloseableIteration extends BindingSet> evaluate = baseConnection.evaluate(
+ tupleExpr, PlanNodeHelper.asDefaultGraphDataset(dataGraph),
+ new SingletonBindingSet(subjectName, statement.getSubject()), true)) {
+ while (evaluate.hasNext()) {
+ BindingSet next = evaluate.next();
+ statements.add(new EffectiveTarget.SubjectObjectAndMatcher.SubjectObject(
+ ((Resource) next.getValue(subject.getName())), null));
+ }
+ }
+ }
+
+ StatementMatcher statementMatcher = new StatementMatcher(subject, null, null, path,
+ temp);
+
+ EffectiveTarget.SubjectObjectAndMatcher effectiveTarget = new EffectiveTarget.SubjectObjectAndMatcher(
+ statements, statementMatcher);
+
+ return effectiveTarget;
+ });
+
+ return Stream.concat(statementsAndMatcherStream1, peek);
+
+ });
+
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/Path.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/Path.java
index 988e8bd7853..7ea5363f276 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/Path.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/Path.java
@@ -11,6 +11,7 @@
package org.eclipse.rdf4j.sail.shacl.ast.paths;
+import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@@ -19,6 +20,8 @@
import org.eclipse.rdf4j.model.Namespace;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Statement;
+import org.eclipse.rdf4j.model.vocabulary.RDF;
+import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.ast.Exportable;
import org.eclipse.rdf4j.sail.shacl.ast.Identifiable;
import org.eclipse.rdf4j.sail.shacl.ast.ShaclUnsupportedException;
@@ -28,9 +31,13 @@
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeWrapper;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup;
import org.eclipse.rdf4j.sail.shacl.wrapper.shape.ShapeSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public abstract class Path implements Identifiable, Exportable, Targetable {
+ private static final Logger logger = LoggerFactory.getLogger(ShaclSailConnection.class);
+
Resource id;
public Path(Resource id) {
@@ -49,31 +56,66 @@ static public Path buildPath(ShapeSource shapeSource, Resource id) {
if (id.isBNode()) {
List collect = shapeSource.getAllStatements(id)
+ .filter(statement -> !statement.getPredicate().equals(RDF.TYPE))
.collect(Collectors.toList());
+ Path ret = null;
+
for (Statement statement : collect) {
IRI pathType = statement.getPredicate();
switch (pathType.toString()) {
case "http://www.w3.org/ns/shacl#inversePath":
- return new InversePath(id, (Resource) statement.getObject(), shapeSource);
+ if (ret != null) {
+ logger.error("Multiple path types not supported! {}", Arrays.toString(collect.toArray()));
+ }
+ ret = new InversePath(id, (Resource) statement.getObject(), shapeSource);
+ break;
case "http://www.w3.org/ns/shacl#alternativePath":
- return new AlternativePath(id, (Resource) statement.getObject(), shapeSource);
+ if (ret != null) {
+ logger.error("Multiple path types not supported! {}", Arrays.toString(collect.toArray()));
+ }
+ ret = new AlternativePath(id, (Resource) statement.getObject(), shapeSource);
+ break;
case "http://www.w3.org/ns/shacl#zeroOrMorePath":
- return new ZeroOrMorePath(id, (Resource) statement.getObject(), shapeSource);
+ if (ret != null) {
+ logger.error("Multiple path types not supported! {}", Arrays.toString(collect.toArray()));
+ }
+ ret = new ZeroOrMorePath(id, (Resource) statement.getObject(), shapeSource);
+ break;
case "http://www.w3.org/ns/shacl#oneOrMorePath":
- return new OneOrMorePath(id, (Resource) statement.getObject(), shapeSource);
+ if (ret != null) {
+ logger.error("Multiple path types not supported! {}", Arrays.toString(collect.toArray()));
+ }
+ ret = new OneOrMorePath(id, (Resource) statement.getObject(), shapeSource);
+ break;
case "http://www.w3.org/ns/shacl#zeroOrOnePath":
- return new ZeroOrOnePath(id, (Resource) statement.getObject(), shapeSource);
+ if (ret != null) {
+ logger.error("Multiple path types not supported! {}", Arrays.toString(collect.toArray()));
+ }
+ ret = new ZeroOrOnePath(id, (Resource) statement.getObject(), shapeSource);
+ break;
case "http://www.w3.org/1999/02/22-rdf-syntax-ns#first":
- return new SequencePath(id, shapeSource);
+ if (ret != null) {
+ logger.error("Multiple path types not supported! {}", Arrays.toString(collect.toArray()));
+ }
+ ret = new SequencePath(id, shapeSource);
+ break;
default:
break;
}
}
- throw new ShaclUnsupportedException();
+ if (ret != null) {
+ return ret;
+ } else {
+ if (collect.size() == 1) {
+ throw new ShaclUnsupportedException("Unknown path type: " + collect.get(0));
+ } else {
+ throw new ShaclUnsupportedException("Unknown path type: " + Arrays.toString(collect.toArray()));
+ }
+ }
} else {
return new SimplePath((IRI) id);
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SequencePath.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SequencePath.java
index 0580f9a1e7b..ce6baae67fa 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SequencePath.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SequencePath.java
@@ -21,7 +21,6 @@
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Resource;
-import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.sail.shacl.ast.ShaclAstLists;
import org.eclipse.rdf4j.sail.shacl.ast.SparqlFragment;
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
@@ -159,8 +158,9 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
return SparqlFragment.join(sparqlFragments,
(ConnectionsGroup connectionsGroup, Resource[] dataGraph, Path path,
- StatementMatcher currentStatementMatcher, List currentStatements) -> {
- Stream currentRoot = null;
+ StatementMatcher currentStatementMatcher,
+ List currentStatements) -> {
+ Stream currentRoot = null;
for (int i = sparqlFragments.size() - 1; i >= 0; i--) {
SparqlFragment sparqlFragment = sparqlFragments.get(i);
@@ -169,7 +169,7 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
.flatMap(root -> sparqlFragment.getRoot(connectionsGroup, dataGraph, path,
root.getStatementMatcher(),
root.getStatements()))
- .filter(EffectiveTarget.StatementsAndMatcher::hasStatements);
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements);
} else {
currentRoot = sparqlFragment.getRoot(connectionsGroup, dataGraph, path,
currentStatementMatcher,
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SimplePath.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SimplePath.java
index ce143ab05e0..271c6f50d95 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SimplePath.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/paths/SimplePath.java
@@ -80,16 +80,20 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
StatementMatcher statementMatcher = new StatementMatcher(subject, new StatementMatcher.Variable(predicate),
object, this, inheritedVarNames);
+
return SparqlFragment.bgp(List.of(),
subject.asSparqlVariable() + " <" + predicate + "> " + object.asSparqlVariable() + " .",
statementMatcher, (connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements) -> {
if (currentStatementMatcher.getOrigin() == this) {
- assert currentStatementMatcher == statementMatcher;
+ if (currentStatementMatcher != statementMatcher) {
+ return null;
+ }
return Stream.of(
- new EffectiveTarget.StatementsAndMatcher(currentStatements, currentStatementMatcher));
+ new EffectiveTarget.SubjectObjectAndMatcher(currentStatements,
+ currentStatementMatcher));
} else {
if (currentStatementMatcher.hasSubject(object)) {
- List newStatements = currentStatements.stream()
+ var newStatements = currentStatements.stream()
.map(currentStatement -> {
try (CloseableIteration extends Statement> statements = connectionsGroup
.getBaseConnection()
@@ -99,10 +103,12 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
}
})
.flatMap(List::stream)
+ .map(EffectiveTarget.SubjectObjectAndMatcher.SubjectObject::new)
.collect(Collectors.toList());
- return Stream.of(new EffectiveTarget.StatementsAndMatcher(newStatements, statementMatcher));
+ return Stream
+ .of(new EffectiveTarget.SubjectObjectAndMatcher(newStatements, statementMatcher));
} else if (currentStatementMatcher.hasObject(object)) {
- List newStatements = currentStatements.stream()
+ var newStatements = currentStatements.stream()
.map(currentStatement -> {
try (CloseableIteration extends Statement> statements = connectionsGroup
.getBaseConnection()
@@ -112,8 +118,10 @@ public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject,
}
})
.flatMap(List::stream)
+ .map(EffectiveTarget.SubjectObjectAndMatcher.SubjectObject::new)
.collect(Collectors.toList());
- return Stream.of(new EffectiveTarget.StatementsAndMatcher(newStatements, statementMatcher));
+ return Stream
+ .of(new EffectiveTarget.SubjectObjectAndMatcher(newStatements, statementMatcher));
}
return null;
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 a1f691920eb..f1973fca581 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
@@ -11,21 +11,36 @@
package org.eclipse.rdf4j.sail.shacl.ast.paths;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
+import java.util.stream.Stream;
+import org.apache.commons.lang3.NotImplementedException;
+import org.eclipse.rdf4j.common.iteration.CloseableIteration;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
-import org.eclipse.rdf4j.sail.shacl.ast.ShaclUnsupportedException;
+import org.eclipse.rdf4j.query.BindingSet;
+import org.eclipse.rdf4j.query.algebra.TupleExpr;
+import org.eclipse.rdf4j.sail.SailConnection;
import org.eclipse.rdf4j.sail.shacl.ast.SparqlFragment;
+import org.eclipse.rdf4j.sail.shacl.ast.SparqlQueryParserCache;
import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
+import org.eclipse.rdf4j.sail.shacl.ast.constraintcomponents.ConstraintComponent;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNode;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeWrapper;
+import org.eclipse.rdf4j.sail.shacl.ast.planNodes.SingletonBindingSet;
+import org.eclipse.rdf4j.sail.shacl.ast.targets.EffectiveTarget;
+import org.eclipse.rdf4j.sail.shacl.ast.targets.TargetChainRetriever;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.ConnectionsGroup;
import org.eclipse.rdf4j.sail.shacl.wrapper.data.RdfsSubClassOfReasoner;
import org.eclipse.rdf4j.sail.shacl.wrapper.shape.ShapeSource;
+import com.google.common.collect.Sets;
+
public class ZeroOrMorePath extends Path {
private final Path path;
@@ -54,7 +69,25 @@ public void toModel(Resource subject, IRI predicate, Model model, Set
@Override
public PlanNode getAllAdded(ConnectionsGroup connectionsGroup, Resource[] dataGraph,
PlanNodeWrapper planNodeWrapper) {
- throw new ShaclUnsupportedException();
+ var variables = List.of(new StatementMatcher.Variable<>("subject"),
+ new StatementMatcher.Variable<>("value"));
+
+ SparqlFragment targetQueryFragment = getTargetQueryFragment(variables.get(0), variables.get(1),
+ connectionsGroup.getRdfsSubClassOfReasoner(), new StatementMatcher.StableRandomVariableProvider(),
+ Set.of());
+
+ PlanNode targetChainRetriever = new TargetChainRetriever(connectionsGroup, dataGraph,
+ targetQueryFragment.getStatementMatchers(), List.of(), null, targetQueryFragment,
+ variables,
+ ConstraintComponent.Scope.propertyShape, true);
+
+ targetChainRetriever = connectionsGroup.getCachedNodeFor(targetChainRetriever);
+
+ if (planNodeWrapper != null) {
+ targetChainRetriever = planNodeWrapper.apply(targetChainRetriever);
+ }
+
+ return connectionsGroup.getCachedNodeFor(targetChainRetriever);
}
@Override
@@ -81,7 +114,98 @@ public String toSparqlPathString() {
public SparqlFragment getTargetQueryFragment(StatementMatcher.Variable subject, StatementMatcher.Variable object,
RdfsSubClassOfReasoner rdfsSubClassOfReasoner,
StatementMatcher.StableRandomVariableProvider stableRandomVariableProvider, Set inheritedVarNames) {
- throw new ShaclUnsupportedException();
+
+ if (inheritedVarNames.isEmpty()) {
+ inheritedVarNames = Set.of(subject.getName());
+ } else {
+ inheritedVarNames = Sets.union(inheritedVarNames, Set.of(subject.getName()));
+ }
+
+ String variablePrefix = getVariablePrefix(subject, object);
+
+ String sparqlPathString = path.toSparqlPathString();
+
+ StatementMatcher.Variable pathStart = new StatementMatcher.Variable(subject, variablePrefix + "start");
+ StatementMatcher.Variable pathEnd = new StatementMatcher.Variable(subject, variablePrefix + "end");
+
+ SparqlFragment targetQueryFragmentMiddle = path.getTargetQueryFragment(pathStart, pathEnd,
+ rdfsSubClassOfReasoner, stableRandomVariableProvider,
+ inheritedVarNames);
+
+ SparqlFragment targetQueryFragmentZeroOrOne = SparqlFragment.bgp(List.of(),
+ subject.asSparqlVariable() + " (" + sparqlPathString + ")? " + object.asSparqlVariable(),
+ List.of(new StatementMatcher(subject, null, object, this, inheritedVarNames)),
+ (connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements) -> {
+ // TODO: We don't have any tests that cover this! Maybe take a look at minCount/oneOrMorePath?
+ if (currentStatementMatcher.hasSubject(subject)) {
+ System.out.println();
+ throw new NotImplementedException("This should not happen!");
+ }
+
+ return Stream.empty();
+ }
+ );
+
+ String oneOrMore = subject.asSparqlVariable() + " (" + sparqlPathString + ")* " + pathStart.asSparqlVariable()
+ + " .\n" +
+ targetQueryFragmentMiddle.getFragment() + "\n" +
+ pathEnd.asSparqlVariable() + " (" + sparqlPathString + ")* " + object.asSparqlVariable() + " .\n";
+
+ SparqlFragment oneOrMoreBgp = SparqlFragment.bgp(List.of(), oneOrMore,
+ targetQueryFragmentMiddle.getStatementMatchers());
+
+ var temp = inheritedVarNames;
+
+ return SparqlFragment.union(List.of(targetQueryFragmentZeroOrOne, oneOrMoreBgp),
+ (connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements) -> {
+
+ Stream statementsAndMatcherStream1 = targetQueryFragmentZeroOrOne
+ .getRoot(connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements)
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements);
+
+ Stream peek = targetQueryFragmentMiddle
+ .getRoot(connectionsGroup, dataGraph, path, currentStatementMatcher, currentStatements)
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements)
+ .map(a -> {
+ SailConnection baseConnection = connectionsGroup.getBaseConnection();
+
+ String subjectName = a.getStatementMatcher().getSubjectName();
+ assert subjectName.equals(pathStart.getName());
+
+ String query = "select distinct " + subject.asSparqlVariable() + " where {\n"
+ + subject.asSparqlVariable() + " (" + sparqlPathString + ")* "
+ + pathStart.asSparqlVariable() + "\n}";
+
+ TupleExpr tupleExpr = SparqlQueryParserCache.get(query);
+
+ List statements = new ArrayList<>();
+
+ for (EffectiveTarget.SubjectObjectAndMatcher.SubjectObject statement : a
+ .getStatements()) {
+ try (CloseableIteration extends BindingSet> evaluate = baseConnection.evaluate(
+ tupleExpr, PlanNodeHelper.asDefaultGraphDataset(dataGraph),
+ new SingletonBindingSet(subjectName, statement.getSubject()), true)) {
+ while (evaluate.hasNext()) {
+ BindingSet next = evaluate.next();
+ statements.add(new EffectiveTarget.SubjectObjectAndMatcher.SubjectObject(
+ ((Resource) next.getValue(subject.getName())), null));
+ }
+ }
+ }
+
+ StatementMatcher statementMatcher = new StatementMatcher(subject, null, null, path,
+ temp);
+
+ EffectiveTarget.SubjectObjectAndMatcher effectiveTarget = new EffectiveTarget.SubjectObjectAndMatcher(
+ statements, statementMatcher);
+
+ return effectiveTarget;
+ });
+
+ return Stream.concat(statementsAndMatcherStream1, peek);
+
+ });
+
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AbstractBulkJoinPlanNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AbstractBulkJoinPlanNode.java
index dab0aac9d7e..5ca6b5ca029 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AbstractBulkJoinPlanNode.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AbstractBulkJoinPlanNode.java
@@ -28,18 +28,28 @@
import org.eclipse.rdf4j.query.impl.EmptyBindingSet;
import org.eclipse.rdf4j.sail.SailConnection;
import org.eclipse.rdf4j.sail.shacl.ast.SparqlQueryParserCache;
+import org.eclipse.rdf4j.sail.shacl.ast.StatementMatcher;
import org.eclipse.rdf4j.sail.shacl.ast.constraintcomponents.AbstractConstraintComponent;
public abstract class AbstractBulkJoinPlanNode implements PlanNode {
+ public static final List DEFAULT_VARS = List.of(new StatementMatcher.Variable("a"),
+ new StatementMatcher.Variable("c"));
public static final String BINDING_NAME = "a";
protected static final int BULK_SIZE = 1000;
- private StackTraceElement[] stackTrace;
+ private final List vars;
+ private final String varsQueryString;
+ StackTraceElement[] stackTrace;
protected Function mapper;
ValidationExecutionLogger validationExecutionLogger;
- public AbstractBulkJoinPlanNode() {
-// this.stackTrace = Thread.currentThread().getStackTrace();
+ public AbstractBulkJoinPlanNode(List vars) {
+ this.vars = vars;
+ this.varsQueryString = vars.stream()
+ .map(StatementMatcher.Variable::asSparqlVariable)
+ .reduce((a, b) -> a + " " + b)
+ .orElseThrow();
+ this.stackTrace = Thread.currentThread().getStackTrace();
}
TupleExpr parseQuery(String query) {
@@ -47,7 +57,8 @@ TupleExpr parseQuery(String query) {
// #VALUES_INJECTION_POINT# is an annotation in the query where there is a "new scope" due to the bottom up
// semantics of SPARQL but where we don't actually want a new scope.
query = query.replace(AbstractConstraintComponent.VALUES_INJECTION_POINT, "\nVALUES (?a) {}\n");
- String completeQuery = "select * where {\nVALUES (?a) {}\n" + query + "\n}";
+
+ String completeQuery = "select distinct " + varsQueryString + " where {\nVALUES (?a) {}\n" + query + "\n}";
return SparqlQueryParserCache.get(completeQuery);
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AllTargetsPlanNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AllTargetsPlanNode.java
index 7aacec352ac..4067c60f46b 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AllTargetsPlanNode.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/AllTargetsPlanNode.java
@@ -71,8 +71,9 @@ protected void init() {
@Override
public void localClose() {
- if (iterator != null)
+ if (iterator != null) {
iterator.close();
+ }
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalInnerJoin.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalInnerJoin.java
index 4fa535418b1..6ea7f9d5e2f 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalInnerJoin.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalInnerJoin.java
@@ -61,8 +61,9 @@ public class BulkedExternalInnerJoin extends AbstractBulkJoinPlanNode {
public BulkedExternalInnerJoin(PlanNode leftNode, SailConnection connection, Resource[] dataGraph,
SparqlFragment query,
boolean skipBasedOnPreviousConnection, SailConnection previousStateConnection,
- Function mapper, ConnectionsGroup connectionsGroup) {
- super();
+ Function mapper, ConnectionsGroup connectionsGroup,
+ List vars) {
+ super(vars);
assert !skipBasedOnPreviousConnection || previousStateConnection != null;
this.leftNode = PlanNodeHelper.handleSorting(this, leftNode, connectionsGroup);
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalLeftOuterJoin.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalLeftOuterJoin.java
index ef5689508df..14a94fe20b9 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalLeftOuterJoin.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/BulkedExternalLeftOuterJoin.java
@@ -46,8 +46,9 @@ public class BulkedExternalLeftOuterJoin extends AbstractBulkJoinPlanNode {
public BulkedExternalLeftOuterJoin(PlanNode leftNode, SailConnection connection, Resource[] dataGraph,
SparqlFragment query,
- Function mapper, ConnectionsGroup connectionsGroup) {
- super();
+ Function mapper, ConnectionsGroup connectionsGroup,
+ List vars) {
+ super(vars);
leftNode = PlanNodeHelper.handleSorting(this, leftNode, connectionsGroup);
this.leftNode = leftNode;
this.query = query.getNamespacesForSparql()
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 deeb33dfe2d..16221da1550 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 b64d75baa97..0dd48ca7e99 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 a8ee407df5a..593e22d9d6b 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
@@ -165,7 +171,9 @@ public String getId() {
@Override
public String toString() {
- return "EqualsJoin{" + "useAsFilter=" + useAsFilter + '}';
+ return "EqualsJoinValue{" +
+ "useAsFilter=" + useAsFilter +
+ '}';
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicate.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicate.java
index 8c5b49b0218..279664cdace 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicate.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterByPredicate.java
@@ -21,7 +21,6 @@
import org.eclipse.rdf4j.common.iteration.CloseableIteration;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Resource;
-import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.sail.SailConnection;
import org.eclipse.rdf4j.sail.memory.MemoryStoreConnection;
@@ -36,6 +35,7 @@ public class FilterByPredicate implements PlanNode {
private final Set filterOnPredicates;
final PlanNode parent;
private final On on;
+ private final ConnectionsGroup connectionsGroup;
private boolean printed = false;
private ValidationExecutionLogger validationExecutionLogger;
private final Resource[] dataGraph;
@@ -53,6 +53,7 @@ public FilterByPredicate(SailConnection connection, Set filterOnPredicates,
assert this.connection != null;
this.filterOnPredicates = filterOnPredicates;
this.on = on;
+ this.connectionsGroup = connectionsGroup;
}
@Override
@@ -77,18 +78,11 @@ void calculateNext() {
return;
}
- filterOnPredicates = FilterByPredicate.this.filterOnPredicates.stream()
- .map(predicate -> {
- try (var stream = connection
- .getStatements(null, predicate, null, true, dataGraph)
- .stream()) {
- return stream.map(Statement::getPredicate)
- .findAny()
- .orElse(null);
- }
- }
- )
- .filter(Objects::nonNull)
+ filterOnPredicates = FilterByPredicate.this.filterOnPredicates
+ .stream()
+ .map(iri -> connectionsGroup.getSailSpecificValue(iri,
+ ConnectionsGroup.StatementPosition.predicate, connection
+ ))
.collect(Collectors.toList());
}
@@ -188,8 +182,8 @@ public void getPlanAsGraphvizDot(StringBuilder stringBuilder) {
@Override
public String toString() {
- return "ExternalFilterByPredicate{" + "filterOnPredicates="
- + Arrays.toString(filterOnPredicates.stream().map(Formatter::prefix).toArray())
+ return "FilterByPredicate{" + "filterOnPredicates="
+ + Formatter.prefix(filterOnPredicates)
+ '}';
}
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 9a44baba198..cd9dc265ca4 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
@@ -20,12 +20,14 @@
import org.eclipse.rdf4j.common.iteration.CloseableIteration;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Resource;
-import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.Value;
+import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.sail.SailConnection;
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;
@@ -42,16 +46,19 @@ public class FilterByPredicateObject implements PlanNode {
private final FilterOn filterOn;
private final PlanNode parent;
private final boolean returnMatching;
+ private final ConnectionsGroup connectionsGroup;
private StackTraceElement[] stackTrace;
private boolean printed = false;
private ValidationExecutionLogger validationExecutionLogger;
private final Resource[] dataGraph;
+ boolean typeFilterWithInference;
private final Cache cache;
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;
@@ -68,7 +75,14 @@ public FilterByPredicateObject(SailConnection connection, Resource[] dataGraph,
cache = CacheBuilder.newBuilder().maximumSize(10000).build();
}
-// this.stackTrace = Thread.currentThread().getStackTrace();
+ this.connectionsGroup = connectionsGroup;
+ if (includeInferred && connectionsGroup.getRdfsSubClassOfReasoner() != null
+ && RDF.TYPE.equals(filterOnPredicate)) {
+ typeFilterWithInference = true;
+ }
+ if (logger.isDebugEnabled()) {
+ this.stackTrace = Thread.currentThread().getStackTrace();
+ }
}
@Override
@@ -148,31 +162,32 @@ void calculateNext() {
private void internResources() {
if (filterOnObject == null) {
-
- try (var stream = connection
- .getStatements(null, FilterByPredicateObject.this.filterOnPredicate, null, includeInferred,
- dataGraph)
- .stream()) {
- filterOnPredicate = stream.map(Statement::getPredicate).findAny().orElse(null);
- }
-
+ filterOnPredicate = connectionsGroup.getSailSpecificValue(
+ FilterByPredicateObject.this.filterOnPredicate,
+ ConnectionsGroup.StatementPosition.predicate, connection
+ );
if (filterOnPredicate == null) {
filterOnObject = new Resource[0];
} else {
- filterOnObject = FilterByPredicateObject.this.filterOnObject.stream()
- .map(object -> {
- try (var stream = connection
- .getStatements(null, filterOnPredicate, object, includeInferred, dataGraph)
- .stream()) {
- return stream.map(Statement::getObject)
- .map(o -> ((Resource) o))
- .findAny()
- .orElse(null);
- }
- }
- )
- .filter(Objects::nonNull)
- .toArray(Resource[]::new);
+ if (typeFilterWithInference) {
+ filterOnObject = FilterByPredicateObject.this.filterOnObject.stream()
+ .flatMap(type -> connectionsGroup.getRdfsSubClassOfReasoner()
+ .backwardsChain(type)
+ .stream())
+ .distinct()
+ .map(object -> connectionsGroup.getSailSpecificValue(object,
+ ConnectionsGroup.StatementPosition.object, connection
+ ))
+ .filter(Objects::nonNull)
+ .toArray(Resource[]::new);
+ } else {
+ filterOnObject = FilterByPredicateObject.this.filterOnObject.stream()
+ .map(object -> connectionsGroup.getSailSpecificValue(object,
+ ConnectionsGroup.StatementPosition.object, connection
+ ))
+ .filter(Objects::nonNull)
+ .toArray(Resource[]::new);
+ }
}
}
@@ -237,8 +252,8 @@ private Boolean matchesCached(Resource subject, IRI filterOnPredicate, Resource[
private boolean matchesUnCached(Resource subject, IRI filterOnPredicate, Resource[] filterOnObject) {
for (Resource object : filterOnObject) {
- if (connection.hasStatement(subject, filterOnPredicate, object, includeInferred,
- dataGraph)) {
+ if (connection.hasStatement(subject, filterOnPredicate, object,
+ includeInferred && !typeFilterWithInference, dataGraph)) {
return true;
}
}
@@ -341,9 +356,9 @@ public int hashCode() {
@Override
public String toString() {
- return "ExternalPredicateObjectFilter{" + "filterOnObject=" + PlanNode.prefix(filterOnObject)
+ return "FilterByPredicateObject{" + "filterOnObject=" + Formatter.prefix(filterOnObject)
+ ", filterOnPredicate="
- + PlanNode.prefix(filterOnPredicate) + ", filterOn=" + filterOn + ", returnMatching="
+ + Formatter.prefix(filterOnPredicate) + ", filterOn=" + filterOn + ", returnMatching="
+ returnMatching + '}';
}
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 a1879503fc4..c44f511f612 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 extends PushablePlanNode> type) {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsObject.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsObject.java
index bdf07046958..bdb80fb8779 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsObject.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsObject.java
@@ -42,11 +42,6 @@ boolean checkTuple(Reference t) {
return connection.hasStatement(null, null, target, true, dataGraph);
}
- @Override
- public String toString() {
- return "ExternalFilterTargetIsObject{" + '}';
- }
-
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsSubject.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsSubject.java
index 02acb30e90f..3124e6f076e 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsSubject.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/FilterTargetIsSubject.java
@@ -49,11 +49,6 @@ boolean checkTuple(Reference t) {
}
- @Override
- public String toString() {
- return "ExternalFilterTargetIsSubject{}";
- }
-
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Formatter.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Formatter.java
index e6f182190ea..62b5cdbc5d2 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Formatter.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Formatter.java
@@ -10,20 +10,76 @@
*******************************************************************************/
package org.eclipse.rdf4j.sail.shacl.ast.planNodes;
+import java.util.Arrays;
import java.util.List;
+import java.util.Set;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Namespace;
import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.model.impl.SimpleNamespace;
+import org.eclipse.rdf4j.model.vocabulary.AFN;
+import org.eclipse.rdf4j.model.vocabulary.APF;
+import org.eclipse.rdf4j.model.vocabulary.CONFIG;
+import org.eclipse.rdf4j.model.vocabulary.DASH;
+import org.eclipse.rdf4j.model.vocabulary.DC;
import org.eclipse.rdf4j.model.vocabulary.DCAT;
+import org.eclipse.rdf4j.model.vocabulary.DCTERMS;
+import org.eclipse.rdf4j.model.vocabulary.DOAP;
+import org.eclipse.rdf4j.model.vocabulary.EARL;
+import org.eclipse.rdf4j.model.vocabulary.FN;
import org.eclipse.rdf4j.model.vocabulary.FOAF;
+import org.eclipse.rdf4j.model.vocabulary.GEO;
+import org.eclipse.rdf4j.model.vocabulary.GEOF;
+import org.eclipse.rdf4j.model.vocabulary.HYDRA;
+import org.eclipse.rdf4j.model.vocabulary.LDP;
+import org.eclipse.rdf4j.model.vocabulary.LIST;
+import org.eclipse.rdf4j.model.vocabulary.LOCN;
+import org.eclipse.rdf4j.model.vocabulary.ODRL2;
+import org.eclipse.rdf4j.model.vocabulary.ORG;
+import org.eclipse.rdf4j.model.vocabulary.OWL;
+import org.eclipse.rdf4j.model.vocabulary.PROV;
import org.eclipse.rdf4j.model.vocabulary.RDF;
+import org.eclipse.rdf4j.model.vocabulary.RDF4J;
+import org.eclipse.rdf4j.model.vocabulary.RDFS;
+import org.eclipse.rdf4j.model.vocabulary.ROV;
+import org.eclipse.rdf4j.model.vocabulary.RSX;
+import org.eclipse.rdf4j.model.vocabulary.SD;
+import org.eclipse.rdf4j.model.vocabulary.SESAME;
+import org.eclipse.rdf4j.model.vocabulary.SESAMEQNAME;
import org.eclipse.rdf4j.model.vocabulary.SHACL;
+import org.eclipse.rdf4j.model.vocabulary.SKOS;
+import org.eclipse.rdf4j.model.vocabulary.SKOSXL;
+import org.eclipse.rdf4j.model.vocabulary.SP;
+import org.eclipse.rdf4j.model.vocabulary.SPIF;
+import org.eclipse.rdf4j.model.vocabulary.SPIN;
+import org.eclipse.rdf4j.model.vocabulary.SPINX;
+import org.eclipse.rdf4j.model.vocabulary.SPL;
+import org.eclipse.rdf4j.model.vocabulary.TIME;
+import org.eclipse.rdf4j.model.vocabulary.VANN;
+import org.eclipse.rdf4j.model.vocabulary.VCARD4;
+import org.eclipse.rdf4j.model.vocabulary.VOID;
+import org.eclipse.rdf4j.model.vocabulary.WGS84;
import org.eclipse.rdf4j.model.vocabulary.XSD;
public class Formatter {
+ public static String prefix(Set extends Value> set) {
+ if (set.size() == 1) {
+ return prefix(set.iterator().next());
+ }
+
+ return Arrays.toString(set.stream().map(Formatter::prefix).toArray());
+ }
+
+ public static String prefix(List extends Value> list) {
+ if (list.size() == 1) {
+ return prefix(list.iterator().next());
+ }
+
+ return Arrays.toString(list.stream().map(Formatter::prefix).toArray());
+ }
+
public static String prefix(Value in) {
if (in == null) {
@@ -35,12 +91,51 @@ public static String prefix(Value in) {
String namespace = ((IRI) in).getNamespace();
List namespaces = List.of(
+ AFN.NS,
+ APF.NS,
+ CONFIG.NS,
+ DASH.NS,
+ DC.NS,
+ DCAT.NS,
+ DCTERMS.NS,
+ DOAP.NS,
+ EARL.NS,
+ FN.NS,
+ FOAF.NS,
+ GEO.NS,
+ GEOF.NS,
+ HYDRA.NS,
+ LDP.NS,
+ LIST.NS,
+ LOCN.NS,
+ ODRL2.NS,
+ ORG.NS,
+ OWL.NS,
+ PROV.NS,
RDF.NS,
+ RDF4J.NS,
+ RDFS.NS,
+ ROV.NS,
+ RSX.NS,
+ SD.NS,
+ SESAME.NS,
+ SESAMEQNAME.NS,
SHACL.NS,
- FOAF.NS,
- DCAT.NS,
+ SKOS.NS,
+ SKOSXL.NS,
+ SP.NS,
+ SPIF.NS,
+ SPIN.NS,
+ SPINX.NS,
+ SPL.NS,
+ TIME.NS,
+ VANN.NS,
+ VCARD4.NS,
+ VOID.NS,
+ WGS84.NS,
+ XSD.NS,
new SimpleNamespace("http://example.com/ns#", "ex"),
- XSD.NS
+ new SimpleNamespace("http://example.com/ns/", "ex")
);
for (Namespace ns : namespaces) {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/GroupByFilter.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/GroupByFilter.java
index 765faab3ba0..038e561f4d0 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/GroupByFilter.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/GroupByFilter.java
@@ -135,7 +135,7 @@ public void getPlanAsGraphvizDot(StringBuilder stringBuilder) {
@Override
public String toString() {
- return "GroupByCountFilter";
+ return "GroupByFilter";
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/InnerJoin.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/InnerJoin.java
index d6265e37251..517ebd9468e 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/InnerJoin.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/InnerJoin.java
@@ -300,7 +300,7 @@ public String getId() {
@Override
public String toString() {
- return "InnerJoin(" + left.toString() + " : " + right.toString() + ")";
+ return "InnerJoin";
}
private String leadingSpace() {
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/LeftOuterJoin.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/LeftOuterJoin.java
index bfe8c47d520..9384889e0d0 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/LeftOuterJoin.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/LeftOuterJoin.java
@@ -119,11 +119,13 @@ void calculateNext() {
@Override
public void localClose() {
try {
- if (leftIterator != null)
+ if (leftIterator != null) {
leftIterator.close();
+ }
} finally {
- if (rightIterator != null)
+ if (rightIterator != null) {
rightIterator.close();
+ }
}
}
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/NonUniqueTargetLang.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/NonUniqueTargetLang.java
index 6ebeb1716ce..83a4424c156 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/NonUniqueTargetLang.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/NonUniqueTargetLang.java
@@ -149,7 +149,7 @@ private void calculateNext() {
if (value.isLiteral()) {
Optional lang = ((Literal) value).getLanguage();
- if (!lang.isPresent()) {
+ if (lang.isEmpty()) {
next = null;
} else if (!seenLanguages.contains(lang.get())) {
seenLanguages.add(lang.get());
@@ -166,8 +166,9 @@ private void calculateNext() {
@Override
public void localClose() {
- if (parentIterator != null)
+ if (parentIterator != null) {
parentIterator.close();
+ }
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PatternFilter.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PatternFilter.java
index c972ae0e3a0..404cd983da5 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PatternFilter.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PatternFilter.java
@@ -34,53 +34,9 @@ public class PatternFilter extends FilterPlanNode {
private final Pattern pattern;
- public PatternFilter(PlanNode parent, String pattern, String flags, ConnectionsGroup connectionsGroup) {
+ public PatternFilter(PlanNode parent, Pattern pattern, ConnectionsGroup connectionsGroup) {
super(parent, connectionsGroup);
- if (flags != null && !flags.isEmpty()) {
- int flag = 0b0;
-
- if (flags.contains("i")) {
- flag = flag | Pattern.CASE_INSENSITIVE;
- logger.trace("PatternFilter constructed with case insensitive flag");
- }
-
- if (flags.contains("d")) {
- flag = flag | Pattern.UNIX_LINES;
- logger.trace("PatternFilter constructed with UNIX lines flag");
- }
-
- if (flags.contains("m")) {
- flag = flag | Pattern.MULTILINE;
- logger.trace("PatternFilter constructed with multiline flag");
- }
-
- if (flags.contains("s")) {
- flag = flag | Pattern.DOTALL;
- logger.trace("PatternFilter constructed with dotall flag");
- }
-
- if (flags.contains("u")) {
- flag = flag | Pattern.UNICODE_CASE;
- logger.trace("PatternFilter constructed with unicode case flag");
- }
-
- if (flags.contains("x")) {
- flag = flag | Pattern.COMMENTS;
- logger.trace("PatternFilter constructed with comments flag");
- }
-
- if (flags.contains("U")) {
- flag = flag | Pattern.UNICODE_CHARACTER_CLASS;
- logger.trace("PatternFilter constructed with unicode character class flag");
- }
-
- this.pattern = Pattern.compile(pattern, flag);
- logger.trace("PatternFilter constructed with pattern: {} and flags: {}", pattern, flags);
-
- } else {
- this.pattern = Pattern.compile(pattern, 0b0);
- logger.trace("PatternFilter constructed with pattern: {} and no flags", pattern);
- }
+ this.pattern = pattern;
}
private static Literal str(Value argValue, ValueFactory valueFactory) {
@@ -104,8 +60,9 @@ boolean checkTuple(Reference t) {
Value literal = t.get().getValue();
literal = str(literal, SimpleValueFactory.getInstance());
- if (literal == null)
+ if (literal == null) {
return false;
+ }
if (QueryEvaluationUtility.isStringLiteral(literal)) {
boolean result = pattern.matcher(((Literal) literal).getLabel()).find();
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PlanNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PlanNode.java
index 919d39323f0..82adf62ac8e 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PlanNode.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/PlanNode.java
@@ -11,9 +11,6 @@
package org.eclipse.rdf4j.sail.shacl.ast.planNodes;
-import java.util.Arrays;
-import java.util.Set;
-
import org.eclipse.rdf4j.common.iteration.CloseableIteration;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.model.Value;
@@ -23,18 +20,6 @@
*/
public interface PlanNode {
- static String prefix(Set filterOnObject) {
- if (filterOnObject.size() == 1) {
- return prefix(filterOnObject.iterator().next());
- }
-
- return Arrays.toString(filterOnObject.stream().map(PlanNode::prefix).toArray());
- }
-
- static String prefix(Value value) {
- return Formatter.prefix(value);
- }
-
CloseableIteration extends ValidationTuple> iterator();
int depth();
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/SetFilterNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/SetFilterNode.java
index ad64b910bac..c6564b4b0ab 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/SetFilterNode.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/SetFilterNode.java
@@ -11,7 +11,6 @@
package org.eclipse.rdf4j.sail.shacl.ast.planNodes;
-import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
@@ -113,7 +112,7 @@ public String getId() {
@Override
public String toString() {
return "SetFilterNode{" + "targetNodeList="
- + Arrays.toString(targetNodeList.stream().map(Formatter::prefix).toArray()) + ", index=" + index
+ + Formatter.prefix(targetNodeList) + ", index=" + index
+ ", returnValid=" + returnValid + '}';
}
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 e78962815f4..5f1752dbc4a 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 0e501473858..c9d88521e75 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/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/TupleMapper.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/TupleMapper.java
index f9f3e0bfb92..127093c4a39 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/TupleMapper.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/TupleMapper.java
@@ -85,7 +85,7 @@ public String getId() {
@Override
public String toString() {
- return "ModifyValidationTuple";
+ return "TupleMapper";
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Unique.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Unique.java
index 1a0eb2d73b1..d412a74b1a8 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Unique.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/Unique.java
@@ -112,6 +112,8 @@ private void calculateNext() {
Set tuples = new HashSet<>();
if (propertyShapeWithValue) {
+ if (parentIterator.hasNext())
+ parentIterator.peek();
while (parentIterator.hasNext()
&& parentIterator.peek().getValue().equals(temp.getValue())
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValueInFilter.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValueInFilter.java
index dff0a687f15..dd134c695b9 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValueInFilter.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValueInFilter.java
@@ -11,7 +11,6 @@
package org.eclipse.rdf4j.sail.shacl.ast.planNodes;
-import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
@@ -37,8 +36,7 @@ boolean checkTuple(Reference t) {
@Override
public String toString() {
- return "ValueInFilter{" + "valueSet=" + Arrays.toString(valueSet.stream().map(Formatter::prefix).toArray())
- + '}';
+ return "ValueInFilter{" + "valueSet=" + Formatter.prefix(valueSet) + '}';
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValuesBackedNode.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValuesBackedNode.java
index 3a92d9c2a04..14fb12af7c8 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValuesBackedNode.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/ValuesBackedNode.java
@@ -97,7 +97,7 @@ public String getId() {
@Override
public String toString() {
- return "ValuesBackedNode{" + "values=" + values + '}';
+ return "ValuesBackedNode{" + "values=" + Formatter.prefix(values) + '}';
}
@Override
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/sort-after.txt b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/sort-after.txt
deleted file mode 100644
index c089cefe02e..00000000000
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/sort-after.txt
+++ /dev/null
@@ -1,896 +0,0 @@
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:129)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/sort-before.txt b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/sort-before.txt
deleted file mode 100644
index 6ae9ee9f5c3..00000000000
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/planNodes/sort-before.txt
+++ /dev/null
@@ -1,896 +0,0 @@
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.targets.TargetClass.getTargetFilter(TargetClass.java:128)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
-org.eclipse.rdf4j.sail.shacl.ast.planNodes.PlanNodeHelper.handleSorting(PlanNodeHelper.java:37)
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/EffectiveTarget.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/EffectiveTarget.java
index eeadb293dc2..2a9ef7040e1 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/EffectiveTarget.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/EffectiveTarget.java
@@ -465,10 +465,13 @@ public EffectiveTargetFragment(Variable var, Targetable target, Effective
rootStatementMatcher = null;
} else {
rootStatementMatcher = queryFragment.getStatementMatchers().get(0);
- assert rootStatementMatcher.getSubjectName() == var.getName() ||
- rootStatementMatcher.getObjectName() == var.getName() ||
- rootStatementMatcher.getSubjectName() == prev.var.getName() ||
- rootStatementMatcher.getObjectName() == prev.var.getName();
+ if (rootStatementMatcher.getSubjectName() != var.getName() &&
+ rootStatementMatcher.getObjectName() != var.getName() &&
+ rootStatementMatcher.getSubjectName() != prev.var.getName() &&
+ rootStatementMatcher.getObjectName() != prev.var.getName()) {
+ throw new AssertionError("rootStatementMatcher: " + rootStatementMatcher + ", var: " + var
+ + ", prev.var: " + prev.var);
+ }
}
}
@@ -476,7 +479,7 @@ public SparqlFragment getQueryFragment() {
return queryFragment;
}
- public Stream getRoot(ConnectionsGroup connectionsGroup, Resource[] dataGraph,
+ public Stream getRoot(ConnectionsGroup connectionsGroup, Resource[] dataGraph,
StatementMatcher currentStatementMatcher,
Statement currentStatement) {
if (currentStatementMatcher == rootStatementMatcher) {
@@ -507,7 +510,7 @@ public Stream getRoot(ConnectionsGroup connectionsGroup, R
assert !(path instanceof InversePath);
return queryFragment.getRoot(connectionsGroup, dataGraph, path,
currentStatementMatcher,
- List.of(currentStatement));
+ List.of(new EffectiveTarget.SubjectObjectAndMatcher.SubjectObject(currentStatement)));
}
throw new UnsupportedOperationException();
@@ -515,20 +518,20 @@ public Stream getRoot(ConnectionsGroup connectionsGroup, R
}
}
- public static class StatementsAndMatcher {
- private final List statements;
+ public static class SubjectObjectAndMatcher {
+ private final List statements;
private final StatementMatcher statementMatcher;
// We should support some sort of stream instead, so that we can scale without keeping all the
// intermediary statements in memeory! It's very hard to implement though since the list of statements is
// iterated over several times in different branches, so we can't just pass in an iterator since it would be
// consumed by one branch and then the other branch would only see an empty iterator.
- public StatementsAndMatcher(List statements, StatementMatcher statementMatcher) {
+ public SubjectObjectAndMatcher(List statements, StatementMatcher statementMatcher) {
this.statements = statements;
this.statementMatcher = statementMatcher;
}
- public List getStatements() {
+ public List getStatements() {
return statements;
}
@@ -540,6 +543,29 @@ public boolean hasStatements() {
return !statements.isEmpty();
}
+ public static class SubjectObject {
+ private final Resource subject;
+ private final Value object;
+
+ public SubjectObject(Resource subject, Value object) {
+ this.subject = subject;
+ this.object = object;
+ }
+
+ public SubjectObject(Statement statement) {
+ this.subject = statement.getSubject();
+ this.object = statement.getObject();
+ }
+
+ public Resource getSubject() {
+ return subject;
+ }
+
+ public Value getObject() {
+ return object;
+ }
+ }
+
@Override
public String toString() {
return "StatementsAndMatcher{" +
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java
index 767b7a7a377..5d44319bee3 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/ast/targets/TargetChainRetriever.java
@@ -81,6 +81,7 @@ public class TargetChainRetriever implements PlanNode {
private final EffectiveTarget.EffectiveTargetFragment removedStatementTarget;
private final boolean hasValue;
private final Set varNamesInQueryFragment;
+ private final String queryStr;
private final Set originalStatementMatchers;
private StackTraceElement[] stackTrace;
@@ -122,9 +123,11 @@ public TargetChainRetriever(ConnectionsGroup connectionsGroup,
.get(QueryLanguage.SPARQL)
.get();
+ this.queryStr = "select * where {\n" + this.queryFragment + "\n}";
+
this.varNamesInQueryFragment = Set.of(ArrayBindingBasedQueryEvaluationContext
.findAllVariablesUsedInQuery(((QueryRoot) queryParserFactory.getParser()
- .parseQuery("select * where {\n" + this.queryFragment + "\n}", null)
+ .parseQuery(queryStr, null)
.getTupleExpr())));
assert !varNamesInQueryFragment.isEmpty();
@@ -312,12 +315,14 @@ private List readStatementsInBulk(Set variableNames) {
while (bulk.size() < BULK_SIZE && statements.hasNext()) {
Statement next = statements.next();
- Stream rootStatements = Stream
- .of(new EffectiveTarget.StatementsAndMatcher(List.of(next), currentStatementMatcher));
+ Stream rootStatements = Stream
+ .of(new EffectiveTarget.SubjectObjectAndMatcher(
+ List.of(new EffectiveTarget.SubjectObjectAndMatcher.SubjectObject(next)),
+ currentStatementMatcher));
if (chaseRoot()) {
// we only need to find the root if the currentStatementMatcher doesn't match anything in the
// query
- Stream root = removedStatementTarget.getRoot(
+ Stream root = removedStatementTarget.getRoot(
connectionsGroup,
dataGraph, currentStatementMatcher,
next);
@@ -328,7 +333,7 @@ private List readStatementsInBulk(Set variableNames) {
}
rootStatements
- .filter(EffectiveTarget.StatementsAndMatcher::hasStatements)
+ .filter(EffectiveTarget.SubjectObjectAndMatcher::hasStatements)
.flatMap(statementsAndMatcher -> {
StatementMatcher newCurrentStatementMatcher = statementsAndMatcher
.getStatementMatcher();
@@ -339,6 +344,10 @@ private List readStatementsInBulk(Set variableNames) {
Binding[] bindings = new Binding[variableNames.size()];
int j = 0;
+ assert newCurrentStatementMatcher.getPredicateValue() != null
+ || !currentVarNames
+ .contains(newCurrentStatementMatcher.getPredicateName());
+
if (newCurrentStatementMatcher.getSubjectValue() == null
&& currentVarNames
.contains(newCurrentStatementMatcher.getSubjectName())) {
@@ -347,14 +356,6 @@ private List readStatementsInBulk(Set variableNames) {
temp.getSubject());
}
- if (newCurrentStatementMatcher.getPredicateValue() == null
- && currentVarNames
- .contains(newCurrentStatementMatcher.getPredicateName())) {
- bindings[j++] = new SimpleBinding(
- newCurrentStatementMatcher.getPredicateName(),
- temp.getPredicate());
- }
-
if (newCurrentStatementMatcher.getObjectValue() == null
&& currentVarNames
.contains(newCurrentStatementMatcher.getObjectName())) {
@@ -363,6 +364,9 @@ private List readStatementsInBulk(Set variableNames) {
temp.getObject());
}
if (bindings.length == 1) {
+ if (bindings[0] == null) {
+ throw new IllegalStateException("Binding is null!");
+ }
return new SingletonBindingSet(bindings[0].getName(),
bindings[0].getValue());
diff --git a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/wrapper/data/ConnectionsGroup.java b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/wrapper/data/ConnectionsGroup.java
index 38461cb1edf..605810c5b49 100644
--- a/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/wrapper/data/ConnectionsGroup.java
+++ b/core/sail/shacl/src/main/java/org/eclipse/rdf4j/sail/shacl/wrapper/data/ConnectionsGroup.java
@@ -13,11 +13,17 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
import org.eclipse.rdf4j.common.annotation.InternalUseOnly;
import org.eclipse.rdf4j.common.transaction.IsolationLevels;
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Statement;
+import org.eclipse.rdf4j.model.Value;
import org.eclipse.rdf4j.sail.Sail;
import org.eclipse.rdf4j.sail.SailConnection;
+import org.eclipse.rdf4j.sail.SailException;
import org.eclipse.rdf4j.sail.shacl.ShaclSailConnection;
import org.eclipse.rdf4j.sail.shacl.Stats;
import org.eclipse.rdf4j.sail.shacl.ast.planNodes.BufferedSplitter;
@@ -27,6 +33,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
/**
* @apiNote since 3.0. This feature is for internal use only: its existence, signature or behavior may change without
* warning from one release to the next.
@@ -52,6 +61,11 @@ public class ConnectionsGroup implements AutoCloseable {
// used to cache Select plan nodes so that we don't query a store for the same data during the same validation step.
private final Map nodeCache = new ConcurrentHashMap<>();
+ private final Cache INTERNED_VALUE_CACHE = CacheBuilder.newBuilder()
+ .concurrencyLevel(Runtime.getRuntime().availableProcessors() * 2)
+ .maximumSize(10000)
+ .build();
+
public ConnectionsGroup(SailConnection baseConnection,
SailConnection previousStateConnection, Sail addedStatements, Sail removedStatements,
Stats stats, RdfsSubClassOfReasonerProvider rdfsSubClassOfReasonerProvider,
@@ -95,6 +109,67 @@ public SailConnection getRemovedStatements() {
return removedStatements;
}
+ public enum StatementPosition {
+ subject,
+ predicate,
+ object
+ }
+
+ /**
+ * This method is a performance optimization for converting a more general value object, like RDF.TYPE, to the
+ * specific Value object that the underlying sail would use for that node. It uses a cache to avoid querying the
+ * store for the same value multiple times during the same validation.
+ *
+ * @param value the value object to be converted
+ * @param statementPosition the position of the statement (subject, predicate, or object)
+ * @param connection the SailConnection used to retrieve the specific Value object
+ * @param the type of the value
+ * @return the specific Value object used by the underlying sail, or the original value if no specific Value is
+ * found
+ * @throws SailException if an error occurs while retrieving the specific Value object
+ */
+ public T getSailSpecificValue(T value, StatementPosition statementPosition,
+ SailConnection connection) {
+ try {
+
+ Value t = INTERNED_VALUE_CACHE.get(value, () -> {
+
+ switch (statementPosition) {
+ case subject:
+ try (var statements = connection.getStatements(((Resource) value), null, null, false).stream()) {
+ Resource ret = statements.map(Statement::getSubject).findAny().orElse(null);
+ if (ret == null) {
+ return value;
+ }
+ return ret;
+ }
+ case predicate:
+ try (var statements = connection.getStatements(null, ((IRI) value), null, false).stream()) {
+ IRI ret = statements.map(Statement::getPredicate).findAny().orElse(null);
+ if (ret == null) {
+ return value;
+ }
+ return ret;
+ }
+ case object:
+ try (var statements = connection.getStatements(null, null, value, false).stream()) {
+ Value ret = statements.map(Statement::getObject).findAny().orElse(null);
+ if (ret == null) {
+ return value;
+ }
+ return ret;
+ }
+ }
+
+ throw new IllegalStateException("Unknown statement position: " + statementPosition);
+
+ });
+ return ((T) t);
+ } catch (ExecutionException e) {
+ throw new SailException(e);
+ }
+ }
+
@Override
public void close() {
if (addedStatements != null) {
@@ -143,9 +218,15 @@ public PlanNode getCachedNodeFor(PlanNode planNode) {
}
+ /**
+ * Returns the RdfsSubClassOfReasoner if it is enabled. If it is not enabled this method will return null.
+ *
+ * @return RdfsSubClassOfReasoner or null
+ */
public RdfsSubClassOfReasoner getRdfsSubClassOfReasoner() {
- if (rdfsSubClassOfReasonerProvider == null)
+ if (rdfsSubClassOfReasonerProvider == null) {
return null;
+ }
return rdfsSubClassOfReasonerProvider.getRdfsSubClassOfReasoner();
}
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 f62d336424d..9a3d4f8afa4 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
@@ -11,7 +11,6 @@
package org.eclipse.rdf4j.sail.shacl;
-import static org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT;
import static org.junit.jupiter.params.provider.Arguments.arguments;
import java.io.File;
@@ -84,7 +83,6 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.Isolated;
import org.junit.jupiter.params.provider.Arguments;
import org.slf4j.Logger;
@@ -111,9 +109,16 @@ abstract public class AbstractShaclTest {
public static final Set SHAPE_GRAPHS = Set.of(RDF4J.SHACL_SHAPE_GRAPH, RDF4J.NIL,
Values.iri("http://example.com/ns#shapesGraph1"));
+ public static final String INITIAL_DATA_FILE = "initialData.trig";
+
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"
);
@@ -224,7 +229,7 @@ private static Stream findTestCases(String testCase, ExpectedResult ba
if (files != null) {
Optional initialData = Arrays.stream(files)
.map(File::getName)
- .filter(name -> name.equals("initialData.trig"))
+ .filter(name -> name.equals(INITIAL_DATA_FILE))
.findAny();
List queries = Arrays.stream(files)
.filter(f -> f.getName().endsWith(".rq"))
@@ -607,6 +612,11 @@ void referenceImplementationTestCaseValidation(TestCase testCase) {
return;
}
+ // the TopBraid SHACL API doesn't support multiple data graphs
+ if (testCase.testCasePath.startsWith("test-cases/maxCount/simple/invalid/case4/")) {
+ return;
+ }
+
printTestCase(testCase);
Dataset shaclDataset = DatasetFactory.create();
diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/ShapesGraphTest.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/ShapesGraphTest.java
index 13d07f17650..554c127af4a 100644
--- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/ShapesGraphTest.java
+++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/ShapesGraphTest.java
@@ -109,8 +109,8 @@ public void testInvalidUnionGraph() throws Throwable {
connection.begin();
connection.add(laura, FOAF.PHONE, Values.literal(1));
- connection.add(laura, FOAF.PHONE, Values.literal(1), data1);
- connection.add(laura, FOAF.PHONE, Values.literal(1), data2);
+ connection.add(laura, FOAF.PHONE, Values.literal(2), data1);
+ connection.add(laura, FOAF.PHONE, Values.literal(3), data2);
connection.commit();
}
@@ -120,6 +120,133 @@ public void testInvalidUnionGraph() throws Throwable {
}
+ @Test
+ public void testValidUnionGraphMinCount() throws Throwable {
+
+ test(repository -> {
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+ connection.add(laura, RDF.TYPE, FOAF.PERSON, data2);
+ connection.add(laura, FOAF.NAME, Values.literal("Laura"), data2);
+ connection.commit();
+ }
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"));
+ connection.add(laura, FOAF.INTEREST, Values.literal("tennis"), data1);
+ connection.add(laura, FOAF.INTEREST, Values.literal("chess"), data2);
+
+ connection.commit();
+ }
+
+ });
+
+ }
+
+ @Test
+ public void testInvalidUnionGraphMinCount() throws Throwable {
+
+ test(repository -> {
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+ connection.add(laura, RDF.TYPE, FOAF.PERSON, data2);
+ connection.add(laura, FOAF.NAME, Values.literal("Laura"), data2);
+ connection.commit();
+ }
+
+ assertThrows(RepositoryException.class, () -> {
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"));
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"), data1);
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"), data2);
+
+ connection.commit();
+ }
+ });
+
+ });
+
+ }
+
+ @Test
+ public void testInvalidUnionGraphMinCountSparql() throws Throwable {
+
+ test(repository -> {
+
+ assertThrows(RepositoryException.class, () -> {
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin(ShaclSail.TransactionSettings.ValidationApproach.Bulk);
+ connection.add(laura, RDF.TYPE, FOAF.PERSON, data2);
+ connection.add(laura, FOAF.NAME, Values.literal("Laura"), data2);
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"));
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"), data1);
+ connection.add(laura, FOAF.INTEREST, Values.literal("golf"), data2);
+ connection.commit();
+ }
+ });
+
+ });
+
+ }
+
+ @Test
+ public void testValidUnionGraph() throws Throwable {
+
+ test(repository -> {
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+ connection.add(laura, RDF.TYPE, FOAF.PERSON, data2);
+ connection.add(laura, FOAF.NAME, Values.literal("Laura"), data2);
+ connection.commit();
+ }
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+
+ connection.add(laura, FOAF.PHONE, Values.literal(1));
+ connection.add(laura, FOAF.PHONE, Values.literal(1), data1);
+ connection.add(laura, FOAF.PHONE, Values.literal(1), data2);
+
+ connection.commit();
+ }
+
+ });
+
+ }
+
+ @Test
+ public void testValidUnionGraphSparql() throws Throwable {
+
+ test(repository -> {
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+ connection.add(laura, RDF.TYPE, FOAF.PERSON, data2);
+ connection.add(laura, FOAF.NAME, Values.literal("Laura"), data2);
+ connection.commit();
+ }
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin(ShaclSail.TransactionSettings.ValidationApproach.Bulk);
+
+ connection.add(laura, FOAF.PHONE, Values.literal(1));
+ connection.add(laura, FOAF.PHONE, Values.literal(1), data1);
+ connection.add(laura, FOAF.PHONE, Values.literal(1), data2);
+
+ connection.commit();
+ }
+
+ });
+
+ }
+
@Test
public void testInvalidSplitAcrossGraphs() throws Throwable {
@@ -210,15 +337,15 @@ public void testDefaultShapesGraph() throws IOException {
try (RepositoryConnection connection = repository.getConnection()) {
connection.begin();
connection.add(laura, RDF.TYPE, FOAF.PERSON, Values.iri("http://example.org/differentGraph"));
- connection.add(laura, FOAF.PHONE, Values.literal(12345678));
- connection.add(laura, FOAF.PHONE, Values.literal(12345678), data2);
+ connection.add(laura, FOAF.PHONE, Values.literal(1));
+ connection.add(laura, FOAF.PHONE, Values.literal(2), data2);
connection.commit();
}
assertThrows(RepositoryException.class, () -> {
try (RepositoryConnection connection = repository.getConnection()) {
connection.begin();
- connection.add(laura, FOAF.PHONE, Values.literal(12345678), data1);
+ connection.add(laura, FOAF.PHONE, Values.literal(3), data1);
connection.commit();
}
});
@@ -227,6 +354,32 @@ public void testDefaultShapesGraph() throws IOException {
}
+ @Test
+ public void testDefaultShapesGraph2() throws IOException {
+
+ ShaclSail shaclSail = new ShaclSail(new MemoryStore());
+ SailRepository repository = new SailRepository(shaclSail);
+
+ loadShapes(repository);
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+ connection.add(laura, RDF.TYPE, FOAF.PERSON, Values.iri("http://example.org/differentGraph"));
+ connection.add(laura, FOAF.PHONE, Values.literal(1));
+ connection.add(laura, FOAF.PHONE, Values.literal(1), data2);
+ connection.commit();
+ }
+
+ try (RepositoryConnection connection = repository.getConnection()) {
+ connection.begin();
+ connection.add(laura, FOAF.PHONE, Values.literal(1), data1);
+ connection.commit();
+ }
+
+ repository.shutDown();
+
+ }
+
private void loadShapes(SailRepository repository) throws IOException {
try (SailRepositoryConnection connection = repository.getConnection()) {
connection.begin(ShaclSail.TransactionSettings.ValidationApproach.Disabled);
@@ -246,7 +399,8 @@ private void test(Consumer testCase) throws Throwable {
Values.iri(EX, "peopleKnowHumansShapes"),
Values.iri(EX, "mustHaveNameShapes"),
Values.iri(EX, "maxFiveAcquaintances"),
- Values.iri(EX, "nestedKnowsShouldHaveAge")
+ Values.iri(EX, "nestedKnowsShouldHaveAge"),
+ Values.iri(EX, "mustHaveMinThreeInterestsOrNoneAtAll")
));
loadShapes(repository);
diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/UnknownShapesTest.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/UnknownShapesTest.java
index 44175008568..6499bbf185e 100644
--- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/UnknownShapesTest.java
+++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/UnknownShapesTest.java
@@ -11,6 +11,7 @@
package org.eclipse.rdf4j.sail.shacl;
import java.io.IOException;
+import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@@ -86,6 +87,7 @@ private Set getRelevantLog(int expectedNumberOfItems) {
.map(String::trim)
.collect(Collectors.toSet());
} while (relevantLog.size() < expectedNumberOfItems);
+ assert relevantLog.size() == expectedNumberOfItems;
return relevantLog;
}
@@ -104,15 +106,20 @@ public void testComplexPath() throws IOException {
}
}
- Set relevantLog = getRelevantLog(4);
+ Set relevantLog = getRelevantLog(5).stream()
+ .sorted()
+ .collect(Collectors.toCollection(LinkedHashSet::new));
Set expected = Set.of(
- "Unsupported SHACL feature detected: InversePath{ ZeroOrMorePath{ SimplePath{ } } }. Shape ignored! a sh:PropertyShape; sh:path [ sh:inversePath [ sh:zeroOrMorePath ] ]; sh:datatype xsd:int .",
- "Unsupported SHACL feature detected: AlternativePath{ [SimplePath{ }, ZeroOrOnePath{ SimplePath{ } }, SimplePath{ }] }. Shape ignored! a sh:PropertyShape; sh:path [ sh:alternativePath ( [ sh:oneOrMorePath ] ) ]; sh:nodeKind sh:BlankNodeOrIRI .",
+ "Unsupported SHACL feature detected: AlternativePath{ [SimplePath{ }, OneOrMorePath{ SimplePath{ } }, SimplePath{ }] }. Shape ignored! a sh:PropertyShape; sh:path [ sh:alternativePath ( [ sh:oneOrMorePath ] ) ]; sh:nodeKind sh:BlankNodeOrIRI .",
+ "Unsupported SHACL feature detected: AlternativePath{ [SimplePath{ }, ZeroOrMorePath{ SimplePath{ } }, SimplePath{ }] }. Shape ignored! a sh:PropertyShape; sh:path [ sh:alternativePath ( [ sh:zeroOrMorePath ] ) ]; sh:nodeKind sh:BlankNodeOrIRI .",
"Unsupported SHACL feature detected: AlternativePath{ [SimplePath{ }, ZeroOrOnePath{ SimplePath{ } }, SimplePath{ }] }. Shape ignored! a sh:PropertyShape; sh:path [ sh:alternativePath ( [ sh:zeroOrOnePath ] ) ]; sh:nodeKind sh:BlankNodeOrIRI .",
+ "Unsupported SHACL feature detected: InversePath{ ZeroOrMorePath{ SimplePath{ } } }. Shape ignored! a sh:PropertyShape; sh:path [ sh:inversePath [ sh:zeroOrMorePath ] ]; sh:datatype xsd:int .",
"Unsupported SHACL feature detected: InversePath{ ZeroOrMorePath{ SimplePath{ } } }. Shape ignored! a sh:PropertyShape; sh:path [ sh:inversePath [ sh:zeroOrMorePath ] ]; sh:minCount 1 ."
);
+ expected = expected.stream().sorted().collect(Collectors.toCollection(LinkedHashSet::new));
+
Assertions.assertEquals(expected, relevantLog);
shaclRepository.shutDown();
diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/Utils.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/Utils.java
index a72a41c0196..62177aeb736 100644
--- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/Utils.java
+++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/Utils.java
@@ -12,7 +12,6 @@
package org.eclipse.rdf4j.sail.shacl;
import java.io.BufferedInputStream;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
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 cd428fceae4..ecaf7e3c8f1 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
@@ -62,7 +62,8 @@ public class W3cComplianceTest {
"/core/path/path-zeroOrOne-001.ttl",
"/core/property/qualifiedMinCountDisjoint-001.ttl",
"/core/property/qualifiedValueShapesDisjoint-001.ttl",
- "/core/property/uniqueLang-002.ttl");
+ "/core/property/uniqueLang-002.ttl"
+ );
public static Stream data() {
return getTestFiles().stream()
diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/benchmark/SparqlConstraintsBenchmarkEmpty.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/benchmark/SparqlConstraintsBenchmarkEmpty.java
index 8464583871b..1ecdcc16330 100644
--- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/benchmark/SparqlConstraintsBenchmarkEmpty.java
+++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/benchmark/SparqlConstraintsBenchmarkEmpty.java
@@ -15,12 +15,8 @@
import java.util.List;
import java.util.concurrent.TimeUnit;
-import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.Statement;
-import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
-import org.eclipse.rdf4j.model.vocabulary.RDF;
-import org.eclipse.rdf4j.model.vocabulary.RDFS;
import org.eclipse.rdf4j.repository.sail.SailRepository;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import org.eclipse.rdf4j.rio.RDFFormat;
diff --git a/core/sail/shacl/src/test/resources/complexPath.trig b/core/sail/shacl/src/test/resources/complexPath.trig
index 6156512fe4d..ab26e8df364 100644
--- a/core/sail/shacl/src/test/resources/complexPath.trig
+++ b/core/sail/shacl/src/test/resources/complexPath.trig
@@ -20,6 +20,7 @@ ex:PersonShape
ex:alternativePath ,
ex:nestedSequencePath ,
ex:alternativePathZeroOrOne ,
+ ex:alternativePathZeroOrMore ,
ex:alternativePathOneOrMore .
ex:inverseOfWithComplex
@@ -47,6 +48,11 @@ ex:alternativePathZeroOrOne
sh:path [ sh:alternativePath (ex:father [sh:zeroOrOnePath ex:parent] ex:mother ) ] ;
sh:nodeKind sh:BlankNodeOrIRI .
+ex:alternativePathZeroOrMore
+ sh:path [ sh:alternativePath (ex:father [sh:zeroOrMorePath ex:parent] ex:mother ) ] ;
+ sh:nodeKind sh:BlankNodeOrIRI .
+
+
ex:alternativePathOneOrMore
sh:path [ sh:alternativePath (ex:father [sh:oneOrMorePath ex:parent] ex:mother ) ] ;
sh:nodeKind sh:BlankNodeOrIRI .
diff --git a/core/sail/shacl/src/test/resources/logback-test.xml b/core/sail/shacl/src/test/resources/logback-test.xml
index 990f3bb2551..40ced8210b0 100644
--- a/core/sail/shacl/src/test/resources/logback-test.xml
+++ b/core/sail/shacl/src/test/resources/logback-test.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/core/sail/shacl/src/test/resources/multipleShapesGraphs.trig b/core/sail/shacl/src/test/resources/multipleShapesGraphs.trig
index 6cd2a98ef19..0ca11d3d069 100644
--- a/core/sail/shacl/src/test/resources/multipleShapesGraphs.trig
+++ b/core/sail/shacl/src/test/resources/multipleShapesGraphs.trig
@@ -5,6 +5,7 @@
@prefix sh: .
@prefix xsd: .
@prefix rdf4j: .
+@prefix rsx: .
ex:peopleKnowPeopleShapes {
ex:PersonShapeKnowsPerson a sh:NodeShape;
@@ -43,6 +44,23 @@ ex:mustHaveNameShapes {
ex:data2 sh:shapesGraph ex:mustHaveNameShapes.
}
+ex:mustHaveMinThreeInterestsOrNoneAtAll {
+ ex:mustHaveMinThreeInterestsOrNoneAtAll a sh:NodeShape;
+ sh:targetSubjectsOf foaf:interest;
+ sh:property [
+ sh:path foaf:interest;
+ sh:minCount 3;
+ ] .
+
+ [
+ a rsx:DataAndShapesGraphLink;
+ rsx:shapesGraph ex:mustHaveMinThreeInterestsOrNoneAtAll;
+ rsx:dataGraph rdf4j:nil, ex:data1, ex:data2;
+ ]
+}
+
+
+
rdf4j:SHACLShapeGraph {
ex:PersonShapeMustHaveName a sh:NodeShape;
sh:targetClass foaf:Person;
@@ -65,6 +83,7 @@ ex:maxFiveAcquaintances {
ex:data2 sh:shapesGraph ex:maxFiveAcquaintances.
}
+
ex:nestedKnowsShouldHaveAge {
ex:PersonShapeNestedKnowsShouldHaveAge a sh:NodeShape;
sh:targetClass foaf:Person;
diff --git a/core/sail/shacl/src/test/resources/test-cases/hasValue/targetShapeAnd3/invalid/case4/initialData.trig b/core/sail/shacl/src/test/resources/test-cases/hasValue/targetShapeAnd3/invalid/case4/initialData.trig
index 54ddd788c91..7fe659e684e 100644
--- a/core/sail/shacl/src/test/resources/test-cases/hasValue/targetShapeAnd3/invalid/case4/initialData.trig
+++ b/core/sail/shacl/src/test/resources/test-cases/hasValue/targetShapeAnd3/invalid/case4/initialData.trig
@@ -8,4 +8,3 @@
@prefix rsx: .
ex:validPerson1 ex:info "blue", "red" .
-
diff --git a/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/query1.rq b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/query1.rq
new file mode 100644
index 00000000000..4f6ec8cb08a
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/query1.rq
@@ -0,0 +1,12 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ex:validPerson1 a ex:Person ;
+ ex:ssn "123", "456".
+
+}
\ No newline at end of file
diff --git a/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/query2.rq b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/query2.rq
new file mode 100644
index 00000000000..4c9c80e4579
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/query2.rq
@@ -0,0 +1,12 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ GRAPH ex:g1 {
+ ex:validPerson1 ex:ssn "789", "012".
+ }
+}
diff --git a/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/report.ttl b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/report.ttl
new file mode 100644
index 00000000000..24bceadf899
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/invalid/case4/report.ttl
@@ -0,0 +1,23 @@
+@prefix ex: .
+@prefix foaf: .
+@prefix xsd: .
+@prefix sh: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix rsx: .
+@prefix rdf4j: .
+
+[] a sh:ValidationReport;
+ rdf4j:truncated false;
+ sh:conforms false;
+ sh:result [ a sh:ValidationResult;
+ rsx:shapesGraph rdf4j:SHACLShapeGraph;
+ sh:focusNode ex:validPerson1;
+ sh:resultPath ex:ssn;
+ sh:resultSeverity sh:Violation;
+ sh:sourceConstraintComponent sh:MaxCountConstraintComponent;
+ sh:sourceShape [ a sh:PropertyShape;
+ sh:maxCount 3;
+ sh:path ex:ssn
+ ]
+ ] .
diff --git a/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/query1.rq b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/query1.rq
new file mode 100644
index 00000000000..4f6ec8cb08a
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/query1.rq
@@ -0,0 +1,12 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ex:validPerson1 a ex:Person ;
+ ex:ssn "123", "456".
+
+}
\ No newline at end of file
diff --git a/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/query2.rq b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/query2.rq
new file mode 100644
index 00000000000..0d4f5d03324
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/query2.rq
@@ -0,0 +1,12 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ GRAPH ex:g1 {
+ ex:validPerson1 ex:ssn "789", "123".
+ }
+}
diff --git a/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/report.ttl b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/report.ttl
new file mode 100644
index 00000000000..c0518dc88b5
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/maxCount/simple/valid/case5/report.ttl
@@ -0,0 +1,12 @@
+@prefix ex: .
+@prefix foaf: .
+@prefix xsd: .
+@prefix sh: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix rsx: .
+@prefix rdf4j: .
+
+[] a sh:ValidationReport;
+ rdf4j:truncated false;
+ sh:conforms true .
diff --git a/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case1/query1.rq b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case1/query1.rq
new file mode 100644
index 00000000000..5242e77e52d
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case1/query1.rq
@@ -0,0 +1,12 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ex:validPerson1 a ex:Person ;
+ ex:ssn "123".
+
+}
diff --git a/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case1/report.ttl b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case1/report.ttl
new file mode 100644
index 00000000000..17b75d04990
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case1/report.ttl
@@ -0,0 +1,31 @@
+@prefix ex: .
+@prefix foaf: .
+@prefix xsd: .
+@prefix sh: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix rsx: .
+@prefix rdf4j: .
+
+[] a sh:ValidationReport;
+ rdf4j:truncated false;
+ sh:conforms false;
+ sh:result [ a sh:ValidationResult;
+ rsx:shapesGraph rdf4j:SHACLShapeGraph;
+ sh:focusNode ex:validPerson1;
+ sh:resultMessage "Requires at least 2 social security numbers"@en, "Trenger minst 2 fødselsnummer"@no-nb,
+ "Requires at least 2 social security numbers";
+ sh:resultPath _:4e2d4e9d107d42408848b92cc2bcac982;
+ sh:resultSeverity sh:Violation;
+ sh:sourceConstraintComponent sh:MinCountConstraintComponent;
+ sh:sourceShape [ a sh:PropertyShape;
+ sh:message "Requires at least 2 social security numbers"@en, "Trenger minst 2 fødselsnummer"@no-nb,
+ "Requires at least 2 social security numbers";
+ sh:minCount 2;
+ sh:path _:4e2d4e9d107d42408848b92cc2bcac982
+ ]
+ ] .
+
+_:4e2d4e9d107d42408848b92cc2bcac982 sh:oneOrMorePath [
+ sh:alternativePath (ex:ssn ex:socialSecurityNumber)
+ ] .
diff --git a/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/query1.rq b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/query1.rq
new file mode 100644
index 00000000000..7354a2d0833
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/query1.rq
@@ -0,0 +1,14 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ex:validPerson1 a ex:Person ;
+ ex:ssn "123", "456".
+
+ex:validPerson2 ex:ssn "123".
+
+}
\ No newline at end of file
diff --git a/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/query2.rq b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/query2.rq
new file mode 100644
index 00000000000..6194108fba0
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/query2.rq
@@ -0,0 +1,10 @@
+PREFIX ex:
+PREFIX owl:
+PREFIX rdf:
+PREFIX rdfs:
+PREFIX sh:
+PREFIX xsd:
+
+INSERT DATA {
+ex:validPerson2 a ex:Person.
+}
diff --git a/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/report.ttl b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/report.ttl
new file mode 100644
index 00000000000..d5fbf1d42da
--- /dev/null
+++ b/core/sail/shacl/src/test/resources/test-cases/minCount/oneOrMorePath/invalid/case2/report.ttl
@@ -0,0 +1,31 @@
+@prefix ex: .
+@prefix foaf: .
+@prefix xsd: .
+@prefix sh: .
+@prefix rdf: .
+@prefix rdfs: