@_linked/core 1.0.0 → 1.2.0-next.20260302120536

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 (187) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +321 -43
  3. package/lib/cjs/index.js +4 -0
  4. package/lib/cjs/index.js.map +1 -1
  5. package/lib/cjs/interfaces/IQuadStore.d.ts +19 -7
  6. package/lib/cjs/queries/CreateQuery.d.ts +7 -8
  7. package/lib/cjs/queries/CreateQuery.js +4 -4
  8. package/lib/cjs/queries/CreateQuery.js.map +1 -1
  9. package/lib/cjs/queries/DeleteQuery.d.ts +7 -8
  10. package/lib/cjs/queries/DeleteQuery.js +4 -4
  11. package/lib/cjs/queries/DeleteQuery.js.map +1 -1
  12. package/lib/cjs/queries/IRAliasScope.d.ts +20 -0
  13. package/lib/cjs/queries/IRAliasScope.js +52 -0
  14. package/lib/cjs/queries/IRAliasScope.js.map +1 -0
  15. package/lib/cjs/queries/IRCanonicalize.d.ts +36 -0
  16. package/lib/cjs/queries/IRCanonicalize.js +121 -0
  17. package/lib/cjs/queries/IRCanonicalize.js.map +1 -0
  18. package/lib/cjs/queries/IRDesugar.d.ts +98 -0
  19. package/lib/cjs/queries/IRDesugar.js +244 -0
  20. package/lib/cjs/queries/IRDesugar.js.map +1 -0
  21. package/lib/cjs/queries/IRLower.d.ts +8 -0
  22. package/lib/cjs/queries/IRLower.js +272 -0
  23. package/lib/cjs/queries/IRLower.js.map +1 -0
  24. package/lib/cjs/queries/IRMutation.d.ts +23 -0
  25. package/lib/cjs/queries/IRMutation.js +77 -0
  26. package/lib/cjs/queries/IRMutation.js.map +1 -0
  27. package/lib/cjs/queries/IRPipeline.d.ts +8 -0
  28. package/lib/cjs/queries/IRPipeline.js +25 -0
  29. package/lib/cjs/queries/IRPipeline.js.map +1 -0
  30. package/lib/cjs/queries/IRProjection.d.ts +38 -0
  31. package/lib/cjs/queries/IRProjection.js +98 -0
  32. package/lib/cjs/queries/IRProjection.js.map +1 -0
  33. package/lib/cjs/queries/IntermediateRepresentation.d.ts +210 -0
  34. package/lib/cjs/queries/IntermediateRepresentation.js +3 -0
  35. package/lib/cjs/queries/IntermediateRepresentation.js.map +1 -0
  36. package/lib/cjs/queries/MutationQuery.js +9 -23
  37. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  38. package/lib/cjs/queries/QueryFactory.d.ts +0 -2
  39. package/lib/cjs/queries/QueryFactory.js +0 -3
  40. package/lib/cjs/queries/QueryFactory.js.map +1 -1
  41. package/lib/cjs/queries/QueryParser.d.ts +6 -1
  42. package/lib/cjs/queries/QueryParser.js +14 -22
  43. package/lib/cjs/queries/QueryParser.js.map +1 -1
  44. package/lib/cjs/queries/SelectQuery.d.ts +18 -27
  45. package/lib/cjs/queries/SelectQuery.js +54 -45
  46. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  47. package/lib/cjs/queries/UpdateQuery.d.ts +8 -9
  48. package/lib/cjs/queries/UpdateQuery.js +4 -4
  49. package/lib/cjs/queries/UpdateQuery.js.map +1 -1
  50. package/lib/cjs/shapes/SHACL.d.ts +1 -0
  51. package/lib/cjs/shapes/SHACL.js +82 -2
  52. package/lib/cjs/shapes/SHACL.js.map +1 -1
  53. package/lib/cjs/shapes/Shape.d.ts +11 -10
  54. package/lib/cjs/shapes/Shape.js +11 -5
  55. package/lib/cjs/shapes/Shape.js.map +1 -1
  56. package/lib/cjs/sparql/SparqlAlgebra.d.ts +158 -0
  57. package/lib/cjs/sparql/SparqlAlgebra.js +4 -0
  58. package/lib/cjs/sparql/SparqlAlgebra.js.map +1 -0
  59. package/lib/cjs/sparql/SparqlStore.d.ts +52 -0
  60. package/lib/cjs/sparql/SparqlStore.js +81 -0
  61. package/lib/cjs/sparql/SparqlStore.js.map +1 -0
  62. package/lib/cjs/sparql/algebraToString.d.ts +13 -0
  63. package/lib/cjs/sparql/algebraToString.js +298 -0
  64. package/lib/cjs/sparql/algebraToString.js.map +1 -0
  65. package/lib/cjs/sparql/index.d.ts +9 -0
  66. package/lib/cjs/sparql/index.js +40 -0
  67. package/lib/cjs/sparql/index.js.map +1 -0
  68. package/lib/cjs/sparql/irToAlgebra.d.ts +39 -0
  69. package/lib/cjs/sparql/irToAlgebra.js +927 -0
  70. package/lib/cjs/sparql/irToAlgebra.js.map +1 -0
  71. package/lib/cjs/sparql/resultMapping.d.ts +36 -0
  72. package/lib/cjs/sparql/resultMapping.js +501 -0
  73. package/lib/cjs/sparql/resultMapping.js.map +1 -0
  74. package/lib/cjs/sparql/sparqlUtils.d.ts +32 -0
  75. package/lib/cjs/sparql/sparqlUtils.js +89 -0
  76. package/lib/cjs/sparql/sparqlUtils.js.map +1 -0
  77. package/lib/cjs/test-helpers/FusekiStore.d.ts +29 -0
  78. package/lib/cjs/test-helpers/FusekiStore.js +82 -0
  79. package/lib/cjs/test-helpers/FusekiStore.js.map +1 -0
  80. package/lib/cjs/test-helpers/fuseki-test-store.d.ts +43 -0
  81. package/lib/cjs/test-helpers/fuseki-test-store.js +144 -0
  82. package/lib/cjs/test-helpers/fuseki-test-store.js.map +1 -0
  83. package/lib/cjs/test-helpers/query-capture-store.d.ts +5 -0
  84. package/lib/cjs/test-helpers/query-capture-store.js +59 -0
  85. package/lib/cjs/test-helpers/query-capture-store.js.map +1 -0
  86. package/lib/cjs/test-helpers/query-fixtures.d.ts +700 -117
  87. package/lib/cjs/test-helpers/query-fixtures.js +39 -1
  88. package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
  89. package/lib/cjs/utils/LinkedStorage.d.ts +7 -7
  90. package/lib/cjs/utils/LinkedStorage.js +4 -3
  91. package/lib/cjs/utils/LinkedStorage.js.map +1 -1
  92. package/lib/esm/index.js +4 -0
  93. package/lib/esm/index.js.map +1 -1
  94. package/lib/esm/interfaces/IQuadStore.d.ts +19 -7
  95. package/lib/esm/queries/CreateQuery.d.ts +7 -8
  96. package/lib/esm/queries/CreateQuery.js +4 -4
  97. package/lib/esm/queries/CreateQuery.js.map +1 -1
  98. package/lib/esm/queries/DeleteQuery.d.ts +7 -8
  99. package/lib/esm/queries/DeleteQuery.js +4 -4
  100. package/lib/esm/queries/DeleteQuery.js.map +1 -1
  101. package/lib/esm/queries/IRAliasScope.d.ts +20 -0
  102. package/lib/esm/queries/IRAliasScope.js +47 -0
  103. package/lib/esm/queries/IRAliasScope.js.map +1 -0
  104. package/lib/esm/queries/IRCanonicalize.d.ts +36 -0
  105. package/lib/esm/queries/IRCanonicalize.js +116 -0
  106. package/lib/esm/queries/IRCanonicalize.js.map +1 -0
  107. package/lib/esm/queries/IRDesugar.d.ts +98 -0
  108. package/lib/esm/queries/IRDesugar.js +240 -0
  109. package/lib/esm/queries/IRDesugar.js.map +1 -0
  110. package/lib/esm/queries/IRLower.d.ts +8 -0
  111. package/lib/esm/queries/IRLower.js +268 -0
  112. package/lib/esm/queries/IRLower.js.map +1 -0
  113. package/lib/esm/queries/IRMutation.d.ts +23 -0
  114. package/lib/esm/queries/IRMutation.js +71 -0
  115. package/lib/esm/queries/IRMutation.js.map +1 -0
  116. package/lib/esm/queries/IRPipeline.d.ts +8 -0
  117. package/lib/esm/queries/IRPipeline.js +21 -0
  118. package/lib/esm/queries/IRPipeline.js.map +1 -0
  119. package/lib/esm/queries/IRProjection.d.ts +38 -0
  120. package/lib/esm/queries/IRProjection.js +92 -0
  121. package/lib/esm/queries/IRProjection.js.map +1 -0
  122. package/lib/esm/queries/IntermediateRepresentation.d.ts +210 -0
  123. package/lib/esm/queries/IntermediateRepresentation.js +2 -0
  124. package/lib/esm/queries/IntermediateRepresentation.js.map +1 -0
  125. package/lib/esm/queries/MutationQuery.js +9 -23
  126. package/lib/esm/queries/MutationQuery.js.map +1 -1
  127. package/lib/esm/queries/QueryFactory.d.ts +0 -2
  128. package/lib/esm/queries/QueryFactory.js +0 -3
  129. package/lib/esm/queries/QueryFactory.js.map +1 -1
  130. package/lib/esm/queries/QueryParser.d.ts +6 -1
  131. package/lib/esm/queries/QueryParser.js +14 -23
  132. package/lib/esm/queries/QueryParser.js.map +1 -1
  133. package/lib/esm/queries/SelectQuery.d.ts +18 -27
  134. package/lib/esm/queries/SelectQuery.js +54 -45
  135. package/lib/esm/queries/SelectQuery.js.map +1 -1
  136. package/lib/esm/queries/UpdateQuery.d.ts +8 -9
  137. package/lib/esm/queries/UpdateQuery.js +4 -4
  138. package/lib/esm/queries/UpdateQuery.js.map +1 -1
  139. package/lib/esm/shapes/SHACL.d.ts +1 -0
  140. package/lib/esm/shapes/SHACL.js +82 -2
  141. package/lib/esm/shapes/SHACL.js.map +1 -1
  142. package/lib/esm/shapes/Shape.d.ts +11 -10
  143. package/lib/esm/shapes/Shape.js +11 -5
  144. package/lib/esm/shapes/Shape.js.map +1 -1
  145. package/lib/esm/sparql/SparqlAlgebra.d.ts +158 -0
  146. package/lib/esm/sparql/SparqlAlgebra.js +3 -0
  147. package/lib/esm/sparql/SparqlAlgebra.js.map +1 -0
  148. package/lib/esm/sparql/SparqlStore.d.ts +52 -0
  149. package/lib/esm/sparql/SparqlStore.js +77 -0
  150. package/lib/esm/sparql/SparqlStore.js.map +1 -0
  151. package/lib/esm/sparql/algebraToString.d.ts +13 -0
  152. package/lib/esm/sparql/algebraToString.js +289 -0
  153. package/lib/esm/sparql/algebraToString.js.map +1 -0
  154. package/lib/esm/sparql/index.d.ts +9 -0
  155. package/lib/esm/sparql/index.js +13 -0
  156. package/lib/esm/sparql/index.js.map +1 -0
  157. package/lib/esm/sparql/irToAlgebra.d.ts +39 -0
  158. package/lib/esm/sparql/irToAlgebra.js +917 -0
  159. package/lib/esm/sparql/irToAlgebra.js.map +1 -0
  160. package/lib/esm/sparql/resultMapping.d.ts +36 -0
  161. package/lib/esm/sparql/resultMapping.js +496 -0
  162. package/lib/esm/sparql/resultMapping.js.map +1 -0
  163. package/lib/esm/sparql/sparqlUtils.d.ts +32 -0
  164. package/lib/esm/sparql/sparqlUtils.js +82 -0
  165. package/lib/esm/sparql/sparqlUtils.js.map +1 -0
  166. package/lib/esm/test-helpers/FusekiStore.d.ts +29 -0
  167. package/lib/esm/test-helpers/FusekiStore.js +78 -0
  168. package/lib/esm/test-helpers/FusekiStore.js.map +1 -0
  169. package/lib/esm/test-helpers/fuseki-test-store.d.ts +43 -0
  170. package/lib/esm/test-helpers/fuseki-test-store.js +135 -0
  171. package/lib/esm/test-helpers/fuseki-test-store.js.map +1 -0
  172. package/lib/esm/test-helpers/query-capture-store.d.ts +5 -0
  173. package/lib/esm/test-helpers/query-capture-store.js +55 -0
  174. package/lib/esm/test-helpers/query-capture-store.js.map +1 -0
  175. package/lib/esm/test-helpers/query-fixtures.d.ts +700 -117
  176. package/lib/esm/test-helpers/query-fixtures.js +38 -0
  177. package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
  178. package/lib/esm/utils/LinkedStorage.d.ts +7 -7
  179. package/lib/esm/utils/LinkedStorage.js +4 -3
  180. package/lib/esm/utils/LinkedStorage.js.map +1 -1
  181. package/package.json +7 -3
  182. package/lib/cjs/interfaces/IQueryParser.d.ts +0 -13
  183. package/lib/cjs/interfaces/IQueryParser.js +0 -10
  184. package/lib/cjs/interfaces/IQueryParser.js.map +0 -1
  185. package/lib/esm/interfaces/IQueryParser.d.ts +0 -13
  186. package/lib/esm/interfaces/IQueryParser.js +0 -7
  187. package/lib/esm/interfaces/IQueryParser.js.map +0 -1
