@oml/owl 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/owl/owl-shacl.js +126 -46
- package/out/owl/owl-shacl.js.map +1 -1
- package/package.json +3 -3
- package/src/owl/owl-shacl.ts +153 -49
- package/src/shacl-engine.d.ts +13 -0
package/out/owl/owl-shacl.js
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
|
-
import { Parser as N3Parser, Store as N3Store } from 'n3';
|
|
3
|
-
import
|
|
2
|
+
import { DataFactory, Parser as N3Parser, Store as N3Store } from 'n3';
|
|
3
|
+
import { Validator as ShaclValidator } from 'shacl-engine';
|
|
4
|
+
import { targetResolvers as shaclSparqlTargetResolvers, validations as shaclSparqlValidations } from 'shacl-engine/sparql.js';
|
|
4
5
|
export const ShaclValidateRequest = 'oml/table-editor/validate';
|
|
6
|
+
const SHACL_FACTORY = {
|
|
7
|
+
...DataFactory,
|
|
8
|
+
literal: (value, languageOrDatatype) => languageOrDatatype === undefined || languageOrDatatype === null
|
|
9
|
+
? DataFactory.literal(value)
|
|
10
|
+
: DataFactory.literal(value, languageOrDatatype),
|
|
11
|
+
dataset: () => new N3Store(),
|
|
12
|
+
};
|
|
13
|
+
const RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
|
|
14
|
+
const SH_PROPERTY_SHAPE = 'http://www.w3.org/ns/shacl#PropertyShape';
|
|
15
|
+
const SH_DEACTIVATED = 'http://www.w3.org/ns/shacl#deactivated';
|
|
16
|
+
const SH_NAME = 'http://www.w3.org/ns/shacl#name';
|
|
17
|
+
const SH_PATH = 'http://www.w3.org/ns/shacl#path';
|
|
18
|
+
const SH_PROPERTY = 'http://www.w3.org/ns/shacl#property';
|
|
19
|
+
const SH_TARGET_CLASS = 'http://www.w3.org/ns/shacl#targetClass';
|
|
20
|
+
const SH_TARGET_NODE = 'http://www.w3.org/ns/shacl#targetNode';
|
|
5
21
|
export class ShaclService {
|
|
6
22
|
constructor(sparqlService, prepareContext, resolveContextIri) {
|
|
7
23
|
this.sparqlService = sparqlService;
|
|
@@ -57,18 +73,22 @@ export class ShaclService {
|
|
|
57
73
|
const propertyNameByPath = collectShaclPropertyDisplayNames(shapeQuads);
|
|
58
74
|
const shapesDataset = new N3Store(shapeQuads);
|
|
59
75
|
const dataDataset = new N3Store(constructResult.quads);
|
|
60
|
-
const validator = new
|
|
61
|
-
|
|
76
|
+
const validator = new ShaclValidator(shapesDataset, {
|
|
77
|
+
factory: SHACL_FACTORY,
|
|
78
|
+
targetResolvers: shaclSparqlTargetResolvers,
|
|
79
|
+
validations: shaclSparqlValidations,
|
|
80
|
+
});
|
|
81
|
+
const report = await validator.validate({ dataset: dataDataset });
|
|
62
82
|
const rawResults = Array.isArray(report?.results) ? report.results : [];
|
|
63
83
|
const issues = rawResults.map((result) => {
|
|
64
|
-
const path =
|
|
84
|
+
const path = formatValidationPath(result?.path);
|
|
65
85
|
return {
|
|
66
86
|
message: formatValidationField(result?.message) || 'Validation issue.',
|
|
67
|
-
focusNode: formatValidationField(result?.focusNode),
|
|
87
|
+
focusNode: formatValidationField(result?.focusNode?.term ?? result?.focusNode),
|
|
68
88
|
path,
|
|
69
89
|
propertyName: path ? propertyNameByPath.get(path) : undefined,
|
|
70
90
|
severity: formatValidationField(result?.severity),
|
|
71
|
-
source: formatValidationField(result?.
|
|
91
|
+
source: formatValidationField(result?.constraintComponent ?? result?.shape?.ptr?.term),
|
|
72
92
|
};
|
|
73
93
|
});
|
|
74
94
|
return {
|
|
@@ -108,46 +128,21 @@ export function registerShaclValidationRequests(connection, oml) {
|
|
|
108
128
|
});
|
|
109
129
|
}
|
|
110
130
|
export function deriveSelectQueryFromShacl(shaclSource, graphIri) {
|
|
111
|
-
let
|
|
131
|
+
let shapeQuads;
|
|
112
132
|
try {
|
|
113
133
|
const parser = new N3Parser({ format: 'text/turtle' });
|
|
114
|
-
|
|
115
|
-
shapesStore = new N3Store(quads);
|
|
134
|
+
shapeQuads = parser.parse(shaclSource);
|
|
116
135
|
}
|
|
117
136
|
catch {
|
|
118
137
|
return undefined;
|
|
119
138
|
}
|
|
120
|
-
const
|
|
121
|
-
const { sh } = validator.ns;
|
|
122
|
-
const shapesGraph = validator.shapesGraph;
|
|
123
|
-
const nodeShape = shapesGraph.shapesWithTarget.find((shape) => !shape.isPropertyShape && !shape.deactivated);
|
|
139
|
+
const nodeShape = parsePrimaryNodeShape(shapeQuads);
|
|
124
140
|
if (!nodeShape) {
|
|
125
141
|
return undefined;
|
|
126
142
|
}
|
|
127
|
-
const targetClassTerms = nodeShape.shapeNodePointer.out(sh.targetClass).terms;
|
|
128
|
-
const targetClasses = targetClassTerms.filter((term) => term.termType === 'NamedNode');
|
|
129
|
-
const targetNodes = nodeShape.shapeNodePointer.out(sh.targetNode).terms;
|
|
130
|
-
if (targetClasses.length === 0 && targetNodes.length === 0) {
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
const propertyShapeTerms = nodeShape.shapeNodePointer.out(sh.property).terms;
|
|
134
|
-
const columns = [];
|
|
135
|
-
for (const propertyShapeTerm of propertyShapeTerms) {
|
|
136
|
-
const propertyShape = shapesGraph.getShape(propertyShapeTerm);
|
|
137
|
-
if (propertyShape.deactivated) {
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
const path = propertyShape.pathObject;
|
|
141
|
-
if (!isRdfTerm(path) || path.termType !== 'NamedNode') {
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
const nameTerm = propertyShape.shapeNodePointer.out(sh.name).term;
|
|
145
|
-
const name = nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined;
|
|
146
|
-
columns.push({ path, name });
|
|
147
|
-
}
|
|
148
143
|
const usedNames = new Set(['focus']);
|
|
149
|
-
const variables = columns.map((column) => {
|
|
150
|
-
const base = normalizeSparqlVariableName(column.name || localName(column.path
|
|
144
|
+
const variables = nodeShape.columns.map((column) => {
|
|
145
|
+
const base = normalizeSparqlVariableName(column.name || localName(column.path) || 'value');
|
|
151
146
|
const unique = uniqueVariableName(base, usedNames);
|
|
152
147
|
usedNames.add(unique);
|
|
153
148
|
const sourceVariable = uniqueVariableName(`__${unique}`, usedNames);
|
|
@@ -165,17 +160,17 @@ export function deriveSelectQueryFromShacl(shaclSource, graphIri) {
|
|
|
165
160
|
].join(' ');
|
|
166
161
|
const whereLines = [];
|
|
167
162
|
const graphLines = [];
|
|
168
|
-
if (targetClasses.length > 0) {
|
|
169
|
-
const values = targetClasses.map((term) => `<${term.value}>`).join(' ');
|
|
163
|
+
if (nodeShape.targetClasses.length > 0) {
|
|
164
|
+
const values = nodeShape.targetClasses.map((term) => `<${term.value}>`).join(' ');
|
|
170
165
|
whereLines.push(` VALUES ?__targetClass { ${values} }`);
|
|
171
166
|
graphLines.push(' ?focus a ?__targetClass .');
|
|
172
167
|
}
|
|
173
|
-
if (targetNodes.length > 0) {
|
|
174
|
-
const values = targetNodes.map((term) => termToSparql(term)).join(' ');
|
|
168
|
+
if (nodeShape.targetNodes.length > 0) {
|
|
169
|
+
const values = nodeShape.targetNodes.map((term) => termToSparql(term)).join(' ');
|
|
175
170
|
whereLines.push(` VALUES ?focus { ${values} }`);
|
|
176
171
|
}
|
|
177
172
|
for (const entry of variables) {
|
|
178
|
-
graphLines.push(` OPTIONAL { ?focus <${entry.path
|
|
173
|
+
graphLines.push(` OPTIONAL { ?focus <${entry.path}> ?${entry.sourceVariable} . }`);
|
|
179
174
|
}
|
|
180
175
|
whereLines.push(` GRAPH <${escapeIriForSparql(graphIri)}> {`);
|
|
181
176
|
whereLines.push(...graphLines);
|
|
@@ -214,6 +209,80 @@ function buildValidationConstructQuery(contextIri) {
|
|
|
214
209
|
'}',
|
|
215
210
|
].join('\n');
|
|
216
211
|
}
|
|
212
|
+
function parsePrimaryNodeShape(shapeQuads) {
|
|
213
|
+
const shapesStore = new N3Store([...shapeQuads]);
|
|
214
|
+
const targetSubjects = collectSubjectsWithTargets(shapeQuads);
|
|
215
|
+
for (const shapeTerm of targetSubjects) {
|
|
216
|
+
if (isDeactivatedShape(shapesStore, shapeTerm) || isPropertyShape(shapesStore, shapeTerm)) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const targetClasses = getObjects(shapesStore, shapeTerm, SH_TARGET_CLASS)
|
|
220
|
+
.filter((term) => term.termType === 'NamedNode');
|
|
221
|
+
const targetNodes = getObjects(shapesStore, shapeTerm, SH_TARGET_NODE);
|
|
222
|
+
if (targetClasses.length === 0 && targetNodes.length === 0) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const columns = getObjects(shapesStore, shapeTerm, SH_PROPERTY)
|
|
226
|
+
.filter((term) => term.termType === 'NamedNode' || term.termType === 'BlankNode')
|
|
227
|
+
.filter((term) => !isDeactivatedShape(shapesStore, term))
|
|
228
|
+
.map((term) => {
|
|
229
|
+
const path = getFirstObject(shapesStore, term, SH_PATH);
|
|
230
|
+
if (!path || path.termType !== 'NamedNode') {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
const nameTerm = getFirstObject(shapesStore, term, SH_NAME);
|
|
234
|
+
return {
|
|
235
|
+
path: path.value,
|
|
236
|
+
name: nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined,
|
|
237
|
+
};
|
|
238
|
+
})
|
|
239
|
+
.filter((column) => Boolean(column));
|
|
240
|
+
return {
|
|
241
|
+
targetClasses,
|
|
242
|
+
targetNodes,
|
|
243
|
+
columns,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
function collectSubjectsWithTargets(shapeQuads) {
|
|
249
|
+
const seen = new Set();
|
|
250
|
+
const subjects = [];
|
|
251
|
+
for (const quad of shapeQuads) {
|
|
252
|
+
if (quad.predicate.value !== SH_TARGET_CLASS && quad.predicate.value !== SH_TARGET_NODE) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const key = termKey(quad.subject);
|
|
256
|
+
if (!key || seen.has(key)) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
seen.add(key);
|
|
260
|
+
subjects.push(quad.subject);
|
|
261
|
+
}
|
|
262
|
+
return subjects;
|
|
263
|
+
}
|
|
264
|
+
function isPropertyShape(store, subject) {
|
|
265
|
+
return store.countQuads(subject, DataFactory.namedNode(RDF_TYPE), DataFactory.namedNode(SH_PROPERTY_SHAPE), null) > 0
|
|
266
|
+
|| store.countQuads(subject, DataFactory.namedNode(SH_PATH), null, null) > 0;
|
|
267
|
+
}
|
|
268
|
+
function isDeactivatedShape(store, subject) {
|
|
269
|
+
return getObjects(store, subject, SH_DEACTIVATED).some((term) => isTruthyLiteral(term));
|
|
270
|
+
}
|
|
271
|
+
function isTruthyLiteral(term) {
|
|
272
|
+
return term.termType === 'Literal' && (term.value === 'true' || term.value === '1');
|
|
273
|
+
}
|
|
274
|
+
function getObjects(store, subject, predicateIri) {
|
|
275
|
+
return [...store.getQuads(subject, DataFactory.namedNode(predicateIri), null, null)].map((quad) => quad.object);
|
|
276
|
+
}
|
|
277
|
+
function getFirstObject(store, subject, predicateIri) {
|
|
278
|
+
return getObjects(store, subject, predicateIri)[0];
|
|
279
|
+
}
|
|
280
|
+
function termKey(term) {
|
|
281
|
+
if (term.termType !== 'NamedNode' && term.termType !== 'BlankNode') {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
return `${term.termType}:${term.value}`;
|
|
285
|
+
}
|
|
217
286
|
function formatValidationField(value) {
|
|
218
287
|
if (value === undefined || value === null)
|
|
219
288
|
return undefined;
|
|
@@ -227,12 +296,26 @@ function formatValidationField(value) {
|
|
|
227
296
|
return value;
|
|
228
297
|
if (typeof value === 'number' || typeof value === 'boolean')
|
|
229
298
|
return String(value);
|
|
230
|
-
if (typeof value === 'object' && 'value' in value) {
|
|
299
|
+
if (typeof value === 'object' && value !== null && 'value' in value) {
|
|
231
300
|
const raw = value.value;
|
|
232
301
|
return typeof raw === 'string' ? raw : String(raw);
|
|
233
302
|
}
|
|
234
303
|
return String(value);
|
|
235
304
|
}
|
|
305
|
+
function formatValidationPath(path) {
|
|
306
|
+
if (Array.isArray(path) && path.length === 1) {
|
|
307
|
+
const [step] = path;
|
|
308
|
+
if (step.quantifier === 'one'
|
|
309
|
+
&& step.start === 'subject'
|
|
310
|
+
&& step.end === 'object'
|
|
311
|
+
&& Array.isArray(step.predicates)
|
|
312
|
+
&& step.predicates.length === 1
|
|
313
|
+
&& typeof step.predicates[0]?.value === 'string') {
|
|
314
|
+
return step.predicates[0].value;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return formatValidationField(path);
|
|
318
|
+
}
|
|
236
319
|
function collectShaclPropertyDisplayNames(shapeQuads) {
|
|
237
320
|
const SH_PATH = 'http://www.w3.org/ns/shacl#path';
|
|
238
321
|
const SH_NAME = 'http://www.w3.org/ns/shacl#name';
|
|
@@ -328,9 +411,6 @@ function localName(iri) {
|
|
|
328
411
|
}
|
|
329
412
|
return iri;
|
|
330
413
|
}
|
|
331
|
-
function isRdfTerm(value) {
|
|
332
|
-
return typeof value === 'object' && value !== null && 'termType' in value;
|
|
333
|
-
}
|
|
334
414
|
function escapeIriForSparql(iri) {
|
|
335
415
|
return iri.replace(/>/g, '\\>');
|
|
336
416
|
}
|
package/out/owl/owl-shacl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owl-shacl.js","sourceRoot":"","sources":["../../src/owl/owl-shacl.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"owl-shacl.js","sourceRoot":"","sources":["../../src/owl/owl-shacl.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oml/owl",
|
|
3
3
|
"description": "The semantic web specific package",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=20.10.0",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"test": "vitest run"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@oml/language": "0.7.0",
|
|
37
36
|
"@comunica/query-sparql": "^5.1.3",
|
|
37
|
+
"@oml/language": "0.8.0",
|
|
38
38
|
"langium": "^4.2.1",
|
|
39
39
|
"n3": "^2.0.1",
|
|
40
|
-
"
|
|
40
|
+
"shacl-engine": "^1.1.0",
|
|
41
41
|
"yaml": "^2.8.2"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
package/src/owl/owl-shacl.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
2
|
|
|
3
3
|
import type { Quad, Term } from '@rdfjs/types';
|
|
4
|
-
import { Parser as N3Parser, Store as N3Store } from 'n3';
|
|
5
|
-
import
|
|
4
|
+
import { DataFactory, Parser as N3Parser, Store as N3Store } from 'n3';
|
|
5
|
+
import { Validator as ShaclValidator } from 'shacl-engine';
|
|
6
|
+
import { targetResolvers as shaclSparqlTargetResolvers, validations as shaclSparqlValidations } from 'shacl-engine/sparql.js';
|
|
6
7
|
import type {
|
|
7
8
|
OwlShaclService,
|
|
8
9
|
OwlShaclValidationIssue,
|
|
@@ -26,10 +27,38 @@ export type DerivedShaclSelectQuery = {
|
|
|
26
27
|
columnLabels: Map<string, string>;
|
|
27
28
|
};
|
|
28
29
|
|
|
30
|
+
type ParsedShaclColumn = {
|
|
31
|
+
path: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type ParsedShaclNodeShape = {
|
|
36
|
+
targetClasses: Term[];
|
|
37
|
+
targetNodes: Term[];
|
|
38
|
+
columns: ParsedShaclColumn[];
|
|
39
|
+
};
|
|
40
|
+
|
|
29
41
|
type ConnectionLike = {
|
|
30
42
|
onRequest: (type: string, handler: (params: ShaclValidateParams) => ShaclValidateResult | Promise<ShaclValidateResult>) => void;
|
|
31
43
|
};
|
|
32
44
|
|
|
45
|
+
const SHACL_FACTORY = {
|
|
46
|
+
...DataFactory,
|
|
47
|
+
literal: (value: string, languageOrDatatype?: string | Term | null) =>
|
|
48
|
+
languageOrDatatype === undefined || languageOrDatatype === null
|
|
49
|
+
? DataFactory.literal(value)
|
|
50
|
+
: DataFactory.literal(value, languageOrDatatype as any),
|
|
51
|
+
dataset: (): N3Store => new N3Store(),
|
|
52
|
+
};
|
|
53
|
+
const RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
|
|
54
|
+
const SH_PROPERTY_SHAPE = 'http://www.w3.org/ns/shacl#PropertyShape';
|
|
55
|
+
const SH_DEACTIVATED = 'http://www.w3.org/ns/shacl#deactivated';
|
|
56
|
+
const SH_NAME = 'http://www.w3.org/ns/shacl#name';
|
|
57
|
+
const SH_PATH = 'http://www.w3.org/ns/shacl#path';
|
|
58
|
+
const SH_PROPERTY = 'http://www.w3.org/ns/shacl#property';
|
|
59
|
+
const SH_TARGET_CLASS = 'http://www.w3.org/ns/shacl#targetClass';
|
|
60
|
+
const SH_TARGET_NODE = 'http://www.w3.org/ns/shacl#targetNode';
|
|
61
|
+
|
|
33
62
|
export class ShaclService implements OwlShaclService {
|
|
34
63
|
constructor(
|
|
35
64
|
private readonly sparqlService: OwlSparqlService,
|
|
@@ -89,18 +118,22 @@ export class ShaclService implements OwlShaclService {
|
|
|
89
118
|
const propertyNameByPath = collectShaclPropertyDisplayNames(shapeQuads);
|
|
90
119
|
const shapesDataset = new N3Store(shapeQuads);
|
|
91
120
|
const dataDataset = new N3Store(constructResult.quads);
|
|
92
|
-
const validator = new
|
|
93
|
-
|
|
121
|
+
const validator = new ShaclValidator(shapesDataset, {
|
|
122
|
+
factory: SHACL_FACTORY,
|
|
123
|
+
targetResolvers: shaclSparqlTargetResolvers,
|
|
124
|
+
validations: shaclSparqlValidations,
|
|
125
|
+
});
|
|
126
|
+
const report = await validator.validate({ dataset: dataDataset });
|
|
94
127
|
const rawResults = Array.isArray((report as any)?.results) ? (report as any).results : [];
|
|
95
128
|
const issues: ShaclValidationIssue[] = rawResults.map((result: any) => {
|
|
96
|
-
const path =
|
|
129
|
+
const path = formatValidationPath(result?.path);
|
|
97
130
|
return {
|
|
98
131
|
message: formatValidationField(result?.message) || 'Validation issue.',
|
|
99
|
-
focusNode: formatValidationField(result?.focusNode),
|
|
132
|
+
focusNode: formatValidationField(result?.focusNode?.term ?? result?.focusNode),
|
|
100
133
|
path,
|
|
101
134
|
propertyName: path ? propertyNameByPath.get(path) : undefined,
|
|
102
135
|
severity: formatValidationField(result?.severity),
|
|
103
|
-
source: formatValidationField(result?.
|
|
136
|
+
source: formatValidationField(result?.constraintComponent ?? result?.shape?.ptr?.term),
|
|
104
137
|
};
|
|
105
138
|
});
|
|
106
139
|
return {
|
|
@@ -150,49 +183,22 @@ export function registerShaclValidationRequests(connection: ConnectionLike, oml:
|
|
|
150
183
|
}
|
|
151
184
|
|
|
152
185
|
export function deriveSelectQueryFromShacl(shaclSource: string, graphIri: string): DerivedShaclSelectQuery | undefined {
|
|
153
|
-
let
|
|
186
|
+
let shapeQuads: Quad[];
|
|
154
187
|
try {
|
|
155
188
|
const parser = new N3Parser({ format: 'text/turtle' });
|
|
156
|
-
|
|
157
|
-
shapesStore = new N3Store(quads);
|
|
189
|
+
shapeQuads = parser.parse(shaclSource);
|
|
158
190
|
} catch {
|
|
159
191
|
return undefined;
|
|
160
192
|
}
|
|
161
193
|
|
|
162
|
-
const
|
|
163
|
-
const { sh } = validator.ns;
|
|
164
|
-
const shapesGraph = validator.shapesGraph;
|
|
165
|
-
const nodeShape = shapesGraph.shapesWithTarget.find((shape: any) => !shape.isPropertyShape && !shape.deactivated);
|
|
194
|
+
const nodeShape = parsePrimaryNodeShape(shapeQuads);
|
|
166
195
|
if (!nodeShape) {
|
|
167
196
|
return undefined;
|
|
168
197
|
}
|
|
169
198
|
|
|
170
|
-
const targetClassTerms = nodeShape.shapeNodePointer.out(sh.targetClass).terms as Term[];
|
|
171
|
-
const targetClasses = targetClassTerms.filter((term: Term): term is Term => term.termType === 'NamedNode');
|
|
172
|
-
const targetNodes = nodeShape.shapeNodePointer.out(sh.targetNode).terms as Term[];
|
|
173
|
-
if (targetClasses.length === 0 && targetNodes.length === 0) {
|
|
174
|
-
return undefined;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
const propertyShapeTerms = nodeShape.shapeNodePointer.out(sh.property).terms as Term[];
|
|
178
|
-
const columns: Array<{ path: Term; name?: string }> = [];
|
|
179
|
-
for (const propertyShapeTerm of propertyShapeTerms) {
|
|
180
|
-
const propertyShape = shapesGraph.getShape(propertyShapeTerm);
|
|
181
|
-
if (propertyShape.deactivated) {
|
|
182
|
-
continue;
|
|
183
|
-
}
|
|
184
|
-
const path = propertyShape.pathObject;
|
|
185
|
-
if (!isRdfTerm(path) || path.termType !== 'NamedNode') {
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
const nameTerm = propertyShape.shapeNodePointer.out(sh.name).term;
|
|
189
|
-
const name = nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined;
|
|
190
|
-
columns.push({ path, name });
|
|
191
|
-
}
|
|
192
|
-
|
|
193
199
|
const usedNames = new Set<string>(['focus']);
|
|
194
|
-
const variables = columns.map((column) => {
|
|
195
|
-
const base = normalizeSparqlVariableName(column.name || localName(column.path
|
|
200
|
+
const variables = nodeShape.columns.map((column) => {
|
|
201
|
+
const base = normalizeSparqlVariableName(column.name || localName(column.path) || 'value');
|
|
196
202
|
const unique = uniqueVariableName(base, usedNames);
|
|
197
203
|
usedNames.add(unique);
|
|
198
204
|
const sourceVariable = uniqueVariableName(`__${unique}`, usedNames);
|
|
@@ -214,19 +220,19 @@ export function deriveSelectQueryFromShacl(shaclSource: string, graphIri: string
|
|
|
214
220
|
const whereLines: string[] = [];
|
|
215
221
|
const graphLines: string[] = [];
|
|
216
222
|
|
|
217
|
-
if (targetClasses.length > 0) {
|
|
218
|
-
const values = targetClasses.map((term: Term) => `<${term.value}>`).join(' ');
|
|
223
|
+
if (nodeShape.targetClasses.length > 0) {
|
|
224
|
+
const values = nodeShape.targetClasses.map((term: Term) => `<${term.value}>`).join(' ');
|
|
219
225
|
whereLines.push(` VALUES ?__targetClass { ${values} }`);
|
|
220
226
|
graphLines.push(' ?focus a ?__targetClass .');
|
|
221
227
|
}
|
|
222
228
|
|
|
223
|
-
if (targetNodes.length > 0) {
|
|
224
|
-
const values = targetNodes.map((term: Term) => termToSparql(term)).join(' ');
|
|
229
|
+
if (nodeShape.targetNodes.length > 0) {
|
|
230
|
+
const values = nodeShape.targetNodes.map((term: Term) => termToSparql(term)).join(' ');
|
|
225
231
|
whereLines.push(` VALUES ?focus { ${values} }`);
|
|
226
232
|
}
|
|
227
233
|
|
|
228
234
|
for (const entry of variables) {
|
|
229
|
-
graphLines.push(` OPTIONAL { ?focus <${entry.path
|
|
235
|
+
graphLines.push(` OPTIONAL { ?focus <${entry.path}> ?${entry.sourceVariable} . }`);
|
|
230
236
|
}
|
|
231
237
|
|
|
232
238
|
whereLines.push(` GRAPH <${escapeIriForSparql(graphIri)}> {`);
|
|
@@ -270,6 +276,93 @@ function buildValidationConstructQuery(contextIri: string): string {
|
|
|
270
276
|
].join('\n');
|
|
271
277
|
}
|
|
272
278
|
|
|
279
|
+
function parsePrimaryNodeShape(shapeQuads: readonly Quad[]): ParsedShaclNodeShape | undefined {
|
|
280
|
+
const shapesStore = new N3Store([...shapeQuads]);
|
|
281
|
+
const targetSubjects = collectSubjectsWithTargets(shapeQuads);
|
|
282
|
+
|
|
283
|
+
for (const shapeTerm of targetSubjects) {
|
|
284
|
+
if (isDeactivatedShape(shapesStore, shapeTerm) || isPropertyShape(shapesStore, shapeTerm)) {
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const targetClasses = getObjects(shapesStore, shapeTerm, SH_TARGET_CLASS)
|
|
289
|
+
.filter((term): term is Term => term.termType === 'NamedNode');
|
|
290
|
+
const targetNodes = getObjects(shapesStore, shapeTerm, SH_TARGET_NODE);
|
|
291
|
+
if (targetClasses.length === 0 && targetNodes.length === 0) {
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const columns = getObjects(shapesStore, shapeTerm, SH_PROPERTY)
|
|
296
|
+
.filter((term): term is Term => term.termType === 'NamedNode' || term.termType === 'BlankNode')
|
|
297
|
+
.filter((term) => !isDeactivatedShape(shapesStore, term))
|
|
298
|
+
.map((term): ParsedShaclColumn | undefined => {
|
|
299
|
+
const path = getFirstObject(shapesStore, term, SH_PATH);
|
|
300
|
+
if (!path || path.termType !== 'NamedNode') {
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
const nameTerm = getFirstObject(shapesStore, term, SH_NAME);
|
|
304
|
+
return {
|
|
305
|
+
path: path.value,
|
|
306
|
+
name: nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined,
|
|
307
|
+
};
|
|
308
|
+
})
|
|
309
|
+
.filter((column): column is ParsedShaclColumn => Boolean(column));
|
|
310
|
+
|
|
311
|
+
return {
|
|
312
|
+
targetClasses,
|
|
313
|
+
targetNodes,
|
|
314
|
+
columns,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function collectSubjectsWithTargets(shapeQuads: readonly Quad[]): Term[] {
|
|
322
|
+
const seen = new Set<string>();
|
|
323
|
+
const subjects: Term[] = [];
|
|
324
|
+
for (const quad of shapeQuads) {
|
|
325
|
+
if (quad.predicate.value !== SH_TARGET_CLASS && quad.predicate.value !== SH_TARGET_NODE) {
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const key = termKey(quad.subject);
|
|
329
|
+
if (!key || seen.has(key)) {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
seen.add(key);
|
|
333
|
+
subjects.push(quad.subject);
|
|
334
|
+
}
|
|
335
|
+
return subjects;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function isPropertyShape(store: N3Store, subject: Term): boolean {
|
|
339
|
+
return store.countQuads(subject, DataFactory.namedNode(RDF_TYPE), DataFactory.namedNode(SH_PROPERTY_SHAPE), null) > 0
|
|
340
|
+
|| store.countQuads(subject, DataFactory.namedNode(SH_PATH), null, null) > 0;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function isDeactivatedShape(store: N3Store, subject: Term): boolean {
|
|
344
|
+
return getObjects(store, subject, SH_DEACTIVATED).some((term) => isTruthyLiteral(term));
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
function isTruthyLiteral(term: Term): boolean {
|
|
348
|
+
return term.termType === 'Literal' && (term.value === 'true' || term.value === '1');
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
function getObjects(store: N3Store, subject: Term, predicateIri: string): Term[] {
|
|
352
|
+
return [...store.getQuads(subject, DataFactory.namedNode(predicateIri), null, null)].map((quad) => quad.object);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function getFirstObject(store: N3Store, subject: Term, predicateIri: string): Term | undefined {
|
|
356
|
+
return getObjects(store, subject, predicateIri)[0];
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function termKey(term: Term): string | undefined {
|
|
360
|
+
if (term.termType !== 'NamedNode' && term.termType !== 'BlankNode') {
|
|
361
|
+
return undefined;
|
|
362
|
+
}
|
|
363
|
+
return `${term.termType}:${term.value}`;
|
|
364
|
+
}
|
|
365
|
+
|
|
273
366
|
function formatValidationField(value: unknown): string | undefined {
|
|
274
367
|
if (value === undefined || value === null) return undefined;
|
|
275
368
|
if (Array.isArray(value)) {
|
|
@@ -280,13 +373,28 @@ function formatValidationField(value: unknown): string | undefined {
|
|
|
280
373
|
}
|
|
281
374
|
if (typeof value === 'string') return value;
|
|
282
375
|
if (typeof value === 'number' || typeof value === 'boolean') return String(value);
|
|
283
|
-
if (typeof value === 'object' && 'value' in (value as any)) {
|
|
376
|
+
if (typeof value === 'object' && value !== null && 'value' in (value as any)) {
|
|
284
377
|
const raw = (value as any).value;
|
|
285
378
|
return typeof raw === 'string' ? raw : String(raw);
|
|
286
379
|
}
|
|
287
380
|
return String(value);
|
|
288
381
|
}
|
|
289
382
|
|
|
383
|
+
function formatValidationPath(path: unknown): string | undefined {
|
|
384
|
+
if (Array.isArray(path) && path.length === 1) {
|
|
385
|
+
const [step] = path as Array<{ quantifier?: string; start?: string; end?: string; predicates?: Array<{ value?: string }> }>;
|
|
386
|
+
if (step.quantifier === 'one'
|
|
387
|
+
&& step.start === 'subject'
|
|
388
|
+
&& step.end === 'object'
|
|
389
|
+
&& Array.isArray(step.predicates)
|
|
390
|
+
&& step.predicates.length === 1
|
|
391
|
+
&& typeof step.predicates[0]?.value === 'string') {
|
|
392
|
+
return step.predicates[0].value;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return formatValidationField(path);
|
|
396
|
+
}
|
|
397
|
+
|
|
290
398
|
function collectShaclPropertyDisplayNames(shapeQuads: readonly Quad[]): Map<string, string> {
|
|
291
399
|
const SH_PATH = 'http://www.w3.org/ns/shacl#path';
|
|
292
400
|
const SH_NAME = 'http://www.w3.org/ns/shacl#name';
|
|
@@ -391,10 +499,6 @@ function localName(iri: string): string {
|
|
|
391
499
|
return iri;
|
|
392
500
|
}
|
|
393
501
|
|
|
394
|
-
function isRdfTerm(value: unknown): value is Term {
|
|
395
|
-
return typeof value === 'object' && value !== null && 'termType' in value;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
502
|
function escapeIriForSparql(iri: string): string {
|
|
399
503
|
return iri.replace(/>/g, '\\>');
|
|
400
504
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright (c) 2026 Modelware. All rights reserved.
|
|
2
|
+
|
|
3
|
+
declare module 'shacl-engine' {
|
|
4
|
+
export class Validator {
|
|
5
|
+
constructor(dataset: unknown, options: unknown);
|
|
6
|
+
validate(data: unknown, shapes?: unknown): Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare module 'shacl-engine/sparql.js' {
|
|
11
|
+
export const validations: unknown;
|
|
12
|
+
export const targetResolvers: unknown;
|
|
13
|
+
}
|