@traqula/rules-sparql-1-1 0.0.1-alpha.176 → 0.0.1
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.
- package/lib/RoundTripTypes.d.ts +379 -0
- package/lib/RoundTripTypes.js +2 -0
- package/lib/RoundTripTypes.js.map +1 -0
- package/lib/Sparql11types.d.ts +18 -245
- package/lib/Sparql11types.js.map +1 -1
- package/lib/SparqlParser.d.ts +13 -4
- package/lib/SparqlParser.js +7 -4
- package/lib/SparqlParser.js.map +1 -1
- package/lib/expressionHelpers.d.ts +8 -19
- package/lib/expressionHelpers.js +40 -103
- package/lib/expressionHelpers.js.map +1 -1
- package/lib/factory.d.ts +447 -0
- package/lib/factory.js +105 -0
- package/lib/factory.js.map +1 -0
- package/lib/factoryMixins/ContextFactory.d.ts +38 -0
- package/lib/factoryMixins/ContextFactory.js +30 -0
- package/lib/factoryMixins/ContextFactory.js.map +1 -0
- package/lib/factoryMixins/ExpressionFactory.d.ts +60 -0
- package/lib/factoryMixins/ExpressionFactory.js +83 -0
- package/lib/factoryMixins/ExpressionFactory.js.map +1 -0
- package/lib/factoryMixins/GraphRefFactory.d.ts +43 -0
- package/lib/factoryMixins/GraphRefFactory.js +51 -0
- package/lib/factoryMixins/GraphRefFactory.js.map +1 -0
- package/lib/factoryMixins/PathFactory.d.ts +51 -0
- package/lib/factoryMixins/PathFactory.js +68 -0
- package/lib/factoryMixins/PathFactory.js.map +1 -0
- package/lib/factoryMixins/Patternfactory.d.ts +55 -0
- package/lib/factoryMixins/Patternfactory.js +98 -0
- package/lib/factoryMixins/Patternfactory.js.map +1 -0
- package/lib/factoryMixins/QueryFactory.d.ts +41 -0
- package/lib/factoryMixins/QueryFactory.js +43 -0
- package/lib/factoryMixins/QueryFactory.js.map +1 -0
- package/lib/factoryMixins/SolutionModifiersFactory.d.ts +43 -0
- package/lib/factoryMixins/SolutionModifiersFactory.js +55 -0
- package/lib/factoryMixins/SolutionModifiersFactory.js.map +1 -0
- package/lib/factoryMixins/TermFactory.d.ts +76 -0
- package/lib/factoryMixins/TermFactory.js +84 -0
- package/lib/factoryMixins/TermFactory.js.map +1 -0
- package/lib/factoryMixins/UpdateOperationFactory.d.ts +68 -0
- package/lib/factoryMixins/UpdateOperationFactory.js +126 -0
- package/lib/factoryMixins/UpdateOperationFactory.js.map +1 -0
- package/lib/factoryMixins/mixins.d.ts +14 -0
- package/lib/factoryMixins/mixins.js +20 -0
- package/lib/factoryMixins/mixins.js.map +1 -0
- package/lib/grammar/builtIn.d.ts +59 -59
- package/lib/grammar/builtIn.js +50 -57
- package/lib/grammar/builtIn.js.map +1 -1
- package/lib/grammar/dataSetClause.d.ts +22 -9
- package/lib/grammar/dataSetClause.js +57 -14
- package/lib/grammar/dataSetClause.js.map +1 -1
- package/lib/grammar/expression.d.ts +12 -16
- package/lib/grammar/expression.js +224 -296
- package/lib/grammar/expression.js.map +1 -1
- package/lib/grammar/general.d.ts +8 -8
- package/lib/grammar/general.js +59 -94
- package/lib/grammar/general.js.map +1 -1
- package/lib/grammar/literals.d.ts +16 -13
- package/lib/grammar/literals.js +161 -144
- package/lib/grammar/literals.js.map +1 -1
- package/lib/grammar/propertyPaths.d.ts +16 -12
- package/lib/grammar/propertyPaths.js +100 -129
- package/lib/grammar/propertyPaths.js.map +1 -1
- package/lib/grammar/queryUnit/queryUnit.d.ts +13 -17
- package/lib/grammar/queryUnit/queryUnit.js +195 -329
- package/lib/grammar/queryUnit/queryUnit.js.map +1 -1
- package/lib/grammar/solutionModifier.d.ts +12 -11
- package/lib/grammar/solutionModifier.js +125 -109
- package/lib/grammar/solutionModifier.js.map +1 -1
- package/lib/grammar/tripleBlock.d.ts +24 -33
- package/lib/grammar/tripleBlock.js +172 -126
- package/lib/grammar/tripleBlock.js.map +1 -1
- package/lib/grammar/updateUnit/updateUnit.d.ts +28 -33
- package/lib/grammar/updateUnit/updateUnit.js +282 -367
- package/lib/grammar/updateUnit/updateUnit.js.map +1 -1
- package/lib/grammar/whereClause.d.ts +20 -19
- package/lib/grammar/whereClause.js +232 -245
- package/lib/grammar/whereClause.js.map +1 -1
- package/lib/grammar-helpers/utils.d.ts +0 -4
- package/lib/grammar-helpers/utils.js +0 -37
- package/lib/grammar-helpers/utils.js.map +1 -1
- package/lib/index.cjs +3061 -2438
- package/lib/index.d.ts +4 -2
- package/lib/index.js +4 -2
- package/lib/index.js.map +1 -1
- package/lib/lexer/lexer.d.ts +4 -3
- package/lib/lexer/lexer.js +11 -7
- package/lib/lexer/lexer.js.map +1 -1
- package/lib/lexer/terminals.d.ts +0 -34
- package/lib/lexer/terminals.js +35 -37
- package/lib/lexer/terminals.js.map +1 -1
- package/lib/utils.d.ts +0 -3
- package/lib/utils.js +0 -6
- package/lib/utils.js.map +1 -1
- package/lib/validation/validators.d.ts +14 -0
- package/lib/validation/validators.js +235 -0
- package/lib/validation/validators.js.map +1 -0
- package/package.json +6 -8
- package/lib/Wildcard.d.ts +0 -9
- package/lib/Wildcard.js +0 -19
- package/lib/Wildcard.js.map +0 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { unCapitalize } from '@traqula/core';
|
|
2
2
|
import * as l from '../../lexer';
|
|
3
|
+
import { updateNoReuseBlankNodeLabels } from '../../validation/validators';
|
|
4
|
+
import { usingClauseStar } from '../dataSetClause';
|
|
3
5
|
import { prologue, varOrIri, varOrTerm } from '../general';
|
|
4
6
|
import { iri } from '../literals';
|
|
5
7
|
import { triplesBlock, triplesTemplate } from '../tripleBlock';
|
|
@@ -9,50 +11,50 @@ import { groupGraphPattern } from '../whereClause';
|
|
|
9
11
|
*/
|
|
10
12
|
export const updateUnit = {
|
|
11
13
|
name: 'updateUnit',
|
|
12
|
-
impl: ({
|
|
13
|
-
const data = SUBRULE(update, undefined);
|
|
14
|
-
ACTION(() => data.updates.reverse());
|
|
15
|
-
return data;
|
|
16
|
-
},
|
|
14
|
+
impl: ({ SUBRULE }) => () => SUBRULE(update, undefined),
|
|
17
15
|
};
|
|
18
16
|
/**
|
|
19
17
|
* [[29]](https://www.w3.org/TR/sparql11-query/#rUpdate)
|
|
20
18
|
*/
|
|
21
19
|
export const update = {
|
|
22
20
|
name: 'update',
|
|
23
|
-
impl: ({ ACTION, SUBRULE, SUBRULE1, SUBRULE2, CONSUME, OPTION1, MANY }) => () => {
|
|
21
|
+
impl: ({ ACTION, SUBRULE, SUBRULE1, SUBRULE2, CONSUME, OPTION1, MANY }) => (C) => {
|
|
22
|
+
// Override prologueValues on new reads of prologue and sink them into updates later
|
|
23
|
+
const updates = [];
|
|
24
24
|
const prologueValues = SUBRULE1(prologue, undefined);
|
|
25
|
-
|
|
26
|
-
type: 'update',
|
|
27
|
-
base: prologueValues.base,
|
|
28
|
-
prefixes: prologueValues.prefixes,
|
|
29
|
-
updates: [],
|
|
30
|
-
};
|
|
25
|
+
updates.push({ context: prologueValues });
|
|
31
26
|
let parsedSemi = true;
|
|
32
27
|
MANY({
|
|
33
28
|
GATE: () => parsedSemi,
|
|
34
29
|
DEF: () => {
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
parsedSemi = false;
|
|
31
|
+
updates.at(-1).operation = SUBRULE(update1, undefined);
|
|
37
32
|
OPTION1(() => {
|
|
38
33
|
CONSUME(l.symbols.semi);
|
|
39
34
|
parsedSemi = true;
|
|
40
|
-
SUBRULE2(prologue, undefined);
|
|
41
|
-
|
|
42
|
-
result.base = prologueValues.base ?? result.base;
|
|
43
|
-
result.prefixes = prologueValues.prefixes ?
|
|
44
|
-
{ ...result.prefixes, ...prologueValues.prefixes } :
|
|
45
|
-
result.prefixes;
|
|
46
|
-
});
|
|
35
|
+
const innerPrologue = SUBRULE2(prologue, undefined);
|
|
36
|
+
updates.push({ context: innerPrologue });
|
|
47
37
|
});
|
|
48
38
|
},
|
|
49
39
|
});
|
|
50
|
-
return
|
|
40
|
+
return ACTION(() => {
|
|
41
|
+
const update = {
|
|
42
|
+
type: 'update',
|
|
43
|
+
updates,
|
|
44
|
+
loc: C.factory.sourceLocation(...updates[0].context, updates[0].operation, ...updates.at(-1).context, updates.at(-1)?.operation),
|
|
45
|
+
};
|
|
46
|
+
updateNoReuseBlankNodeLabels(update);
|
|
47
|
+
return update;
|
|
48
|
+
});
|
|
51
49
|
},
|
|
52
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
51
|
+
for (const update of ast.updates) {
|
|
52
|
+
SUBRULE(prologue, update.context, undefined);
|
|
53
|
+
if (update.operation) {
|
|
54
|
+
SUBRULE(update1, update.operation, undefined);
|
|
55
|
+
F.printFilter(ast, () => PRINT_WORD(' ;\n'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
56
58
|
},
|
|
57
59
|
};
|
|
58
60
|
/**
|
|
@@ -74,35 +76,40 @@ export const update1 = {
|
|
|
74
76
|
{ ALT: () => SUBRULE(modify, undefined) },
|
|
75
77
|
]),
|
|
76
78
|
gImpl: ({ SUBRULE }) => (ast) => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
case '
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
79
|
+
switch (ast.subType) {
|
|
80
|
+
case ('load'):
|
|
81
|
+
SUBRULE(load, ast, undefined);
|
|
82
|
+
break;
|
|
83
|
+
case ('clear'):
|
|
84
|
+
SUBRULE(clear, ast, undefined);
|
|
85
|
+
break;
|
|
86
|
+
case ('drop'):
|
|
87
|
+
SUBRULE(drop, ast, undefined);
|
|
88
|
+
break;
|
|
89
|
+
case ('add'):
|
|
90
|
+
SUBRULE(add, ast, undefined);
|
|
91
|
+
break;
|
|
92
|
+
case ('move'):
|
|
93
|
+
SUBRULE(move, ast, undefined);
|
|
94
|
+
break;
|
|
95
|
+
case ('copy'):
|
|
96
|
+
SUBRULE(copy, ast, undefined);
|
|
97
|
+
break;
|
|
98
|
+
case ('create'):
|
|
99
|
+
SUBRULE(create, ast, undefined);
|
|
100
|
+
break;
|
|
101
|
+
case ('insertdata'):
|
|
102
|
+
SUBRULE(insertData, ast, undefined);
|
|
103
|
+
break;
|
|
104
|
+
case ('deletedata'):
|
|
105
|
+
SUBRULE(deleteData, ast, undefined);
|
|
106
|
+
break;
|
|
107
|
+
case ('deletewhere'):
|
|
108
|
+
SUBRULE(deleteWhere, ast, undefined);
|
|
109
|
+
break;
|
|
110
|
+
case ('modify'):
|
|
111
|
+
SUBRULE(modify, ast, undefined);
|
|
112
|
+
break;
|
|
106
113
|
}
|
|
107
114
|
},
|
|
108
115
|
};
|
|
@@ -111,132 +118,100 @@ export const update1 = {
|
|
|
111
118
|
*/
|
|
112
119
|
export const load = {
|
|
113
120
|
name: 'load',
|
|
114
|
-
impl: ({
|
|
115
|
-
CONSUME(l.load);
|
|
116
|
-
const silent =
|
|
117
|
-
const source =
|
|
121
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION1, OPTION2 }) => (C) => {
|
|
122
|
+
const loadToken = CONSUME(l.load);
|
|
123
|
+
const silent = OPTION1(() => CONSUME(l.silent));
|
|
124
|
+
const source = SUBRULE1(iri, undefined);
|
|
118
125
|
const destination = OPTION2(() => {
|
|
119
126
|
CONSUME(l.loadInto);
|
|
120
|
-
return
|
|
127
|
+
return SUBRULE1(graphRef, undefined);
|
|
121
128
|
});
|
|
122
|
-
return
|
|
123
|
-
type: 'load',
|
|
124
|
-
silent,
|
|
125
|
-
source,
|
|
126
|
-
...(destination && { destination }),
|
|
127
|
-
};
|
|
129
|
+
return ACTION(() => C.factory.updateOperationLoad(C.factory.sourceLocation(loadToken, source, destination), source, Boolean(silent), destination));
|
|
128
130
|
},
|
|
129
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
131
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
132
|
+
F.printFilter(ast, () => {
|
|
133
|
+
PRINT_WORD('LOAD');
|
|
134
|
+
if (ast.silent) {
|
|
135
|
+
PRINT_WORD('SILENT');
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
SUBRULE(iri, ast.source, undefined);
|
|
135
139
|
if (ast.destination) {
|
|
136
|
-
|
|
140
|
+
F.printFilter(ast, () => PRINT_WORD('INTO'));
|
|
141
|
+
SUBRULE(graphRefAll, ast.destination, undefined);
|
|
137
142
|
}
|
|
138
|
-
return builder.join(' ');
|
|
139
143
|
},
|
|
140
144
|
};
|
|
145
|
+
function clearOrDrop(operation) {
|
|
146
|
+
return {
|
|
147
|
+
name: unCapitalize(operation.name),
|
|
148
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION }) => (C) => {
|
|
149
|
+
const opToken = CONSUME(operation);
|
|
150
|
+
const silent = OPTION(() => CONSUME(l.silent));
|
|
151
|
+
const destination = SUBRULE1(graphRefAll, undefined);
|
|
152
|
+
return ACTION(() => C.factory.updateOperationClearDrop(unCapitalize(operation.name), Boolean(silent), destination, C.factory.sourceLocation(opToken, destination)));
|
|
153
|
+
},
|
|
154
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
155
|
+
F.printFilter(ast, () => {
|
|
156
|
+
PRINT_WORD(operation.name.toUpperCase());
|
|
157
|
+
if (ast.silent) {
|
|
158
|
+
PRINT_WORD('SILENT');
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
SUBRULE(graphRefAll, ast.destination, undefined);
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
141
165
|
/**
|
|
142
166
|
* [[32]](https://www.w3.org/TR/sparql11-query/#rClear)
|
|
143
167
|
*/
|
|
144
|
-
export const clear =
|
|
145
|
-
name: 'clear',
|
|
146
|
-
impl: ({ SUBRULE, CONSUME, OPTION }) => () => {
|
|
147
|
-
CONSUME(l.clear);
|
|
148
|
-
const silent = Boolean(OPTION(() => CONSUME(l.silent)));
|
|
149
|
-
const graph = SUBRULE(graphRefAll, undefined);
|
|
150
|
-
return {
|
|
151
|
-
type: 'clear',
|
|
152
|
-
silent,
|
|
153
|
-
graph,
|
|
154
|
-
};
|
|
155
|
-
},
|
|
156
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
157
|
-
const builder = ['CLEAR'];
|
|
158
|
-
if (ast.silent) {
|
|
159
|
-
builder.push('SILENT');
|
|
160
|
-
}
|
|
161
|
-
builder.push(SUBRULE(graphRefAll, ast.graph, undefined));
|
|
162
|
-
return builder.join(' ');
|
|
163
|
-
},
|
|
164
|
-
};
|
|
168
|
+
export const clear = clearOrDrop(l.clear);
|
|
165
169
|
/**
|
|
166
170
|
* [[33]](https://www.w3.org/TR/sparql11-query/#rDrop)
|
|
167
171
|
*/
|
|
168
|
-
export const drop =
|
|
169
|
-
name: 'drop',
|
|
170
|
-
impl: ({ SUBRULE, CONSUME, OPTION }) => () => {
|
|
171
|
-
CONSUME(l.drop);
|
|
172
|
-
const silent = Boolean(OPTION(() => CONSUME(l.silent)));
|
|
173
|
-
const graph = SUBRULE(graphRefAll, undefined);
|
|
174
|
-
return {
|
|
175
|
-
type: 'drop',
|
|
176
|
-
silent,
|
|
177
|
-
graph,
|
|
178
|
-
};
|
|
179
|
-
},
|
|
180
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
181
|
-
const builder = ['DROP'];
|
|
182
|
-
if (ast.silent) {
|
|
183
|
-
builder.push('SILENT');
|
|
184
|
-
}
|
|
185
|
-
builder.push(SUBRULE(graphRefAll, ast.graph, undefined));
|
|
186
|
-
return builder.join(' ');
|
|
187
|
-
},
|
|
188
|
-
};
|
|
172
|
+
export const drop = clearOrDrop(l.drop);
|
|
189
173
|
/**
|
|
190
174
|
* [[34]](https://www.w3.org/TR/sparql11-query/#rCreate)
|
|
191
175
|
*/
|
|
192
176
|
export const create = {
|
|
193
177
|
name: 'create',
|
|
194
|
-
impl: ({
|
|
195
|
-
CONSUME(l.create);
|
|
196
|
-
const silent =
|
|
197
|
-
const
|
|
198
|
-
return
|
|
199
|
-
type: 'create',
|
|
200
|
-
silent,
|
|
201
|
-
graph: {
|
|
202
|
-
type: 'graph',
|
|
203
|
-
name: graph,
|
|
204
|
-
},
|
|
205
|
-
};
|
|
178
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION }) => (C) => {
|
|
179
|
+
const createToken = CONSUME(l.create);
|
|
180
|
+
const silent = OPTION(() => CONSUME(l.silent));
|
|
181
|
+
const destination = SUBRULE1(graphRef, undefined);
|
|
182
|
+
return ACTION(() => C.factory.updateOperationCreate(destination, Boolean(silent), C.factory.sourceLocation(createToken, destination)));
|
|
206
183
|
},
|
|
207
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
184
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
185
|
+
F.printFilter(ast, () => {
|
|
186
|
+
PRINT_WORD('CREATE');
|
|
187
|
+
if (ast.silent) {
|
|
188
|
+
PRINT_WORD('SILENT');
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
SUBRULE(graphRefAll, ast.destination, undefined);
|
|
214
192
|
},
|
|
215
193
|
};
|
|
216
194
|
function copyMoveAddOperation(operation) {
|
|
217
195
|
return {
|
|
218
196
|
name: unCapitalize(operation.name),
|
|
219
|
-
impl: ({ CONSUME, SUBRULE1, SUBRULE2, OPTION }) => () => {
|
|
220
|
-
CONSUME(operation);
|
|
221
|
-
const silent =
|
|
197
|
+
impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, OPTION }) => (C) => {
|
|
198
|
+
const op = CONSUME(operation);
|
|
199
|
+
const silent = OPTION(() => CONSUME(l.silent));
|
|
222
200
|
const source = SUBRULE1(graphOrDefault, undefined);
|
|
223
201
|
CONSUME(l.to);
|
|
224
202
|
const destination = SUBRULE2(graphOrDefault, undefined);
|
|
225
|
-
return
|
|
226
|
-
type: unCapitalize(operation.name),
|
|
227
|
-
silent,
|
|
228
|
-
source,
|
|
229
|
-
destination,
|
|
230
|
-
};
|
|
203
|
+
return ACTION(() => C.factory.updateOperationAddMoveCopy(unCapitalize(operation.name), source, destination, Boolean(silent), C.factory.sourceLocation(op, destination)));
|
|
231
204
|
},
|
|
232
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
205
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
206
|
+
F.printFilter(ast, () => {
|
|
207
|
+
PRINT_WORD(operation.name.toUpperCase());
|
|
208
|
+
if (ast.silent) {
|
|
209
|
+
PRINT_WORD('SILENT');
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
SUBRULE(graphRefAll, ast.source, undefined);
|
|
213
|
+
F.printFilter(ast, () => PRINT_WORD('TO'));
|
|
214
|
+
SUBRULE(graphRefAll, ast.destination, undefined);
|
|
240
215
|
},
|
|
241
216
|
};
|
|
242
217
|
}
|
|
@@ -253,124 +228,113 @@ export const move = copyMoveAddOperation(l.move);
|
|
|
253
228
|
*/
|
|
254
229
|
export const copy = copyMoveAddOperation(l.copy);
|
|
255
230
|
/**
|
|
256
|
-
* [[
|
|
231
|
+
* [[48]](https://www.w3.org/TR/sparql11-query/#rQuadPattern)
|
|
257
232
|
*/
|
|
258
|
-
export const
|
|
259
|
-
name: '
|
|
260
|
-
impl: ({
|
|
261
|
-
CONSUME(l.
|
|
262
|
-
|
|
263
|
-
const
|
|
264
|
-
return
|
|
265
|
-
updateType: 'insert',
|
|
266
|
-
insert,
|
|
267
|
-
};
|
|
233
|
+
export const quadPattern = {
|
|
234
|
+
name: 'quadPattern',
|
|
235
|
+
impl: ({ ACTION, SUBRULE1, CONSUME }) => (C) => {
|
|
236
|
+
const open = CONSUME(l.symbols.LCurly);
|
|
237
|
+
const val = SUBRULE1(quads, undefined);
|
|
238
|
+
const close = CONSUME(l.symbols.RCurly);
|
|
239
|
+
return ACTION(() => C.factory.wrap(val.val, C.factory.sourceLocation(open, close)));
|
|
268
240
|
},
|
|
269
|
-
gImpl: ({ SUBRULE }) => ast => `INSERT DATA ${SUBRULE(quadData, ast.insert, undefined)}`,
|
|
270
241
|
};
|
|
271
242
|
/**
|
|
272
|
-
* [[
|
|
243
|
+
* [[49]](https://www.w3.org/TR/sparql11-query/#rQuadData)
|
|
273
244
|
*/
|
|
274
|
-
export const
|
|
275
|
-
name: '
|
|
276
|
-
impl: ({ ACTION,
|
|
277
|
-
CONSUME(l.
|
|
278
|
-
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
return
|
|
283
|
-
updateType: 'delete',
|
|
284
|
-
delete: del,
|
|
285
|
-
};
|
|
245
|
+
export const quadData = {
|
|
246
|
+
name: 'quadData',
|
|
247
|
+
impl: ({ ACTION, SUBRULE1, CONSUME }) => (C) => {
|
|
248
|
+
const open = CONSUME(l.symbols.LCurly);
|
|
249
|
+
const couldParseVars = ACTION(() => C.parseMode.delete('canParseVars'));
|
|
250
|
+
const val = SUBRULE1(quads, undefined);
|
|
251
|
+
ACTION(() => couldParseVars && C.parseMode.add('canParseVars'));
|
|
252
|
+
const close = CONSUME(l.symbols.RCurly);
|
|
253
|
+
return ACTION(() => C.factory.wrap(val.val, C.factory.sourceLocation(open, close)));
|
|
286
254
|
},
|
|
287
|
-
gImpl: ({ SUBRULE }) => ast => `DELETE DATA ${SUBRULE(quadData, ast.delete, undefined)}`,
|
|
288
255
|
};
|
|
256
|
+
function insertDeleteDelWhere(name, subType, cons1, cons2, dataRule) {
|
|
257
|
+
return {
|
|
258
|
+
name,
|
|
259
|
+
impl: ({ ACTION, SUBRULE1, CONSUME }) => (C) => {
|
|
260
|
+
const insDelToken = CONSUME(cons1);
|
|
261
|
+
CONSUME(cons2);
|
|
262
|
+
let couldCreateBlankNodes = true;
|
|
263
|
+
if (name !== 'insertData') {
|
|
264
|
+
couldCreateBlankNodes = ACTION(() => C.parseMode.delete('canCreateBlankNodes'));
|
|
265
|
+
}
|
|
266
|
+
const data = SUBRULE1(dataRule, undefined);
|
|
267
|
+
if (name !== 'insertData') {
|
|
268
|
+
ACTION(() => couldCreateBlankNodes && C.parseMode.add('canCreateBlankNodes'));
|
|
269
|
+
}
|
|
270
|
+
return ACTION(() => C.factory.updateOperationInsDelDataWhere(subType, data.val, C.factory.sourceLocation(insDelToken, data)));
|
|
271
|
+
},
|
|
272
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
273
|
+
F.printFilter(ast, () => PRINT_WORD(subType === 'insertdata' ?
|
|
274
|
+
'INSERT DATA' :
|
|
275
|
+
(subType === 'deletedata' ? 'DELETE DATA' : 'DELETE WHERE'), '{'));
|
|
276
|
+
SUBRULE(quads, F.wrap(ast.data, ast.loc), undefined);
|
|
277
|
+
F.printFilter(ast, () => PRINT_WORD('}'));
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* [[38]](https://www.w3.org/TR/sparql11-query/#rInsertData)
|
|
283
|
+
*/
|
|
284
|
+
export const insertData = insertDeleteDelWhere('insertData', 'insertdata', l.insertClause, l.dataClause, quadData);
|
|
285
|
+
/**
|
|
286
|
+
* [[39]](https://www.w3.org/TR/sparql11-query/#rDeleteData)
|
|
287
|
+
*/
|
|
288
|
+
export const deleteData = insertDeleteDelWhere('deleteData', 'deletedata', l.deleteClause, l.dataClause, quadData);
|
|
289
289
|
/**
|
|
290
290
|
* [[40]](https://www.w3.org/TR/sparql11-query/#rDeleteWhere)
|
|
291
291
|
*/
|
|
292
|
-
export const deleteWhere =
|
|
293
|
-
name: 'deleteWhere',
|
|
294
|
-
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
295
|
-
CONSUME(l.deleteClause);
|
|
296
|
-
CONSUME(l.where);
|
|
297
|
-
const couldCreateBlankNodes = ACTION(() => C.parseMode.delete('canCreateBlankNodes'));
|
|
298
|
-
const del = SUBRULE(quadPattern, undefined);
|
|
299
|
-
ACTION(() => couldCreateBlankNodes && C.parseMode.add('canCreateBlankNodes'));
|
|
300
|
-
return {
|
|
301
|
-
updateType: 'deletewhere',
|
|
302
|
-
delete: del,
|
|
303
|
-
};
|
|
304
|
-
},
|
|
305
|
-
gImpl: ({ SUBRULE }) => ast => `DELETE WHERE ${SUBRULE(quadData, ast.delete, undefined)}`,
|
|
306
|
-
};
|
|
292
|
+
export const deleteWhere = insertDeleteDelWhere('deleteWhere', 'deletewhere', l.deleteClause, l.where, quadPattern);
|
|
307
293
|
/**
|
|
308
294
|
* [[41]](https://www.w3.org/TR/sparql11-query/#rModify)
|
|
309
295
|
*/
|
|
310
296
|
export const modify = {
|
|
311
297
|
name: 'modify',
|
|
312
|
-
impl: ({ ACTION,
|
|
298
|
+
impl: ({ ACTION, CONSUME, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OR }) => (C) => {
|
|
313
299
|
const graph = OPTION1(() => {
|
|
314
|
-
CONSUME(l.modifyWith);
|
|
315
|
-
|
|
300
|
+
const withToken = CONSUME(l.modifyWith);
|
|
301
|
+
const graph = SUBRULE1(iri, undefined);
|
|
302
|
+
return { withToken, graph };
|
|
316
303
|
});
|
|
317
|
-
const { insert,
|
|
318
|
-
{
|
|
319
|
-
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
},
|
|
324
|
-
},
|
|
304
|
+
const { insert, del } = OR([
|
|
305
|
+
{ ALT: () => {
|
|
306
|
+
const del = SUBRULE1(deleteClause, undefined);
|
|
307
|
+
const insert = OPTION2(() => SUBRULE1(insertClause, undefined));
|
|
308
|
+
return { del, insert };
|
|
309
|
+
} },
|
|
325
310
|
{ ALT: () => {
|
|
326
311
|
const insert = SUBRULE2(insertClause, undefined);
|
|
327
|
-
return { insert,
|
|
312
|
+
return { insert, del: undefined };
|
|
328
313
|
} },
|
|
329
314
|
]);
|
|
330
|
-
const
|
|
331
|
-
MANY(() => {
|
|
332
|
-
usingArr.push(SUBRULE(usingClause, undefined));
|
|
333
|
-
});
|
|
315
|
+
const using = SUBRULE1(usingClauseStar, undefined);
|
|
334
316
|
CONSUME(l.where);
|
|
335
|
-
const where =
|
|
336
|
-
return ACTION(() =>
|
|
337
|
-
const def = [];
|
|
338
|
-
const named = [];
|
|
339
|
-
for (const { value, type } of usingArr) {
|
|
340
|
-
if (type === 'default') {
|
|
341
|
-
def.push(value);
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
named.push(value);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
return {
|
|
348
|
-
updateType: 'insertdelete',
|
|
349
|
-
graph,
|
|
350
|
-
insert,
|
|
351
|
-
delete: del,
|
|
352
|
-
using: usingArr.length > 0 ? { default: def, named } : undefined,
|
|
353
|
-
where: where.patterns,
|
|
354
|
-
};
|
|
355
|
-
});
|
|
317
|
+
const where = SUBRULE1(groupGraphPattern, undefined);
|
|
318
|
+
return ACTION(() => C.factory.updateOperationModify(C.factory.sourceLocation(graph?.withToken, del, insert, where), insert?.val ?? [], del?.val ?? [], where, using, graph?.graph));
|
|
356
319
|
},
|
|
357
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
358
|
-
const builder = [];
|
|
320
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
359
321
|
if (ast.graph) {
|
|
360
|
-
|
|
322
|
+
F.printFilter(ast, () => PRINT_WORD('WITH'));
|
|
323
|
+
SUBRULE(iri, ast.graph, undefined);
|
|
361
324
|
}
|
|
362
325
|
if (ast.delete.length > 0) {
|
|
363
|
-
|
|
326
|
+
F.printFilter(ast, () => PRINT_WORD('DELETE', '{'));
|
|
327
|
+
SUBRULE(quads, F.wrap(ast.delete, ast.loc), undefined);
|
|
328
|
+
F.printFilter(ast, () => PRINT_WORD('}'));
|
|
364
329
|
}
|
|
365
330
|
if (ast.insert.length > 0) {
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
builder.push(...ast.using.default.map(val => `USING ${SUBRULE(iri, val, undefined)}`));
|
|
370
|
-
builder.push(...ast.using.named.map(val => `USING NAMED ${SUBRULE(iri, val, undefined)}`));
|
|
331
|
+
F.printFilter(ast, () => PRINT_WORD('INSERT', '{'));
|
|
332
|
+
SUBRULE(quads, F.wrap(ast.insert, ast.loc), undefined);
|
|
333
|
+
F.printFilter(ast, () => PRINT_WORD('}'));
|
|
371
334
|
}
|
|
372
|
-
|
|
373
|
-
|
|
335
|
+
SUBRULE(usingClauseStar, ast.from, undefined);
|
|
336
|
+
F.printFilter(ast, () => PRINT_WORD('WHERE'));
|
|
337
|
+
SUBRULE(groupGraphPattern, ast.where, undefined);
|
|
374
338
|
},
|
|
375
339
|
};
|
|
376
340
|
/**
|
|
@@ -379,11 +343,11 @@ export const modify = {
|
|
|
379
343
|
export const deleteClause = {
|
|
380
344
|
name: 'deleteClause',
|
|
381
345
|
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
382
|
-
CONSUME(l.deleteClause);
|
|
346
|
+
const delToken = CONSUME(l.deleteClause);
|
|
383
347
|
const couldCreateBlankNodes = ACTION(() => C.parseMode.delete('canCreateBlankNodes'));
|
|
384
348
|
const del = SUBRULE(quadPattern, undefined);
|
|
385
349
|
ACTION(() => couldCreateBlankNodes && C.parseMode.add('canCreateBlankNodes'));
|
|
386
|
-
return del;
|
|
350
|
+
return ACTION(() => C.factory.wrap(del.val, C.factory.sourceLocation(delToken, del)));
|
|
387
351
|
},
|
|
388
352
|
};
|
|
389
353
|
/**
|
|
@@ -391,31 +355,10 @@ export const deleteClause = {
|
|
|
391
355
|
*/
|
|
392
356
|
export const insertClause = {
|
|
393
357
|
name: 'insertClause',
|
|
394
|
-
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
395
|
-
CONSUME(l.insertClause);
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
};
|
|
399
|
-
/**
|
|
400
|
-
* [[44]](https://www.w3.org/TR/sparql11-query/#rUsingClause)
|
|
401
|
-
*/
|
|
402
|
-
export const usingClause = {
|
|
403
|
-
name: 'usingClause',
|
|
404
|
-
impl: ({ CONSUME, SUBRULE1, SUBRULE2, OR }) => () => {
|
|
405
|
-
CONSUME(l.usingClause);
|
|
406
|
-
return OR([
|
|
407
|
-
{ ALT: () => {
|
|
408
|
-
const value = SUBRULE1(iri, undefined);
|
|
409
|
-
return { value, type: 'default' };
|
|
410
|
-
} },
|
|
411
|
-
{
|
|
412
|
-
ALT: () => {
|
|
413
|
-
CONSUME(l.graph.named);
|
|
414
|
-
const value = SUBRULE2(iri, undefined);
|
|
415
|
-
return { value, type: 'named' };
|
|
416
|
-
},
|
|
417
|
-
},
|
|
418
|
-
]);
|
|
358
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
359
|
+
const insertToken = CONSUME(l.insertClause);
|
|
360
|
+
const insert = SUBRULE(quadPattern, undefined);
|
|
361
|
+
return ACTION(() => C.factory.wrap(insert.val, C.factory.sourceLocation(insertToken, insert)));
|
|
419
362
|
},
|
|
420
363
|
};
|
|
421
364
|
/**
|
|
@@ -423,156 +366,128 @@ export const usingClause = {
|
|
|
423
366
|
*/
|
|
424
367
|
export const graphOrDefault = {
|
|
425
368
|
name: 'graphOrDefault',
|
|
426
|
-
impl: ({
|
|
369
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION, OR }) => C => OR([
|
|
427
370
|
{ ALT: () => {
|
|
428
|
-
CONSUME(l.graph.default_);
|
|
429
|
-
return
|
|
371
|
+
const def = CONSUME(l.graph.default_);
|
|
372
|
+
return ACTION(() => C.factory.graphRefDefault(C.factory.sourceLocation(def)));
|
|
373
|
+
} },
|
|
374
|
+
{ ALT: () => {
|
|
375
|
+
const graph = OPTION(() => CONSUME(l.graph.graph));
|
|
376
|
+
const name = SUBRULE1(iri, undefined);
|
|
377
|
+
return ACTION(() => C.factory.graphRefSpecific(name, C.factory.sourceLocation(graph, name)));
|
|
430
378
|
} },
|
|
431
|
-
{
|
|
432
|
-
ALT: () => {
|
|
433
|
-
OPTION(() => CONSUME(l.graph.graph));
|
|
434
|
-
const name = SUBRULE(iri, undefined);
|
|
435
|
-
return {
|
|
436
|
-
type: 'graph',
|
|
437
|
-
name,
|
|
438
|
-
};
|
|
439
|
-
},
|
|
440
|
-
},
|
|
441
379
|
]),
|
|
442
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
443
|
-
if (ast.default) {
|
|
444
|
-
return 'DEFAULT';
|
|
445
|
-
}
|
|
446
|
-
return SUBRULE(iri, ast.name, undefined);
|
|
447
|
-
},
|
|
448
380
|
};
|
|
449
381
|
/**
|
|
450
382
|
* [[46]](https://www.w3.org/TR/sparql11-query/#rGraphRef)
|
|
451
383
|
*/
|
|
452
384
|
export const graphRef = {
|
|
453
385
|
name: 'graphRef',
|
|
454
|
-
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
455
|
-
CONSUME(l.graph.graph);
|
|
456
|
-
|
|
386
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
387
|
+
const graph = CONSUME(l.graph.graph);
|
|
388
|
+
const val = SUBRULE(iri, undefined);
|
|
389
|
+
return ACTION(() => C.factory.graphRefSpecific(val, C.factory.sourceLocation(graph, val)));
|
|
390
|
+
},
|
|
391
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
392
|
+
F.printFilter(ast, () => PRINT_WORD('GRAPH'));
|
|
393
|
+
SUBRULE(iri, ast.graph, undefined);
|
|
457
394
|
},
|
|
458
|
-
gImpl: ({ SUBRULE }) => ast => `GRAPH ${SUBRULE(iri, ast, undefined)}`,
|
|
459
395
|
};
|
|
460
396
|
/**
|
|
461
397
|
* [[47]](https://www.w3.org/TR/sparql11-query/#rGraphRefAll)
|
|
462
398
|
*/
|
|
463
399
|
export const graphRefAll = {
|
|
464
400
|
name: 'graphRefAll',
|
|
465
|
-
impl: ({ SUBRULE, CONSUME, OR }) =>
|
|
401
|
+
impl: ({ ACTION, SUBRULE, CONSUME, OR }) => C => OR([
|
|
402
|
+
{ ALT: () => SUBRULE(graphRef, undefined) },
|
|
466
403
|
{ ALT: () => {
|
|
467
|
-
const
|
|
468
|
-
return
|
|
404
|
+
const def = CONSUME(l.graph.default_);
|
|
405
|
+
return ACTION(() => C.factory.graphRefDefault(C.factory.sourceLocation(def)));
|
|
469
406
|
} },
|
|
470
407
|
{ ALT: () => {
|
|
471
|
-
CONSUME(l.graph.
|
|
472
|
-
return
|
|
408
|
+
const named = CONSUME(l.graph.named);
|
|
409
|
+
return ACTION(() => C.factory.graphRefNamed(C.factory.sourceLocation(named)));
|
|
473
410
|
} },
|
|
474
411
|
{ ALT: () => {
|
|
475
|
-
CONSUME(l.graph.
|
|
476
|
-
return
|
|
477
|
-
} },
|
|
478
|
-
{ ALT: () => {
|
|
479
|
-
CONSUME(l.graph.graphAll);
|
|
480
|
-
return { all: true };
|
|
412
|
+
const graphAll = CONSUME(l.graph.graphAll);
|
|
413
|
+
return ACTION(() => C.factory.graphRefAll(C.factory.sourceLocation(graphAll)));
|
|
481
414
|
} },
|
|
482
415
|
]),
|
|
483
|
-
gImpl: ({ SUBRULE }) => (ast) => {
|
|
484
|
-
if (ast
|
|
485
|
-
|
|
416
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
417
|
+
if (F.isGraphRefSpecific(ast)) {
|
|
418
|
+
SUBRULE(graphRef, ast, undefined);
|
|
486
419
|
}
|
|
487
|
-
if (ast
|
|
488
|
-
|
|
420
|
+
else if (F.isGraphRefDefault(ast)) {
|
|
421
|
+
F.printFilter(ast, () => PRINT_WORD('DEFAULT'));
|
|
489
422
|
}
|
|
490
|
-
if (ast
|
|
491
|
-
|
|
423
|
+
else if (F.isGraphRefNamed(ast)) {
|
|
424
|
+
F.printFilter(ast, () => PRINT_WORD('NAMED'));
|
|
425
|
+
}
|
|
426
|
+
else if (F.isGraphRefAll(ast)) {
|
|
427
|
+
F.printFilter(ast, () => PRINT_WORD('ALL'));
|
|
492
428
|
}
|
|
493
|
-
return SUBRULE(graphRef, ast.name, undefined);
|
|
494
|
-
},
|
|
495
|
-
};
|
|
496
|
-
/**
|
|
497
|
-
* [[48]](https://www.w3.org/TR/sparql11-query/#rQuadPattern)
|
|
498
|
-
*/
|
|
499
|
-
export const quadPattern = {
|
|
500
|
-
name: 'quadPattern',
|
|
501
|
-
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
502
|
-
CONSUME(l.symbols.LCurly);
|
|
503
|
-
const val = SUBRULE(quads, undefined);
|
|
504
|
-
CONSUME(l.symbols.RCurly);
|
|
505
|
-
return val;
|
|
506
|
-
},
|
|
507
|
-
};
|
|
508
|
-
/**
|
|
509
|
-
* [[49]](https://www.w3.org/TR/sparql11-query/#rQuadData)
|
|
510
|
-
*/
|
|
511
|
-
export const quadData = {
|
|
512
|
-
name: 'quadData',
|
|
513
|
-
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
514
|
-
CONSUME(l.symbols.LCurly);
|
|
515
|
-
const couldParseVars = ACTION(() => C.parseMode.delete('canParseVars'));
|
|
516
|
-
const val = SUBRULE(quads, undefined);
|
|
517
|
-
ACTION(() => couldParseVars && C.parseMode.add('canParseVars'));
|
|
518
|
-
CONSUME(l.symbols.RCurly);
|
|
519
|
-
return val;
|
|
520
429
|
},
|
|
521
|
-
gImpl: ({ SUBRULE }) => ast => `{ ${SUBRULE(quads, ast, undefined)} }`,
|
|
522
430
|
};
|
|
523
431
|
/**
|
|
524
432
|
* [[50]](https://www.w3.org/TR/sparql11-query/#rQuads)
|
|
525
433
|
*/
|
|
526
434
|
export const quads = {
|
|
527
435
|
name: 'quads',
|
|
528
|
-
impl: ({ SUBRULE, CONSUME, MANY, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OPTION3 }) => () => {
|
|
436
|
+
impl: ({ ACTION, SUBRULE, CONSUME, MANY, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OPTION3 }) => (C) => {
|
|
529
437
|
const quads = [];
|
|
438
|
+
let last;
|
|
530
439
|
OPTION1(() => {
|
|
531
440
|
const triples = SUBRULE1(triplesTemplate, undefined);
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
triples,
|
|
535
|
-
});
|
|
441
|
+
last = triples;
|
|
442
|
+
ACTION(() => quads.push(triples));
|
|
536
443
|
});
|
|
537
444
|
MANY(() => {
|
|
538
|
-
|
|
539
|
-
|
|
445
|
+
const notTriples = SUBRULE(quadsNotTriples, undefined);
|
|
446
|
+
last = notTriples;
|
|
447
|
+
quads.push(notTriples);
|
|
448
|
+
OPTION2(() => {
|
|
449
|
+
const dotToken = CONSUME(l.symbols.dot);
|
|
450
|
+
last = dotToken;
|
|
451
|
+
return dotToken;
|
|
452
|
+
});
|
|
540
453
|
OPTION3(() => {
|
|
541
454
|
const triples = SUBRULE2(triplesTemplate, undefined);
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
triples,
|
|
545
|
-
});
|
|
455
|
+
last = triples;
|
|
456
|
+
ACTION(() => quads.push(triples));
|
|
546
457
|
});
|
|
547
458
|
});
|
|
548
|
-
return quads;
|
|
459
|
+
return ACTION(() => C.factory.wrap(quads, C.factory.sourceLocation(quads.at(0), last)));
|
|
549
460
|
},
|
|
550
|
-
gImpl: ({ SUBRULE }) => ast
|
|
551
|
-
|
|
552
|
-
|
|
461
|
+
gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {
|
|
462
|
+
for (const quad of ast.val) {
|
|
463
|
+
if (F.isPattern(quad)) {
|
|
464
|
+
SUBRULE(triplesBlock, quad, undefined);
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
SUBRULE(quadsNotTriples, quad, undefined);
|
|
468
|
+
}
|
|
553
469
|
}
|
|
554
|
-
|
|
555
|
-
}).join(' '),
|
|
470
|
+
},
|
|
556
471
|
};
|
|
557
472
|
/**
|
|
558
473
|
* [[51]](https://www.w3.org/TR/sparql11-query/#rQuadsNotTriples)
|
|
559
474
|
*/
|
|
560
475
|
export const quadsNotTriples = {
|
|
561
476
|
name: 'quadsNotTriples',
|
|
562
|
-
impl: ({
|
|
563
|
-
CONSUME(l.graph.graph);
|
|
564
|
-
const name =
|
|
477
|
+
impl: ({ ACTION, SUBRULE1, CONSUME, OPTION }) => (C) => {
|
|
478
|
+
const graph = CONSUME(l.graph.graph);
|
|
479
|
+
const name = SUBRULE1(varOrIri, undefined);
|
|
565
480
|
CONSUME(l.symbols.LCurly);
|
|
566
|
-
const triples = OPTION(() =>
|
|
567
|
-
CONSUME(l.symbols.RCurly);
|
|
568
|
-
return
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
481
|
+
const triples = OPTION(() => SUBRULE1(triplesTemplate, undefined));
|
|
482
|
+
const close = CONSUME(l.symbols.RCurly);
|
|
483
|
+
return ACTION(() => C.factory.graphQuads(name, triples ?? C.factory.patternBgp([], C.factory.sourceLocationNoMaterialize()), C.factory.sourceLocation(graph, close)));
|
|
484
|
+
},
|
|
485
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
486
|
+
F.printFilter(ast, () => PRINT_WORD('GRAPH'));
|
|
487
|
+
SUBRULE(varOrTerm, ast.graph, undefined);
|
|
488
|
+
F.printFilter(ast, () => PRINT_WORD('{'));
|
|
489
|
+
SUBRULE(triplesBlock, ast.triples, undefined);
|
|
490
|
+
F.printFilter(ast, () => PRINT_WORD('}'));
|
|
573
491
|
},
|
|
574
|
-
gImpl: ({ SUBRULE }) => ast => `GRAPH ${SUBRULE(varOrTerm, ast.name, undefined)} {
|
|
575
|
-
${SUBRULE(triplesBlock, { ...ast, type: 'bgp' }, undefined)}
|
|
576
|
-
}`,
|
|
577
492
|
};
|
|
578
493
|
//# sourceMappingURL=updateUnit.js.map
|