@comake/skl-js-engine 0.16.0 → 0.16.2

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.
Files changed (49) hide show
  1. package/dist/SklEngine.d.ts +11 -1
  2. package/dist/SklEngine.js +152 -33
  3. package/dist/SklEngine.js.map +1 -1
  4. package/dist/storage/operator/OneOrMorePath.d.ts +3 -3
  5. package/dist/storage/operator/OneOrMorePath.js.map +1 -1
  6. package/dist/storage/operator/SequencePath.d.ts +3 -3
  7. package/dist/storage/operator/SequencePath.js.map +1 -1
  8. package/dist/storage/operator/ZeroOrMorePath.d.ts +3 -3
  9. package/dist/storage/operator/ZeroOrMorePath.js.map +1 -1
  10. package/dist/storage/query-adapter/QueryAdapter.d.ts +3 -0
  11. package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.js +4 -2
  12. package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.js.map +1 -1
  13. package/package.json +1 -1
  14. package/dist/Callbacks.d.ts +0 -10
  15. package/dist/Callbacks.js +0 -3
  16. package/dist/Callbacks.js.map +0 -1
  17. package/dist/storage/BaseQueryAdapterOptions.d.ts +0 -11
  18. package/dist/storage/BaseQueryAdapterOptions.js +0 -3
  19. package/dist/storage/BaseQueryAdapterOptions.js.map +0 -1
  20. package/dist/storage/QueryAdapter.d.ts +0 -78
  21. package/dist/storage/QueryAdapter.js +0 -3
  22. package/dist/storage/QueryAdapter.js.map +0 -1
  23. package/dist/storage/memory/MemoryQueryAdapter.d.ts +0 -38
  24. package/dist/storage/memory/MemoryQueryAdapter.js +0 -259
  25. package/dist/storage/memory/MemoryQueryAdapter.js.map +0 -1
  26. package/dist/storage/memory/MemoryQueryAdapterOptions.d.ts +0 -12
  27. package/dist/storage/memory/MemoryQueryAdapterOptions.js +0 -3
  28. package/dist/storage/memory/MemoryQueryAdapterOptions.js.map +0 -1
  29. package/dist/storage/operator/Path.d.ts +0 -2
  30. package/dist/storage/operator/Path.js +0 -13
  31. package/dist/storage/operator/Path.js.map +0 -1
  32. package/dist/storage/sparql/SparqlQueryAdapter.d.ts +0 -33
  33. package/dist/storage/sparql/SparqlQueryAdapter.js +0 -137
  34. package/dist/storage/sparql/SparqlQueryAdapter.js.map +0 -1
  35. package/dist/storage/sparql/SparqlQueryAdapterOptions.d.ts +0 -15
  36. package/dist/storage/sparql/SparqlQueryAdapterOptions.js +0 -3
  37. package/dist/storage/sparql/SparqlQueryAdapterOptions.js.map +0 -1
  38. package/dist/storage/sparql/SparqlQueryBuilder.d.ts +0 -68
  39. package/dist/storage/sparql/SparqlQueryBuilder.js +0 -667
  40. package/dist/storage/sparql/SparqlQueryBuilder.js.map +0 -1
  41. package/dist/storage/sparql/SparqlQueryExecutor.d.ts +0 -23
  42. package/dist/storage/sparql/SparqlQueryExecutor.js +0 -63
  43. package/dist/storage/sparql/SparqlQueryExecutor.js.map +0 -1
  44. package/dist/storage/sparql/SparqlUpdateBuilder.d.ts +0 -36
  45. package/dist/storage/sparql/SparqlUpdateBuilder.js +0 -235
  46. package/dist/storage/sparql/SparqlUpdateBuilder.js.map +0 -1
  47. package/dist/storage/sparql/VariableGenerator.d.ts +0 -4
  48. package/dist/storage/sparql/VariableGenerator.js +0 -14
  49. package/dist/storage/sparql/VariableGenerator.js.map +0 -1