@@ -11,6 +11,7 @@ exports.Shape = void 0;
11
11
  */
12
12
  const next_tick_1 = __importDefault(require("next-tick"));
13
13
  const SelectQuery_js_1 = require("../queries/SelectQuery.js");
14
+ const QueryParser_js_1 = require("../queries/QueryParser.js");
14
15
  const ShapeClass_js_1 = require("../utils/ShapeClass.js");
15
16
  const ShapeSet_js_1 = require("../collections/ShapeSet.js");
16
17
  class Shape {
@@ -74,8 +75,7 @@ class Shape {
74
75
  const query = new SelectQuery_js_1.SelectQueryFactory(this, _selectFn, subject);
75
76
  let p = new Promise((resolve, reject) => {
76
77
  (0, next_tick_1.default)(() => {
77
- this.queryParser
78
- .selectQuery(query)
78
+ QueryParser_js_1.QueryParser.selectQuery(query)
79
79
  .then((result) => {
80
80
  resolve(result);
81
81
  })
@@ -86,14 +86,20 @@ class Shape {
86
86
  });
87
87
  return query.patchResultPromise(p);
88
88
  }
89
+ static selectAll(subject) {
90
+ const propertyLabels = this
91
+ .shape.getUniquePropertyShapes()
92
+ .map((propertyShape) => propertyShape.label);
93
+ return this.select(subject, (shape) => propertyLabels.map((label) => shape[label]));
94
+ }
89
95
  static update(id, updateObjectOrFn) {
90
- return this.queryParser.updateQuery(id, updateObjectOrFn, this);
96
+ return QueryParser_js_1.QueryParser.updateQuery(id, updateObjectOrFn, this);
91
97
  }
92
98
  static create(updateObjectOrFn) {
93
- return this.queryParser.createQuery(updateObjectOrFn, this);
99
+ return QueryParser_js_1.QueryParser.createQuery(updateObjectOrFn, this);
94
100
  }
95
101
  static delete(id) {
96
- return this.queryParser.deleteQuery(id, this);
102
+ return QueryParser_js_1.QueryParser.deleteQuery(id, this);
97
103
  }
98
104
  static mapPropertyShapes(mapFunction) {
99
105
  let dummyShape = new this();
@@ -1 +1 @@
1
- {"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ export type SparqlTerm = {
2
+ kind: 'variable';
3
+ name: string;
4
+ } | {
5
+ kind: 'iri';
6
+ value: string;
7
+ } | {
8
+ kind: 'literal';
9
+ value: string;
10
+ datatype?: string;
11
+ language?: string;
12
+ };
13
+ export type SparqlTriple = {
14
+ subject: SparqlTerm;
15
+ predicate: SparqlTerm;
16
+ object: SparqlTerm;
17
+ };
18
+ export type SparqlAlgebraNode = SparqlBGP | SparqlJoin | SparqlLeftJoin | SparqlFilter | SparqlUnion | SparqlMinus | SparqlExtend | SparqlGraph;
19
+ export type SparqlBGP = {
20
+ type: 'bgp';
21
+ triples: SparqlTriple[];
22
+ };
23
+ export type SparqlJoin = {
24
+ type: 'join';
25
+ left: SparqlAlgebraNode;
26
+ right: SparqlAlgebraNode;
27
+ };
28
+ export type SparqlLeftJoin = {
29
+ type: 'left_join';
30
+ left: SparqlAlgebraNode;
31
+ right: SparqlAlgebraNode;
32
+ condition?: SparqlExpression;
33
+ };
34
+ export type SparqlFilter = {
35
+ type: 'filter';
36
+ expression: SparqlExpression;
37
+ inner: SparqlAlgebraNode;
38
+ };
39
+ export type SparqlUnion = {
40
+ type: 'union';
41
+ left: SparqlAlgebraNode;
42
+ right: SparqlAlgebraNode;
43
+ };
44
+ export type SparqlMinus = {
45
+ type: 'minus';
46
+ left: SparqlAlgebraNode;
47
+ right: SparqlAlgebraNode;
48
+ };
49
+ export type SparqlExtend = {
50
+ type: 'extend';
51
+ inner: SparqlAlgebraNode;
52
+ variable: string;
53
+ expression: SparqlExpression;
54
+ };
55
+ export type SparqlGraph = {
56
+ type: 'graph';
57
+ iri: string;
58
+ inner: SparqlAlgebraNode;
59
+ };
60
+ export type SparqlExpression = SparqlVariableExpr | SparqlIriExpr | SparqlLiteralExpr | SparqlBinaryExpr | SparqlLogicalExpr | SparqlNotExpr | SparqlFunctionExpr | SparqlAggregateExpr | SparqlExistsExpr | SparqlBoundExpr;
61
+ export type SparqlVariableExpr = {
62
+ kind: 'variable_expr';
63
+ name: string;
64
+ };
65
+ export type SparqlIriExpr = {
66
+ kind: 'iri_expr';
67
+ value: string;
68
+ };
69
+ export type SparqlLiteralExpr = {
70
+ kind: 'literal_expr';
71
+ value: string;
72
+ datatype?: string;
73
+ };
74
+ export type SparqlBinaryExpr = {
75
+ kind: 'binary_expr';
76
+ op: string;
77
+ left: SparqlExpression;
78
+ right: SparqlExpression;
79
+ };
80
+ export type SparqlLogicalExpr = {
81
+ kind: 'logical_expr';
82
+ op: 'and' | 'or';
83
+ exprs: SparqlExpression[];
84
+ };
85
+ export type SparqlNotExpr = {
86
+ kind: 'not_expr';
87
+ inner: SparqlExpression;
88
+ };
89
+ export type SparqlFunctionExpr = {
90
+ kind: 'function_expr';
91
+ name: string;
92
+ args: SparqlExpression[];
93
+ };
94
+ export type SparqlAggregateExpr = {
95
+ kind: 'aggregate_expr';
96
+ name: string;
97
+ args: SparqlExpression[];
98
+ distinct?: boolean;
99
+ };
100
+ export type SparqlExistsExpr = {
101
+ kind: 'exists_expr';
102
+ pattern: SparqlAlgebraNode;
103
+ negated: boolean;
104
+ };
105
+ export type SparqlBoundExpr = {
106
+ kind: 'bound_expr';
107
+ variable: string;
108
+ };
109
+ export type SparqlProjectionItem = {
110
+ kind: 'variable';
111
+ name: string;
112
+ } | {
113
+ kind: 'aggregate';
114
+ expression: SparqlAggregateExpr;
115
+ alias: string;
116
+ } | {
117
+ kind: 'expression';
118
+ expression: SparqlExpression;
119
+ alias: string;
120
+ };
121
+ export type SparqlOrderCondition = {
122
+ expression: SparqlExpression;
123
+ direction: 'ASC' | 'DESC';
124
+ };
125
+ export type SparqlAggregateBinding = {
126
+ variable: string;
127
+ aggregate: SparqlAggregateExpr;
128
+ };
129
+ export type SparqlSelectPlan = {
130
+ type: 'select';
131
+ algebra: SparqlAlgebraNode;
132
+ projection: SparqlProjectionItem[];
133
+ distinct?: boolean;
134
+ orderBy?: SparqlOrderCondition[];
135
+ limit?: number;
136
+ offset?: number;
137
+ groupBy?: string[];
138
+ having?: SparqlExpression;
139
+ aggregates?: SparqlAggregateBinding[];
140
+ };
141
+ export type SparqlInsertDataPlan = {
142
+ type: 'insert_data';
143
+ triples: SparqlTriple[];
144
+ graph?: string;
145
+ };
146
+ export type SparqlDeleteInsertPlan = {
147
+ type: 'delete_insert';
148
+ deletePatterns: SparqlTriple[];
149
+ insertPatterns: SparqlTriple[];
150
+ whereAlgebra: SparqlAlgebraNode;
151
+ graph?: string;
152
+ };
153
+ export type SparqlDeleteWherePlan = {
154
+ type: 'delete_where';
155
+ patterns: SparqlAlgebraNode;
156
+ graph?: string;
157
+ };
158
+ export type SparqlPlan = SparqlSelectPlan | SparqlInsertDataPlan | SparqlDeleteInsertPlan | SparqlDeleteWherePlan;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // --- Term types ---
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=SparqlAlgebra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SparqlAlgebra.js","sourceRoot":"","sources":["../../../src/sparql/SparqlAlgebra.ts"],"names":[],"mappings":";AAAA,qBAAqB"}
@@ -0,0 +1,52 @@
1
+ import type { IQuadStore } from '../interfaces/IQuadStore.js';
2
+ import type { SelectQuery } from '../queries/SelectQuery.js';
3
+ import type { CreateQuery } from '../queries/CreateQuery.js';
4
+ import type { UpdateQuery } from '../queries/UpdateQuery.js';
5
+ import type { DeleteQuery, DeleteResponse } from '../queries/DeleteQuery.js';
6
+ import type { SelectResult, CreateResult, UpdateResult } from '../queries/IntermediateRepresentation.js';
7
+ import type { SparqlJsonResults } from './resultMapping.js';
8
+ import { type SparqlOptions } from './sparqlUtils.js';
9
+ /**
10
+ * Abstract base class for SPARQL-backed quad stores.
11
+ *
12
+ * Handles the full pipeline: IR query → SPARQL string → execute → map results.
13
+ * Subclasses only need to implement the two transport methods:
14
+ * - `executeSparqlSelect` — send a SPARQL SELECT and return JSON results
15
+ * - `executeSparqlUpdate` — send a SPARQL UPDATE (INSERT DATA / DELETE..INSERT / etc.)
16
+ *
17
+ * Example subclass (Fuseki):
18
+ * ```ts
19
+ * class FusekiStore extends SparqlStore {
20
+ * constructor(baseUrl: string, dataset: string) {
21
+ * super({ dataRoot: 'http://data.example.org' });
22
+ * this.queryEndpoint = `${baseUrl}/${dataset}/sparql`;
23
+ * this.updateEndpoint = `${baseUrl}/${dataset}/update`;
24
+ * }
25
+ * protected async executeSparqlSelect(sparql: string) {
26
+ * const res = await fetch(this.queryEndpoint, { ... });
27
+ * return res.json();
28
+ * }
29
+ * protected async executeSparqlUpdate(sparql: string) {
30
+ * await fetch(this.updateEndpoint, { ... });
31
+ * }
32
+ * }
33
+ * ```
34
+ */
35
+ export declare abstract class SparqlStore implements IQuadStore {
36
+ protected options?: SparqlOptions;
37
+ constructor(options?: SparqlOptions);
38
+ /**
39
+ * Send a SPARQL SELECT/ASK/CONSTRUCT query and return the parsed
40
+ * SPARQL JSON Results (application/sparql-results+json).
41
+ */
42
+ protected abstract executeSparqlSelect(sparql: string): Promise<SparqlJsonResults>;
43
+ /**
44
+ * Send a SPARQL UPDATE request (INSERT DATA, DELETE/INSERT, etc.).
45
+ * No return value — the update is fire-and-forget at the SPARQL level.
46
+ */
47
+ protected abstract executeSparqlUpdate(sparql: string): Promise<void>;
48
+ selectQuery(query: SelectQuery): Promise<SelectResult>;
49
+ createQuery(query: CreateQuery): Promise<CreateResult>;
50
+ updateQuery(query: UpdateQuery): Promise<UpdateResult>;
51
+ deleteQuery(query: DeleteQuery): Promise<DeleteResponse>;
52
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SparqlStore = void 0;
13
+ const irToAlgebra_js_1 = require("./irToAlgebra.js");
14
+ const resultMapping_js_1 = require("./resultMapping.js");
15
+ const sparqlUtils_js_1 = require("./sparqlUtils.js");
16
+ /**
17
+ * Abstract base class for SPARQL-backed quad stores.
18
+ *
19
+ * Handles the full pipeline: IR query → SPARQL string → execute → map results.
20
+ * Subclasses only need to implement the two transport methods:
21
+ * - `executeSparqlSelect` — send a SPARQL SELECT and return JSON results
22
+ * - `executeSparqlUpdate` — send a SPARQL UPDATE (INSERT DATA / DELETE..INSERT / etc.)
23
+ *
24
+ * Example subclass (Fuseki):
25
+ * ```ts
26
+ * class FusekiStore extends SparqlStore {
27
+ * constructor(baseUrl: string, dataset: string) {
28
+ * super({ dataRoot: 'http://data.example.org' });
29
+ * this.queryEndpoint = `${baseUrl}/${dataset}/sparql`;
30
+ * this.updateEndpoint = `${baseUrl}/${dataset}/update`;
31
+ * }
32
+ * protected async executeSparqlSelect(sparql: string) {
33
+ * const res = await fetch(this.queryEndpoint, { ... });
34
+ * return res.json();
35
+ * }
36
+ * protected async executeSparqlUpdate(sparql: string) {
37
+ * await fetch(this.updateEndpoint, { ... });
38
+ * }
39
+ * }
40
+ * ```
41
+ */
42
+ class SparqlStore {
43
+ constructor(options) {
44
+ this.options = options;
45
+ }
46
+ selectQuery(query) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ const sparql = (0, irToAlgebra_js_1.selectToSparql)(query, this.options);
49
+ const json = yield this.executeSparqlSelect(sparql);
50
+ return (0, resultMapping_js_1.mapSparqlSelectResult)(json, query);
51
+ });
52
+ }
53
+ createQuery(query) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ const uri = (0, sparqlUtils_js_1.generateEntityUri)(query.data.shape, this.options);
56
+ query.data.id = uri;
57
+ const sparql = (0, irToAlgebra_js_1.createToSparql)(query, this.options);
58
+ yield this.executeSparqlUpdate(sparql);
59
+ return (0, resultMapping_js_1.mapSparqlCreateResult)(uri, query);
60
+ });
61
+ }
62
+ updateQuery(query) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const sparql = (0, irToAlgebra_js_1.updateToSparql)(query, this.options);
65
+ yield this.executeSparqlUpdate(sparql);
66
+ return (0, resultMapping_js_1.mapSparqlUpdateResult)(query);
67
+ });
68
+ }
69
+ deleteQuery(query) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const sparql = (0, irToAlgebra_js_1.deleteToSparql)(query, this.options);
72
+ yield this.executeSparqlUpdate(sparql);
73
+ return {
74
+ deleted: query.ids,
75
+ count: query.ids.length,
76
+ };
77
+ });
78
+ }
79
+ }
80
+ exports.SparqlStore = SparqlStore;
81
+ //# sourceMappingURL=SparqlStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SparqlStore.js","sourceRoot":"","sources":["../../../src/sparql/SparqlStore.ts"],"names":[],"mappings":";;;;;;;;;;;;AAWA,qDAK0B;AAC1B,yDAI4B;AAC5B,qDAAuE;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAsB,WAAW;IAG/B,YAAY,OAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAgBK,WAAW,CAAC,KAAkB;;YAClC,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACpD,OAAO,IAAA,wCAAqB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;KAAA;IAEK,WAAW,CAAC,KAAkB;;YAClC,MAAM,GAAG,GAAG,IAAA,kCAAiB,EAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;YACpB,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACvC,OAAO,IAAA,wCAAqB,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;KAAA;IAEK,WAAW,CAAC,KAAkB;;YAClC,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACvC,OAAO,IAAA,wCAAqB,EAAC,KAAK,CAAC,CAAC;QACtC,CAAC;KAAA;IAEK,WAAW,CAAC,KAAkB;;YAClC,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,GAAG;gBAClB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM;aACxB,CAAC;QACJ,CAAC;KAAA;CACF;AAjDD,kCAiDC"}
@@ -0,0 +1,13 @@
1
+ import { SparqlAlgebraNode, SparqlExpression, SparqlTerm, SparqlSelectPlan, SparqlInsertDataPlan, SparqlDeleteInsertPlan, SparqlDeleteWherePlan } from './SparqlAlgebra.js';
2
+ import { SparqlOptions } from './sparqlUtils.js';
3
+ type UriCollector = {
4
+ uris: Set<string>;
5
+ };
6
+ export declare function serializeTerm(term: SparqlTerm, collector?: UriCollector): string;
7
+ export declare function serializeExpression(expr: SparqlExpression, collector?: UriCollector): string;
8
+ export declare function serializeAlgebraNode(node: SparqlAlgebraNode, collector?: UriCollector): string;
9
+ export declare function selectPlanToSparql(plan: SparqlSelectPlan, _options?: SparqlOptions): string;
10
+ export declare function insertDataPlanToSparql(plan: SparqlInsertDataPlan, _options?: SparqlOptions): string;
11
+ export declare function deleteInsertPlanToSparql(plan: SparqlDeleteInsertPlan, _options?: SparqlOptions): string;
12
+ export declare function deleteWherePlanToSparql(plan: SparqlDeleteWherePlan, _options?: SparqlOptions): string;
13
+ export {};
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeTerm = serializeTerm;
4
+ exports.serializeExpression = serializeExpression;
5
+ exports.serializeAlgebraNode = serializeAlgebraNode;
6
+ exports.selectPlanToSparql = selectPlanToSparql;
7
+ exports.insertDataPlanToSparql = insertDataPlanToSparql;
8
+ exports.deleteInsertPlanToSparql = deleteInsertPlanToSparql;
9
+ exports.deleteWherePlanToSparql = deleteWherePlanToSparql;
10
+ const sparqlUtils_js_1 = require("./sparqlUtils.js");
11
+ function collectUri(collector, uri) {
12
+ collector.uris.add(uri);
13
+ }
14
+ // ---------------------------------------------------------------------------
15
+ // Term serialization
16
+ // ---------------------------------------------------------------------------
17
+ function serializeTerm(term, collector) {
18
+ switch (term.kind) {
19
+ case 'variable':
20
+ return `?${term.name}`;
21
+ case 'iri':
22
+ if (collector)
23
+ collectUri(collector, term.value);
24
+ return (0, sparqlUtils_js_1.formatUri)(term.value);
25
+ case 'literal': {
26
+ if (term.language) {
27
+ return `"${(0, sparqlUtils_js_1.escapeSparqlString)(term.value)}"@${term.language}`;
28
+ }
29
+ if (term.datatype) {
30
+ if (collector)
31
+ collectUri(collector, term.datatype);
32
+ }
33
+ return (0, sparqlUtils_js_1.formatLiteral)(term.value, term.datatype);
34
+ }
35
+ }
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // Triple serialization
39
+ // ---------------------------------------------------------------------------
40
+ function serializeTriple(triple, collector) {
41
+ const s = serializeTerm(triple.subject, collector);
42
+ const p = serializeTerm(triple.predicate, collector);
43
+ const o = serializeTerm(triple.object, collector);
44
+ return `${s} ${p} ${o}`;
45
+ }
46
+ function serializeTriples(triples, collector) {
47
+ return triples
48
+ .map((t) => serializeTriple(t, collector) + ' .')
49
+ .join('\n');
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // Expression serialization
53
+ // ---------------------------------------------------------------------------
54
+ function serializeExpression(expr, collector) {
55
+ switch (expr.kind) {
56
+ case 'variable_expr':
57
+ return `?${expr.name}`;
58
+ case 'iri_expr':
59
+ if (collector)
60
+ collectUri(collector, expr.value);
61
+ return (0, sparqlUtils_js_1.formatUri)(expr.value);
62
+ case 'literal_expr': {
63
+ if (expr.datatype && collector)
64
+ collectUri(collector, expr.datatype);
65
+ return (0, sparqlUtils_js_1.formatLiteral)(expr.value, expr.datatype);
66
+ }
67
+ case 'binary_expr': {
68
+ const left = serializeExpression(expr.left, collector);
69
+ const right = serializeExpression(expr.right, collector);
70
+ return `${left} ${expr.op} ${right}`;
71
+ }
72
+ case 'logical_expr': {
73
+ const op = expr.op === 'and' ? '&&' : '||';
74
+ const parts = expr.exprs.map((e) => {
75
+ const s = serializeExpression(e, collector);
76
+ // Parenthesize OR children inside AND (AND binds tighter than OR)
77
+ if (expr.op === 'and' && e.kind === 'logical_expr' && e.op === 'or') {
78
+ return `(${s})`;
79
+ }
80
+ return s;
81
+ });
82
+ return parts.join(` ${op} `);
83
+ }
84
+ case 'not_expr':
85
+ return `!(${serializeExpression(expr.inner, collector)})`;
86
+ case 'function_expr': {
87
+ const args = expr.args
88
+ .map((a) => serializeExpression(a, collector))
89
+ .join(', ');
90
+ return `${expr.name}(${args})`;
91
+ }
92
+ case 'aggregate_expr': {
93
+ const args = expr.args
94
+ .map((a) => serializeExpression(a, collector))
95
+ .join(', ');
96
+ const distinctPrefix = expr.distinct ? 'DISTINCT ' : '';
97
+ return `${expr.name}(${distinctPrefix}${args})`;
98
+ }
99
+ case 'exists_expr': {
100
+ const inner = serializeAlgebraNode(expr.pattern, collector);
101
+ const prefix = expr.negated ? 'NOT EXISTS' : 'EXISTS';
102
+ return `${prefix} {\n${indent(inner)}\n}`;
103
+ }
104
+ case 'bound_expr':
105
+ return `BOUND(?${expr.variable})`;
106
+ }
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // Algebra node serialization
110
+ // ---------------------------------------------------------------------------
111
+ function serializeAlgebraNode(node, collector) {
112
+ switch (node.type) {
113
+ case 'bgp':
114
+ return serializeTriples(node.triples, collector);
115
+ case 'join': {
116
+ const left = serializeAlgebraNode(node.left, collector);
117
+ const right = serializeAlgebraNode(node.right, collector);
118
+ return `${left}\n${right}`;
119
+ }
120
+ case 'left_join': {
121
+ const left = serializeAlgebraNode(node.left, collector);
122
+ const right = serializeAlgebraNode(node.right, collector);
123
+ let optionalBlock = `OPTIONAL {\n${indent(right)}\n}`;
124
+ if (node.condition) {
125
+ const cond = serializeExpression(node.condition, collector);
126
+ // OPTIONAL with filter: OPTIONAL { pattern FILTER(cond) }
127
+ // Re-build to include filter inside the OPTIONAL block
128
+ optionalBlock = `OPTIONAL {\n${indent(right)}\n FILTER(${cond})\n}`;
129
+ }
130
+ // If left side is empty (e.g. UPDATE WHERE with all-OPTIONAL triples),
131
+ // omit the empty prefix to avoid blank lines
132
+ return left ? `${left}\n${optionalBlock}` : optionalBlock;
133
+ }
134
+ case 'filter': {
135
+ const inner = serializeAlgebraNode(node.inner, collector);
136
+ const expr = serializeExpression(node.expression, collector);
137
+ return `${inner}\nFILTER(${expr})`;
138
+ }
139
+ case 'union': {
140
+ const left = serializeAlgebraNode(node.left, collector);
141
+ const right = serializeAlgebraNode(node.right, collector);
142
+ return `{\n${indent(left)}\n}\nUNION\n{\n${indent(right)}\n}`;
143
+ }
144
+ case 'minus': {
145
+ const left = serializeAlgebraNode(node.left, collector);
146
+ const right = serializeAlgebraNode(node.right, collector);
147
+ return `${left}\nMINUS {\n${indent(right)}\n}`;
148
+ }
149
+ case 'extend': {
150
+ const inner = serializeAlgebraNode(node.inner, collector);
151
+ const expr = serializeExpression(node.expression, collector);
152
+ return `${inner}\nBIND(${expr} AS ?${node.variable})`;
153
+ }
154
+ case 'graph': {
155
+ if (collector)
156
+ collectUri(collector, node.iri);
157
+ const inner = serializeAlgebraNode(node.inner, collector);
158
+ return `GRAPH ${(0, sparqlUtils_js_1.formatUri)(node.iri)} {\n${indent(inner)}\n}`;
159
+ }
160
+ }
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // Helpers
164
+ // ---------------------------------------------------------------------------
165
+ function indent(text, level = 1) {
166
+ const prefix = ' '.repeat(level);
167
+ return text
168
+ .split('\n')
169
+ .map((line) => prefix + line)
170
+ .join('\n');
171
+ }
172
+ function buildPrefixBlock(usedUris) {
173
+ const prefixes = (0, sparqlUtils_js_1.collectPrefixes)([...usedUris]);
174
+ const lines = Object.entries(prefixes)
175
+ .sort(([a], [b]) => a.localeCompare(b))
176
+ .map(([prefix, uri]) => `PREFIX ${prefix}: <${uri}>`);
177
+ return lines.join('\n');
178
+ }
179
+ // ---------------------------------------------------------------------------
180
+ // Top-level plan serializers
181
+ // ---------------------------------------------------------------------------
182
+ function selectPlanToSparql(plan, _options) {
183
+ const collector = { uris: new Set() };
184
+ // 1. Serialize WHERE body
185
+ const body = serializeAlgebraNode(plan.algebra, collector);
186
+ // 2. Build SELECT line
187
+ const projectionParts = plan.projection.map((item) => {
188
+ if (item.kind === 'variable') {
189
+ return `?${item.name}`;
190
+ }
191
+ else {
192
+ // aggregate or expression projection: (expr AS ?alias)
193
+ const expr = serializeExpression(item.expression, collector);
194
+ return `(${expr} AS ?${item.alias})`;
195
+ }
196
+ });
197
+ const distinctStr = plan.distinct ? 'DISTINCT ' : '';
198
+ const selectLine = `SELECT ${distinctStr}${projectionParts.join(' ')}`;
199
+ // 3. Build WHERE block
200
+ const whereBlock = `WHERE {\n${indent(body)}\n}`;
201
+ // 4. Build trailing clauses
202
+ const clauses = [];
203
+ if (plan.groupBy && plan.groupBy.length > 0) {
204
+ clauses.push(`GROUP BY ${plan.groupBy.map((v) => `?${v}`).join(' ')}`);
205
+ }
206
+ if (plan.having) {
207
+ const havingExpr = serializeExpression(plan.having, collector);
208
+ clauses.push(`HAVING(${havingExpr})`);
209
+ }
210
+ if (plan.orderBy && plan.orderBy.length > 0) {
211
+ const orderParts = plan.orderBy.map((cond) => {
212
+ const expr = serializeExpression(cond.expression, collector);
213
+ return `${cond.direction}(${expr})`;
214
+ });
215
+ clauses.push(`ORDER BY ${orderParts.join(' ')}`);
216
+ }
217
+ if (plan.limit !== undefined) {
218
+ clauses.push(`LIMIT ${plan.limit}`);
219
+ }
220
+ if (plan.offset !== undefined) {
221
+ clauses.push(`OFFSET ${plan.offset}`);
222
+ }
223
+ // 5. Build PREFIX block (after collecting all URIs)
224
+ const prefixBlock = buildPrefixBlock(collector.uris);
225
+ // 6. Assemble
226
+ const parts = [];
227
+ if (prefixBlock)
228
+ parts.push(prefixBlock);
229
+ parts.push(selectLine);
230
+ parts.push(whereBlock);
231
+ parts.push(...clauses);
232
+ return parts.join('\n');
233
+ }
234
+ function insertDataPlanToSparql(plan, _options) {
235
+ const collector = { uris: new Set() };
236
+ let triplesStr;
237
+ if (plan.graph) {
238
+ if (collector)
239
+ collectUri(collector, plan.graph);
240
+ const innerTriples = serializeTriples(plan.triples, collector);
241
+ triplesStr = `GRAPH ${(0, sparqlUtils_js_1.formatUri)(plan.graph)} {\n${indent(innerTriples)}\n}`;
242
+ }
243
+ else {
244
+ triplesStr = serializeTriples(plan.triples, collector);
245
+ }
246
+ const body = `INSERT DATA {\n${indent(triplesStr)}\n}`;
247
+ const prefixBlock = buildPrefixBlock(collector.uris);
248
+ const parts = [];
249
+ if (prefixBlock)
250
+ parts.push(prefixBlock);
251
+ parts.push(body);
252
+ return parts.join('\n');
253
+ }
254
+ function deleteInsertPlanToSparql(plan, _options) {
255
+ const collector = { uris: new Set() };
256
+ // DELETE block
257
+ const deleteTriples = serializeTriples(plan.deletePatterns, collector);
258
+ const deletePart = `DELETE {\n${indent(deleteTriples)}\n}`;
259
+ // INSERT block (may be empty)
260
+ let insertPart = '';
261
+ if (plan.insertPatterns.length > 0) {
262
+ const insertTriples = serializeTriples(plan.insertPatterns, collector);
263
+ insertPart = `INSERT {\n${indent(insertTriples)}\n}\n`;
264
+ }
265
+ // WHERE block
266
+ const whereBody = serializeAlgebraNode(plan.whereAlgebra, collector);
267
+ const wherePart = `WHERE {\n${indent(whereBody)}\n}`;
268
+ const prefixBlock = buildPrefixBlock(collector.uris);
269
+ const parts = [];
270
+ if (prefixBlock)
271
+ parts.push(prefixBlock);
272
+ parts.push(deletePart);
273
+ if (insertPart)
274
+ parts.push(insertPart.trimEnd());
275
+ parts.push(wherePart);
276
+ return parts.join('\n');
277
+ }
278
+ function deleteWherePlanToSparql(plan, _options) {
279
+ const collector = { uris: new Set() };
280
+ const body = serializeAlgebraNode(plan.patterns, collector);
281
+ let content;
282
+ if (plan.graph) {
283
+ if (collector)
284
+ collectUri(collector, plan.graph);
285
+ content = `GRAPH ${(0, sparqlUtils_js_1.formatUri)(plan.graph)} {\n${indent(body)}\n}`;
286
+ }
287
+ else {
288
+ content = body;
289
+ }
290
+ const result = `DELETE WHERE {\n${indent(content)}\n}`;
291
+ const prefixBlock = buildPrefixBlock(collector.uris);
292
+ const parts = [];
293
+ if (prefixBlock)
294
+ parts.push(prefixBlock);
295
+ parts.push(result);
296
+ return parts.join('\n');
297
+ }
298
+ //# sourceMappingURL=algebraToString.js.map