@traqula/rules-sparql-1-1 0.0.1-alpha.137
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/LICENSE.txt +22 -0
- package/README.md +15 -0
- package/lib/Sparql11types.d.ts +246 -0
- package/lib/Sparql11types.js +2 -0
- package/lib/Sparql11types.js.map +1 -0
- package/lib/expressionHelpers.d.ts +55 -0
- package/lib/expressionHelpers.js +224 -0
- package/lib/expressionHelpers.js.map +1 -0
- package/lib/grammar/builtIn.d.ts +91 -0
- package/lib/grammar/builtIn.js +239 -0
- package/lib/grammar/builtIn.js.map +1 -0
- package/lib/grammar/dataSetClause.d.ts +22 -0
- package/lib/grammar/dataSetClause.js +37 -0
- package/lib/grammar/dataSetClause.js.map +1 -0
- package/lib/grammar/expression.d.ts +68 -0
- package/lib/grammar/expression.js +397 -0
- package/lib/grammar/expression.js.map +1 -0
- package/lib/grammar/general.d.ts +42 -0
- package/lib/grammar/general.js +161 -0
- package/lib/grammar/general.js.map +1 -0
- package/lib/grammar/index.d.ts +12 -0
- package/lib/grammar/index.js +13 -0
- package/lib/grammar/index.js.map +1 -0
- package/lib/grammar/literals.d.ts +53 -0
- package/lib/grammar/literals.js +179 -0
- package/lib/grammar/literals.js.map +1 -0
- package/lib/grammar/propertyPaths.d.ts +40 -0
- package/lib/grammar/propertyPaths.js +193 -0
- package/lib/grammar/propertyPaths.js.map +1 -0
- package/lib/grammar/queryUnit/queryUnit.d.ts +53 -0
- package/lib/grammar/queryUnit/queryUnit.js +405 -0
- package/lib/grammar/queryUnit/queryUnit.js.map +1 -0
- package/lib/grammar/solutionModifier.d.ts +44 -0
- package/lib/grammar/solutionModifier.js +203 -0
- package/lib/grammar/solutionModifier.js.map +1 -0
- package/lib/grammar/tripleBlock.d.ts +42 -0
- package/lib/grammar/tripleBlock.js +309 -0
- package/lib/grammar/tripleBlock.js.map +1 -0
- package/lib/grammar/updateUnit/updateUnit.d.ts +101 -0
- package/lib/grammar/updateUnit/updateUnit.js +448 -0
- package/lib/grammar/updateUnit/updateUnit.js.map +1 -0
- package/lib/grammar/whereClause.d.ts +76 -0
- package/lib/grammar/whereClause.js +383 -0
- package/lib/grammar/whereClause.js.map +1 -0
- package/lib/index.cjs +13088 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/lexer/BuildinCalls.d.ts +248 -0
- package/lib/lexer/BuildinCalls.js +189 -0
- package/lib/lexer/BuildinCalls.js.map +1 -0
- package/lib/lexer/graph.d.ts +14 -0
- package/lib/lexer/graph.js +9 -0
- package/lib/lexer/graph.js.map +1 -0
- package/lib/lexer/index.d.ts +5 -0
- package/lib/lexer/index.js +6 -0
- package/lib/lexer/index.js.map +1 -0
- package/lib/lexer/lexer.d.ts +147 -0
- package/lib/lexer/lexer.js +67 -0
- package/lib/lexer/lexer.js.map +1 -0
- package/lib/lexer/symbols.d.ts +80 -0
- package/lib/lexer/symbols.js +30 -0
- package/lib/lexer/symbols.js.map +1 -0
- package/lib/lexer/terminals.d.ts +108 -0
- package/lib/lexer/terminals.js +76 -0
- package/lib/lexer/terminals.js.map +1 -0
- package/lib/utils.d.ts +3 -0
- package/lib/utils.js +7 -0
- package/lib/utils.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { RuleDef } from '@traqula/core';
|
|
2
|
+
import type { BindPattern, BlankTerm, BlockPattern, Expression, FilterPattern, FunctionCallExpression, GraphPattern, GroupPattern, IriTerm, LiteralTerm, MinusPattern, OptionalPattern, Pattern, ServicePattern, UnionPattern, ValuePatternRow, ValuesPattern } from '../Sparql11types';
|
|
3
|
+
/**
|
|
4
|
+
* [[17]](https://www.w3.org/TR/sparql11-query/#rWhereClause)
|
|
5
|
+
*/
|
|
6
|
+
export declare const whereClause: RuleDef<'whereClause', Pattern[]>;
|
|
7
|
+
/**
|
|
8
|
+
* [[53]](https://www.w3.org/TR/sparql11-query/#rGroupGraphPattern)
|
|
9
|
+
*/
|
|
10
|
+
export declare const groupGraphPattern: RuleDef<'groupGraphPattern', GroupPattern>;
|
|
11
|
+
/**
|
|
12
|
+
* [[54]](https://www.w3.org/TR/sparql11-query/#rGroupGraphPatternSub)
|
|
13
|
+
*/
|
|
14
|
+
export declare const groupGraphPatternSub: RuleDef<'groupGraphPatternSub', Pattern[]>;
|
|
15
|
+
/**
|
|
16
|
+
* [[56]](https://www.w3.org/TR/sparql11-query/#rGraphPatternNotTriples)
|
|
17
|
+
*/
|
|
18
|
+
type GraphPatternNotTriplesReturn = ValuesPattern | BindPattern | FilterPattern | BlockPattern;
|
|
19
|
+
export declare const graphPatternNotTriples: RuleDef<'graphPatternNotTriples', GraphPatternNotTriplesReturn>;
|
|
20
|
+
/**
|
|
21
|
+
* [[57]](https://www.w3.org/TR/sparql11-query/#rOptionalGraphPattern)
|
|
22
|
+
*/
|
|
23
|
+
export declare const optionalGraphPattern: RuleDef<'optionalGraphPattern', OptionalPattern>;
|
|
24
|
+
/**
|
|
25
|
+
* [[58]](https://www.w3.org/TR/sparql11-query/#rGraphGraphPattern)
|
|
26
|
+
*/
|
|
27
|
+
export declare const graphGraphPattern: RuleDef<'graphGraphPattern', GraphPattern>;
|
|
28
|
+
/**
|
|
29
|
+
* [[59]](https://www.w3.org/TR/sparql11-query/#rServiceGraphPattern)
|
|
30
|
+
*/
|
|
31
|
+
export declare const serviceGraphPattern: RuleDef<'serviceGraphPattern', ServicePattern>;
|
|
32
|
+
/**
|
|
33
|
+
* [[60]](https://www.w3.org/TR/sparql11-query/#rBind)
|
|
34
|
+
*/
|
|
35
|
+
export declare const bind: RuleDef<'bind', BindPattern>;
|
|
36
|
+
/**
|
|
37
|
+
* [[61]](https://www.w3.org/TR/sparql11-query/#rInlineData)
|
|
38
|
+
*/
|
|
39
|
+
export declare const inlineData: RuleDef<'inlineData', ValuesPattern>;
|
|
40
|
+
/**
|
|
41
|
+
* [[62]](https://www.w3.org/TR/sparql11-query/#rDataBlock)
|
|
42
|
+
*/
|
|
43
|
+
export declare const dataBlock: RuleDef<'dataBlock', ValuePatternRow[]>;
|
|
44
|
+
/**
|
|
45
|
+
* [[63]](https://www.w3.org/TR/sparql11-query/#rInlineDataOneVar)
|
|
46
|
+
*/
|
|
47
|
+
export declare const inlineDataOneVar: RuleDef<'inlineDataOneVar', ValuePatternRow[]>;
|
|
48
|
+
/**
|
|
49
|
+
* [[64]](https://www.w3.org/TR/sparql11-query/#rInlineDataFull)
|
|
50
|
+
*/
|
|
51
|
+
export declare const inlineDataFull: RuleDef<'inlineDataFull', ValuePatternRow[]>;
|
|
52
|
+
/**
|
|
53
|
+
* [[65]](https://www.w3.org/TR/sparql11-query/#rDataBlockValue)
|
|
54
|
+
*/
|
|
55
|
+
export declare const dataBlockValue: RuleDef<'dataBlockValue', IriTerm | BlankTerm | LiteralTerm | undefined>;
|
|
56
|
+
/**
|
|
57
|
+
* [[66]](https://www.w3.org/TR/sparql11-query/#rMinusGraphPattern)
|
|
58
|
+
*/
|
|
59
|
+
export declare const minusGraphPattern: RuleDef<'minusGraphPattern', MinusPattern>;
|
|
60
|
+
/**
|
|
61
|
+
* [[67]](https://www.w3.org/TR/sparql11-query/#rGroupOrUnionGraphPattern)
|
|
62
|
+
*/
|
|
63
|
+
export declare const groupOrUnionGraphPattern: RuleDef<'groupOrUnionGraphPattern', GroupPattern | UnionPattern>;
|
|
64
|
+
/**
|
|
65
|
+
* [[68]](https://www.w3.org/TR/sparql11-query/#rFilter)
|
|
66
|
+
*/
|
|
67
|
+
export declare const filter: RuleDef<'filter', FilterPattern>;
|
|
68
|
+
/**
|
|
69
|
+
* [[69]](https://www.w3.org/TR/sparql11-query/#rConstraint)
|
|
70
|
+
*/
|
|
71
|
+
export declare const constraint: RuleDef<'constraint', Expression>;
|
|
72
|
+
/**
|
|
73
|
+
* [[70]](https://www.w3.org/TR/sparql11-query/#rFunctionCall)
|
|
74
|
+
*/
|
|
75
|
+
export declare const functionCall: RuleDef<'functionCall', FunctionCallExpression>;
|
|
76
|
+
export {};
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import * as l from '../lexer';
|
|
2
|
+
import { deGroupSingle, isVariable } from '../utils';
|
|
3
|
+
import { builtInCall } from './builtIn';
|
|
4
|
+
import { argList, brackettedExpression, expression } from './expression';
|
|
5
|
+
import { var_, varOrIri } from './general';
|
|
6
|
+
import { booleanLiteral, iri, numericLiteral, rdfLiteral } from './literals';
|
|
7
|
+
import { subSelect } from './queryUnit/queryUnit';
|
|
8
|
+
import { triplesBlock } from './tripleBlock';
|
|
9
|
+
/**
|
|
10
|
+
* [[17]](https://www.w3.org/TR/sparql11-query/#rWhereClause)
|
|
11
|
+
*/
|
|
12
|
+
export const whereClause = {
|
|
13
|
+
name: 'whereClause',
|
|
14
|
+
impl: ({ ACTION, SUBRULE, CONSUME, OPTION }) => () => {
|
|
15
|
+
OPTION(() => {
|
|
16
|
+
CONSUME(l.where);
|
|
17
|
+
});
|
|
18
|
+
const group = SUBRULE(groupGraphPattern);
|
|
19
|
+
return ACTION(() => group.patterns);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* [[53]](https://www.w3.org/TR/sparql11-query/#rGroupGraphPattern)
|
|
24
|
+
*/
|
|
25
|
+
export const groupGraphPattern = {
|
|
26
|
+
name: 'groupGraphPattern',
|
|
27
|
+
impl: ({ SUBRULE, CONSUME, OR }) => () => {
|
|
28
|
+
CONSUME(l.symbols.LCurly);
|
|
29
|
+
const patterns = OR([
|
|
30
|
+
{ ALT: () => [SUBRULE(subSelect)] },
|
|
31
|
+
{ ALT: () => SUBRULE(groupGraphPatternSub) },
|
|
32
|
+
]);
|
|
33
|
+
CONSUME(l.symbols.RCurly);
|
|
34
|
+
return {
|
|
35
|
+
type: 'group',
|
|
36
|
+
patterns,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
function findBoundVarsFromGroupGraphPattern(pattern, boundedVars) {
|
|
41
|
+
if ('triples' in pattern) {
|
|
42
|
+
for (const triple of pattern.triples) {
|
|
43
|
+
if (isVariable(triple.subject)) {
|
|
44
|
+
boundedVars.add(triple.subject.value);
|
|
45
|
+
}
|
|
46
|
+
if (isVariable(triple.predicate)) {
|
|
47
|
+
boundedVars.add(triple.predicate.value);
|
|
48
|
+
}
|
|
49
|
+
if (isVariable(triple.object)) {
|
|
50
|
+
boundedVars.add(triple.object.value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if ('patterns' in pattern) {
|
|
55
|
+
for (const pat of pattern.patterns) {
|
|
56
|
+
findBoundVarsFromGroupGraphPattern(pat, boundedVars);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* [[54]](https://www.w3.org/TR/sparql11-query/#rGroupGraphPatternSub)
|
|
62
|
+
*/
|
|
63
|
+
export const groupGraphPatternSub = {
|
|
64
|
+
name: 'groupGraphPatternSub',
|
|
65
|
+
impl: ({ ACTION, SUBRULE, CONSUME, MANY, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OPTION3 }) => () => {
|
|
66
|
+
const patterns = [];
|
|
67
|
+
const bgpPattern = OPTION1(() => SUBRULE1(triplesBlock));
|
|
68
|
+
ACTION(() => {
|
|
69
|
+
if (bgpPattern) {
|
|
70
|
+
patterns.push(bgpPattern);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
MANY(() => {
|
|
74
|
+
const notTriples = SUBRULE(graphPatternNotTriples);
|
|
75
|
+
patterns.push(notTriples);
|
|
76
|
+
OPTION2(() => CONSUME(l.symbols.dot));
|
|
77
|
+
const moreTriples = OPTION3(() => SUBRULE2(triplesBlock));
|
|
78
|
+
ACTION(() => {
|
|
79
|
+
if (moreTriples) {
|
|
80
|
+
patterns.push(moreTriples);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
// Check note 13 of the spec.
|
|
85
|
+
// TODO: currently optimized for case bind is present.
|
|
86
|
+
// Since every iteration, even when no bind is present, we walk the tree collecting variables.
|
|
87
|
+
// optimize either by: checking whether bind is present, or by keeping track of variables and passing them through
|
|
88
|
+
ACTION(() => {
|
|
89
|
+
const boundedVars = new Set();
|
|
90
|
+
for (const pattern of patterns) {
|
|
91
|
+
// Element can be bind, in that case, check note 13. If it is not, buildup set of bounded variables.
|
|
92
|
+
if (pattern.type === 'bind') {
|
|
93
|
+
if (boundedVars.has(pattern.variable.value)) {
|
|
94
|
+
throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (pattern.type === 'group' || pattern.type === 'bgp') {
|
|
98
|
+
findBoundVarsFromGroupGraphPattern(pattern, boundedVars);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return patterns;
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
export const graphPatternNotTriples = {
|
|
106
|
+
name: 'graphPatternNotTriples',
|
|
107
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
108
|
+
{ ALT: () => SUBRULE(groupOrUnionGraphPattern) },
|
|
109
|
+
{ ALT: () => SUBRULE(optionalGraphPattern) },
|
|
110
|
+
{ ALT: () => SUBRULE(minusGraphPattern) },
|
|
111
|
+
{ ALT: () => SUBRULE(graphGraphPattern) },
|
|
112
|
+
{ ALT: () => SUBRULE(serviceGraphPattern) },
|
|
113
|
+
{ ALT: () => SUBRULE(filter) },
|
|
114
|
+
{ ALT: () => SUBRULE(bind) },
|
|
115
|
+
{ ALT: () => SUBRULE(inlineData) },
|
|
116
|
+
]),
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* [[57]](https://www.w3.org/TR/sparql11-query/#rOptionalGraphPattern)
|
|
120
|
+
*/
|
|
121
|
+
export const optionalGraphPattern = {
|
|
122
|
+
name: 'optionalGraphPattern',
|
|
123
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
|
|
124
|
+
CONSUME(l.optional);
|
|
125
|
+
const group = SUBRULE(groupGraphPattern);
|
|
126
|
+
return ACTION(() => ({
|
|
127
|
+
type: 'optional',
|
|
128
|
+
patterns: group.patterns,
|
|
129
|
+
}));
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* [[58]](https://www.w3.org/TR/sparql11-query/#rGraphGraphPattern)
|
|
134
|
+
*/
|
|
135
|
+
export const graphGraphPattern = {
|
|
136
|
+
name: 'graphGraphPattern',
|
|
137
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
|
|
138
|
+
CONSUME(l.graph.graph);
|
|
139
|
+
const name = SUBRULE(varOrIri);
|
|
140
|
+
const group = SUBRULE(groupGraphPattern);
|
|
141
|
+
return ACTION(() => ({
|
|
142
|
+
type: 'graph',
|
|
143
|
+
name,
|
|
144
|
+
patterns: group.patterns,
|
|
145
|
+
}));
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* [[59]](https://www.w3.org/TR/sparql11-query/#rServiceGraphPattern)
|
|
150
|
+
*/
|
|
151
|
+
export const serviceGraphPattern = {
|
|
152
|
+
name: 'serviceGraphPattern',
|
|
153
|
+
impl: ({ SUBRULE, CONSUME, OPTION }) => () => {
|
|
154
|
+
CONSUME(l.service);
|
|
155
|
+
const silent = Boolean(OPTION(() => CONSUME(l.silent)));
|
|
156
|
+
const name = SUBRULE(varOrIri);
|
|
157
|
+
const group = SUBRULE(groupGraphPattern);
|
|
158
|
+
return {
|
|
159
|
+
type: 'service',
|
|
160
|
+
name,
|
|
161
|
+
silent,
|
|
162
|
+
patterns: group.patterns,
|
|
163
|
+
};
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* [[60]](https://www.w3.org/TR/sparql11-query/#rBind)
|
|
168
|
+
*/
|
|
169
|
+
export const bind = {
|
|
170
|
+
name: 'bind',
|
|
171
|
+
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
172
|
+
CONSUME(l.bind);
|
|
173
|
+
CONSUME(l.symbols.LParen);
|
|
174
|
+
const expressionVal = SUBRULE(expression);
|
|
175
|
+
CONSUME(l.as);
|
|
176
|
+
const variable = SUBRULE(var_);
|
|
177
|
+
CONSUME(l.symbols.RParen);
|
|
178
|
+
return {
|
|
179
|
+
type: 'bind',
|
|
180
|
+
variable,
|
|
181
|
+
expression: expressionVal,
|
|
182
|
+
};
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* [[61]](https://www.w3.org/TR/sparql11-query/#rInlineData)
|
|
187
|
+
*/
|
|
188
|
+
export const inlineData = {
|
|
189
|
+
name: 'inlineData',
|
|
190
|
+
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
191
|
+
CONSUME(l.values);
|
|
192
|
+
const values = SUBRULE(dataBlock);
|
|
193
|
+
return {
|
|
194
|
+
type: 'values',
|
|
195
|
+
values,
|
|
196
|
+
};
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* [[62]](https://www.w3.org/TR/sparql11-query/#rDataBlock)
|
|
201
|
+
*/
|
|
202
|
+
export const dataBlock = {
|
|
203
|
+
name: 'dataBlock',
|
|
204
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
205
|
+
{ ALT: () => SUBRULE(inlineDataOneVar) },
|
|
206
|
+
{ ALT: () => SUBRULE(inlineDataFull) },
|
|
207
|
+
]),
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* [[63]](https://www.w3.org/TR/sparql11-query/#rInlineDataOneVar)
|
|
211
|
+
*/
|
|
212
|
+
export const inlineDataOneVar = {
|
|
213
|
+
name: 'inlineDataOneVar',
|
|
214
|
+
impl: ({ ACTION, SUBRULE, CONSUME, MANY }) => () => {
|
|
215
|
+
const res = [];
|
|
216
|
+
const varVal = SUBRULE(var_);
|
|
217
|
+
CONSUME(l.symbols.LCurly);
|
|
218
|
+
MANY(() => {
|
|
219
|
+
const value = SUBRULE(dataBlockValue);
|
|
220
|
+
ACTION(() => res.push({
|
|
221
|
+
[`?${varVal.value}`]: value,
|
|
222
|
+
}));
|
|
223
|
+
});
|
|
224
|
+
CONSUME(l.symbols.RCurly);
|
|
225
|
+
return res;
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* [[64]](https://www.w3.org/TR/sparql11-query/#rInlineDataFull)
|
|
230
|
+
*/
|
|
231
|
+
export const inlineDataFull = {
|
|
232
|
+
name: 'inlineDataFull',
|
|
233
|
+
impl: ({ ACTION, OR, MANY1, MANY2, MANY3, MANY4, SUBRULE, CONSUME1, CONSUME2 }) => () => OR([
|
|
234
|
+
// Grammar rule 64 together with note 11 learns us that a nil should be followed by a nil in DataBlock.
|
|
235
|
+
{
|
|
236
|
+
ALT: () => {
|
|
237
|
+
const res = [];
|
|
238
|
+
CONSUME1(l.terminals.nil);
|
|
239
|
+
CONSUME1(l.symbols.LCurly);
|
|
240
|
+
MANY1(() => {
|
|
241
|
+
CONSUME2(l.terminals.nil);
|
|
242
|
+
res.push({});
|
|
243
|
+
});
|
|
244
|
+
CONSUME1(l.symbols.RCurly);
|
|
245
|
+
return res;
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
ALT: () => {
|
|
250
|
+
const res = [];
|
|
251
|
+
const vars = [];
|
|
252
|
+
CONSUME1(l.symbols.LParen);
|
|
253
|
+
MANY2(() => {
|
|
254
|
+
vars.push(SUBRULE(var_));
|
|
255
|
+
});
|
|
256
|
+
CONSUME1(l.symbols.RParen);
|
|
257
|
+
CONSUME2(l.symbols.LCurly);
|
|
258
|
+
MANY3(() => {
|
|
259
|
+
const varBinds = [];
|
|
260
|
+
CONSUME2(l.symbols.LParen);
|
|
261
|
+
MANY4({
|
|
262
|
+
DEF: () => {
|
|
263
|
+
ACTION(() => {
|
|
264
|
+
if (vars.length <= varBinds.length) {
|
|
265
|
+
throw new Error('Number of dataBlockValues does not match number of variables. Too much values.');
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
varBinds.push(SUBRULE(dataBlockValue));
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
CONSUME2(l.symbols.RParen);
|
|
272
|
+
ACTION(() => {
|
|
273
|
+
if (varBinds.length !== vars.length) {
|
|
274
|
+
throw new Error('Number of dataBlockValues does not match number of variables. Too few values.');
|
|
275
|
+
}
|
|
276
|
+
const row = {};
|
|
277
|
+
for (const [index, varVal] of vars.entries()) {
|
|
278
|
+
row[`?${varVal.value}`] = varBinds[index];
|
|
279
|
+
}
|
|
280
|
+
res.push(row);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
CONSUME2(l.symbols.RCurly);
|
|
284
|
+
return res;
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
]),
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* [[65]](https://www.w3.org/TR/sparql11-query/#rDataBlockValue)
|
|
291
|
+
*/
|
|
292
|
+
export const dataBlockValue = {
|
|
293
|
+
name: 'dataBlockValue',
|
|
294
|
+
impl: ({ SUBRULE, CONSUME, OR }) => () => OR([
|
|
295
|
+
{ ALT: () => SUBRULE(iri) },
|
|
296
|
+
{ ALT: () => SUBRULE(rdfLiteral) },
|
|
297
|
+
{ ALT: () => SUBRULE(numericLiteral) },
|
|
298
|
+
{ ALT: () => SUBRULE(booleanLiteral) },
|
|
299
|
+
{
|
|
300
|
+
ALT: () => {
|
|
301
|
+
CONSUME(l.undef);
|
|
302
|
+
// eslint-disable-next-line unicorn/no-useless-undefined
|
|
303
|
+
return undefined;
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
]),
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* [[66]](https://www.w3.org/TR/sparql11-query/#rMinusGraphPattern)
|
|
310
|
+
*/
|
|
311
|
+
export const minusGraphPattern = {
|
|
312
|
+
name: 'minusGraphPattern',
|
|
313
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
|
|
314
|
+
CONSUME(l.minus);
|
|
315
|
+
const group = SUBRULE(groupGraphPattern);
|
|
316
|
+
return ACTION(() => ({
|
|
317
|
+
type: 'minus',
|
|
318
|
+
patterns: group.patterns,
|
|
319
|
+
}));
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
/**
|
|
323
|
+
* [[67]](https://www.w3.org/TR/sparql11-query/#rGroupOrUnionGraphPattern)
|
|
324
|
+
*/
|
|
325
|
+
export const groupOrUnionGraphPattern = {
|
|
326
|
+
name: 'groupOrUnionGraphPattern',
|
|
327
|
+
impl: ({ AT_LEAST_ONE_SEP, SUBRULE }) => () => {
|
|
328
|
+
const groups = [];
|
|
329
|
+
AT_LEAST_ONE_SEP({
|
|
330
|
+
DEF: () => {
|
|
331
|
+
const group = SUBRULE(groupGraphPattern);
|
|
332
|
+
groups.push(group);
|
|
333
|
+
},
|
|
334
|
+
SEP: l.union,
|
|
335
|
+
});
|
|
336
|
+
return groups.length === 1 ?
|
|
337
|
+
groups[0] :
|
|
338
|
+
{
|
|
339
|
+
type: 'union',
|
|
340
|
+
patterns: groups.map(group => deGroupSingle(group)),
|
|
341
|
+
};
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
/**
|
|
345
|
+
* [[68]](https://www.w3.org/TR/sparql11-query/#rFilter)
|
|
346
|
+
*/
|
|
347
|
+
export const filter = {
|
|
348
|
+
name: 'filter',
|
|
349
|
+
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
350
|
+
CONSUME(l.filter);
|
|
351
|
+
const expression = SUBRULE(constraint);
|
|
352
|
+
return {
|
|
353
|
+
type: 'filter',
|
|
354
|
+
expression,
|
|
355
|
+
};
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
/**
|
|
359
|
+
* [[69]](https://www.w3.org/TR/sparql11-query/#rConstraint)
|
|
360
|
+
*/
|
|
361
|
+
export const constraint = {
|
|
362
|
+
name: 'constraint',
|
|
363
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
364
|
+
{ ALT: () => SUBRULE(brackettedExpression) },
|
|
365
|
+
{ ALT: () => SUBRULE(builtInCall) },
|
|
366
|
+
{ ALT: () => SUBRULE(functionCall) },
|
|
367
|
+
]),
|
|
368
|
+
};
|
|
369
|
+
/**
|
|
370
|
+
* [[70]](https://www.w3.org/TR/sparql11-query/#rFunctionCall)
|
|
371
|
+
*/
|
|
372
|
+
export const functionCall = {
|
|
373
|
+
name: 'functionCall',
|
|
374
|
+
impl: ({ ACTION, SUBRULE }) => () => {
|
|
375
|
+
const func = SUBRULE(iri);
|
|
376
|
+
const args = SUBRULE(argList);
|
|
377
|
+
return ACTION(() => ({
|
|
378
|
+
...args,
|
|
379
|
+
function: func,
|
|
380
|
+
}));
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
//# sourceMappingURL=whereClause.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whereClause.js","sourceRoot":"","sources":["whereClause.ts"],"names":[],"mappings":"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","sourcesContent":["import * as l from '../lexer';\nimport type { RuleDef } from '@traqula/core';\nimport { deGroupSingle, isVariable } from '../utils';\nimport { builtInCall } from './builtIn';\nimport { argList, brackettedExpression, expression } from './expression';\nimport { var_, varOrIri } from './general';\nimport { booleanLiteral, iri, numericLiteral, rdfLiteral } from './literals';\nimport { subSelect } from './queryUnit/queryUnit';\nimport type {\n BindPattern,\n BlankTerm,\n BlockPattern,\n Expression,\n FilterPattern,\n FunctionCallExpression,\n GraphPattern,\n GroupPattern,\n IriTerm,\n LiteralTerm,\n MinusPattern,\n OptionalPattern,\n Pattern,\n ServicePattern,\n UnionPattern,\n ValuePatternRow,\n ValuesPattern,\n VariableTerm,\n} from '../Sparql11types';\nimport { triplesBlock } from './tripleBlock';\n\n/**\n * [[17]](https://www.w3.org/TR/sparql11-query/#rWhereClause)\n */\nexport const whereClause: RuleDef<'whereClause', Pattern[]> = <const> {\n name: 'whereClause',\n impl: ({ ACTION, SUBRULE, CONSUME, OPTION }) => () => {\n OPTION(() => {\n CONSUME(l.where);\n });\n const group = SUBRULE(groupGraphPattern);\n return ACTION(() => group.patterns);\n },\n};\n\n/**\n * [[53]](https://www.w3.org/TR/sparql11-query/#rGroupGraphPattern)\n */\nexport const groupGraphPattern: RuleDef<'groupGraphPattern', GroupPattern> = <const> {\n name: 'groupGraphPattern',\n impl: ({ SUBRULE, CONSUME, OR }) => () => {\n CONSUME(l.symbols.LCurly);\n const patterns = OR([\n { ALT: () => [ SUBRULE(subSelect) ]},\n { ALT: () => SUBRULE(groupGraphPatternSub) },\n ]);\n CONSUME(l.symbols.RCurly);\n return {\n type: 'group',\n patterns,\n };\n },\n};\n\nfunction findBoundVarsFromGroupGraphPattern(pattern: Pattern, boundedVars: Set<string>): void {\n if ('triples' in pattern) {\n for (const triple of pattern.triples) {\n if (isVariable(triple.subject)) {\n boundedVars.add(triple.subject.value);\n }\n if (isVariable(triple.predicate)) {\n boundedVars.add(triple.predicate.value);\n }\n if (isVariable(triple.object)) {\n boundedVars.add(triple.object.value);\n }\n }\n } else if ('patterns' in pattern) {\n for (const pat of pattern.patterns) {\n findBoundVarsFromGroupGraphPattern(pat, boundedVars);\n }\n }\n}\n\n/**\n * [[54]](https://www.w3.org/TR/sparql11-query/#rGroupGraphPatternSub)\n */\nexport const groupGraphPatternSub: RuleDef<'groupGraphPatternSub', Pattern[]> = <const> {\n name: 'groupGraphPatternSub',\n impl: ({ ACTION, SUBRULE, CONSUME, MANY, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OPTION3 }) => () => {\n const patterns: Pattern[] = [];\n\n const bgpPattern = OPTION1(() => SUBRULE1(triplesBlock));\n ACTION(() => {\n if (bgpPattern) {\n patterns.push(bgpPattern);\n }\n });\n MANY(() => {\n const notTriples = SUBRULE(graphPatternNotTriples);\n patterns.push(notTriples);\n OPTION2(() => CONSUME(l.symbols.dot));\n const moreTriples = OPTION3(() => SUBRULE2(triplesBlock));\n ACTION(() => {\n if (moreTriples) {\n patterns.push(moreTriples);\n }\n });\n });\n\n // Check note 13 of the spec.\n // TODO: currently optimized for case bind is present.\n // Since every iteration, even when no bind is present, we walk the tree collecting variables.\n // optimize either by: checking whether bind is present, or by keeping track of variables and passing them through\n ACTION(() => {\n const boundedVars = new Set<string>();\n for (const pattern of patterns) {\n // Element can be bind, in that case, check note 13. If it is not, buildup set of bounded variables.\n if (pattern.type === 'bind') {\n if (boundedVars.has(pattern.variable.value)) {\n throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);\n }\n } else if (pattern.type === 'group' || pattern.type === 'bgp') {\n findBoundVarsFromGroupGraphPattern(pattern, boundedVars);\n }\n }\n });\n\n return patterns;\n },\n};\n\n/**\n * [[56]](https://www.w3.org/TR/sparql11-query/#rGraphPatternNotTriples)\n */\ntype GraphPatternNotTriplesReturn = ValuesPattern | BindPattern | FilterPattern | BlockPattern;\nexport const graphPatternNotTriples:\nRuleDef<'graphPatternNotTriples', GraphPatternNotTriplesReturn> = {\n name: 'graphPatternNotTriples',\n impl: ({ SUBRULE, OR }) => () => OR<GraphPatternNotTriplesReturn>([\n { ALT: () => SUBRULE(groupOrUnionGraphPattern) },\n { ALT: () => SUBRULE(optionalGraphPattern) },\n { ALT: () => SUBRULE(minusGraphPattern) },\n { ALT: () => SUBRULE(graphGraphPattern) },\n { ALT: () => SUBRULE(serviceGraphPattern) },\n { ALT: () => SUBRULE(filter) },\n { ALT: () => SUBRULE(bind) },\n { ALT: () => SUBRULE(inlineData) },\n ]),\n};\n\n/**\n * [[57]](https://www.w3.org/TR/sparql11-query/#rOptionalGraphPattern)\n */\nexport const optionalGraphPattern: RuleDef<'optionalGraphPattern', OptionalPattern> = <const> {\n name: 'optionalGraphPattern',\n impl: ({ ACTION, SUBRULE, CONSUME }) => () => {\n CONSUME(l.optional);\n const group = SUBRULE(groupGraphPattern);\n\n return ACTION(() => ({\n type: 'optional',\n patterns: group.patterns,\n }));\n },\n};\n\n/**\n * [[58]](https://www.w3.org/TR/sparql11-query/#rGraphGraphPattern)\n */\nexport const graphGraphPattern: RuleDef<'graphGraphPattern', GraphPattern> = <const> {\n name: 'graphGraphPattern',\n impl: ({ ACTION, SUBRULE, CONSUME }) => () => {\n CONSUME(l.graph.graph);\n const name = SUBRULE(varOrIri);\n const group = SUBRULE(groupGraphPattern);\n\n return ACTION(() => ({\n type: 'graph',\n name,\n patterns: group.patterns,\n }));\n },\n};\n\n/**\n * [[59]](https://www.w3.org/TR/sparql11-query/#rServiceGraphPattern)\n */\nexport const serviceGraphPattern: RuleDef<'serviceGraphPattern', ServicePattern> = <const> {\n name: 'serviceGraphPattern',\n impl: ({ SUBRULE, CONSUME, OPTION }) => () => {\n CONSUME(l.service);\n const silent = Boolean(OPTION(() => CONSUME(l.silent)));\n const name = SUBRULE(varOrIri);\n const group = SUBRULE(groupGraphPattern);\n\n return {\n type: 'service',\n name,\n silent,\n patterns: group.patterns,\n };\n },\n};\n\n/**\n * [[60]](https://www.w3.org/TR/sparql11-query/#rBind)\n */\nexport const bind: RuleDef<'bind', BindPattern> = <const> {\n name: 'bind',\n impl: ({ SUBRULE, CONSUME }) => () => {\n CONSUME(l.bind);\n CONSUME(l.symbols.LParen);\n const expressionVal = SUBRULE(expression);\n CONSUME(l.as);\n const variable = SUBRULE(var_);\n CONSUME(l.symbols.RParen);\n\n return {\n type: 'bind',\n variable,\n expression: expressionVal,\n };\n },\n};\n\n/**\n * [[61]](https://www.w3.org/TR/sparql11-query/#rInlineData)\n */\nexport const inlineData: RuleDef<'inlineData', ValuesPattern> = <const> {\n name: 'inlineData',\n impl: ({ SUBRULE, CONSUME }) => () => {\n CONSUME(l.values);\n const values = SUBRULE(dataBlock);\n\n return {\n type: 'values',\n values,\n };\n },\n};\n\n/**\n * [[62]](https://www.w3.org/TR/sparql11-query/#rDataBlock)\n */\nexport const dataBlock: RuleDef<'dataBlock', ValuePatternRow[]> = <const> {\n name: 'dataBlock',\n impl: ({ SUBRULE, OR }) => () => OR([\n { ALT: () => SUBRULE(inlineDataOneVar) },\n { ALT: () => SUBRULE(inlineDataFull) },\n ]),\n};\n\n/**\n * [[63]](https://www.w3.org/TR/sparql11-query/#rInlineDataOneVar)\n */\nexport const inlineDataOneVar: RuleDef<'inlineDataOneVar', ValuePatternRow[]> = <const> {\n name: 'inlineDataOneVar',\n impl: ({ ACTION, SUBRULE, CONSUME, MANY }) => () => {\n const res: ValuePatternRow[] = [];\n const varVal = SUBRULE(var_);\n CONSUME(l.symbols.LCurly);\n MANY(() => {\n const value = SUBRULE(dataBlockValue);\n\n ACTION(() => res.push({\n [`?${varVal.value}`]: value,\n }));\n });\n CONSUME(l.symbols.RCurly);\n return res;\n },\n};\n\n/**\n * [[64]](https://www.w3.org/TR/sparql11-query/#rInlineDataFull)\n */\nexport const inlineDataFull: RuleDef<'inlineDataFull', ValuePatternRow[]> = <const> {\n name: 'inlineDataFull',\n impl: ({ ACTION, OR, MANY1, MANY2, MANY3, MANY4, SUBRULE, CONSUME1, CONSUME2 }) => () => OR([\n // Grammar rule 64 together with note 11 learns us that a nil should be followed by a nil in DataBlock.\n {\n ALT: () => {\n const res: ValuePatternRow[] = [];\n CONSUME1(l.terminals.nil);\n CONSUME1(l.symbols.LCurly);\n MANY1(() => {\n CONSUME2(l.terminals.nil);\n res.push({});\n });\n CONSUME1(l.symbols.RCurly);\n return res;\n },\n },\n {\n ALT: () => {\n const res: ValuePatternRow[] = [];\n const vars: VariableTerm[] = [];\n\n CONSUME1(l.symbols.LParen);\n MANY2(() => {\n vars.push(SUBRULE(var_));\n });\n CONSUME1(l.symbols.RParen);\n\n CONSUME2(l.symbols.LCurly);\n MANY3(() => {\n const varBinds: ValuePatternRow[string][] = [];\n CONSUME2(l.symbols.LParen);\n MANY4({\n DEF: () => {\n ACTION(() => {\n if (vars.length <= varBinds.length) {\n throw new Error('Number of dataBlockValues does not match number of variables. Too much values.');\n }\n });\n varBinds.push(SUBRULE(dataBlockValue));\n },\n });\n CONSUME2(l.symbols.RParen);\n\n ACTION(() => {\n if (varBinds.length !== vars.length) {\n throw new Error('Number of dataBlockValues does not match number of variables. Too few values.');\n }\n const row: ValuePatternRow = {};\n for (const [ index, varVal ] of vars.entries()) {\n row[`?${varVal.value}`] = varBinds[index];\n }\n res.push(row);\n });\n });\n CONSUME2(l.symbols.RCurly);\n return res;\n },\n },\n ]),\n};\n\n/**\n * [[65]](https://www.w3.org/TR/sparql11-query/#rDataBlockValue)\n */\nexport const dataBlockValue: RuleDef<'dataBlockValue', IriTerm | BlankTerm | LiteralTerm | undefined> = <const> {\n name: 'dataBlockValue',\n impl: ({ SUBRULE, CONSUME, OR }) => () => OR< IriTerm | BlankTerm | LiteralTerm | undefined>([\n { ALT: () => SUBRULE(iri) },\n { ALT: () => SUBRULE(rdfLiteral) },\n { ALT: () => SUBRULE(numericLiteral) },\n { ALT: () => SUBRULE(booleanLiteral) },\n {\n ALT: () => {\n CONSUME(l.undef);\n // eslint-disable-next-line unicorn/no-useless-undefined\n return undefined;\n },\n },\n ]),\n};\n\n/**\n * [[66]](https://www.w3.org/TR/sparql11-query/#rMinusGraphPattern)\n */\nexport const minusGraphPattern: RuleDef<'minusGraphPattern', MinusPattern> = <const> {\n name: 'minusGraphPattern',\n impl: ({ ACTION, SUBRULE, CONSUME }) => () => {\n CONSUME(l.minus);\n const group = SUBRULE(groupGraphPattern);\n\n return ACTION(() => ({\n type: 'minus',\n patterns: group.patterns,\n }));\n },\n};\n\n/**\n * [[67]](https://www.w3.org/TR/sparql11-query/#rGroupOrUnionGraphPattern)\n */\nexport const groupOrUnionGraphPattern: RuleDef<'groupOrUnionGraphPattern', GroupPattern | UnionPattern> = <const> {\n name: 'groupOrUnionGraphPattern',\n impl: ({ AT_LEAST_ONE_SEP, SUBRULE }) => () => {\n const groups: GroupPattern[] = [];\n\n AT_LEAST_ONE_SEP({\n DEF: () => {\n const group = SUBRULE(groupGraphPattern);\n groups.push(group);\n },\n SEP: l.union,\n });\n\n return groups.length === 1 ?\n groups[0] :\n {\n type: 'union',\n patterns: groups.map(group => deGroupSingle(group)),\n };\n },\n};\n\n/**\n * [[68]](https://www.w3.org/TR/sparql11-query/#rFilter)\n */\nexport const filter: RuleDef<'filter', FilterPattern> = <const> {\n name: 'filter',\n impl: ({ SUBRULE, CONSUME }) => () => {\n CONSUME(l.filter);\n const expression = SUBRULE(constraint);\n\n return {\n type: 'filter',\n expression,\n };\n },\n};\n\n/**\n * [[69]](https://www.w3.org/TR/sparql11-query/#rConstraint)\n */\nexport const constraint: RuleDef<'constraint', Expression> = <const> {\n name: 'constraint',\n impl: ({ SUBRULE, OR }) => () => OR([\n { ALT: () => SUBRULE(brackettedExpression) },\n { ALT: () => SUBRULE(builtInCall) },\n { ALT: () => SUBRULE(functionCall) },\n ]),\n};\n\n/**\n * [[70]](https://www.w3.org/TR/sparql11-query/#rFunctionCall)\n */\nexport const functionCall: RuleDef<'functionCall', FunctionCallExpression> = <const> {\n name: 'functionCall',\n impl: ({ ACTION, SUBRULE }) => () => {\n const func = SUBRULE(iri);\n const args = SUBRULE(argList);\n return ACTION(() => ({\n ...args,\n function: func,\n }));\n },\n};\n"]}
|