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