From 0de98dbaa8127098eb8e3fddbd50048afb856423 Mon Sep 17 00:00:00 2001 From: Giacomo Citi Date: Sat, 13 Apr 2024 16:32:35 +0200 Subject: [PATCH] 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) {