@comake/skl-js-engine 0.3.8 → 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 (59) hide show
  1. package/dist/index.d.ts +10 -2
  2. package/dist/index.js +12 -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/FindOperator.d.ts +1 -1
  9. package/dist/storage/FindOptionsTypes.d.ts +7 -4
  10. package/dist/storage/QueryAdapter.d.ts +2 -2
  11. package/dist/storage/blazegraph/BlazegraphQueryAdapter.d.ts +30 -0
  12. package/dist/storage/blazegraph/BlazegraphQueryAdapter.js +130 -0
  13. package/dist/storage/blazegraph/BlazegraphQueryAdapter.js.map +1 -0
  14. package/dist/storage/blazegraph/BlazegraphQueryAdapterOptions.d.ts +15 -0
  15. package/dist/storage/blazegraph/BlazegraphQueryAdapterOptions.js +3 -0
  16. package/dist/storage/blazegraph/BlazegraphQueryAdapterOptions.js.map +1 -0
  17. package/dist/storage/blazegraph/BlazegraphQueryBuilder.d.ts +23 -0
  18. package/dist/storage/blazegraph/BlazegraphQueryBuilder.js +98 -0
  19. package/dist/storage/blazegraph/BlazegraphQueryBuilder.js.map +1 -0
  20. package/dist/storage/memory/MemoryQueryAdapter.d.ts +2 -2
  21. package/dist/storage/memory/MemoryQueryAdapter.js +10 -5
  22. package/dist/storage/memory/MemoryQueryAdapter.js.map +1 -1
  23. package/dist/storage/operator/Equal.d.ts +3 -1
  24. package/dist/storage/operator/Equal.js.map +1 -1
  25. package/dist/storage/operator/In.d.ts +2 -1
  26. package/dist/storage/operator/In.js.map +1 -1
  27. package/dist/storage/operator/InverseRelation.d.ts +7 -0
  28. package/dist/storage/operator/InverseRelation.js +13 -0
  29. package/dist/storage/operator/InverseRelation.js.map +1 -0
  30. package/dist/storage/sparql/BasicSparqlQueryAdapter.d.ts +31 -0
  31. package/dist/storage/sparql/BasicSparqlQueryAdapter.js +133 -0
  32. package/dist/storage/sparql/BasicSparqlQueryAdapter.js.map +1 -0
  33. package/dist/storage/sparql/BasicSparqlQueryBuilder.d.ts +17 -0
  34. package/dist/storage/sparql/BasicSparqlQueryBuilder.js +36 -0
  35. package/dist/storage/sparql/BasicSparqlQueryBuilder.js.map +1 -0
  36. package/dist/storage/sparql/SparqlQueryAdapter.d.ts +15 -19
  37. package/dist/storage/sparql/SparqlQueryAdapter.js +51 -180
  38. package/dist/storage/sparql/SparqlQueryAdapter.js.map +1 -1
  39. package/dist/storage/sparql/SparqlQueryBuilder.d.ts +7 -84
  40. package/dist/storage/sparql/SparqlQueryBuilder.js +0 -655
  41. package/dist/storage/sparql/SparqlQueryBuilder.js.map +1 -1
  42. package/dist/storage/sparql/SparqlQueryExecutor.d.ts +23 -0
  43. package/dist/storage/sparql/SparqlQueryExecutor.js +63 -0
  44. package/dist/storage/sparql/SparqlQueryExecutor.js.map +1 -0
  45. package/dist/storage/sparql/SparqlQueryPatternBuilder.d.ts +55 -0
  46. package/dist/storage/sparql/SparqlQueryPatternBuilder.js +509 -0
  47. package/dist/storage/sparql/SparqlQueryPatternBuilder.js.map +1 -0
  48. package/dist/storage/sparql/SparqlUpdateBuilder.js +8 -7
  49. package/dist/storage/sparql/SparqlUpdateBuilder.js.map +1 -1
  50. package/dist/util/SparqlUtil.d.ts +50 -0
  51. package/dist/util/SparqlUtil.js +304 -0
  52. package/dist/util/SparqlUtil.js.map +1 -0
  53. package/dist/util/TripleUtil.d.ts +0 -12
  54. package/dist/util/TripleUtil.js +21 -34
  55. package/dist/util/TripleUtil.js.map +1 -1
  56. package/dist/util/Vocabularies.d.ts +1 -0
  57. package/dist/util/Vocabularies.js +4 -1
  58. package/dist/util/Vocabularies.js.map +1 -1
  59. package/package.json +1 -1
