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 diff --git a/package-lock.json b/package-lock.json index c503927..f8c1a58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "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", @@ -1284,9 +1284,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 +9749,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..3fad3e1 100644 --- a/package.json +++ b/package.json @@ -36,11 +36,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..ca376a5 100644 --- a/src/validators.js +++ b/src/validators.js @@ -132,9 +132,13 @@ function validateHasValueProperty(context, focusNode, valueNode, constraint) { function validateIn(context, focusNode, valueNode, constraint) { const { sh } = context.ns - const inNode = constraint.getParameterValue(sh.in) + if (!constraint.nodeSet) { + const inNode = constraint.getParameterValue(sh.in) + constraint.nodeSet = new NodeSet(rdfListToArray(context.$shapes.node(inNode))) + } + const { nodeSet } = constraint - return new NodeSet(rdfListToArray(context.$shapes.node(inNode))).has(valueNode) + return nodeSet.has(valueNode) } function validateLanguageIn(context, focusNode, valueNode, constraint) {