@@ -1,667 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SparqlQueryBuilder = void 0;
7
- const data_model_1 = __importDefault(require("@rdfjs/data-model"));
8
- const SparqlUtil_1 = require("../../util/SparqlUtil");
9
- const TripleUtil_1 = require("../../util/TripleUtil");
10
- const Util_1 = require("../../util/Util");
11
- const Vocabularies_1 = require("../../util/Vocabularies");
12
- const FindOperator_1 = require("../FindOperator");
13
- const VariableGenerator_1 = require("./VariableGenerator");
14
- class SparqlQueryBuilder {
15
- constructor() {
16
- this.variableGenerator = new VariableGenerator_1.VariableGenerator();
17
- }
18
- buildEntitySelectPatternsFromOptions(subject, options) {
19
- const relations = options?.select ? undefined : options?.relations;
20
- const whereQueryData = this.createWhereQueryData(subject, options?.where);
21
- const orderQueryData = this.createOrderQueryData(subject, options?.order);
22
- const relationsQueryData = this.createRelationsQueryData(subject, relations);
23
- if (whereQueryData.triples.length === 0 && (whereQueryData.filters.length > 0 ||
24
- orderQueryData.triples.length > 0 ||
25
- (whereQueryData.values.length === 0 &&
26
- whereQueryData.graphValues.length === 0 &&
27
- whereQueryData.graphTriples.length === 0))) {
28
- whereQueryData.triples.push({
29
- subject,
30
- predicate: this.createVariable(),
31
- object: this.createVariable(),
32
- });
33
- }
34
- const wherePatterns = this.createWherePatternsFromQueryData(whereQueryData.values, whereQueryData.triples, whereQueryData.filters, orderQueryData.triples, orderQueryData.filters);
35
- const graphWherePatterns = this.createWherePatternsFromQueryData(whereQueryData.graphValues, whereQueryData.graphTriples, whereQueryData.graphFilters, undefined, undefined, undefined, relationsQueryData.patterns);
36
- return {
37
- where: wherePatterns,
38
- orders: orderQueryData.orders,
39
- group: orderQueryData.groupByParent ? subject : undefined,
40
- graphWhere: graphWherePatterns,
41
- graphSelectionTriples: relationsQueryData.selectionTriples,
42
- };
43
- }
44
- buildConstructFromEntitySelectQuery(graphWhere, graphSelectionTriples, select) {
45
- let triples;
46
- let where = [];
47
- if (select) {
48
- triples = this.createSelectPattern(select, SparqlUtil_1.entityVariable);
49
- where = [
50
- (0, SparqlUtil_1.createSparqlOptional)([
51
- (0, SparqlUtil_1.createSparqlBasicGraphPattern)(triples),
52
- ]),
53
- ...graphWhere,
54
- ];
55
- }
56
- else {
57
- triples = [SparqlUtil_1.entityGraphTriple, ...graphSelectionTriples];
58
- where = [
59
- ...graphWhere,
60
- (0, SparqlUtil_1.createSparqlGraphPattern)(SparqlUtil_1.entityVariable, [(0, SparqlUtil_1.createSparqlBasicGraphPattern)([SparqlUtil_1.entityGraphTriple])]),
61
- ];
62
- }
63
- return (0, SparqlUtil_1.createSparqlConstructQuery)(triples, where);
64
- }
65
- createWhereQueryData(subject, where, baseTriples = []) {
66
- const hasSingleKey = Object.keys(where ?? {}).length === 1;
67
- const whereQueryData = Object.entries(where ?? {}).reduce((obj, [key, value]) => {
68
- const whereQueryDataForField = this.createWhereQueryDataForField(subject, key, value, hasSingleKey);
69
- return {
70
- values: [...obj.values, ...whereQueryDataForField.values],
71
- triples: [...obj.triples, ...whereQueryDataForField.triples],
72
- filters: [...obj.filters, ...whereQueryDataForField.filters],
73
- graphValues: [...obj.graphValues, ...whereQueryDataForField.graphValues],
74
- graphTriples: [...obj.graphTriples, ...whereQueryDataForField.graphTriples],
75
- graphFilters: [...obj.graphFilters, ...whereQueryDataForField.graphFilters],
76
- };
77
- }, { values: [], triples: baseTriples, filters: [], graphValues: [], graphTriples: [], graphFilters: [] });
78
- return whereQueryData;
79
- }
80
- createWhereQueryDataForField(subject, field, value, isOnlyField) {
81
- if (field === 'id') {
82
- return this.createWhereQueryDataForIdValue(subject, value, isOnlyField);
83
- }
84
- if (field === 'type') {
85
- return this.createWhereQueryDataForType(subject, value);
86
- }
87
- const predicate = data_model_1.default.namedNode(field);
88
- return this.createWhereQueryDataFromKeyValue(subject, predicate, value);
89
- }
90
- createWhereQueryDataForIdValue(term, value, isOnlyField) {
91
- let filters = [];
92
- let values = [];
93
- let triples = [];
94
- if (FindOperator_1.FindOperator.isFindOperator(value)) {
95
- ({ filters, values, triples } =
96
- this.resolveFindOperatorAsExpressionForId(term, value));
97
- }
98
- else {
99
- values = [{
100
- type: 'values',
101
- values: [{
102
- [`?${term.value}`]: data_model_1.default.namedNode(value),
103
- }],
104
- }];
105
- }
106
- if (isOnlyField) {
107
- return {
108
- values: [],
109
- filters: [],
110
- triples: [],
111
- graphValues: values,
112
- graphFilters: filters,
113
- graphTriples: triples,
114
- };
115
- }
116
- return {
117
- values,
118
- filters,
119
- triples,
120
- graphValues: [],
121
- graphFilters: [],
122
- graphTriples: [],
123
- };
124
- }
125
- createWhereQueryDataForType(subject, value) {
126
- if (FindOperator_1.FindOperator.isFindOperator(value)) {
127
- if (value.operator === 'inverse') {
128
- const inversePredicate = (0, SparqlUtil_1.createSparqlInversePredicate)([SparqlUtil_1.allTypesAndSuperTypesPath]);
129
- const inverseWhereQueryData = this.createWhereQueryDataFromKeyValue(subject, inversePredicate, value.value);
130
- return {
131
- values: inverseWhereQueryData.values,
132
- filters: inverseWhereQueryData.filters,
133
- triples: inverseWhereQueryData.triples,
134
- graphValues: [],
135
- graphTriples: [],
136
- graphFilters: [],
137
- };
138
- }
139
- const variable = this.createVariable();
140
- const triple = { subject, predicate: SparqlUtil_1.allTypesAndSuperTypesPath, object: variable };
141
- const { filter, valuePattern, tripleInFilter } = this.resolveFindOperatorAsExpressionWithMultipleValues(variable, value, triple);
142
- return {
143
- values: valuePattern ? [valuePattern] : [],
144
- filters: filter ? [filter] : [],
145
- triples: tripleInFilter ? [] : [triple],
146
- graphValues: [],
147
- graphFilters: [],
148
- graphTriples: [],
149
- };
150
- }
151
- return {
152
- values: [],
153
- filters: [],
154
- triples: [{
155
- subject,
156
- predicate: SparqlUtil_1.allTypesAndSuperTypesPath,
157
- object: data_model_1.default.namedNode(value),
158
- }],
159
- graphValues: [],
160
- graphFilters: [],
161
- graphTriples: [],
162
- };
163
- }
164
- createWhereQueryDataFromKeyValue(subject, predicate, value) {
165
- if (Array.isArray(value) && FindOperator_1.FindOperator.isFindOperator(value[0])) {
166
- return this.createWhereQueryDataForMultipleFindOperators(subject, predicate, value);
167
- }
168
- if (FindOperator_1.FindOperator.isFindOperator(value)) {
169
- return this.createWhereQueryDataForFindOperator(subject, predicate, value);
170
- }
171
- if (Array.isArray(value)) {
172
- return value.reduce((obj, valueItem) => {
173
- const valueWhereQueryData = this.createWhereQueryDataFromKeyValue(subject, predicate, valueItem);
174
- return {
175
- values: [...obj.values, ...valueWhereQueryData.values],
176
- filters: [...obj.filters, ...valueWhereQueryData.filters],
177
- triples: [...obj.triples, ...valueWhereQueryData.triples],
178
- graphValues: [...obj.graphValues, ...valueWhereQueryData.graphValues],
179
- graphFilters: [...obj.graphFilters, ...valueWhereQueryData.graphFilters],
180
- graphTriples: [...obj.graphTriples, ...valueWhereQueryData.graphTriples],
181
- };
182
- }, { values: [], filters: [], triples: [], graphTriples: [], graphValues: [], graphFilters: [] });
183
- }
184
- if (typeof value === 'object') {
185
- if ('@value' in value) {
186
- return this.createWhereQueryDataForValueObject(subject, predicate, value);
187
- }
188
- return this.createWhereQueryDataForNestedWhere(subject, predicate, value);
189
- }
190
- const term = this.resolveValueToTerm(value);
191
- return {
192
- values: [],
193
- filters: [],
194
- triples: [{ subject, predicate, object: term }],
195
- graphValues: [],
196
- graphFilters: [],
197
- graphTriples: [],
198
- };
199
- }
200
- createWhereQueryDataForFindOperator(subject, predicate, operator) {
201
- if (operator.operator === 'inverse') {
202
- const inversePredicate = (0, SparqlUtil_1.createSparqlInversePredicate)([predicate]);
203
- const inverseWhereQueryData = this.createWhereQueryDataFromKeyValue(subject, inversePredicate, operator.value);
204
- return {
205
- values: inverseWhereQueryData.values,
206
- filters: inverseWhereQueryData.filters,
207
- triples: inverseWhereQueryData.triples,
208
- graphValues: [],
209
- graphTriples: [],
210
- graphFilters: [],
211
- };
212
- }
213
- if (FindOperator_1.FindOperator.isPathOperator(operator)) {
214
- const pathPredicate = this.pathOperatorToPropertyPath(operator);
215
- const combinedPredicate = (0, SparqlUtil_1.createSparqlSequencePredicate)([
216
- predicate,
217
- pathPredicate,
218
- ]);
219
- return this.createWhereQueryDataFromKeyValue(subject, combinedPredicate, operator.value.value);
220
- }
221
- const variable = this.createVariable();
222
- const triple = { subject, predicate, object: variable };
223
- const { filter, valuePattern } = this.resolveFindOperatorAsExpressionWithMultipleValues(variable, operator, triple);
224
- return {
225
- values: valuePattern ? [valuePattern] : [],
226
- filters: filter ? [filter] : [],
227
- triples: [triple],
228
- graphValues: [],
229
- graphTriples: [],
230
- graphFilters: [],
231
- };
232
- }
233
- pathOperatorToPropertyPath(operator) {
234
- if (operator.operator === 'inversePath') {
235
- let subPredicate;
236
- const { subPath } = operator.value;
237
- if (typeof subPath === 'string') {
238
- subPredicate = data_model_1.default.namedNode(subPath);
239
- }
240
- else {
241
- subPredicate = this.pathOperatorToPropertyPath(subPath);
242
- }
243
- return (0, SparqlUtil_1.createSparqlInversePredicate)([subPredicate]);
244
- }
245
- if (operator.operator === 'sequencePath') {
246
- const { subPath } = operator.value;
247
- const subPredicates = subPath
248
- .map((sequencePart) => {
249
- if (typeof sequencePart === 'string') {
250
- return data_model_1.default.namedNode(sequencePart);
251
- }
252
- return this.pathOperatorToPropertyPath(sequencePart);
253
- });
254
- return (0, SparqlUtil_1.createSparqlSequencePredicate)(subPredicates);
255
- }
256
- if (operator.operator === 'zeroOrMorePath') {
257
- const { subPath } = operator.value;
258
- let subPredicate;
259
- if (typeof subPath === 'string') {
260
- subPredicate = data_model_1.default.namedNode(subPath);
261
- }
262
- else {
263
- subPredicate = this.pathOperatorToPropertyPath(subPath);
264
- }
265
- return (0, SparqlUtil_1.createSparqlZeroOrMorePredicate)([subPredicate]);
266
- }
267
- if (operator.operator === 'oneOrMorePath') {
268
- const { subPath } = operator.value;
269
- let subPredicate;
270
- if (typeof subPath === 'string') {
271
- subPredicate = data_model_1.default.namedNode(subPath);
272
- }
273
- else {
274
- subPredicate = this.pathOperatorToPropertyPath(subPath);
275
- }
276
- return (0, SparqlUtil_1.createSparqlOneOrMorePredicate)([subPredicate]);
277
- }
278
- throw new Error(`Operator ${operator.operator} not supported`);
279
- }
280
- createWhereQueryDataForMultipleFindOperators(subject, predicate, operators) {
281
- const variable = this.createVariable();
282
- const triple = { subject, predicate, object: variable };
283
- const whereQueryData = {
284
- values: [],
285
- filters: [],
286
- triples: [triple],
287
- graphValues: [],
288
- graphTriples: [],
289
- graphFilters: [],
290
- };
291
- return operators.reduce((obj, operator) => {
292
- const { filter, valuePattern } = this.resolveFindOperatorAsExpressionWithMultipleValues(variable, operator, triple);
293
- if (valuePattern) {
294
- obj.values.push(valuePattern);
295
- }
296
- if (filter) {
297
- obj.filters.push(filter);
298
- }
299
- return obj;
300
- }, whereQueryData);
301
- }
302
- createWhereQueryDataForNestedWhere(subject, predicate, where) {
303
- const subNodeVariable = this.createVariable();
304
- const subWhereQueryData = this.createWhereQueryData(subNodeVariable, where);
305
- return {
306
- values: [...subWhereQueryData.values, ...subWhereQueryData.graphValues],
307
- filters: subWhereQueryData.filters,
308
- triples: [
309
- { subject, predicate, object: subNodeVariable },
310
- ...subWhereQueryData.triples,
311
- ],
312
- graphValues: [],
313
- graphFilters: [],
314
- graphTriples: [],
315
- };
316
- }
317
- createWhereQueryDataForValueObject(subject, predicate, valueObject) {
318
- const term = this.valueObjectToTerm(valueObject);
319
- return {
320
- values: [],
321
- filters: [],
322
- triples: [{ subject, predicate, object: term }],
323
- graphValues: [],
324
- graphFilters: [],
325
- graphTriples: [],
326
- };
327
- }
328
- valueObjectToTerm(valueObject) {
329
- let typeOrLanguage;
330
- let value;
331
- if ('@type' in valueObject && valueObject['@type'] === '@json') {
332
- typeOrLanguage = Vocabularies_1.RDF.JSON;
333
- value = JSON.stringify(valueObject['@value']);
334
- }
335
- else {
336
- typeOrLanguage = ('@type' in valueObject ? valueObject['@type'] : valueObject['@language']);
337
- value = valueObject['@value'].toString();
338
- }
339
- return data_model_1.default.literal(value, typeOrLanguage);
340
- }
341
- resolveFindOperatorAsExpressionWithMultipleValues(leftSide, operator, triple, dontUseValuePattern = false) {
342
- if (operator.operator === 'in') {
343
- const resolvedValue = this.resolveValueToExpression(operator.value);
344
- if (Array.isArray(resolvedValue) && !dontUseValuePattern) {
345
- return {
346
- valuePattern: {
347
- type: 'values',
348
- values: resolvedValue.map((value) => ({ [`?${leftSide.value}`]: value })),
349
- },
350
- };
351
- }
352
- return {
353
- filter: (0, SparqlUtil_1.createSparqlInOperation)(leftSide, resolvedValue),
354
- };
355
- }
356
- if (operator.operator === 'not') {
357
- const resolvedExpression = this.resolveValueToExpression(operator.value);
358
- return {
359
- filter: this.buildNotOperationForMultiValued(leftSide, resolvedExpression, triple),
360
- tripleInFilter: true,
361
- };
362
- }
363
- const resolvedExpression = this.resolveValueToExpression(operator.value);
364
- switch (operator.operator) {
365
- case 'equal':
366
- return { filter: (0, SparqlUtil_1.createSparqlEqualOperation)(leftSide, resolvedExpression) };
367
- case 'gt':
368
- return { filter: (0, SparqlUtil_1.createSparqlGtOperation)(leftSide, resolvedExpression) };
369
- case 'gte':
370
- return { filter: (0, SparqlUtil_1.createSparqlGteOperation)(leftSide, resolvedExpression) };
371
- case 'lt':
372
- return { filter: (0, SparqlUtil_1.createSparqlLtOperation)(leftSide, resolvedExpression) };
373
- case 'lte':
374
- return { filter: (0, SparqlUtil_1.createSparqlLteOperation)(leftSide, resolvedExpression) };
375
- default:
376
- throw new Error(`Unsupported operator "${operator.operator}"`);
377
- }
378
- }
379
- resolveFindOperatorAsExpressionForId(leftSide, operator) {
380
- switch (operator.operator) {
381
- case 'inversePath': {
382
- const predicate = this.pathOperatorToPropertyPath(operator);
383
- return this.createWhereQueryDataFromKeyValue(leftSide, predicate, operator.value.value);
384
- }
385
- case 'in': {
386
- const resolvedValue = this.resolveValueToExpression(operator.value);
387
- return {
388
- triples: [],
389
- filters: [],
390
- values: [{
391
- type: 'values',
392
- values: resolvedValue.map((value) => ({ [`?${leftSide.value}`]: value })),
393
- }],
394
- };
395
- }
396
- case 'not':
397
- return {
398
- triples: [],
399
- values: [],
400
- filters: [
401
- this.buildNotOperationForId(leftSide, this.resolveValueToExpression(operator.value)),
402
- ],
403
- };
404
- case 'equal':
405
- return {
406
- triples: [],
407
- values: [],
408
- filters: [
409
- (0, SparqlUtil_1.createSparqlEqualOperation)(leftSide, this.resolveValueToExpression(operator.value)),
410
- ],
411
- };
412
- default:
413
- throw new Error(`Unsupported operator "${operator.operator}"`);
414
- }
415
- }
416
- resolveValueToExpression(value) {
417
- if (FindOperator_1.FindOperator.isFindOperator(value)) {
418
- return value;
419
- }
420
- if (Array.isArray(value)) {
421
- return value.map((valueItem) => this.resolveValueToTerm(valueItem));
422
- }
423
- return this.resolveValueToTerm(value);
424
- }
425
- buildNotOperationForMultiValued(leftSide, rightSide, triple) {
426
- let filterExpression;
427
- const rightSideIsOperation = typeof rightSide === 'object' && 'operator' in rightSide;
428
- if (rightSideIsOperation) {
429
- let expression;
430
- try {
431
- ({ filter: expression } = this.resolveFindOperatorAsExpressionWithMultipleValues(leftSide, rightSide, triple, true));
432
- }
433
- catch {
434
- throw new Error(`Unsupported Not sub operator "${rightSide.operator}"`);
435
- }
436
- filterExpression = (0, SparqlUtil_1.createSparqlFilterWithExpression)(expression);
437
- }
438
- else {
439
- filterExpression = (0, SparqlUtil_1.createSparqlFilterWithExpression)((0, SparqlUtil_1.createSparqlEqualOperation)(leftSide, rightSide));
440
- }
441
- return (0, SparqlUtil_1.createSparqlNotExistsOperation)([
442
- (0, SparqlUtil_1.createSparqlSelectGroup)([
443
- (0, SparqlUtil_1.createSparqlBasicGraphPattern)([triple]),
444
- filterExpression,
445
- ]),
446
- ]);
447
- }
448
- buildNotOperationForId(leftSide, rightSide) {
449
- if (FindOperator_1.FindOperator.isFindOperator(rightSide)) {
450
- const resolvedValue = this.resolveValueToExpression(rightSide.value);
451
- switch (rightSide.operator) {
452
- case 'in':
453
- return (0, SparqlUtil_1.createSparqlNotInOperation)(leftSide, resolvedValue);
454
- case 'equal':
455
- return (0, SparqlUtil_1.createSparqlNotEqualOperation)(leftSide, resolvedValue);
456
- default:
457
- throw new Error(`Unsupported Not sub operator "${rightSide.operator}"`);
458
- }
459
- }
460
- return (0, SparqlUtil_1.createSparqlNotEqualOperation)(leftSide, rightSide);
461
- }
462
- resolveValueToTerm(value) {
463
- if (typeof value === 'object' && '@value' in value) {
464
- return (0, TripleUtil_1.valueToLiteral)(value['@value'], '@type' in value ? value['@type'] : undefined);
465
- }
466
- if ((0, Util_1.isUrl)(value)) {
467
- return data_model_1.default.namedNode(value);
468
- }
469
- return (0, TripleUtil_1.valueToLiteral)(value);
470
- }
471
- createOrderQueryData(subject, order, isNested = false) {
472
- if (!order) {
473
- return { triples: [], orders: [], filters: [] };
474
- }
475
- return Object.entries(order).reduce((obj, [property, orderValue]) => {
476
- const orderQueryData = this.createOrderQueryDataForProperty(subject, property, orderValue, isNested);
477
- obj.orders = [...obj.orders, ...orderQueryData.orders];
478
- obj.triples = [...obj.triples, ...orderQueryData.triples];
479
- obj.filters = [...obj.filters, ...orderQueryData.filters];
480
- obj.groupByParent = obj.groupByParent ?? orderQueryData.groupByParent;
481
- return obj;
482
- }, { triples: [], orders: [], filters: [] });
483
- }
484
- createOrderQueryDataForProperty(subject, property, orderValue, isNested = false) {
485
- const predicate = data_model_1.default.namedNode(property);
486
- if (FindOperator_1.FindOperator.isFindOperator(orderValue)) {
487
- const variable = this.createVariable();
488
- const inverseRelationTriple = {
489
- subject,
490
- predicate: (0, SparqlUtil_1.createSparqlInversePredicate)([predicate]),
491
- object: variable,
492
- };
493
- const subRelationOperatorValue = orderValue.value;
494
- const subRelationOrderQueryData = this.createOrderQueryData(variable, subRelationOperatorValue.order, true);
495
- const subRelationWhereQueryData = this.createWhereQueryData(variable, subRelationOperatorValue.where);
496
- return {
497
- triples: [inverseRelationTriple, ...subRelationOrderQueryData.triples, ...subRelationWhereQueryData.triples],
498
- filters: subRelationWhereQueryData.filters,
499
- orders: subRelationOrderQueryData.orders,
500
- groupByParent: true,
501
- };
502
- }
503
- if (property === 'id') {
504
- return {
505
- triples: [],
506
- filters: [],
507
- orders: [{
508
- expression: subject,
509
- descending: orderValue === 'DESC' || orderValue === 'desc',
510
- }],
511
- };
512
- }
513
- const variable = this.createVariable();
514
- const isDescending = orderValue === 'DESC' || orderValue === 'desc';
515
- return {
516
- triples: [{ subject, predicate, object: variable }],
517
- filters: [],
518
- orders: [{
519
- expression: isNested
520
- ? {
521
- type: 'aggregate',
522
- expression: variable,
523
- aggregation: isDescending ? 'max' : 'min',
524
- }
525
- : variable,
526
- descending: isDescending,
527
- }],
528
- };
529
- }
530
- createRelationsQueryData(subject, relations) {
531
- if (!relations) {
532
- return { patterns: [], selectionTriples: [] };
533
- }
534
- return Object.entries(relations)
535
- .reduce((obj, [property, relationsValue]) => {
536
- const predicate = data_model_1.default.namedNode(property);
537
- if (typeof relationsValue === 'object') {
538
- if (FindOperator_1.FindOperator.isFindOperator(relationsValue)) {
539
- const { patterns, selectionTriples } = this.createRelationsQueryDataForInverseRelation(subject, predicate, relationsValue);
540
- return {
541
- patterns: [...obj.patterns, ...patterns],
542
- selectionTriples: [...obj.selectionTriples, ...selectionTriples],
543
- };
544
- }
545
- const { patterns, selectionTriples } = this.createRelationsQueryDataForNestedRelation(subject, predicate, relationsValue);
546
- return {
547
- patterns: [...obj.patterns, ...patterns],
548
- selectionTriples: [...obj.selectionTriples, ...selectionTriples],
549
- };
550
- }
551
- const variable = this.createVariable();
552
- const graphTriple = {
553
- subject: this.createVariable(),
554
- predicate: this.createVariable(),
555
- object: this.createVariable(),
556
- };
557
- const relationPattern = (0, SparqlUtil_1.createSparqlOptional)([
558
- (0, SparqlUtil_1.createSparqlBasicGraphPattern)([{ subject, predicate, object: variable }]),
559
- (0, SparqlUtil_1.createSparqlGraphPattern)(variable, [(0, SparqlUtil_1.createSparqlBasicGraphPattern)([graphTriple])]),
560
- ]);
561
- return {
562
- patterns: [...obj.patterns, relationPattern],
563
- selectionTriples: [...obj.selectionTriples, graphTriple],
564
- };
565
- }, { patterns: [], selectionTriples: [] });
566
- }
567
- createRelationsQueryDataForInverseRelation(subject, predicate, relationsValue) {
568
- const variable = this.createVariable();
569
- const graphTriple = {
570
- subject: this.createVariable(),
571
- predicate: this.createVariable(),
572
- object: this.createVariable(),
573
- };
574
- const inverseRelationTriple = {
575
- subject,
576
- predicate: (0, SparqlUtil_1.createSparqlInversePredicate)([predicate]),
577
- object: variable,
578
- };
579
- if (typeof relationsValue.value === 'object' &&
580
- relationsValue.value.relations) {
581
- const subRelationsQueryData = this.createRelationsQueryData(variable, relationsValue.value.relations);
582
- const relationPattern = (0, SparqlUtil_1.createSparqlOptional)([
583
- (0, SparqlUtil_1.createSparqlBasicGraphPattern)([inverseRelationTriple]),
584
- (0, SparqlUtil_1.createSparqlGraphPattern)(variable, [(0, SparqlUtil_1.createSparqlBasicGraphPattern)([graphTriple])]),
585
- ...subRelationsQueryData.patterns,
586
- ]);
587
- return {
588
- patterns: [relationPattern],
589
- selectionTriples: [graphTriple, ...subRelationsQueryData.selectionTriples],
590
- };
591
- }
592
- const relationPattern = (0, SparqlUtil_1.createSparqlOptional)([
593
- (0, SparqlUtil_1.createSparqlBasicGraphPattern)([inverseRelationTriple]),
594
- (0, SparqlUtil_1.createSparqlGraphPattern)(variable, [(0, SparqlUtil_1.createSparqlBasicGraphPattern)([graphTriple])]),
595
- ]);
596
- return {
597
- patterns: [relationPattern],
598
- selectionTriples: [graphTriple],
599
- };
600
- }
601
- createRelationsQueryDataForNestedRelation(subject, predicate, relationsValue) {
602
- const variable = this.createVariable();
603
- const graphTriple = {
604
- subject: this.createVariable(),
605
- predicate: this.createVariable(),
606
- object: this.createVariable(),
607
- };
608
- const relationTriple = { subject, predicate, object: variable };
609
- const subRelationsQueryData = this.createRelationsQueryData(variable, relationsValue);
610
- const relationPattern = (0, SparqlUtil_1.createSparqlOptional)([
611
- (0, SparqlUtil_1.createSparqlBasicGraphPattern)([relationTriple]),
612
- (0, SparqlUtil_1.createSparqlGraphPattern)(variable, [(0, SparqlUtil_1.createSparqlBasicGraphPattern)([graphTriple])]),
613
- ...subRelationsQueryData.patterns,
614
- ]);
615
- return {
616
- patterns: [relationPattern],
617
- selectionTriples: [graphTriple, ...subRelationsQueryData.selectionTriples],
618
- };
619
- }
620
- createVariable() {
621
- return data_model_1.default.variable(this.variableGenerator.getNext());
622
- }
623
- createSelectPattern(select, subject) {
624
- if (Array.isArray(select)) {
625
- return select.map((selectPredicate) => ({
626
- subject,
627
- predicate: data_model_1.default.namedNode(selectPredicate),
628
- object: this.createVariable(),
629
- }));
630
- }
631
- return Object.entries(select).reduce((arr, [key, value]) => {
632
- const variable = this.createVariable();
633
- arr.push({ subject, predicate: data_model_1.default.namedNode(key), object: variable });
634
- if (typeof value === 'object') {
635
- arr = [...arr, ...this.createSelectPattern(value, variable)];
636
- }
637
- return arr;
638
- }, []);
639
- }
640
- createWherePatternsFromQueryData(values, triples, filters, orderTriples, orderFilters, serviceTriples, additionalPatterns) {
641
- let patterns = values;
642
- if (triples.length > 0) {
643
- patterns.push((0, SparqlUtil_1.createSparqlBasicGraphPattern)(triples));
644
- }
645
- if (orderTriples && orderTriples.length > 0) {
646
- const optionalPatterns = [(0, SparqlUtil_1.createSparqlBasicGraphPattern)(orderTriples)];
647
- if (orderFilters && orderFilters.length > 0) {
648
- optionalPatterns.push((0, SparqlUtil_1.createFilterPatternFromFilters)(orderFilters));
649
- }
650
- patterns.push((0, SparqlUtil_1.createSparqlOptional)(optionalPatterns));
651
- }
652
- if (filters.length > 0) {
653
- patterns.push((0, SparqlUtil_1.createFilterPatternFromFilters)(filters));
654
- }
655
- if (serviceTriples) {
656
- for (const [service, sTriples] of Object.entries(serviceTriples)) {
657
- patterns.unshift((0, SparqlUtil_1.createSparqlServicePattern)(service, sTriples));
658
- }
659
- }
660
- if (additionalPatterns) {
661
- patterns = [...patterns, ...additionalPatterns];
662
- }
663
- return patterns;
664
- }
665
- }
666
- exports.SparqlQueryBuilder = SparqlQueryBuilder;
667
- //# sourceMappingURL=SparqlQueryBuilder.js.map