@oml/owl 0.17.0 → 0.18.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.
@@ -11,6 +11,16 @@ export type DerivedShaclSelectQuery = {
11
11
  sparql: string;
12
12
  columnVariables: string[];
13
13
  columnLabels: Map<string, string>;
14
+ rowTypeVariable?: string;
15
+ containmentLabels?: string[];
16
+ containmentPredicateIri?: string;
17
+ containmentIsInverse?: boolean;
18
+ containmentIsReadOnly?: boolean;
19
+ supplementalQueries?: Array<{
20
+ columnLabel: string;
21
+ boundVariable: string;
22
+ sparql: string;
23
+ }>;
14
24
  };
15
25
  type ConnectionLike = {
16
26
  onRequest: (type: string, handler: (params: ShaclValidateParams) => ShaclValidateResult | Promise<ShaclValidateResult>) => void;
@@ -3,6 +3,9 @@ import { DataFactory, Parser as N3Parser, Store as N3Store } from 'n3';
3
3
  import { Validator as ShaclValidator } from 'shacl-engine';
4
4
  import { targetResolvers as shaclSparqlTargetResolvers, validations as shaclSparqlValidations } from 'shacl-engine/sparql.js';
5
5
  export const ShaclValidateRequest = 'oml/validate';
6
+ const SH_RULE = 'http://www.w3.org/ns/shacl#rule';
7
+ const SH_SPARQL_RULE = 'http://www.w3.org/ns/shacl#SPARQLRule';
8
+ const SH_CONSTRUCT = 'http://www.w3.org/ns/shacl#construct';
6
9
  const SHACL_FACTORY = {
7
10
  ...DataFactory,
8
11
  literal: (value, languageOrDatatype) => languageOrDatatype === undefined || languageOrDatatype === null
@@ -14,6 +17,7 @@ const RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
14
17
  const SH_PROPERTY_SHAPE = 'http://www.w3.org/ns/shacl#PropertyShape';
15
18
  const SH_DEACTIVATED = 'http://www.w3.org/ns/shacl#deactivated';
16
19
  const SH_NAME = 'http://www.w3.org/ns/shacl#name';
20
+ const SH_ORDER = 'http://www.w3.org/ns/shacl#order';
17
21
  const SH_PATH = 'http://www.w3.org/ns/shacl#path';
18
22
  const SH_PROPERTY = 'http://www.w3.org/ns/shacl#property';
19
23
  const SH_TARGET_CLASS = 'http://www.w3.org/ns/shacl#targetClass';
@@ -24,6 +28,7 @@ const SH_ZERO_OR_MORE_PATH = 'http://www.w3.org/ns/shacl#zeroOrMorePath';
24
28
  const SH_ONE_OR_MORE_PATH = 'http://www.w3.org/ns/shacl#oneOrMorePath';
25
29
  const SH_ZERO_OR_ONE_PATH = 'http://www.w3.org/ns/shacl#zeroOrOnePath';
26
30
  const DASH_READ_ONLY = 'http://datashapes.org/dash#readOnly';
31
+ const DASH_COMPOSITE = 'http://datashapes.org/dash#composite';
27
32
  const RDF_FIRST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first';
28
33
  const RDF_REST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest';
29
34
  const RDF_NIL = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil';
@@ -145,58 +150,151 @@ export function deriveSelectQueryFromShacl(shaclSource, graphIri) {
145
150
  catch {
146
151
  return undefined;
147
152
  }
148
- const nodeShape = parsePrimaryNodeShape(shapeQuads);
149
- if (!nodeShape) {
153
+ const nodeShapes = parseAllNodeShapes(shapeQuads);
154
+ if (nodeShapes.length === 0) {
150
155
  return undefined;
151
156
  }
152
- const usedNames = new Set(['focus']);
153
- const variables = nodeShape.columns.map((column) => {
154
- const base = normalizeSparqlVariableName(column.name || column.pathVariableHint || 'value');
157
+ const allRules = nodeShapes.flatMap((s) => s.rules);
158
+ const ruleByPredicateIri = new Map();
159
+ for (const rule of allRules) {
160
+ ruleByPredicateIri.set(rule.predicateIri, rule);
161
+ }
162
+ const allTargetClasses = nodeShapes.flatMap((shape) => shape.targetClasses);
163
+ const allTargetNodes = nodeShapes.flatMap((shape) => shape.targetNodes);
164
+ const aggregatedColumns = [];
165
+ const pathToColumn = new Map();
166
+ let insertionCounter = 0;
167
+ for (const shape of nodeShapes) {
168
+ for (const col of shape.columns) {
169
+ const existing = pathToColumn.get(col.path);
170
+ if (existing) {
171
+ for (const tc of shape.targetClasses) {
172
+ if (!existing.ownerClasses.some((oc) => oc.value === tc.value)) {
173
+ existing.ownerClasses.push(tc);
174
+ }
175
+ }
176
+ if (col.isComposite) {
177
+ existing.isComposite = true;
178
+ }
179
+ if (existing.order === undefined && col.order !== undefined) {
180
+ existing.order = col.order;
181
+ }
182
+ }
183
+ else {
184
+ const agg = { path: col.path, pathVariableHint: col.pathVariableHint, readOnly: col.readOnly, name: col.name, ownerClasses: [...shape.targetClasses], isComposite: col.isComposite, order: col.order, insertionIndex: insertionCounter++ };
185
+ aggregatedColumns.push(agg);
186
+ pathToColumn.set(col.path, agg);
187
+ }
188
+ }
189
+ }
190
+ aggregatedColumns.sort((a, b) => {
191
+ const aHasOrder = a.order !== undefined;
192
+ const bHasOrder = b.order !== undefined;
193
+ if (aHasOrder && bHasOrder) {
194
+ if (a.order !== b.order) {
195
+ return a.order - b.order;
196
+ }
197
+ }
198
+ else if (aHasOrder !== bHasOrder) {
199
+ return aHasOrder ? -1 : 1;
200
+ }
201
+ return a.insertionIndex - b.insertionIndex;
202
+ });
203
+ const usedNames = new Set(['focus', '__rowType', '__specificType']);
204
+ const allVariables = aggregatedColumns.map((col) => {
205
+ const base = normalizeSparqlVariableName(col.name || col.pathVariableHint || 'value');
155
206
  const unique = uniqueVariableName(base, usedNames);
156
207
  usedNames.add(unique);
157
208
  const sourceVariable = uniqueVariableName(`__${unique}`, usedNames);
158
209
  usedNames.add(sourceVariable);
159
- return {
160
- path: column.path,
161
- readOnly: column.readOnly,
162
- variable: unique,
163
- sourceVariable,
164
- name: column.name,
165
- };
210
+ return { path: col.path, readOnly: col.readOnly, variable: unique, sourceVariable, name: col.name, ownerClasses: col.ownerClasses, isComposite: col.isComposite };
166
211
  });
212
+ const graphPattern = (pattern) => `GRAPH <${escapeIriForSparql(graphIri)}> { ${pattern} }`;
167
213
  const selectVars = [
168
214
  '?focus',
169
- ...variables.map((entry) => `(GROUP_CONCAT(DISTINCT STR(?${entry.sourceVariable}); SEPARATOR=", ") AS ?${entry.variable})`)
215
+ '(GROUP_CONCAT(DISTINCT STR(?__specificType); SEPARATOR=", ") AS ?__rowType)',
216
+ ...allVariables.map((entry) => `(GROUP_CONCAT(DISTINCT STR(?${entry.sourceVariable}); SEPARATOR=", ") AS ?${entry.variable})`),
170
217
  ].join(' ');
171
218
  const whereLines = [];
172
219
  const graphLines = [];
173
- const graphPattern = (pattern) => `GRAPH <${escapeIriForSparql(graphIri)}> { ${pattern} }`;
174
- if (nodeShape.targetClasses.length > 0) {
175
- const values = nodeShape.targetClasses.map((term) => `<${term.value}>`).join(' ');
176
- whereLines.push(` VALUES ?__targetClass { ${values} }`);
220
+ if (allTargetClasses.length > 0) {
221
+ const classValuesList = allTargetClasses.map((term) => `<${term.value}>`);
222
+ const classValuesSpaced = classValuesList.join(' ');
223
+ const classValuesComma = classValuesList.join(', ');
224
+ whereLines.push(` VALUES ?__targetClass { ${classValuesSpaced} }`);
177
225
  graphLines.push(` ${graphPattern('?focus a ?__targetClass .')}`);
226
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus a ?__specificType . FILTER(?__specificType IN (${classValuesComma}))`)} }`);
178
227
  }
179
- if (nodeShape.targetNodes.length > 0) {
180
- const values = nodeShape.targetNodes.map((term) => termToSparql(term)).join(' ');
181
- whereLines.push(` VALUES ?focus { ${values} }`);
228
+ if (allTargetNodes.length > 0) {
229
+ const nodeValues = allTargetNodes.map((term) => termToSparql(term)).join(' ');
230
+ whereLines.push(` VALUES ?focus { ${nodeValues} }`);
182
231
  }
183
- for (const entry of variables) {
184
- const pattern = `?focus ${entry.path} ?${entry.sourceVariable} .`;
232
+ const supplementalQueries = [];
233
+ for (const entry of allVariables) {
185
234
  if (entry.readOnly) {
186
- graphLines.push(` OPTIONAL { ${pattern} }`);
235
+ const simpleIri = /^<([^>]+)>$/.exec(entry.path.trim())?.[1];
236
+ const rule = simpleIri ? ruleByPredicateIri.get(simpleIri) : undefined;
237
+ if (rule) {
238
+ graphLines.push([
239
+ ` OPTIONAL {`,
240
+ ` SELECT ?focus (?${rule.boundVariable} AS ?${entry.sourceVariable})`,
241
+ ` WHERE {`,
242
+ ` ${rule.whereBody}`,
243
+ ` }`,
244
+ ` }`,
245
+ ].join('\n'));
246
+ supplementalQueries.push({
247
+ columnLabel: entry.name ?? entry.variable,
248
+ boundVariable: rule.boundVariable,
249
+ sparql: [
250
+ rule.prefixDeclarations,
251
+ `SELECT ?focus ?${rule.boundVariable}`,
252
+ 'WHERE {',
253
+ ` ${rule.whereBody}`,
254
+ '}',
255
+ ].filter(Boolean).join('\n'),
256
+ });
257
+ }
258
+ else {
259
+ graphLines.push(` OPTIONAL { ?focus ${entry.path} ?${entry.sourceVariable} . }`);
260
+ }
187
261
  }
188
262
  else {
189
- graphLines.push(` OPTIONAL { ${graphPattern(pattern)} }`);
263
+ const isUniversal = allTargetClasses.length === 0 ||
264
+ allTargetClasses.every((tc) => entry.ownerClasses.some((oc) => oc.value === tc.value));
265
+ if (isUniversal) {
266
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus ${entry.path} ?${entry.sourceVariable} .`)} }`);
267
+ }
268
+ else if (entry.ownerClasses.length === 1) {
269
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus a <${entry.ownerClasses[0].value}> . ?focus ${entry.path} ?${entry.sourceVariable} .`)} }`);
270
+ }
271
+ else {
272
+ const guardVar = `__g_${entry.variable}`;
273
+ const classesComma = entry.ownerClasses.map((t) => `<${t.value}>`).join(', ');
274
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus a ?${guardVar} . FILTER(?${guardVar} IN (${classesComma})) . ?focus ${entry.path} ?${entry.sourceVariable} .`)} }`);
275
+ }
190
276
  }
191
277
  }
192
278
  whereLines.push(...graphLines);
193
- const columnVariables = ['focus', ...variables.map((entry) => entry.variable)];
194
- const columnLabels = new Map([['focus', 'focus']]);
195
- for (const variable of variables) {
196
- columnLabels.set(variable.variable, variable.name || variable.variable);
197
- }
279
+ const columnVariables = ['focus', ...allVariables.map((entry) => entry.variable)];
280
+ const columnLabels = new Map([['focus', 'focus'], ['__rowType', '__rowType']]);
281
+ for (const entry of allVariables) {
282
+ columnLabels.set(entry.variable, entry.name || entry.variable);
283
+ }
284
+ const compositeVar = allVariables.find((v) => v.isComposite);
285
+ const containmentLabels = compositeVar
286
+ ? [compositeVar.name ?? compositeVar.variable]
287
+ : undefined;
288
+ const compositePath = compositeVar?.path ?? '';
289
+ const inverseMatch = /^\^\s*<([^>]+)>$/.exec(compositePath);
290
+ const directMatch = /^<([^>]+)>$/.exec(compositePath);
291
+ const containmentPredicateIri = (directMatch ?? inverseMatch)?.[1];
292
+ const containmentIsInverse = inverseMatch ? true : undefined;
293
+ const containmentIsReadOnly = compositeVar?.readOnly ? true : undefined;
294
+ const rulePrefixLines = [...new Set(allRules.flatMap((r) => r.prefixDeclarations ? r.prefixDeclarations.split('\n') : []))].filter(Boolean);
198
295
  return {
199
296
  sparql: [
297
+ ...rulePrefixLines,
200
298
  `SELECT ${selectVars}`,
201
299
  'WHERE {',
202
300
  ...whereLines,
@@ -205,6 +303,12 @@ export function deriveSelectQueryFromShacl(shaclSource, graphIri) {
205
303
  ].join('\n'),
206
304
  columnVariables,
207
305
  columnLabels,
306
+ rowTypeVariable: '__rowType',
307
+ containmentLabels,
308
+ containmentPredicateIri,
309
+ containmentIsInverse,
310
+ containmentIsReadOnly,
311
+ supplementalQueries: supplementalQueries.length > 0 ? supplementalQueries : undefined,
208
312
  };
209
313
  }
210
314
  function buildValidationConstructQuery(contextOntologyIri) {
@@ -224,9 +328,10 @@ function buildValidationConstructQuery(contextOntologyIri) {
224
328
  '}',
225
329
  ].join('\n');
226
330
  }
227
- function parsePrimaryNodeShape(shapeQuads) {
331
+ function parseAllNodeShapes(shapeQuads) {
228
332
  const shapesStore = new N3Store([...shapeQuads]);
229
333
  const targetSubjects = collectSubjectsWithTargets(shapeQuads);
334
+ const shapes = [];
230
335
  for (const shapeTerm of targetSubjects) {
231
336
  if (isDeactivatedShape(shapesStore, shapeTerm) || isPropertyShape(shapesStore, shapeTerm)) {
232
337
  continue;
@@ -250,21 +355,115 @@ function parsePrimaryNodeShape(shapeQuads) {
250
355
  return undefined;
251
356
  }
252
357
  const nameTerm = getFirstObject(shapesStore, term, SH_NAME);
358
+ const orderTerm = getFirstObject(shapesStore, term, SH_ORDER);
359
+ let order;
360
+ if (orderTerm && orderTerm.termType === 'Literal') {
361
+ const parsed = Number(orderTerm.value);
362
+ if (Number.isFinite(parsed)) {
363
+ order = parsed;
364
+ }
365
+ }
253
366
  return {
254
367
  path: parsedPath.sparql,
255
368
  pathVariableHint: parsedPath.variableHint,
256
369
  readOnly: isReadOnlyShape(shapesStore, term),
257
370
  name: nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined,
371
+ isComposite: isCompositeShape(shapesStore, term),
372
+ order,
258
373
  };
259
374
  })
260
375
  .filter((column) => Boolean(column));
261
- return {
262
- targetClasses,
263
- targetNodes,
264
- columns,
265
- };
376
+ const rules = parseShaclRules(shapesStore, shapeTerm);
377
+ shapes.push({ targetClasses, targetNodes, columns, rules });
266
378
  }
267
- return undefined;
379
+ return shapes;
380
+ }
381
+ function parseSparqlConstructRule(constructQuery) {
382
+ // Build prefix map from PREFIX declarations
383
+ const prefixMap = new Map();
384
+ const prefixRegex = /PREFIX\s+(\w*):\s*<([^>]+)>/gi;
385
+ let prefixMatch;
386
+ while ((prefixMatch = prefixRegex.exec(constructQuery)) !== null) {
387
+ prefixMap.set(prefixMatch[1], prefixMatch[2]);
388
+ }
389
+ // Match CONSTRUCT { $this <predicate> ?variable }
390
+ const constructHeadRegex = /CONSTRUCT\s*\{[^}]*\$this\s+(\S+)\s+\?(\w+)/i;
391
+ const headMatch = constructHeadRegex.exec(constructQuery);
392
+ if (!headMatch) {
393
+ return undefined;
394
+ }
395
+ const rawPredicate = headMatch[1];
396
+ const boundVariable = headMatch[2];
397
+ // Resolve predicate IRI
398
+ let predicateIri;
399
+ const angleMatch = /^<([^>]+)>$/.exec(rawPredicate);
400
+ if (angleMatch) {
401
+ predicateIri = angleMatch[1];
402
+ }
403
+ else {
404
+ const prefixedMatch = /^(\w*):(.+)$/.exec(rawPredicate);
405
+ if (!prefixedMatch) {
406
+ return undefined;
407
+ }
408
+ const ns = prefixMap.get(prefixedMatch[1]);
409
+ if (ns === undefined) {
410
+ return undefined;
411
+ }
412
+ predicateIri = ns + prefixedMatch[2];
413
+ }
414
+ // Find WHERE { ... } using brace-depth counter
415
+ const whereKeywordMatch = /WHERE\s*\{/i.exec(constructQuery);
416
+ if (!whereKeywordMatch) {
417
+ return undefined;
418
+ }
419
+ const whereOpenBrace = whereKeywordMatch.index + whereKeywordMatch[0].length - 1;
420
+ let depth = 0;
421
+ let start = -1;
422
+ let end = -1;
423
+ for (let i = whereOpenBrace; i < constructQuery.length; i++) {
424
+ if (constructQuery[i] === '{') {
425
+ if (depth === 0) {
426
+ start = i;
427
+ }
428
+ depth++;
429
+ }
430
+ else if (constructQuery[i] === '}') {
431
+ depth--;
432
+ if (depth === 0) {
433
+ end = i;
434
+ break;
435
+ }
436
+ }
437
+ }
438
+ if (start === -1 || end === -1) {
439
+ return undefined;
440
+ }
441
+ const whereBody = constructQuery.slice(start + 1, end).replace(/\$this/g, '?focus').trim();
442
+ // Reconstruct PREFIX declarations as SPARQL lines to inject into the outer query
443
+ const prefixDeclarations = [...prefixMap.entries()]
444
+ .map(([prefix, ns]) => `PREFIX ${prefix}: <${ns}>`)
445
+ .join('\n');
446
+ return { predicateIri, boundVariable, whereBody, prefixDeclarations };
447
+ }
448
+ function parseShaclRules(store, shapeTerm) {
449
+ const rules = [];
450
+ const ruleTerms = getObjects(store, shapeTerm, SH_RULE);
451
+ for (const ruleTerm of ruleTerms) {
452
+ const typeTerms = getObjects(store, ruleTerm, RDF_TYPE);
453
+ const isSparqlRule = typeTerms.some((t) => t.termType === 'NamedNode' && t.value === SH_SPARQL_RULE);
454
+ if (!isSparqlRule) {
455
+ continue;
456
+ }
457
+ const constructTerm = getFirstObject(store, ruleTerm, SH_CONSTRUCT);
458
+ if (!constructTerm || constructTerm.termType !== 'Literal') {
459
+ continue;
460
+ }
461
+ const parsed = parseSparqlConstructRule(constructTerm.value);
462
+ if (parsed) {
463
+ rules.push(parsed);
464
+ }
465
+ }
466
+ return rules;
268
467
  }
269
468
  function collectSubjectsWithTargets(shapeQuads) {
270
469
  const seen = new Set();
@@ -295,6 +494,9 @@ function isTruthyLiteral(term) {
295
494
  function isReadOnlyShape(store, subject) {
296
495
  return getObjects(store, subject, DASH_READ_ONLY).some((term) => isTruthyLiteral(term));
297
496
  }
497
+ function isCompositeShape(store, subject) {
498
+ return getObjects(store, subject, DASH_COMPOSITE).some((term) => isTruthyLiteral(term));
499
+ }
298
500
  function getObjects(store, subject, predicateIri) {
299
501
  return [...store.getQuads(subject, DataFactory.namedNode(predicateIri), null, null)].map((quad) => quad.object);
300
502
  }
@@ -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.17.0",
4
+ "version": "0.18.0",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=20.10.0",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@comunica/query-sparql": "^5.1.3",
37
- "@oml/language": "0.17.0",
37
+ "@oml/language": "0.18.0",
38
38
  "langium": "4.2.1",
39
39
  "n3": "^2.0.1",
40
40
  "shacl-engine": "^1.1.0",
@@ -25,6 +25,12 @@ export type DerivedShaclSelectQuery = {
25
25
  sparql: string;
26
26
  columnVariables: string[];
27
27
  columnLabels: Map<string, string>;
28
+ rowTypeVariable?: string;
29
+ containmentLabels?: string[];
30
+ containmentPredicateIri?: string;
31
+ containmentIsInverse?: boolean;
32
+ containmentIsReadOnly?: boolean;
33
+ supplementalQueries?: Array<{ columnLabel: string; boundVariable: string; sparql: string }>;
28
34
  };
29
35
 
30
36
  type ParsedShaclColumn = {
@@ -32,18 +38,32 @@ type ParsedShaclColumn = {
32
38
  pathVariableHint?: string;
33
39
  readOnly: boolean;
34
40
  name?: string;
41
+ isComposite?: boolean;
42
+ order?: number;
43
+ };
44
+
45
+ type ParsedShaclRule = {
46
+ predicateIri: string;
47
+ boundVariable: string;
48
+ whereBody: string;
49
+ prefixDeclarations: string;
35
50
  };
36
51
 
37
52
  type ParsedShaclNodeShape = {
38
53
  targetClasses: Term[];
39
54
  targetNodes: Term[];
40
55
  columns: ParsedShaclColumn[];
56
+ rules: ParsedShaclRule[];
41
57
  };
42
58
 
43
59
  type ConnectionLike = {
44
60
  onRequest: (type: string, handler: (params: ShaclValidateParams) => ShaclValidateResult | Promise<ShaclValidateResult>) => void;
45
61
  };
46
62
 
63
+ const SH_RULE = 'http://www.w3.org/ns/shacl#rule';
64
+ const SH_SPARQL_RULE = 'http://www.w3.org/ns/shacl#SPARQLRule';
65
+ const SH_CONSTRUCT = 'http://www.w3.org/ns/shacl#construct';
66
+
47
67
  const SHACL_FACTORY = {
48
68
  ...DataFactory,
49
69
  literal: (value: string, languageOrDatatype?: string | Term | null) =>
@@ -56,6 +76,7 @@ const RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';
56
76
  const SH_PROPERTY_SHAPE = 'http://www.w3.org/ns/shacl#PropertyShape';
57
77
  const SH_DEACTIVATED = 'http://www.w3.org/ns/shacl#deactivated';
58
78
  const SH_NAME = 'http://www.w3.org/ns/shacl#name';
79
+ const SH_ORDER = 'http://www.w3.org/ns/shacl#order';
59
80
  const SH_PATH = 'http://www.w3.org/ns/shacl#path';
60
81
  const SH_PROPERTY = 'http://www.w3.org/ns/shacl#property';
61
82
  const SH_TARGET_CLASS = 'http://www.w3.org/ns/shacl#targetClass';
@@ -66,6 +87,7 @@ const SH_ZERO_OR_MORE_PATH = 'http://www.w3.org/ns/shacl#zeroOrMorePath';
66
87
  const SH_ONE_OR_MORE_PATH = 'http://www.w3.org/ns/shacl#oneOrMorePath';
67
88
  const SH_ZERO_OR_ONE_PATH = 'http://www.w3.org/ns/shacl#zeroOrOnePath';
68
89
  const DASH_READ_ONLY = 'http://datashapes.org/dash#readOnly';
90
+ const DASH_COMPOSITE = 'http://datashapes.org/dash#composite';
69
91
  const RDF_FIRST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first';
70
92
  const RDF_REST = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest';
71
93
  const RDF_NIL = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil';
@@ -200,67 +222,168 @@ export function deriveSelectQueryFromShacl(shaclSource: string, graphIri: string
200
222
  return undefined;
201
223
  }
202
224
 
203
- const nodeShape = parsePrimaryNodeShape(shapeQuads);
204
- if (!nodeShape) {
225
+ const nodeShapes = parseAllNodeShapes(shapeQuads);
226
+ if (nodeShapes.length === 0) {
205
227
  return undefined;
206
228
  }
207
229
 
208
- const usedNames = new Set<string>(['focus']);
209
- const variables = nodeShape.columns.map((column) => {
210
- const base = normalizeSparqlVariableName(column.name || column.pathVariableHint || 'value');
230
+ const allRules = nodeShapes.flatMap((s) => s.rules);
231
+ const ruleByPredicateIri = new Map<string, ParsedShaclRule>();
232
+ for (const rule of allRules) {
233
+ ruleByPredicateIri.set(rule.predicateIri, rule);
234
+ }
235
+
236
+ const allTargetClasses = nodeShapes.flatMap((shape) => shape.targetClasses);
237
+ const allTargetNodes = nodeShapes.flatMap((shape) => shape.targetNodes);
238
+
239
+ // Deduplicate columns across shapes by SPARQL path — same path in multiple shapes = one column.
240
+ // Track which shapes' targetClasses define each path so we can generate a type guard only when needed.
241
+ type AggregatedColumn = { path: string; pathVariableHint?: string; readOnly: boolean; name?: string; ownerClasses: Term[]; isComposite?: boolean; order?: number; insertionIndex: number };
242
+ const aggregatedColumns: AggregatedColumn[] = [];
243
+ const pathToColumn = new Map<string, AggregatedColumn>();
244
+ let insertionCounter = 0;
245
+ for (const shape of nodeShapes) {
246
+ for (const col of shape.columns) {
247
+ const existing = pathToColumn.get(col.path);
248
+ if (existing) {
249
+ for (const tc of shape.targetClasses) {
250
+ if (!existing.ownerClasses.some((oc) => oc.value === tc.value)) {
251
+ existing.ownerClasses.push(tc);
252
+ }
253
+ }
254
+ if (col.isComposite) {
255
+ existing.isComposite = true;
256
+ }
257
+ if (existing.order === undefined && col.order !== undefined) {
258
+ existing.order = col.order;
259
+ }
260
+ } else {
261
+ const agg: AggregatedColumn = { path: col.path, pathVariableHint: col.pathVariableHint, readOnly: col.readOnly, name: col.name, ownerClasses: [...shape.targetClasses], isComposite: col.isComposite, order: col.order, insertionIndex: insertionCounter++ };
262
+ aggregatedColumns.push(agg);
263
+ pathToColumn.set(col.path, agg);
264
+ }
265
+ }
266
+ }
267
+ aggregatedColumns.sort((a, b) => {
268
+ const aHasOrder = a.order !== undefined;
269
+ const bHasOrder = b.order !== undefined;
270
+ if (aHasOrder && bHasOrder) {
271
+ if (a.order !== b.order) {
272
+ return (a.order as number) - (b.order as number);
273
+ }
274
+ } else if (aHasOrder !== bHasOrder) {
275
+ return aHasOrder ? -1 : 1;
276
+ }
277
+ return a.insertionIndex - b.insertionIndex;
278
+ });
279
+
280
+ const usedNames = new Set<string>(['focus', '__rowType', '__specificType']);
281
+ type ShapeVariable = { path: string; readOnly: boolean; variable: string; sourceVariable: string; name?: string; ownerClasses: Term[]; isComposite?: boolean };
282
+ const allVariables: ShapeVariable[] = aggregatedColumns.map((col) => {
283
+ const base = normalizeSparqlVariableName(col.name || col.pathVariableHint || 'value');
211
284
  const unique = uniqueVariableName(base, usedNames);
212
285
  usedNames.add(unique);
213
286
  const sourceVariable = uniqueVariableName(`__${unique}`, usedNames);
214
287
  usedNames.add(sourceVariable);
215
- return {
216
- path: column.path,
217
- readOnly: column.readOnly,
218
- variable: unique,
219
- sourceVariable,
220
- name: column.name,
221
- };
288
+ return { path: col.path, readOnly: col.readOnly, variable: unique, sourceVariable, name: col.name, ownerClasses: col.ownerClasses, isComposite: col.isComposite };
222
289
  });
223
290
 
291
+ const graphPattern = (pattern: string): string =>
292
+ `GRAPH <${escapeIriForSparql(graphIri)}> { ${pattern} }`;
293
+
224
294
  const selectVars = [
225
295
  '?focus',
226
- ...variables.map((entry: { variable: string; sourceVariable: string }) =>
296
+ '(GROUP_CONCAT(DISTINCT STR(?__specificType); SEPARATOR=", ") AS ?__rowType)',
297
+ ...allVariables.map((entry) =>
227
298
  `(GROUP_CONCAT(DISTINCT STR(?${entry.sourceVariable}); SEPARATOR=", ") AS ?${entry.variable})`
228
- )
299
+ ),
229
300
  ].join(' ');
301
+
230
302
  const whereLines: string[] = [];
231
303
  const graphLines: string[] = [];
232
- const graphPattern = (pattern: string): string =>
233
- `GRAPH <${escapeIriForSparql(graphIri)}> { ${pattern} }`;
234
304
 
235
- if (nodeShape.targetClasses.length > 0) {
236
- const values = nodeShape.targetClasses.map((term: Term) => `<${term.value}>`).join(' ');
237
- whereLines.push(` VALUES ?__targetClass { ${values} }`);
305
+ if (allTargetClasses.length > 0) {
306
+ const classValuesList = allTargetClasses.map((term: Term) => `<${term.value}>`);
307
+ const classValuesSpaced = classValuesList.join(' ');
308
+ const classValuesComma = classValuesList.join(', ');
309
+ whereLines.push(` VALUES ?__targetClass { ${classValuesSpaced} }`);
238
310
  graphLines.push(` ${graphPattern('?focus a ?__targetClass .')}`);
311
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus a ?__specificType . FILTER(?__specificType IN (${classValuesComma}))`)} }`);
239
312
  }
240
313
 
241
- if (nodeShape.targetNodes.length > 0) {
242
- const values = nodeShape.targetNodes.map((term: Term) => termToSparql(term)).join(' ');
243
- whereLines.push(` VALUES ?focus { ${values} }`);
314
+ if (allTargetNodes.length > 0) {
315
+ const nodeValues = allTargetNodes.map((term: Term) => termToSparql(term)).join(' ');
316
+ whereLines.push(` VALUES ?focus { ${nodeValues} }`);
244
317
  }
245
318
 
246
- for (const entry of variables) {
247
- const pattern = `?focus ${entry.path} ?${entry.sourceVariable} .`;
319
+ const supplementalQueries: Array<{ columnLabel: string; boundVariable: string; sparql: string }> = [];
320
+ for (const entry of allVariables) {
248
321
  if (entry.readOnly) {
249
- graphLines.push(` OPTIONAL { ${pattern} }`);
322
+ const simpleIri = /^<([^>]+)>$/.exec(entry.path.trim())?.[1];
323
+ const rule = simpleIri ? ruleByPredicateIri.get(simpleIri) : undefined;
324
+ if (rule) {
325
+ graphLines.push([
326
+ ` OPTIONAL {`,
327
+ ` SELECT ?focus (?${rule.boundVariable} AS ?${entry.sourceVariable})`,
328
+ ` WHERE {`,
329
+ ` ${rule.whereBody}`,
330
+ ` }`,
331
+ ` }`,
332
+ ].join('\n'));
333
+ supplementalQueries.push({
334
+ columnLabel: entry.name ?? entry.variable,
335
+ boundVariable: rule.boundVariable,
336
+ sparql: [
337
+ rule.prefixDeclarations,
338
+ `SELECT ?focus ?${rule.boundVariable}`,
339
+ 'WHERE {',
340
+ ` ${rule.whereBody}`,
341
+ '}',
342
+ ].filter(Boolean).join('\n'),
343
+ });
344
+ } else {
345
+ graphLines.push(` OPTIONAL { ?focus ${entry.path} ?${entry.sourceVariable} . }`);
346
+ }
250
347
  } else {
251
- graphLines.push(` OPTIONAL { ${graphPattern(pattern)} }`);
348
+ const isUniversal = allTargetClasses.length === 0 ||
349
+ allTargetClasses.every((tc) => entry.ownerClasses.some((oc) => oc.value === tc.value));
350
+ if (isUniversal) {
351
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus ${entry.path} ?${entry.sourceVariable} .`)} }`);
352
+ } else if (entry.ownerClasses.length === 1) {
353
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus a <${entry.ownerClasses[0].value}> . ?focus ${entry.path} ?${entry.sourceVariable} .`)} }`);
354
+ } else {
355
+ const guardVar = `__g_${entry.variable}`;
356
+ const classesComma = entry.ownerClasses.map((t: Term) => `<${t.value}>`).join(', ');
357
+ graphLines.push(` OPTIONAL { ${graphPattern(`?focus a ?${guardVar} . FILTER(?${guardVar} IN (${classesComma})) . ?focus ${entry.path} ?${entry.sourceVariable} .`)} }`);
358
+ }
252
359
  }
253
360
  }
254
361
  whereLines.push(...graphLines);
255
362
 
256
- const columnVariables = ['focus', ...variables.map((entry) => entry.variable)];
257
- const columnLabels = new Map<string, string>([['focus', 'focus']]);
258
- for (const variable of variables) {
259
- columnLabels.set(variable.variable, variable.name || variable.variable);
363
+ const columnVariables = ['focus', ...allVariables.map((entry) => entry.variable)];
364
+ const columnLabels = new Map<string, string>([['focus', 'focus'], ['__rowType', '__rowType']]);
365
+ for (const entry of allVariables) {
366
+ columnLabels.set(entry.variable, entry.name || entry.variable);
260
367
  }
261
368
 
369
+ const compositeVar = allVariables.find((v) => v.isComposite);
370
+ const containmentLabels: string[] | undefined = compositeVar
371
+ ? [compositeVar.name ?? compositeVar.variable]
372
+ : undefined;
373
+ const compositePath = compositeVar?.path ?? '';
374
+ const inverseMatch = /^\^\s*<([^>]+)>$/.exec(compositePath);
375
+ const directMatch = /^<([^>]+)>$/.exec(compositePath);
376
+ const containmentPredicateIri: string | undefined = (directMatch ?? inverseMatch)?.[1];
377
+ const containmentIsInverse: true | undefined = inverseMatch ? true : undefined;
378
+ const containmentIsReadOnly: true | undefined = compositeVar?.readOnly ? true : undefined;
379
+
380
+ const rulePrefixLines = [...new Set(
381
+ allRules.flatMap((r) => r.prefixDeclarations ? r.prefixDeclarations.split('\n') : [])
382
+ )].filter(Boolean);
383
+
262
384
  return {
263
385
  sparql: [
386
+ ...rulePrefixLines,
264
387
  `SELECT ${selectVars}`,
265
388
  'WHERE {',
266
389
  ...whereLines,
@@ -269,6 +392,12 @@ export function deriveSelectQueryFromShacl(shaclSource: string, graphIri: string
269
392
  ].join('\n'),
270
393
  columnVariables,
271
394
  columnLabels,
395
+ rowTypeVariable: '__rowType',
396
+ containmentLabels,
397
+ containmentPredicateIri,
398
+ containmentIsInverse,
399
+ containmentIsReadOnly,
400
+ supplementalQueries: supplementalQueries.length > 0 ? supplementalQueries : undefined,
272
401
  };
273
402
  }
274
403
 
@@ -290,9 +419,10 @@ function buildValidationConstructQuery(contextOntologyIri: string): string {
290
419
  ].join('\n');
291
420
  }
292
421
 
293
- function parsePrimaryNodeShape(shapeQuads: readonly Quad[]): ParsedShaclNodeShape | undefined {
422
+ function parseAllNodeShapes(shapeQuads: readonly Quad[]): ParsedShaclNodeShape[] {
294
423
  const shapesStore = new N3Store([...shapeQuads]);
295
424
  const targetSubjects = collectSubjectsWithTargets(shapeQuads);
425
+ const shapes: ParsedShaclNodeShape[] = [];
296
426
 
297
427
  for (const shapeTerm of targetSubjects) {
298
428
  if (isDeactivatedShape(shapesStore, shapeTerm) || isPropertyShape(shapesStore, shapeTerm)) {
@@ -319,23 +449,123 @@ function parsePrimaryNodeShape(shapeQuads: readonly Quad[]): ParsedShaclNodeShap
319
449
  return undefined;
320
450
  }
321
451
  const nameTerm = getFirstObject(shapesStore, term, SH_NAME);
452
+ const orderTerm = getFirstObject(shapesStore, term, SH_ORDER);
453
+ let order: number | undefined;
454
+ if (orderTerm && orderTerm.termType === 'Literal') {
455
+ const parsed = Number(orderTerm.value);
456
+ if (Number.isFinite(parsed)) {
457
+ order = parsed;
458
+ }
459
+ }
322
460
  return {
323
461
  path: parsedPath.sparql,
324
462
  pathVariableHint: parsedPath.variableHint,
325
463
  readOnly: isReadOnlyShape(shapesStore, term),
326
464
  name: nameTerm && nameTerm.termType === 'Literal' ? nameTerm.value : undefined,
465
+ isComposite: isCompositeShape(shapesStore, term),
466
+ order,
327
467
  };
328
468
  })
329
469
  .filter((column): column is ParsedShaclColumn => Boolean(column));
330
470
 
331
- return {
332
- targetClasses,
333
- targetNodes,
334
- columns,
335
- };
471
+ const rules = parseShaclRules(shapesStore, shapeTerm);
472
+ shapes.push({ targetClasses, targetNodes, columns, rules });
336
473
  }
337
474
 
338
- return undefined;
475
+ return shapes;
476
+ }
477
+
478
+ function parseSparqlConstructRule(constructQuery: string): ParsedShaclRule | undefined {
479
+ // Build prefix map from PREFIX declarations
480
+ const prefixMap = new Map<string, string>();
481
+ const prefixRegex = /PREFIX\s+(\w*):\s*<([^>]+)>/gi;
482
+ let prefixMatch: RegExpExecArray | null;
483
+ while ((prefixMatch = prefixRegex.exec(constructQuery)) !== null) {
484
+ prefixMap.set(prefixMatch[1], prefixMatch[2]);
485
+ }
486
+
487
+ // Match CONSTRUCT { $this <predicate> ?variable }
488
+ const constructHeadRegex = /CONSTRUCT\s*\{[^}]*\$this\s+(\S+)\s+\?(\w+)/i;
489
+ const headMatch = constructHeadRegex.exec(constructQuery);
490
+ if (!headMatch) {
491
+ return undefined;
492
+ }
493
+ const rawPredicate = headMatch[1];
494
+ const boundVariable = headMatch[2];
495
+
496
+ // Resolve predicate IRI
497
+ let predicateIri: string;
498
+ const angleMatch = /^<([^>]+)>$/.exec(rawPredicate);
499
+ if (angleMatch) {
500
+ predicateIri = angleMatch[1];
501
+ } else {
502
+ const prefixedMatch = /^(\w*):(.+)$/.exec(rawPredicate);
503
+ if (!prefixedMatch) {
504
+ return undefined;
505
+ }
506
+ const ns = prefixMap.get(prefixedMatch[1]);
507
+ if (ns === undefined) {
508
+ return undefined;
509
+ }
510
+ predicateIri = ns + prefixedMatch[2];
511
+ }
512
+
513
+ // Find WHERE { ... } using brace-depth counter
514
+ const whereKeywordMatch = /WHERE\s*\{/i.exec(constructQuery);
515
+ if (!whereKeywordMatch) {
516
+ return undefined;
517
+ }
518
+ const whereOpenBrace = whereKeywordMatch.index + whereKeywordMatch[0].length - 1;
519
+ let depth = 0;
520
+ let start = -1;
521
+ let end = -1;
522
+ for (let i = whereOpenBrace; i < constructQuery.length; i++) {
523
+ if (constructQuery[i] === '{') {
524
+ if (depth === 0) {
525
+ start = i;
526
+ }
527
+ depth++;
528
+ } else if (constructQuery[i] === '}') {
529
+ depth--;
530
+ if (depth === 0) {
531
+ end = i;
532
+ break;
533
+ }
534
+ }
535
+ }
536
+ if (start === -1 || end === -1) {
537
+ return undefined;
538
+ }
539
+
540
+ const whereBody = constructQuery.slice(start + 1, end).replace(/\$this/g, '?focus').trim();
541
+
542
+ // Reconstruct PREFIX declarations as SPARQL lines to inject into the outer query
543
+ const prefixDeclarations = [...prefixMap.entries()]
544
+ .map(([prefix, ns]) => `PREFIX ${prefix}: <${ns}>`)
545
+ .join('\n');
546
+
547
+ return { predicateIri, boundVariable, whereBody, prefixDeclarations };
548
+ }
549
+
550
+ function parseShaclRules(store: N3Store, shapeTerm: Term): ParsedShaclRule[] {
551
+ const rules: ParsedShaclRule[] = [];
552
+ const ruleTerms = getObjects(store, shapeTerm, SH_RULE);
553
+ for (const ruleTerm of ruleTerms) {
554
+ const typeTerms = getObjects(store, ruleTerm, RDF_TYPE);
555
+ const isSparqlRule = typeTerms.some((t) => t.termType === 'NamedNode' && t.value === SH_SPARQL_RULE);
556
+ if (!isSparqlRule) {
557
+ continue;
558
+ }
559
+ const constructTerm = getFirstObject(store, ruleTerm, SH_CONSTRUCT);
560
+ if (!constructTerm || constructTerm.termType !== 'Literal') {
561
+ continue;
562
+ }
563
+ const parsed = parseSparqlConstructRule(constructTerm.value);
564
+ if (parsed) {
565
+ rules.push(parsed);
566
+ }
567
+ }
568
+ return rules;
339
569
  }
340
570
 
341
571
  function collectSubjectsWithTargets(shapeQuads: readonly Quad[]): Term[] {
@@ -372,6 +602,10 @@ function isReadOnlyShape(store: N3Store, subject: Term): boolean {
372
602
  return getObjects(store, subject, DASH_READ_ONLY).some((term) => isTruthyLiteral(term));
373
603
  }
374
604
 
605
+ function isCompositeShape(store: N3Store, subject: Term): boolean {
606
+ return getObjects(store, subject, DASH_COMPOSITE).some((term) => isTruthyLiteral(term));
607
+ }
608
+
375
609
  function getObjects(store: N3Store, subject: Term, predicateIri: string): Term[] {
376
610
  return [...store.getQuads(subject, DataFactory.namedNode(predicateIri), null, null)].map((quad) => quad.object);
377
611
  }