From a7c3681c4a6a611cb184b3120c838b2cb658658b Mon Sep 17 00:00:00 2001 From: Tomasz Pluskiewicz Date: Thu, 23 May 2024 10:41:30 +0200 Subject: [PATCH] build(deps): replace local `toCubeShape` with `barnard59-cube` (#1515) * build(deps): replace local `toCubeShape` with `barnard59-cube` * test(cli): remove redundant test * wip: update cube shape building * test: remove obsolete test case * Update shaggy-numbers-shave.md * Update shaggy-numbers-shave.md --- .changeset/shaggy-numbers-shave.md | 5 + .eslintrc.json | 5 - cli.Dockerfile | 1 - cli/lib/cube.ts | 7 +- cli/lib/toCubeShape/Cube.js | 59 ------------ cli/lib/toCubeShape/Dimension.js | 116 ------------------------ cli/lib/toCubeShape/index.js | 98 -------------------- cli/lib/toCubeShape/urlJoin.js | 12 --- cli/package.json | 2 +- cli/pipelines/main.ttl | 15 ++- cli/pipelines/to-filesystem.ttl | 2 +- cli/test/lib/commands/transform.test.ts | 28 ------ patches/rdf-parser-csvw+0.15.2.patch | 22 +++++ yarn.lock | 59 ++++++------ 14 files changed, 78 insertions(+), 353 deletions(-) create mode 100644 .changeset/shaggy-numbers-shave.md delete mode 100644 cli/lib/toCubeShape/Cube.js delete mode 100644 cli/lib/toCubeShape/Dimension.js delete mode 100644 cli/lib/toCubeShape/index.js delete mode 100644 cli/lib/toCubeShape/urlJoin.js create mode 100644 patches/rdf-parser-csvw+0.15.2.patch diff --git a/.changeset/shaggy-numbers-shave.md b/.changeset/shaggy-numbers-shave.md new file mode 100644 index 000000000..b67e3b1f9 --- /dev/null +++ b/.changeset/shaggy-numbers-shave.md @@ -0,0 +1,5 @@ +--- +"@cube-creator/cli": major +--- + +Using `barnard59-cube` for constructing the cube constraint shape (closes #1469, closes #1470) diff --git a/.eslintrc.json b/.eslintrc.json index 4bccbde8d..d69801c82 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,10 +16,5 @@ "no-unused-expressions": "off", "prefer-regex-literals": "off" } - }, { - "files": ["cli/lib/toCubeShape/*.js"], - "rules": { - "@typescript-eslint/no-var-requires": "off" - } }] } diff --git a/cli.Dockerfile b/cli.Dockerfile index 8b56f1cbf..f4796727c 100644 --- a/cli.Dockerfile +++ b/cli.Dockerfile @@ -33,7 +33,6 @@ WORKDIR /app ADD package.json yarn.lock ./ ADD ./cli/package.json ./cli/ ADD ./cli/shapes.ttl ./cli/ -ADD ./cli/lib/toCubeShape ./cli/lib/toCubeShape/ ADD ./cli/pipelines ./cli/pipelines/ ADD ./packages/core/package.json ./packages/core/ ADD ./packages/model/package.json ./packages/model/ diff --git a/cli/lib/cube.ts b/cli/lib/cube.ts index 2d1e2742e..14d2ca97b 100644 --- a/cli/lib/cube.ts +++ b/cli/lib/cube.ts @@ -1,4 +1,4 @@ -import type { DatasetCore, Quad, Term } from '@rdfjs/types' +import type { DataFactory, DatasetCore, Quad, Term } from '@rdfjs/types' import $rdf from 'rdf-ext' import { cc } from '@cube-creator/core/namespace' import clownface, { GraphPointer } from 'clownface' @@ -28,6 +28,11 @@ export function getCubeId({ ptr }: { ptr: GraphPointer }) { return ptr.out(cc.cube).term || '' } +export function getCubeShapeId(this: { rdf: DataFactory }, { ptr }: { ptr: GraphPointer }) { + const cubeId = getCubeId({ ptr }) + return this.rdf.namedNode(`${typeof cubeId === 'string' ? cubeId : cubeId.value}/shape/`) +} + export function expirePreviousVersions(this: Pick) { const timestamp = this.variables.get('timestamp') const baseCube = $rdf.namedNode(this.variables.get('namespace')) diff --git a/cli/lib/toCubeShape/Cube.js b/cli/lib/toCubeShape/Cube.js deleted file mode 100644 index 77475fdf4..000000000 --- a/cli/lib/toCubeShape/Cube.js +++ /dev/null @@ -1,59 +0,0 @@ -const clownface = require('clownface') -const rdf = require('rdf-ext') -const TermMap = require('@rdfjs/term-map') -const Dimension = require('./Dimension') -const ns = require('@tpluscode/rdf-ns-builders') -const { cube } = require('@cube-creator/core/namespace') - -class Cube { - constructor({ term, observationSet, shape }) { - this.term = term - this.observationSet = observationSet - this.shape = shape - this.dimensions = new TermMap() - } - - get messages() { - return [...this.dimensions.values()].flatMap(({ messages }) => messages) - } - - dimension({ predicate, object }, { inListThreshold }) { - let dimension = this.dimensions.get(predicate) - - if (!dimension) { - dimension = new Dimension({ predicate, object }, { inListThreshold }) - - this.dimensions.set(predicate, dimension) - } - - return dimension - } - - update({ predicate, object }, { inListThreshold }) { - this.dimension({ predicate, object }, { inListThreshold }).update({ predicate, object }) - } - - toDataset() { - const dataset = rdf.dataset() - - clownface({ dataset, term: this.term }) - .addOut(ns.rdf.type, cube.Cube) - .addOut(cube.observationSet, this.observationSet) - .addOut(cube.observationConstraint, this.shape) - - clownface({ dataset, term: this.observationSet }) - .addOut(ns.rdf.type, cube.ObservationSet) - - clownface({ dataset, term: this.shape }) - .addOut(ns.rdf.type, [ns.sh.NodeShape, cube.Constraint]) - .addOut(ns.sh.closed, true) - - for (const dimension of this.dimensions.values()) { - dataset.addAll(dimension.toDataset({ shape: this.shape })) - } - - return dataset - } -} - -module.exports = Cube diff --git a/cli/lib/toCubeShape/Dimension.js b/cli/lib/toCubeShape/Dimension.js deleted file mode 100644 index b99cd5fe2..000000000 --- a/cli/lib/toCubeShape/Dimension.js +++ /dev/null @@ -1,116 +0,0 @@ -const clownface = require('clownface') -const rdf = require('rdf-ext') -const TermSet = require('@rdfjs/term-set') -const ns = require('@tpluscode/rdf-ns-builders') - -const datatypeParsers = (datatype) => { - switch (datatype?.value) { - case ns.xsd.date.value: - case ns.xsd.dateTime.value: - return term => new Date(term.value) - case ns.xsd.double.value: - case ns.xsd.float.value: - case ns.xsd.decimal.value: - return term => parseFloat(term.value) - case ns.xsd.integer.value: - case ns.xsd.int.value: - case ns.xsd.gDay.value: - case ns.xsd.gMonth.value: - case ns.xsd.gYear.value: - return term => parseInt(term.value, 10) - } -} - -class Dimension { - constructor({ predicate, object }, { inListThreshold }) { - this.predicate = predicate - this.termType = object.termType - this.datatypes = new TermSet() - this.inListThreshold = inListThreshold - this.messages = [] - - if (object.datatype) { - this.datatypes.add(object.datatype) - } - - if (datatypeParsers(object.datatype)) { - const datatypeParser = datatypeParsers(object.datatype) - - const value = datatypeParser(object) - - this.min = object - this.minValue = value - this.max = object - this.maxValue = value - } else { - this.in = new TermSet() - } - } - - update({ object }) { - if (object.datatype) { - this.datatypes.add(object.datatype) - } - - if (datatypeParsers(object.datatype)) { - const datatypeParser = datatypeParsers(object.datatype) - - const value = datatypeParser(object) - - if (!this.minValue || value < this.minValue) { - this.min = object - this.minValue = value - } - - if (!this.maxValue || value > this.maxValue) { - this.max = object - this.maxValue = value - } - } - - if (this.in) { - this.in.add(object) - } - } - - toDataset({ shape }) { - const dataset = rdf.dataset() - - const ptr = clownface({ dataset }).blankNode() - - const nodeKind = this.termType === 'NamedNode' ? ns.sh.IRI : ns.sh.Literal - ptr - .addIn(ns.sh.property, shape) - .addOut(ns.sh.path, this.predicate) - .addOut(ns.sh.nodeKind, nodeKind) - .addOut(ns.sh.minCount, 1) - .addOut(ns.sh.maxCount, 1) - - const datatypes = [...this.datatypes] - if (this.datatypes.size > 1) { - ptr.addList(ns.sh.or, datatypes.map(dt => ptr.blankNode().addOut(ns.sh.datatype, dt))) - } else if (this.datatypes.size === 1 && nodeKind.equals(ns.sh.Literal)) { - ptr.addOut(ns.sh.datatype, datatypes[0]) - } - - if (!this.min && !this.max && this.in) { - if (this.in.size < this.inListThreshold) { - ptr.addList(ns.sh.in, [...this.in.values()]) - } else { - this.messages.push(`Dimension \`<${this.predicate.value}>\` contains ${this.in.size} unique values. At this size they will not be listed in cube's [code list](https://cube.link/#usage-of-code-lists) constraint. This may be a indication of a numeric or temporal dimension not mapped to its correct data type`) - } - } - - if (this.min) { - ptr.addOut(ns.sh.minInclusive, this.min) - } - - if (this.max) { - ptr.addOut(ns.sh.maxInclusive, this.max) - } - - return dataset - } -} - -module.exports = Dimension diff --git a/cli/lib/toCubeShape/index.js b/cli/lib/toCubeShape/index.js deleted file mode 100644 index e6056c952..000000000 --- a/cli/lib/toCubeShape/index.js +++ /dev/null @@ -1,98 +0,0 @@ -const clownface = require('clownface') -const TermMap = require('@rdfjs/term-map') -const TermSet = require('@rdfjs/term-set') -const rdf = require('rdf-ext') -const { Transform } = require('readable-stream') -const urlJoin = require('./urlJoin') -const Cube = require('./Cube') -const ns = require('@tpluscode/rdf-ns-builders') -const { cube } = require('@cube-creator/core/namespace') - -function defaultCube({ observationSet }) { - const observationSetIri = observationSet && observationSet.value - - if (!observationSetIri) { - return null - } - - const cubeIri = urlJoin(observationSetIri, '..') - - return rdf.namedNode(cubeIri) -} - -function defaultShape({ term }) { - const cubeIri = term && term.value - - if (!cubeIri) { - return null - } - - const shapeIri = urlJoin(cubeIri, 'shape/') - - return rdf.namedNode(shapeIri) -} - -class ToCubeShape extends Transform { - constructor({ cube, excludeValuesOf, inListThreshold } = {}) { - super({ objectMode: true }) - - this.options = { - cubes: new TermMap(), - cube: cube || defaultCube, - shape: defaultShape, - excludeValuesOf: new TermSet(excludeValuesOf ? excludeValuesOf.map(v => rdf.namedNode(v)) : []), - inListThreshold, - } - } - - _transform(chunk, encoding, callback) { - const dataset = rdf.dataset([...chunk]) - - const context = { - dataset, - ptr: clownface({ dataset }).has(ns.rdf.type, cube.Observation), - } - - context.observationSet = context.ptr.in(cube.observation).term - context.term = this.options.cube(context) - context.shape = this.options.shape(context) - context.cube = this.options.cubes.get(context.term) - - if (!context.cube) { - context.cube = new Cube({ - term: context.term, - observationSet: context.observationSet, - shape: context.shape, - }) - - this.options.cubes.set(context.term, context.cube) - } - - for (const quad of context.dataset.match(context.ptr.term)) { - if (!this.options.excludeValuesOf.has(quad.predicate)) { - context.cube.update(quad, { inListThreshold: this.options.inListThreshold }) - } - } - - callback(null, context.dataset.toArray()) - } - - _flush(callback) { - for (const cube of this.options.cubes.values()) { - this.push(cube.toDataset()) - for (const message of cube.messages) { - this.emit('message', message) - } - } - - callback() - } -} - -function toCubeShape({ cube, excludeValuesOf, inListThreshold = 100 } = {}) { - const toCubeShape = new ToCubeShape({ cube, excludeValuesOf, inListThreshold }) - toCubeShape.on('message', message => this.variables.get('messages').push(message)) - return toCubeShape -} - -module.exports = toCubeShape diff --git a/cli/lib/toCubeShape/urlJoin.js b/cli/lib/toCubeShape/urlJoin.js deleted file mode 100644 index 63821eb3c..000000000 --- a/cli/lib/toCubeShape/urlJoin.js +++ /dev/null @@ -1,12 +0,0 @@ -const { join } = require('path') -const { URL } = require('url') - -function urlJoin(base, part) { - const url = new URL(base) - - url.pathname = join(url.pathname, part) - - return url.toString() -} - -module.exports = urlJoin diff --git a/cli/package.json b/cli/package.json index c853c3733..0ade3df38 100644 --- a/cli/package.json +++ b/cli/package.json @@ -44,7 +44,7 @@ "aws-sdk": "^2.559.0", "barnard59": "^5.0.2", "barnard59-base": "^2.4.2", - "barnard59-cube": "^1.4.3", + "barnard59-cube": "^1.4.6", "barnard59-formats": "^2.1.1", "barnard59-graph-store": "^5.1.2", "barnard59-http": "^2.0.0", diff --git a/cli/pipelines/main.ttl b/cli/pipelines/main.ttl index a72d3474a..0105ebefd 100644 --- a/cli/pipelines/main.ttl +++ b/cli/pipelines/main.ttl @@ -4,6 +4,14 @@ @prefix rdf: . <#Main> a :Pipeline ; + :variables + [ + :variable + [ + :name "executionUrl" ; + :required false + ] ; + ] ; :steps [ :stepList ( <#loadMetadata> <#doTransform> <#validate> <#countOutputQuads> <#StreamOutput> ) ] . <#StreamOutput> @@ -172,8 +180,8 @@ ] . <#toCubeShape> a :Step; - code:implementedBy [ a code:EcmaScript; - code:link + code:implementedBy [ a code:EcmaScriptModule; + code:link ]; code:arguments [ code:name "excludeValuesOf"; @@ -185,6 +193,9 @@ ] , [ code:name "cube" ; code:value [ a code:EcmaScript ; code:link ] + ] , [ + code:name "shape" ; + code:value [ a code:EcmaScript ; code:link ] ] . <#flatten> a :Step; diff --git a/cli/pipelines/to-filesystem.ttl b/cli/pipelines/to-filesystem.ttl index b12d0eae6..3e83c400f 100644 --- a/cli/pipelines/to-filesystem.ttl +++ b/cli/pipelines/to-filesystem.ttl @@ -6,7 +6,7 @@ :steps [ :stepList ( _:serialize _:save ) ] ; :variables [ :variable [ a :Variable ; :name "targetFile" ; - :value "./output/transformed.nt" ] ] . + :value "./output/transformed.nq" ] ] . <#setGraph> a :Step ; diff --git a/cli/test/lib/commands/transform.test.ts b/cli/test/lib/commands/transform.test.ts index dde44c070..87eb1d26b 100644 --- a/cli/test/lib/commands/transform.test.ts +++ b/cli/test/lib/commands/transform.test.ts @@ -61,18 +61,6 @@ describe('@cube-creator/cli/lib/commands/transform', function () { await expect(hasPreviousErrors).to.eventually.be.false }) - it('adds no sh:in to large dimension', async () => { - const hasInList = ASK` - ${cubeShape} ${sh.property} ?property . - ?property ${sh.path} ${cubeNs.station} . - ?property ${sh.in} ?in - ` - .FROM(expectedGraph) - .execute(ccClients.parsingClient.query) - - await expect(hasInList).to.eventually.be.false - }) - it('does not add sh:in for dimension of literals', async () => { const hasInList = ASK` ${cubeShape} ${sh.property} ?property . @@ -281,22 +269,6 @@ describe('@cube-creator/cli/lib/commands/transform', function () { expect(propShape.has(sh.maxInclusive).terms).to.have.length(1) }) - it('does not emit sh:in for min/max dimensions with cube:Undefined value', async () => { - const dataset = await $rdf.dataset().import(await DESCRIBE`?property` - .FROM(expectedGraph) - .WHERE` - ${sh.property} ?property . - ?property ${sh.path} ${cubeNs('dimension/limitvalue')} . - ` - .execute(ccClients.streamClient.query, { base: cubeBase })) - - const propShape = clownface({ dataset }).has(sh.path) - - expect(propShape.has(sh.in).terms).to.have.length(0) - expect(propShape.has(sh.minInclusive).terms).to.have.length(1) - expect(propShape.has(sh.maxInclusive).terms).to.have.length(1) - }) - it('includes cube:Undefined in property shape sh:in of mapped columns', async () => { const dataset = await $rdf.dataset().import(await DESCRIBE`?property` .FROM(expectedGraph) diff --git a/patches/rdf-parser-csvw+0.15.2.patch b/patches/rdf-parser-csvw+0.15.2.patch new file mode 100644 index 000000000..aec6e84ab --- /dev/null +++ b/patches/rdf-parser-csvw+0.15.2.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/rdf-parser-csvw/lib/metadata/TableSchema.js b/node_modules/rdf-parser-csvw/lib/metadata/TableSchema.js +index 141cf94..9c802cd 100644 +--- a/node_modules/rdf-parser-csvw/lib/metadata/TableSchema.js ++++ b/node_modules/rdf-parser-csvw/lib/metadata/TableSchema.js +@@ -93,7 +93,7 @@ class TableSchema { + } + + if (datatype.termType === 'NamedNode') { +- return { base: datatype.value } ++ return { base: datatype } + } + + const base = RdfUtils.findValue(this.dataset, datatype, this.ns.base) +@@ -205,7 +205,7 @@ class TableSchema { + } + + defaultDatatype () { +- return { base: this.ns.string.value } ++ return { base: this.ns.string } + } + } + diff --git a/yarn.lock b/yarn.lock index 62fe4c4fb..ada4d8e3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4837,7 +4837,7 @@ dependencies: "@rdfjs/environment" "^1.0.0" -"@zazuko/env-node@^2.1.1": +"@zazuko/env-node@^2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@zazuko/env-node/-/env-node-2.1.3.tgz#ff378ef5dbc4b917687d6b17e5ce5e8398537422" integrity sha512-vaYbkMe0DsvpWEWBQpWPJ0mEYiFhwDGw8Caso1MmASUbHY/gH2tAA6BDv4LsCK/BrU4gWftUWz6uEsRP3FmdHA== @@ -5413,7 +5413,7 @@ barnard59-base@^2.0.1, barnard59-base@^2.4.1, barnard59-base@^2.4.2: readable-to-readable "^0.1.3" through2 "^4.0.2" -barnard59-core@6.0.0: +barnard59-core@6.0.0, barnard59-core@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/barnard59-core/-/barnard59-core-6.0.0.tgz#f845f8fc7f73c15eaa215c0dddef6fa3b63c2490" integrity sha512-7gEfLnCB+DlfoknpRrolYOc8M8hBa/O+HKuWQvT1kAxaRZSLTg3fUxQJ6AOi+KGS7eANiL6ZQXO+cqE+IAcoTQ== @@ -5431,16 +5431,16 @@ barnard59-core@6.0.0: untildify "^5.0.0" winston "^3.3.3" -barnard59-cube@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/barnard59-cube/-/barnard59-cube-1.4.3.tgz#33ae18f922045a16ea0a157596f67defe45414de" - integrity sha512-klGYH16Ssr4jZBwNRdrhMk/Cu/ByCI0KQENr9KWkBtwXhQRcC4x9WraaG4d17pumPw4OHCVhO5lc9EINm6L6Hw== +barnard59-cube@^1.4.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/barnard59-cube/-/barnard59-cube-1.4.6.tgz#f54a76fa316b081d92941f5ca0ae358359d956bd" + integrity sha512-IashBSLPUHeYIjMmWcogu78/Z6QFxd+hoia3a6DjjcmgapyalC9BDe+iaAeoA5O5jCBlI35MQrCkA6HUndfElw== dependencies: barnard59-base "^2.4.2" - barnard59-formats "^2.0.0" + barnard59-formats "^2.1.2" barnard59-http "^2.0.0" barnard59-rdf "^3.4.0" - barnard59-shacl "^1.4.4" + barnard59-shacl "^1.4.6" barnard59-sparql "^2.3.0" external-merge-sort "^0.1.4" lodash "^4.17.21" @@ -5448,18 +5448,18 @@ barnard59-cube@^1.4.3: readable-stream "3 - 4" through2 "^4.0.2" -barnard59-env@1.2.4, barnard59-env@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/barnard59-env/-/barnard59-env-1.2.4.tgz#abacd6947b7c4fd38ab9a23d913efd6533489589" - integrity sha512-Y1Az1wxSh4gJS7t3a1HR4zmk8A+uTKIkuhtux69x6mBG9Npn6nUDjCKIkqMt7dKuJjwSKA1nwMnmVRgHM7fSqw== +barnard59-env@1.2.5, barnard59-env@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/barnard59-env/-/barnard59-env-1.2.5.tgz#4140a2992d4645794c9a4769a8664f73280176d3" + integrity sha512-gY73vHlPcgO+iJ84r/L2MsxkPQLOhHEb32XgDN3QEIbe3srHE7K4ytZkuuxQBlUE72ksNT+S7vDhvEggGsa8Eg== dependencies: - "@zazuko/env-node" "^2.1.1" + "@zazuko/env-node" "^2.1.3" "@zazuko/vocabulary-extras-builders" "^1.1.3" -barnard59-formats@^2.0.0, barnard59-formats@^2.1.0, barnard59-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/barnard59-formats/-/barnard59-formats-2.1.1.tgz#cdee48d4c6c226d387af89ab242b6d0c1ae759f8" - integrity sha512-EnrQenB/MzDPvEvkcg6P2PS1BwTKpgtgwi2T7U5MCNThFEaVwhnngmrZ3RDQobbyIgM0IuFLPS57vWN1iBrl3A== +barnard59-formats@^2.1.1, barnard59-formats@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/barnard59-formats/-/barnard59-formats-2.1.2.tgz#3a362af7faab12aefb11c27cbad50d06e486215a" + integrity sha512-hbayQjY8thhJcl3G81fWwpmktYEck/vNNNr7EuDpztq773mLBQSeTHIGNy+xs1asPTpRtEKBmYjLxwbrtYIC9g== dependencies: "@opentelemetry/api" "^1.0.1" "@rdfjs/parser-jsonld" "^2.1.0" @@ -5468,6 +5468,7 @@ barnard59-formats@^2.0.0, barnard59-formats@^2.1.0, barnard59-formats@^2.1.1: "@rdfjs/serializer-ntriples" "^2.0.0" "@rdfjs/sink-to-duplex" "^1.0.0" barnard59-base "^2.0.1" + is-stream "^3.0.0" rdf-parser-csvw "^0.15.0" rdf-parser-csvw-xlsx "^0.1.0" rdfxml-streaming-parser "^1.2.0" @@ -5514,18 +5515,18 @@ barnard59-rdf@^3.0.0, barnard59-rdf@^3.4.0: rdf-transform-triple-to-quad "^2.0.0" readable-stream "^3.6.0" -barnard59-shacl@^1.4.4, barnard59-shacl@^1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/barnard59-shacl/-/barnard59-shacl-1.4.5.tgz#a1431b99b0560e2a6497ccba20e0dc8143d47afc" - integrity sha512-xXvN7U4AQnSDhX5+StS4wtmbDt78Nza+v0FnQqLft666nVgOGVi/cAORGpdTzZc7mhkgxMu+4HXIrTv9+sj+LA== +barnard59-shacl@^1.4.5, barnard59-shacl@^1.4.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/barnard59-shacl/-/barnard59-shacl-1.4.6.tgz#1b1afc8845e9bd98dedd69964f36c1ae0b5cc886" + integrity sha512-sNq9gGUPEUGcXma1seRU1qtwiiqa3i0jDo6kUsylcACZa8bbxL3TvDg99S0gZnL9XZa8wE6pSQS8glyLSYN01w== dependencies: "@rdfjs/fetch" "^3.0.0" "@rdfjs/to-ntriples" "^3.0.0" barnard59-base "^2.4.2" - barnard59-formats "^2.1.0" + barnard59-formats "^2.1.1" barnard59-rdf "^3.4.0" is-stream "^3.0.0" - rdf-validate-shacl "^0.5.4" + rdf-validate-shacl "^0.5.5" readable-stream "3 - 4" barnard59-sparql@^2.3.0: @@ -5538,10 +5539,10 @@ barnard59-sparql@^2.3.0: readable-stream "^4.5.2" sparql-http-client "^3.0.0" -barnard59@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/barnard59/-/barnard59-5.0.1.tgz#fd868dfd222fe7f7f3649e14b6bd800e138ded7f" - integrity sha512-q6FWovuNQ+Wjd9uGbEU+RgC5E/l7RVq7uHJG78yDl3H7ylcu9km1eAjL4KJ2O8R+vdSYT2WY13esCbMt6aKnHQ== +barnard59@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/barnard59/-/barnard59-5.0.2.tgz#e0dffa8f296a1535f1510136490b9134b8a3b7d2" + integrity sha512-b0fYWGKnbt25g71/d7KPsNGi+5DZZTVYAguI1rNP5BKrzJyHMd6LHadeg9uoKUYy10OQKyQ0ONNvU9M3wA9bQg== dependencies: "@opentelemetry/api" "^1.0.0" "@opentelemetry/exporter-collector" "^0.24.0" @@ -5553,7 +5554,7 @@ barnard59@^5.0.1: "@opentelemetry/tracing" "^0.24.0" "@rdfjs/namespace" "^2.0.0" barnard59-core "6.0.0" - barnard59-env "1.2.4" + barnard59-env "1.2.5" commander "^11.0.0" find-up "^7.0.0" is-graph-pointer "^2.1.0" @@ -12685,7 +12686,7 @@ rdf-validate-shacl@^0.4.0, rdf-validate-shacl@^0.4.3, rdf-validate-shacl@^0.4.4, rdf-literal "^1.3.0" rdf-validate-datatype "^0.1.5" -rdf-validate-shacl@^0.5.4: +rdf-validate-shacl@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/rdf-validate-shacl/-/rdf-validate-shacl-0.5.5.tgz#5ccb2615d8e3268c92dff5280f4b9959e8173c1e" integrity sha512-oN6LQh7bzdQEkRMPCW332hxkRH9YANJuylcId41mivJar68vjk8Q4yAjAELxwrZsY2FsGWH4r9x5sPGqKMCUPg==