@@ -1,658 +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 } = this.resolveFindOperatorAsExpressionWithMultipleValues(variable, value, triple);
247
- return {
248
- values: valuePattern ? [valuePattern] : [],
249
- filters: filter ? [filter] : [],
250
- triples: [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) => ({
378
- [`?${leftSide.value}`]: typeof value === 'string'
379
- ? data_model_1.default.namedNode(value)
380
- : value,
381
- })),
382
- },
383
- };
384
- }
385
- return {
386
- filter: this.buildInOperation(leftSide, resolvedValue),
387
- };
388
- }
389
- case 'not':
390
- return {
391
- filter: this.buildNotOperationForMultiValued(leftSide, this.resolveValueToExpression(operator.value), triple),
392
- };
393
- case 'equal':
394
- return {
395
- filter: this.buildEqualOperation(leftSide, this.resolveValueToExpression(operator.value)),
396
- };
397
- case 'gt':
398
- return {
399
- filter: this.buildGtOperation(leftSide, this.resolveValueToExpression(operator.value)),
400
- };
401
- case 'gte':
402
- return {
403
- filter: this.buildGteOperation(leftSide, this.resolveValueToExpression(operator.value)),
404
- };
405
- case 'lt':
406
- return {
407
- filter: this.buildLtOperation(leftSide, this.resolveValueToExpression(operator.value)),
408
- };
409
- case 'lte':
410
- return {
411
- filter: this.buildLteOperation(leftSide, this.resolveValueToExpression(operator.value)),
412
- };
413
- default:
414
- throw new Error(`Unsupported operator "${operator.operator}"`);
415
- }
416
- }
417
- resolveFindOperatorAsExpressionForId(leftSide, operator) {
418
- switch (operator.operator) {
419
- case 'in': {
420
- const resolvedValue = this.resolveValueToExpression(operator.value);
421
- if (Array.isArray(resolvedValue)) {
422
- return {
423
- valuePattern: {
424
- type: 'values',
425
- values: resolvedValue.map((value) => ({
426
- [`?${leftSide.value}`]: typeof value === 'string'
427
- ? data_model_1.default.namedNode(value)
428
- : value,
429
- })),
430
- },
431
- };
432
- }
433
- return {
434
- filter: this.buildInOperation(leftSide, resolvedValue),
435
- };
436
- }
437
- case 'not':
438
- return {
439
- filter: this.buildNotOperationForId(leftSide, this.resolveValueToExpression(operator.value)),
440
- };
441
- case 'equal':
442
- return {
443
- filter: this.buildEqualOperation(leftSide, this.resolveValueToExpression(operator.value)),
444
- };
445
- default:
446
- throw new Error(`Unsupported operator "${operator.operator}"`);
447
- }
448
- }
449
- resolveValueToExpression(value) {
450
- if (FindOperator_1.FindOperator.isFindOperator(value)) {
451
- return value;
452
- }
453
- if (Array.isArray(value)) {
454
- return value.map((valueItem) => this.resolveValueToTerm(valueItem));
455
- }
456
- return this.resolveValueToTerm(value);
457
- }
458
- buildInOperation(leftSide, rightSide) {
459
- return {
460
- type: 'operation',
461
- operator: 'in',
462
- args: [leftSide, rightSide],
463
- };
464
- }
465
- buildNotInOperation(leftSide, rightSide) {
466
- return {
467
- type: 'operation',
468
- operator: 'notin',
469
- args: [leftSide, rightSide],
470
- };
471
- }
472
- buildNotOperationForMultiValued(leftSide, rightSide, triple) {
473
- let filterExpression;
474
- const rightSideIsOperation = typeof rightSide === 'object' && 'operator' in rightSide;
475
- if (rightSideIsOperation) {
476
- let expression;
477
- try {
478
- ({ filter: expression } = this.resolveFindOperatorAsExpressionWithMultipleValues(leftSide, rightSide, triple, true));
479
- }
480
- catch {
481
- throw new Error(`Unsupported Not sub operator "${rightSide.operator}"`);
482
- }
483
- filterExpression = this.filterWithExpression(expression);
484
- }
485
- else {
486
- filterExpression = this.filterWithExpression(this.buildEqualOperation(leftSide, rightSide));
487
- }
488
- return {
489
- type: 'operation',
490
- operator: 'notexists',
491
- args: [
492
- {
493
- type: 'group',
494
- patterns: [
495
- {
496
- type: 'bgp',
497
- triples: [triple],
498
- },
499
- filterExpression,
500
- ],
501
- },
502
- ],
503
- };
504
- }
505
- buildNotOperationForId(leftSide, rightSide) {
506
- if (FindOperator_1.FindOperator.isFindOperator(rightSide)) {
507
- switch (rightSide.operator) {
508
- case 'in':
509
- return this.buildNotInOperation(leftSide, this.resolveValueToExpression(rightSide.value));
510
- case 'equal':
511
- return this.buildNotEqualOperation(leftSide, this.resolveValueToExpression(rightSide.value));
512
- default:
513
- throw new Error(`Unsupported Not sub operator "${rightSide.operator}"`);
514
- }
515
- }
516
- return this.buildNotEqualOperation(leftSide, rightSide);
517
- }
518
- buildEqualOperation(leftSide, rightSide) {
519
- return {
520
- type: 'operation',
521
- operator: '=',
522
- args: [leftSide, rightSide],
523
- };
524
- }
525
- buildGtOperation(leftSide, rightSide) {
526
- return {
527
- type: 'operation',
528
- operator: '>',
529
- args: [leftSide, rightSide],
530
- };
531
- }
532
- buildGteOperation(leftSide, rightSide) {
533
- return {
534
- type: 'operation',
535
- operator: '>=',
536
- args: [leftSide, rightSide],
537
- };
538
- }
539
- buildLtOperation(leftSide, rightSide) {
540
- return {
541
- type: 'operation',
542
- operator: '<',
543
- args: [leftSide, rightSide],
544
- };
545
- }
546
- buildLteOperation(leftSide, rightSide) {
547
- return {
548
- type: 'operation',
549
- operator: '<=',
550
- args: [leftSide, rightSide],
551
- };
552
- }
553
- buildNotEqualOperation(leftSide, rightSide) {
554
- return {
555
- type: 'operation',
556
- operator: '!=',
557
- args: [leftSide, rightSide],
558
- };
559
- }
560
- buildTypesAndSuperTypesTriple(subject, object) {
561
- return { subject, predicate: TripleUtil_1.allTypesAndSuperTypesPath, object };
562
- }
563
- resolveValueToTerm(value) {
564
- if (typeof value === 'object' && '@value' in value) {
565
- return (0, TripleUtil_1.valueToLiteral)(value['@value'], '@type' in value ? value['@type'] : undefined);
566
- }
567
- if ((0, Util_1.isUrl)(value)) {
568
- return data_model_1.default.namedNode(value);
569
- }
570
- return (0, TripleUtil_1.valueToLiteral)(value);
571
- }
572
- createOrderQueryData(subject, order) {
573
- if (!order) {
574
- return { triples: [], orders: [], variables: [] };
575
- }
576
- return Object.entries(order).reduce((obj, [property, direction]) => {
577
- const orderQueryData = this.createOrderQueryDataForProperty(subject, property, direction);
578
- obj.orders = [...obj.orders, orderQueryData.order];
579
- obj.variables.push(orderQueryData.variable);
580
- if (orderQueryData.triple) {
581
- obj.triples.push(orderQueryData.triple);
582
- }
583
- return obj;
584
- }, { triples: [], orders: [], variables: [] });
585
- }
586
- createOrderQueryDataForProperty(subject, property, direction) {
587
- if (property === 'id') {
588
- return {
589
- triple: undefined,
590
- order: {
591
- expression: subject,
592
- descending: direction === 'DESC' || direction === 'desc',
593
- },
594
- variable: subject,
595
- };
596
- }
597
- const variable = this.createVariable();
598
- return {
599
- triple: {
600
- subject,
601
- predicate: data_model_1.default.namedNode(property),
602
- object: variable,
603
- },
604
- order: {
605
- expression: variable,
606
- descending: direction === 'DESC' || direction === 'desc',
607
- },
608
- variable,
609
- };
610
- }
611
- createRelationsQueryData(subject, relations) {
612
- if (!relations) {
613
- return { variables: [], triples: [], graphTriples: [] };
614
- }
615
- return Object.entries(relations).reduce((obj, [property, value]) => {
616
- const variable = this.createVariable();
617
- obj.variables.push(variable);
618
- const predicate = data_model_1.default.namedNode(property);
619
- if (typeof value === 'object') {
620
- if (value.type && value.type === 'operator') {
621
- obj.triples.push({
622
- subject,
623
- predicate: this.inversePropertyPredicate(predicate),
624
- object: variable,
625
- });
626
- if (typeof value.value === 'object') {
627
- const subRelationsQueryData = this.createRelationsQueryData(variable, value.value);
628
- obj.variables = [...obj.variables, ...subRelationsQueryData.variables];
629
- obj.graphTriples = [
630
- ...obj.graphTriples,
631
- ...subRelationsQueryData.triples,
632
- ...subRelationsQueryData.graphTriples,
633
- ];
634
- }
635
- }
636
- else {
637
- obj.triples.push({ subject, predicate, object: variable });
638
- const subRelationsQueryData = this.createRelationsQueryData(variable, value);
639
- obj.variables = [...obj.variables, ...subRelationsQueryData.variables];
640
- obj.graphTriples = [
641
- ...obj.graphTriples,
642
- ...subRelationsQueryData.triples,
643
- ...subRelationsQueryData.graphTriples,
644
- ];
645
- }
646
- }
647
- else {
648
- obj.triples.push({ subject, predicate, object: variable });
649
- }
650
- return obj;
651
- }, { variables: [], triples: [], graphTriples: [] });
652
- }
653
- createVariable() {
654
- return data_model_1.default.variable(this.variableGenerator.getNext());
655
- }
656
- }
657
- exports.SparqlQueryBuilder = SparqlQueryBuilder;
658
3
  //# sourceMappingURL=SparqlQueryBuilder.js.map