From 0de98dbaa8127098eb8e3fddbd50048afb856423 Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Sat, 13 Apr 2024 16:32:35 +0200 Subject: [PATCH 1/4] perf: reuse sh:in nodeSet --- package-lock.json | 17 +++++++++-------- package.json | 3 ++- src/validators.js | 11 ++++++++++- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index c503927..d16b479 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "rdf-validate-shacl", - "version": "0.5.3", + "version": "0.5.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "rdf-validate-shacl", - "version": "0.5.3", + "version": "0.5.4", "license": "MIT", "dependencies": { "@rdfjs/data-model": "^2", "@rdfjs/dataset": "^2", "@rdfjs/environment": "^1", "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.1", "@rdfjs/term-set": "^2.0.1", "@vocabulary/sh": "^1.0.1", "clownface": "^2.0.0", @@ -1284,9 +1285,9 @@ "dev": true }, "node_modules/@rdfjs/term-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-2.0.0.tgz", - "integrity": "sha512-z0K8AgLsJGTrh+dGkXNl/oT9vBdMei4xq1MIeGN360oimA81Q+ruQUKFCbYNRRZS03tVHPBzqXUal/DezFGPEA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-2.0.1.tgz", + "integrity": "sha512-kyaq8KfTxnMVclD5trsVkB774Q/4/mj+fwNBRxkMHCu/gTw3S1x7W8ZDFN9Yt1AiRkfG2CQe/b/iLbl5RMHvUQ==", "dependencies": { "@rdfjs/to-ntriples": "^2.0.0" } @@ -9749,9 +9750,9 @@ "dev": true }, "@rdfjs/term-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-2.0.0.tgz", - "integrity": "sha512-z0K8AgLsJGTrh+dGkXNl/oT9vBdMei4xq1MIeGN360oimA81Q+ruQUKFCbYNRRZS03tVHPBzqXUal/DezFGPEA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-2.0.1.tgz", + "integrity": "sha512-kyaq8KfTxnMVclD5trsVkB774Q/4/mj+fwNBRxkMHCu/gTw3S1x7W8ZDFN9Yt1AiRkfG2CQe/b/iLbl5RMHvUQ==", "requires": { "@rdfjs/to-ntriples": "^2.0.0" } diff --git a/package.json b/package.json index 0afd5da..39e8731 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@rdfjs/dataset": "^2", "@rdfjs/environment": "^1", "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.1", "@rdfjs/term-set": "^2.0.1", "@vocabulary/sh": "^1.0.1", "clownface": "^2.0.0", @@ -36,11 +37,11 @@ "@changesets/cli": "^2.22.0", "@rdfjs/parser-n3": "^2.0.1", "@tpluscode/eslint-config": "^0.4.4", + "@zazuko/env-node": "^2", "c8": "^8.0.1", "get-stream": "^6.0.0", "mocha": "^10.2.0", "nanoid": "^4.0.2", - "@zazuko/env-node": "^2", "rdf-ext": "^2.5.1", "rdf-utils-dataset": "^2.0.0" }, diff --git a/src/validators.js b/src/validators.js index f4d4379..9343e79 100644 --- a/src/validators.js +++ b/src/validators.js @@ -1,5 +1,6 @@ import { validateTerm } from 'rdf-validate-datatype' import { fromRdf } from 'rdf-literal' +import TermMap from '@rdfjs/term-map' import NodeSet from './node-set.js' import { getPathObjects } from './property-path.js' import { isInstanceOf, rdfListToArray } from './dataset-utils.js' @@ -133,8 +134,16 @@ function validateHasValueProperty(context, focusNode, valueNode, constraint) { function validateIn(context, focusNode, valueNode, constraint) { const { sh } = context.ns const inNode = constraint.getParameterValue(sh.in) + if (!constraint.nodeSets) { + constraint.nodeSets = new TermMap() + } + let nodeSet = constraint.nodeSets.get(inNode) + if (!nodeSet) { + nodeSet = new NodeSet(rdfListToArray(context.$shapes.node(inNode))) + constraint.nodeSets.set(inNode, nodeSet) + } - return new NodeSet(rdfListToArray(context.$shapes.node(inNode))).has(valueNode) + return nodeSet.has(valueNode) } function validateLanguageIn(context, focusNode, valueNode, constraint) { From 8e8cfe8bee03b063e3921803abdcecd9e83f7d59 Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Mon, 15 Apr 2024 15:18:27 +0200 Subject: [PATCH 2/4] simplify validateIn --- package-lock.json | 1 - package.json | 1 - src/validators.js | 12 ++++-------- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index d16b479..f8c1a58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "@rdfjs/dataset": "^2", "@rdfjs/environment": "^1", "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.1", "@rdfjs/term-set": "^2.0.1", "@vocabulary/sh": "^1.0.1", "clownface": "^2.0.0", diff --git a/package.json b/package.json index 39e8731..3fad3e1 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "@rdfjs/dataset": "^2", "@rdfjs/environment": "^1", "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.1", "@rdfjs/term-set": "^2.0.1", "@vocabulary/sh": "^1.0.1", "clownface": "^2.0.0", diff --git a/src/validators.js b/src/validators.js index 9343e79..ccd5c3a 100644 --- a/src/validators.js +++ b/src/validators.js @@ -133,15 +133,11 @@ function validateHasValueProperty(context, focusNode, valueNode, constraint) { function validateIn(context, focusNode, valueNode, constraint) { const { sh } = context.ns - const inNode = constraint.getParameterValue(sh.in) - if (!constraint.nodeSets) { - constraint.nodeSets = new TermMap() - } - let nodeSet = constraint.nodeSets.get(inNode) - if (!nodeSet) { - nodeSet = new NodeSet(rdfListToArray(context.$shapes.node(inNode))) - constraint.nodeSets.set(inNode, nodeSet) + if (!constraint.nodeSet) { + const inNode = constraint.getParameterValue(sh.in) + constraint.nodeSet = new NodeSet(rdfListToArray(context.$shapes.node(inNode))) } + const { nodeSet } = constraint return nodeSet.has(valueNode) } From d31bf54bcde86cdf223eb401515207a58a59220e Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Mon, 15 Apr 2024 15:20:03 +0200 Subject: [PATCH 3/4] fix: remove unused import --- src/validators.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/validators.js b/src/validators.js index ccd5c3a..ca376a5 100644 --- a/src/validators.js +++ b/src/validators.js @@ -1,6 +1,5 @@ import { validateTerm } from 'rdf-validate-datatype' import { fromRdf } from 'rdf-literal' -import TermMap from '@rdfjs/term-map' import NodeSet from './node-set.js' import { getPathObjects } from './property-path.js' import { isInstanceOf, rdfListToArray } from './dataset-utils.js' From 1329680589c6467cbc0d4d06b0123d2ed7965b65 Mon Sep 17 00:00:00 2001 From: Tomasz Pluskiewicz Date: Tue, 16 Apr 2024 10:12:43 +0200 Subject: [PATCH 4/4] Create olive-points-double.md --- .changeset/olive-points-double.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/olive-points-double.md diff --git a/.changeset/olive-points-double.md b/.changeset/olive-points-double.md new file mode 100644 index 0000000..13c95a8 --- /dev/null +++ b/.changeset/olive-points-double.md @@ -0,0 +1,5 @@ +--- +"rdf-validate-shacl": patch +--- + +Improve performance of validating `sh:in` constraints