@traqula/rules-sparql-1-1 0.0.1-alpha.10
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 +17 -0
- 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 +68 -0
- package/lib/Sparql11types.js +2 -0
- package/lib/Sparql11types.js.map +1 -0
- package/lib/SparqlParser.d.ts +23 -0
- package/lib/SparqlParser.js +32 -0
- package/lib/SparqlParser.js.map +1 -0
- package/lib/expressionHelpers.d.ts +45 -0
- package/lib/expressionHelpers.js +161 -0
- package/lib/expressionHelpers.js.map +1 -0
- 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 +89 -0
- package/lib/grammar/builtIn.js +247 -0
- package/lib/grammar/builtIn.js.map +1 -0
- package/lib/grammar/dataSetClause.d.ts +34 -0
- package/lib/grammar/dataSetClause.js +81 -0
- package/lib/grammar/dataSetClause.js.map +1 -0
- package/lib/grammar/expression.d.ts +63 -0
- package/lib/grammar/expression.js +383 -0
- package/lib/grammar/expression.js.map +1 -0
- package/lib/grammar/general.d.ts +36 -0
- package/lib/grammar/general.js +145 -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 +55 -0
- package/lib/grammar/literals.js +258 -0
- package/lib/grammar/literals.js.map +1 -0
- package/lib/grammar/propertyPaths.d.ts +43 -0
- package/lib/grammar/propertyPaths.js +182 -0
- package/lib/grammar/propertyPaths.js.map +1 -0
- package/lib/grammar/queryUnit/queryUnit.d.ts +48 -0
- package/lib/grammar/queryUnit/queryUnit.js +366 -0
- package/lib/grammar/queryUnit/queryUnit.js.map +1 -0
- package/lib/grammar/solutionModifier.d.ts +44 -0
- package/lib/grammar/solutionModifier.js +253 -0
- package/lib/grammar/solutionModifier.js.map +1 -0
- package/lib/grammar/tripleBlock.d.ts +36 -0
- package/lib/grammar/tripleBlock.js +357 -0
- package/lib/grammar/tripleBlock.js.map +1 -0
- package/lib/grammar/updateUnit/updateUnit.d.ts +95 -0
- package/lib/grammar/updateUnit/updateUnit.js +493 -0
- package/lib/grammar/updateUnit/updateUnit.js.map +1 -0
- package/lib/grammar/whereClause.d.ts +76 -0
- package/lib/grammar/whereClause.js +441 -0
- package/lib/grammar/whereClause.js.map +1 -0
- package/lib/grammar-helpers/utils.d.ts +12 -0
- package/lib/grammar-helpers/utils.js +16 -0
- package/lib/grammar-helpers/utils.js.map +1 -0
- package/lib/index.cjs +14565 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/lexer/BuildinCalls.d.ts +126 -0
- package/lib/lexer/BuildinCalls.js +188 -0
- package/lib/lexer/BuildinCalls.js.map +1 -0
- package/lib/lexer/graph.d.ts +6 -0
- package/lib/lexer/graph.js +8 -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 +54 -0
- package/lib/lexer/lexer.js +70 -0
- package/lib/lexer/lexer.js.map +1 -0
- package/lib/lexer/symbols.d.ts +28 -0
- package/lib/lexer/symbols.js +29 -0
- package/lib/lexer/symbols.js.map +1 -0
- package/lib/lexer/terminals.d.ts +26 -0
- package/lib/lexer/terminals.js +63 -0
- package/lib/lexer/terminals.js.map +1 -0
- package/lib/utils.d.ts +5 -0
- package/lib/utils.js +24 -0
- package/lib/utils.js.map +1 -0
- 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 +48 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import { CommonIRIs } from '../grammar-helpers/utils';
|
|
2
|
+
import * as l from '../lexer';
|
|
3
|
+
import { var_, varOrTerm, verb } from './general';
|
|
4
|
+
import { path, pathGenerator } from './propertyPaths';
|
|
5
|
+
function triplesDotSeperated(triplesSameSubjectSubrule) {
|
|
6
|
+
return ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, OPTION }) => (C) => {
|
|
7
|
+
const triples = [];
|
|
8
|
+
let parsedDot = true;
|
|
9
|
+
let dotToken;
|
|
10
|
+
AT_LEAST_ONE({
|
|
11
|
+
GATE: () => parsedDot,
|
|
12
|
+
DEF: () => {
|
|
13
|
+
parsedDot = false;
|
|
14
|
+
const template = SUBRULE(triplesSameSubjectSubrule, undefined);
|
|
15
|
+
ACTION(() => {
|
|
16
|
+
triples.push(...template);
|
|
17
|
+
});
|
|
18
|
+
OPTION(() => {
|
|
19
|
+
dotToken = CONSUME(l.symbols.dot);
|
|
20
|
+
parsedDot = true;
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
return ACTION(() => C.factory.patternBgp(triples, C.factory.sourceLocation(...triples, dotToken)));
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* [[55]](https://www.w3.org/TR/sparql11-query/#rTriplesBlock)
|
|
29
|
+
*/
|
|
30
|
+
export const triplesBlock = {
|
|
31
|
+
name: 'triplesBlock',
|
|
32
|
+
impl: implArgs => C => triplesDotSeperated(triplesSameSubjectPath)(implArgs)(C, undefined),
|
|
33
|
+
gImpl: ({ SUBRULE, PRINT_WORD, HANDLE_LOC }) => (ast, { factory: F }) => {
|
|
34
|
+
for (const [index, triple] of ast.triples.entries()) {
|
|
35
|
+
HANDLE_LOC(triple, () => {
|
|
36
|
+
const nextTriple = ast.triples.at(index);
|
|
37
|
+
if (F.isTripleCollection(triple)) {
|
|
38
|
+
SUBRULE(graphNodePath, triple, undefined);
|
|
39
|
+
// A top level tripleCollection block means that it is not used in a triple. So you end with DOT.
|
|
40
|
+
F.printFilter(triple, () => PRINT_WORD('.'));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Subject
|
|
44
|
+
SUBRULE(graphNodePath, triple.subject, undefined);
|
|
45
|
+
// Predicate
|
|
46
|
+
if (F.isTerm(triple.predicate) && F.isTermVariable(triple.predicate)) {
|
|
47
|
+
SUBRULE(varOrTerm, triple.predicate, undefined);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
SUBRULE(pathGenerator, triple.predicate, undefined);
|
|
51
|
+
}
|
|
52
|
+
// Object
|
|
53
|
+
SUBRULE(graphNodePath, triple.object, undefined);
|
|
54
|
+
// If no more things, or a top level collection (only possible if new block was part), or new subject: add DOT
|
|
55
|
+
if (nextTriple === undefined || F.isTripleCollection(nextTriple) ||
|
|
56
|
+
!F.isSourceLocationNoMaterialize(nextTriple.subject.loc)) {
|
|
57
|
+
F.printFilter(ast, () => PRINT_WORD('.'));
|
|
58
|
+
}
|
|
59
|
+
else if (F.isSourceLocationNoMaterialize(nextTriple.predicate.loc)) {
|
|
60
|
+
F.printFilter(ast, () => PRINT_WORD(','));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
F.printFilter(ast, () => PRINT_WORD(';'));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* [[75]](https://www.w3.org/TR/sparql11-query/#rTriplesSameSubject)
|
|
72
|
+
* [[81]](https://www.w3.org/TR/sparql11-query/#rTriplesSameSubjectPath)
|
|
73
|
+
* CONTRACT: triples generated from the subject come first, then comes the main triple,
|
|
74
|
+
* and then come the triples from the object. Only the first occurrence of a term has `SourceLocationType = source`
|
|
75
|
+
*/
|
|
76
|
+
function triplesSameSubjectImpl(name, allowPaths) {
|
|
77
|
+
return {
|
|
78
|
+
name,
|
|
79
|
+
impl: ({ ACTION, SUBRULE, OR }) => C => OR([
|
|
80
|
+
{ ALT: () => {
|
|
81
|
+
const subject = SUBRULE(varOrTerm, undefined);
|
|
82
|
+
const res = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty, { subject: ACTION(() => C.factory.dematerialized(subject)) });
|
|
83
|
+
// Only the first occurrence of a subject is actually materialized.
|
|
84
|
+
return ACTION(() => {
|
|
85
|
+
if (res.length > 0) {
|
|
86
|
+
res[0].subject = subject;
|
|
87
|
+
res[0].loc = C.factory.sourceLocation(subject, res[0]);
|
|
88
|
+
}
|
|
89
|
+
return res;
|
|
90
|
+
});
|
|
91
|
+
} },
|
|
92
|
+
{ ALT: () => {
|
|
93
|
+
const subjectNode = SUBRULE(allowPaths ? triplesNodePath : triplesNode, undefined);
|
|
94
|
+
const restNode = SUBRULE(allowPaths ? propertyListPath : propertyList, { subject: ACTION(() => C.factory.graphNodeIdentifier(subjectNode)) });
|
|
95
|
+
return ACTION(() => {
|
|
96
|
+
if (restNode.length === 0) {
|
|
97
|
+
return [subjectNode];
|
|
98
|
+
}
|
|
99
|
+
restNode[0].subject = subjectNode;
|
|
100
|
+
restNode[0].loc = C.factory.sourceLocation(subjectNode, restNode[0]);
|
|
101
|
+
return restNode;
|
|
102
|
+
});
|
|
103
|
+
} },
|
|
104
|
+
]),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export const triplesSameSubject = triplesSameSubjectImpl('triplesSameSubject', false);
|
|
108
|
+
export const triplesSameSubjectPath = triplesSameSubjectImpl('triplesSameSubjectPath', true);
|
|
109
|
+
/**
|
|
110
|
+
* [[52]](https://www.w3.org/TR/sparql11-query/#rTriplesTemplate)
|
|
111
|
+
*/
|
|
112
|
+
export const triplesTemplate = {
|
|
113
|
+
name: 'triplesTemplate',
|
|
114
|
+
impl: triplesDotSeperated(triplesSameSubject),
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* [[76]](https://www.w3.org/TR/sparql11-query/#rPropertyList)
|
|
118
|
+
* [[82]](https://www.w3.org/TR/sparql11-query/#rPropertyListPath)
|
|
119
|
+
*/
|
|
120
|
+
function propertyListImpl(name, allowPaths) {
|
|
121
|
+
return {
|
|
122
|
+
name,
|
|
123
|
+
impl: ({ SUBRULE, OPTION }) => (_, arg) => OPTION(() => SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty, arg)) ?? [],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export const propertyList = propertyListImpl('propertyList', false);
|
|
127
|
+
export const propertyListPath = propertyListImpl('propertyListPath', true);
|
|
128
|
+
// We could use gates for this, but in that case,
|
|
129
|
+
// a grammar not in need of paths would still have to include the path rules
|
|
130
|
+
/**
|
|
131
|
+
* [[77]](https://www.w3.org/TR/sparql11-query/#rPropertyListNotEmpty)
|
|
132
|
+
* [[83]](https://www.w3.org/TR/sparql11-query/#rPropertyListPathNotEmpty)
|
|
133
|
+
*/
|
|
134
|
+
function propertyListNotEmptyImplementation(name, allowPaths) {
|
|
135
|
+
return {
|
|
136
|
+
name,
|
|
137
|
+
impl: ({ ACTION, CONSUME, AT_LEAST_ONE, SUBRULE1, MANY2, OR1 }) => (_, arg) => {
|
|
138
|
+
const result = [];
|
|
139
|
+
let parsedSemi = true;
|
|
140
|
+
AT_LEAST_ONE({
|
|
141
|
+
GATE: () => parsedSemi,
|
|
142
|
+
DEF: () => {
|
|
143
|
+
parsedSemi = false;
|
|
144
|
+
const predicate = allowPaths ?
|
|
145
|
+
OR1([
|
|
146
|
+
{ ALT: () => SUBRULE1(verbPath, undefined) },
|
|
147
|
+
{ ALT: () => SUBRULE1(verbSimple, undefined) },
|
|
148
|
+
]) :
|
|
149
|
+
SUBRULE1(verb, undefined);
|
|
150
|
+
const triples = SUBRULE1(allowPaths ? objectListPath : objectList, ACTION(() => ({ subject: arg.subject, predicate })));
|
|
151
|
+
MANY2(() => {
|
|
152
|
+
CONSUME(l.symbols.semi);
|
|
153
|
+
parsedSemi = true;
|
|
154
|
+
});
|
|
155
|
+
ACTION(() => {
|
|
156
|
+
result.push(...triples);
|
|
157
|
+
});
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
return result;
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export const propertyListNotEmpty = propertyListNotEmptyImplementation('propertyListNotEmpty', false);
|
|
165
|
+
export const propertyListPathNotEmpty = propertyListNotEmptyImplementation('propertyListPathNotEmpty', true);
|
|
166
|
+
/**
|
|
167
|
+
* [[84]](https://www.w3.org/TR/sparql11-query/#rVerbPath)
|
|
168
|
+
*/
|
|
169
|
+
export const verbPath = {
|
|
170
|
+
name: 'verbPath',
|
|
171
|
+
impl: ({ SUBRULE }) => () => SUBRULE(path, undefined),
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* [[85]](https://www.w3.org/TR/sparql11-query/#rVerbSimple)
|
|
175
|
+
*/
|
|
176
|
+
export const verbSimple = {
|
|
177
|
+
name: 'verbSimple',
|
|
178
|
+
impl: ({ SUBRULE }) => () => SUBRULE(var_, undefined),
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* [[79]](https://www.w3.org/TR/sparql11-query/#rObjectList)
|
|
182
|
+
* [[86]](https://www.w3.org/TR/sparql11-query/#rObjectListPath)
|
|
183
|
+
*/
|
|
184
|
+
function objectListImpl(name, allowPaths) {
|
|
185
|
+
return {
|
|
186
|
+
name,
|
|
187
|
+
impl: ({ ACTION, SUBRULE, AT_LEAST_ONE_SEP }) => (_, arg) => {
|
|
188
|
+
const objects = [];
|
|
189
|
+
AT_LEAST_ONE_SEP({
|
|
190
|
+
SEP: l.symbols.comma,
|
|
191
|
+
DEF: () => {
|
|
192
|
+
const objectTriple = SUBRULE(allowPaths ? objectPath : object, arg);
|
|
193
|
+
ACTION(() => {
|
|
194
|
+
objects.push(objectTriple);
|
|
195
|
+
});
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
return objects;
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
export const objectList = objectListImpl('objectList', false);
|
|
203
|
+
export const objectListPath = objectListImpl('objectListPath', true);
|
|
204
|
+
/**
|
|
205
|
+
* [[80]](https://www.w3.org/TR/sparql11-query/#rObject)
|
|
206
|
+
* [[87]](https://www.w3.org/TR/sparql11-query/#rObjectPath)
|
|
207
|
+
*/
|
|
208
|
+
function objectImpl(name, allowPaths) {
|
|
209
|
+
return {
|
|
210
|
+
name,
|
|
211
|
+
impl: ({ ACTION, SUBRULE }) => (C, arg) => {
|
|
212
|
+
const node = SUBRULE(allowPaths ? graphNodePath : graphNode, undefined);
|
|
213
|
+
return ACTION(() => C.factory.triple(arg.subject, arg.predicate, node));
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
export const object = objectImpl('object', false);
|
|
218
|
+
export const objectPath = objectImpl('objectPath', true);
|
|
219
|
+
/**
|
|
220
|
+
* [[102]](https://www.w3.org/TR/sparql11-query/#rCollection)
|
|
221
|
+
* [[103]](https://www.w3.org/TR/sparql11-query/#rCollectionPath)
|
|
222
|
+
*/
|
|
223
|
+
function collectionImpl(name, allowPaths) {
|
|
224
|
+
return {
|
|
225
|
+
name,
|
|
226
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME }) => (C) => {
|
|
227
|
+
// Construct a [cons list](https://en.wikipedia.org/wiki/Cons#Lists),
|
|
228
|
+
// here called a [RDF collection](https://www.w3.org/TR/sparql11-query/#collections).
|
|
229
|
+
const terms = [];
|
|
230
|
+
const startToken = CONSUME(l.symbols.LParen);
|
|
231
|
+
AT_LEAST_ONE(() => {
|
|
232
|
+
terms.push(SUBRULE(allowPaths ? graphNodePath : graphNode, undefined));
|
|
233
|
+
});
|
|
234
|
+
const endToken = CONSUME(l.symbols.RParen);
|
|
235
|
+
return ACTION(() => {
|
|
236
|
+
const F = C.factory;
|
|
237
|
+
const triples = [];
|
|
238
|
+
// The triples created in your recursion
|
|
239
|
+
const predFirst = F.namedNode(F.sourceLocationNoMaterialize(), CommonIRIs.FIRST, undefined);
|
|
240
|
+
const predRest = F.namedNode(F.sourceLocationNoMaterialize(), CommonIRIs.REST, undefined);
|
|
241
|
+
const predNil = F.namedNode(F.sourceLocationNoMaterialize(), CommonIRIs.NIL, undefined);
|
|
242
|
+
const listHead = F.blankNode(undefined, F.sourceLocationNoMaterialize());
|
|
243
|
+
let iterHead = listHead;
|
|
244
|
+
for (const [index, term] of terms.entries()) {
|
|
245
|
+
const lastInList = index === terms.length - 1;
|
|
246
|
+
const headTriple = F.triple(iterHead, predFirst, term);
|
|
247
|
+
triples.push(headTriple);
|
|
248
|
+
// If not the last, create new iterHead, otherwise, close list
|
|
249
|
+
if (lastInList) {
|
|
250
|
+
const nilTriple = F.triple(iterHead, predRest, predNil);
|
|
251
|
+
triples.push(nilTriple);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
const tail = F.blankNode(undefined, F.sourceLocationNoMaterialize());
|
|
255
|
+
const linkTriple = F.triple(iterHead, predRest, tail);
|
|
256
|
+
triples.push(linkTriple);
|
|
257
|
+
iterHead = tail;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return F.tripleCollectionList(listHead, triples, F.sourceLocation(startToken, endToken));
|
|
261
|
+
});
|
|
262
|
+
},
|
|
263
|
+
gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {
|
|
264
|
+
F.printFilter(ast, () => PRINT_WORD('('));
|
|
265
|
+
// Only every 2 triple is relevant. The odd triples are linking triples.
|
|
266
|
+
for (const [idx, triple] of ast.triples.entries()) {
|
|
267
|
+
if (idx % 2 === 0) {
|
|
268
|
+
SUBRULE(allowPaths ? graphNodePath : graphNode, triple.object, undefined);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
F.printFilter(ast, () => PRINT_WORD(')'));
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export const collection = collectionImpl('collection', false);
|
|
276
|
+
export const collectionPath = collectionImpl('collectionPath', true);
|
|
277
|
+
/**
|
|
278
|
+
* [[98]](https://www.w3.org/TR/sparql11-query/#rTriplesNode)
|
|
279
|
+
* [[100]](https://www.w3.org/TR/sparql11-query/#rTriplesNodePath)
|
|
280
|
+
*/
|
|
281
|
+
function triplesNodeImpl(name, allowPaths) {
|
|
282
|
+
return {
|
|
283
|
+
name,
|
|
284
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
285
|
+
{ ALT: () => SUBRULE(allowPaths ? collectionPath : collection, undefined) },
|
|
286
|
+
{ ALT: () => SUBRULE(allowPaths ? blankNodePropertyListPath : blankNodePropertyList, undefined) },
|
|
287
|
+
]),
|
|
288
|
+
gImpl: ({ SUBRULE }) => ast => ast.subType === 'list' ?
|
|
289
|
+
SUBRULE(allowPaths ? collectionPath : collection, ast, undefined) :
|
|
290
|
+
SUBRULE(allowPaths ? blankNodePropertyListPath : blankNodePropertyList, ast, undefined),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
export const triplesNode = triplesNodeImpl('triplesNode', false);
|
|
294
|
+
export const triplesNodePath = triplesNodeImpl('triplesNodePath', true);
|
|
295
|
+
/**
|
|
296
|
+
* [[99]](https://www.w3.org/TR/sparql11-query/#rBlankNodePropertyList)
|
|
297
|
+
* [[101]](https://www.w3.org/TR/sparql11-query/#rBlankNodePropertyListPath)
|
|
298
|
+
*/
|
|
299
|
+
function blankNodePropertyListImpl(name, allowPaths) {
|
|
300
|
+
const propertyPathNotEmptyImpl = allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty;
|
|
301
|
+
return {
|
|
302
|
+
name,
|
|
303
|
+
impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
|
|
304
|
+
const startToken = CONSUME(l.symbols.LSquare);
|
|
305
|
+
const blankNode = ACTION(() => C.factory.blankNode(undefined, C.factory.sourceLocationNoMaterialize()));
|
|
306
|
+
const propList = SUBRULE(propertyPathNotEmptyImpl, { subject: blankNode });
|
|
307
|
+
const endToken = CONSUME(l.symbols.RSquare);
|
|
308
|
+
return ACTION(() => C.factory.tripleCollectionBlankNodeProperties(blankNode, propList, C.factory.sourceLocation(startToken, endToken)));
|
|
309
|
+
},
|
|
310
|
+
gImpl: ({ SUBRULE, PRINT, PRINT_WORD, HANDLE_LOC }) => (ast, { factory: F }) => {
|
|
311
|
+
F.printFilter(ast, () => PRINT('['));
|
|
312
|
+
for (const triple of ast.triples) {
|
|
313
|
+
HANDLE_LOC(triple, () => {
|
|
314
|
+
if (F.isTerm(triple.predicate) && F.isTermVariable(triple.predicate)) {
|
|
315
|
+
SUBRULE(varOrTerm, triple.predicate, undefined);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
SUBRULE(pathGenerator, triple.predicate, undefined);
|
|
319
|
+
}
|
|
320
|
+
SUBRULE(graphNodePath, triple.object, undefined);
|
|
321
|
+
F.printFilter(ast, () => PRINT_WORD(';'));
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
F.printFilter(ast, () => PRINT(']'));
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
export const blankNodePropertyList = blankNodePropertyListImpl('blankNodePropertyList', false);
|
|
329
|
+
export const blankNodePropertyListPath = blankNodePropertyListImpl('blankNodePropertyListPath', true);
|
|
330
|
+
/**
|
|
331
|
+
* [[103]](https://www.w3.org/TR/sparql11-query/#rGraphNode)
|
|
332
|
+
* [[105]](https://www.w3.org/TR/sparql11-query/#rGraphNodePath)
|
|
333
|
+
*/
|
|
334
|
+
function graphNodeImpl(name, allowPaths) {
|
|
335
|
+
const triplesNodeRule = allowPaths ? triplesNodePath : triplesNode;
|
|
336
|
+
return {
|
|
337
|
+
name,
|
|
338
|
+
impl: ({ SUBRULE, OR }) => C => OR([
|
|
339
|
+
{ ALT: () => SUBRULE(varOrTerm, undefined) },
|
|
340
|
+
{
|
|
341
|
+
GATE: () => C.parseMode.has('canCreateBlankNodes'),
|
|
342
|
+
ALT: () => SUBRULE(triplesNodeRule, undefined),
|
|
343
|
+
},
|
|
344
|
+
]),
|
|
345
|
+
gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {
|
|
346
|
+
if (F.isTerm(ast)) {
|
|
347
|
+
SUBRULE(varOrTerm, ast, undefined);
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
SUBRULE(triplesNodeRule, ast, undefined);
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
export const graphNode = graphNodeImpl('graphNode', false);
|
|
356
|
+
export const graphNodePath = graphNodeImpl('graphNodePath', true);
|
|
357
|
+
//# sourceMappingURL=tripleBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tripleBlock.js","sourceRoot":"","sources":["tripleBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IToken } from 'chevrotain';\nimport { CommonIRIs } from '../grammar-helpers/utils';\nimport * as l from '../lexer';\nimport type {\n BasicGraphPattern,\n GraphNode,\n Path,\n PatternBgp,\n Term,\n TermVariable,\n TripleCollection,\n TripleCollectionBlankNodeProperties,\n TripleCollectionList,\n TripleNesting,\n} from '../RoundTripTypes';\nimport type {\n SparqlGrammarRule,\n SparqlRule,\n} from '../Sparql11types';\nimport { var_, varOrTerm, verb } from './general';\nimport { path, pathGenerator } from './propertyPaths';\n\nfunction triplesDotSeperated(triplesSameSubjectSubrule: SparqlGrammarRule<string, BasicGraphPattern>):\nSparqlGrammarRule<string, PatternBgp>['impl'] {\n return ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, OPTION }) => (C) => {\n const triples: BasicGraphPattern = [];\n\n let parsedDot = true;\n let dotToken: undefined | IToken;\n AT_LEAST_ONE({\n GATE: () => parsedDot,\n DEF: () => {\n parsedDot = false;\n const template = SUBRULE(triplesSameSubjectSubrule, undefined);\n ACTION(() => {\n triples.push(...template);\n });\n OPTION(() => {\n dotToken = CONSUME(l.symbols.dot);\n parsedDot = true;\n });\n },\n });\n return ACTION(() => C.factory.patternBgp(triples, C.factory.sourceLocation(...triples, dotToken)));\n };\n}\n\n/**\n * [[55]](https://www.w3.org/TR/sparql11-query/#rTriplesBlock)\n */\nexport const triplesBlock: SparqlRule<'triplesBlock', PatternBgp> = <const>{\n name: 'triplesBlock',\n impl: implArgs => C => triplesDotSeperated(triplesSameSubjectPath)(implArgs)(C, undefined),\n gImpl: ({ SUBRULE, PRINT_WORD, HANDLE_LOC }) => (ast, { factory: F }) => {\n for (const [ index, triple ] of ast.triples.entries()) {\n HANDLE_LOC(triple, () => {\n const nextTriple = ast.triples.at(index);\n if (F.isTripleCollection(triple)) {\n SUBRULE(graphNodePath, triple, undefined);\n // A top level tripleCollection block means that it is not used in a triple. So you end with DOT.\n F.printFilter(triple, () => PRINT_WORD('.'));\n } else {\n // Subject\n SUBRULE(graphNodePath, triple.subject, undefined);\n // Predicate\n if (F.isTerm(triple.predicate) && F.isTermVariable(triple.predicate)) {\n SUBRULE(varOrTerm, triple.predicate, undefined);\n } else {\n SUBRULE(pathGenerator, triple.predicate, undefined);\n }\n // Object\n SUBRULE(graphNodePath, triple.object, undefined);\n\n // If no more things, or a top level collection (only possible if new block was part), or new subject: add DOT\n if (nextTriple === undefined || F.isTripleCollection(nextTriple) ||\n !F.isSourceLocationNoMaterialize(nextTriple.subject.loc)) {\n F.printFilter(ast, () => PRINT_WORD('.'));\n } else if (F.isSourceLocationNoMaterialize(nextTriple.predicate.loc)) {\n F.printFilter(ast, () => PRINT_WORD(','));\n } else {\n F.printFilter(ast, () => PRINT_WORD(';'));\n }\n }\n });\n }\n },\n};\n\n/**\n * [[75]](https://www.w3.org/TR/sparql11-query/#rTriplesSameSubject)\n * [[81]](https://www.w3.org/TR/sparql11-query/#rTriplesSameSubjectPath)\n * CONTRACT: triples generated from the subject come first, then comes the main triple,\n * and then come the triples from the object. Only the first occurrence of a term has `SourceLocationType = source`\n */\nfunction triplesSameSubjectImpl<T extends string>(name: T, allowPaths: boolean):\nSparqlGrammarRule<T, BasicGraphPattern> {\n return <const> {\n name,\n impl: ({ ACTION, SUBRULE, OR }) => C => OR<BasicGraphPattern>([\n { ALT: () => {\n const subject = SUBRULE(varOrTerm, undefined);\n const res = SUBRULE(\n allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty,\n { subject: ACTION(() => C.factory.dematerialized(subject)) },\n );\n // Only the first occurrence of a subject is actually materialized.\n return ACTION(() => {\n if (res.length > 0) {\n res[0].subject = subject;\n res[0].loc = C.factory.sourceLocation(subject, res[0]);\n }\n return res;\n });\n } },\n { ALT: () => {\n const subjectNode = SUBRULE(allowPaths ? triplesNodePath : triplesNode, undefined);\n const restNode = SUBRULE(\n allowPaths ? propertyListPath : propertyList,\n { subject: ACTION(() => C.factory.graphNodeIdentifier(subjectNode)) },\n );\n return ACTION(() => {\n if (restNode.length === 0) {\n return [ subjectNode ];\n }\n restNode[0].subject = subjectNode;\n restNode[0].loc = C.factory.sourceLocation(subjectNode, restNode[0]);\n return restNode;\n });\n } },\n ]),\n };\n}\nexport const triplesSameSubject = triplesSameSubjectImpl('triplesSameSubject', false);\nexport const triplesSameSubjectPath = triplesSameSubjectImpl('triplesSameSubjectPath', true);\n\n/**\n * [[52]](https://www.w3.org/TR/sparql11-query/#rTriplesTemplate)\n */\nexport const triplesTemplate: SparqlGrammarRule<'triplesTemplate', PatternBgp> = <const> {\n name: 'triplesTemplate',\n impl: triplesDotSeperated(triplesSameSubject),\n};\n\n/**\n * [[76]](https://www.w3.org/TR/sparql11-query/#rPropertyList)\n * [[82]](https://www.w3.org/TR/sparql11-query/#rPropertyListPath)\n */\nfunction propertyListImpl<T extends string>(name: T, allowPaths: boolean):\nSparqlGrammarRule<T, TripleNesting[], Pick<TripleNesting, 'subject'>> {\n return {\n name,\n impl: ({ SUBRULE, OPTION }) => (_, arg) =>\n OPTION(() => SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty, arg)) ?? [],\n };\n}\nexport const propertyList = propertyListImpl('propertyList', false);\nexport const propertyListPath = propertyListImpl('propertyListPath', true);\n\n// We could use gates for this, but in that case,\n// a grammar not in need of paths would still have to include the path rules\n/**\n * [[77]](https://www.w3.org/TR/sparql11-query/#rPropertyListNotEmpty)\n * [[83]](https://www.w3.org/TR/sparql11-query/#rPropertyListPathNotEmpty)\n */\nfunction propertyListNotEmptyImplementation<T extends string>(\n name: T,\n allowPaths: boolean,\n): SparqlGrammarRule<T, TripleNesting[], Pick<TripleNesting, 'subject'>> {\n return {\n name,\n impl: ({ ACTION, CONSUME, AT_LEAST_ONE, SUBRULE1, MANY2, OR1 }) => (_, arg) => {\n const result: TripleNesting[] = [];\n let parsedSemi = true;\n\n AT_LEAST_ONE({\n GATE: () => parsedSemi,\n DEF: () => {\n parsedSemi = false;\n const predicate = allowPaths ?\n OR1<TermVariable | Path>([\n { ALT: () => SUBRULE1(verbPath, undefined) },\n { ALT: () => SUBRULE1(verbSimple, undefined) },\n ]) :\n SUBRULE1(verb, undefined);\n const triples = SUBRULE1(\n allowPaths ? objectListPath : objectList,\n ACTION(() => ({ subject: arg.subject, predicate })),\n );\n\n MANY2(() => {\n CONSUME(l.symbols.semi);\n parsedSemi = true;\n });\n\n ACTION(() => {\n result.push(...triples);\n });\n },\n });\n return result;\n },\n };\n}\nexport const propertyListNotEmpty = propertyListNotEmptyImplementation('propertyListNotEmpty', false);\nexport const propertyListPathNotEmpty = propertyListNotEmptyImplementation('propertyListPathNotEmpty', true);\n\n/**\n * [[84]](https://www.w3.org/TR/sparql11-query/#rVerbPath)\n */\nexport const verbPath: SparqlGrammarRule<'verbPath', Path> = <const> {\n name: 'verbPath',\n impl: ({ SUBRULE }) => () => SUBRULE(path, undefined),\n};\n\n/**\n * [[85]](https://www.w3.org/TR/sparql11-query/#rVerbSimple)\n */\nexport const verbSimple: SparqlGrammarRule<'verbSimple', TermVariable> = <const> {\n name: 'verbSimple',\n impl: ({ SUBRULE }) => () => SUBRULE(var_, undefined),\n};\n\n/**\n * [[79]](https://www.w3.org/TR/sparql11-query/#rObjectList)\n * [[86]](https://www.w3.org/TR/sparql11-query/#rObjectListPath)\n */\nfunction objectListImpl<T extends string>(name: T, allowPaths: boolean):\nSparqlGrammarRule<T, TripleNesting[], Pick<TripleNesting, 'subject' | 'predicate'>> {\n return <const> {\n name,\n impl: ({ ACTION, SUBRULE, AT_LEAST_ONE_SEP }) => (_, arg) => {\n const objects: TripleNesting[] = [];\n AT_LEAST_ONE_SEP({\n SEP: l.symbols.comma,\n DEF: () => {\n const objectTriple = SUBRULE(allowPaths ? objectPath : object, arg);\n ACTION(() => {\n objects.push(objectTriple);\n });\n },\n });\n return objects;\n },\n };\n}\nexport const objectList = objectListImpl('objectList', false);\nexport const objectListPath = objectListImpl('objectListPath', true);\n\n/**\n * [[80]](https://www.w3.org/TR/sparql11-query/#rObject)\n * [[87]](https://www.w3.org/TR/sparql11-query/#rObjectPath)\n */\nfunction objectImpl<T extends string>(name: T, allowPaths: boolean):\nSparqlGrammarRule<T, TripleNesting, Pick<TripleNesting, 'subject' | 'predicate'>> {\n return {\n name,\n impl: ({ ACTION, SUBRULE }) => (C, arg) => {\n const node = SUBRULE(allowPaths ? graphNodePath : graphNode, undefined);\n return ACTION(() =>\n C.factory.triple(arg.subject, arg.predicate, node));\n },\n };\n}\nexport const object = objectImpl('object', false);\nexport const objectPath = objectImpl('objectPath', true);\n\n/**\n * [[102]](https://www.w3.org/TR/sparql11-query/#rCollection)\n * [[103]](https://www.w3.org/TR/sparql11-query/#rCollectionPath)\n */\nfunction collectionImpl<T extends string>(name: T, allowPaths: boolean): SparqlRule<T, TripleCollectionList> {\n return {\n name,\n impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME }) => (C) => {\n // Construct a [cons list](https://en.wikipedia.org/wiki/Cons#Lists),\n // here called a [RDF collection](https://www.w3.org/TR/sparql11-query/#collections).\n const terms: GraphNode[] = [];\n\n const startToken = CONSUME(l.symbols.LParen);\n\n AT_LEAST_ONE(() => {\n terms.push(SUBRULE(allowPaths ? graphNodePath : graphNode, undefined));\n });\n const endToken = CONSUME(l.symbols.RParen);\n\n return ACTION(() => {\n const F = C.factory;\n const triples: TripleNesting[] = [];\n // The triples created in your recursion\n const predFirst = F.namedNode(F.sourceLocationNoMaterialize(), CommonIRIs.FIRST, undefined);\n const predRest = F.namedNode(F.sourceLocationNoMaterialize(), CommonIRIs.REST, undefined);\n const predNil = F.namedNode(F.sourceLocationNoMaterialize(), CommonIRIs.NIL, undefined);\n\n const listHead = F.blankNode(undefined, F.sourceLocationNoMaterialize());\n let iterHead: TripleNesting['object'] = listHead;\n for (const [ index, term ] of terms.entries()) {\n const lastInList = index === terms.length - 1;\n\n const headTriple: TripleNesting = F.triple(\n iterHead,\n predFirst,\n term,\n );\n triples.push(headTriple);\n\n // If not the last, create new iterHead, otherwise, close list\n if (lastInList) {\n const nilTriple: TripleNesting = F.triple(iterHead, predRest, predNil);\n triples.push(nilTriple);\n } else {\n const tail = F.blankNode(undefined, F.sourceLocationNoMaterialize());\n const linkTriple: TripleNesting = F.triple(iterHead, predRest, tail);\n triples.push(linkTriple);\n iterHead = tail;\n }\n }\n return F.tripleCollectionList(listHead, triples, F.sourceLocation(startToken, endToken));\n });\n },\n gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => PRINT_WORD('('));\n // Only every 2 triple is relevant. The odd triples are linking triples.\n for (const [ idx, triple ] of ast.triples.entries()) {\n if (idx % 2 === 0) {\n SUBRULE(allowPaths ? graphNodePath : graphNode, triple.object, undefined);\n }\n }\n F.printFilter(ast, () => PRINT_WORD(')'));\n },\n };\n}\nexport const collection = collectionImpl('collection', false);\nexport const collectionPath = collectionImpl('collectionPath', true);\n\n/**\n * [[98]](https://www.w3.org/TR/sparql11-query/#rTriplesNode)\n * [[100]](https://www.w3.org/TR/sparql11-query/#rTriplesNodePath)\n */\nfunction triplesNodeImpl<T extends string>(name: T, allowPaths: boolean): SparqlRule<T, TripleCollection> {\n return <const>{\n name,\n impl: ({ SUBRULE, OR }) => () => OR<TripleCollection>([\n { ALT: () => SUBRULE(allowPaths ? collectionPath : collection, undefined) },\n { ALT: () => SUBRULE(allowPaths ? blankNodePropertyListPath : blankNodePropertyList, undefined) },\n ]),\n gImpl: ({ SUBRULE }) => ast => ast.subType === 'list' ?\n SUBRULE(allowPaths ? collectionPath : collection, ast, undefined) :\n SUBRULE(allowPaths ? blankNodePropertyListPath : blankNodePropertyList, ast, undefined),\n };\n}\nexport const triplesNode = triplesNodeImpl('triplesNode', false);\nexport const triplesNodePath = triplesNodeImpl('triplesNodePath', true);\n\n/**\n * [[99]](https://www.w3.org/TR/sparql11-query/#rBlankNodePropertyList)\n * [[101]](https://www.w3.org/TR/sparql11-query/#rBlankNodePropertyListPath)\n */\nfunction blankNodePropertyListImpl<T extends string>(name: T, allowPaths: boolean):\nSparqlRule<T, TripleCollectionBlankNodeProperties> {\n const propertyPathNotEmptyImpl = allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty;\n return {\n name,\n impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {\n const startToken = CONSUME(l.symbols.LSquare);\n\n const blankNode = ACTION(() =>\n C.factory.blankNode(undefined, C.factory.sourceLocationNoMaterialize()));\n\n const propList = SUBRULE(propertyPathNotEmptyImpl, { subject: blankNode });\n const endToken = CONSUME(l.symbols.RSquare);\n\n return ACTION(() => C.factory.tripleCollectionBlankNodeProperties(\n blankNode,\n propList,\n C.factory.sourceLocation(startToken, endToken),\n ));\n },\n gImpl: ({ SUBRULE, PRINT, PRINT_WORD, HANDLE_LOC }) => (ast, { factory: F }) => {\n F.printFilter(ast, () => PRINT('['));\n for (const triple of ast.triples) {\n HANDLE_LOC(triple, () => {\n if (F.isTerm(triple.predicate) && F.isTermVariable(triple.predicate)) {\n SUBRULE(varOrTerm, triple.predicate, undefined);\n } else {\n SUBRULE(pathGenerator, triple.predicate, undefined);\n }\n SUBRULE(graphNodePath, triple.object, undefined);\n\n F.printFilter(ast, () => PRINT_WORD(';'));\n });\n }\n F.printFilter(ast, () => PRINT(']'));\n },\n };\n}\nexport const blankNodePropertyList = blankNodePropertyListImpl('blankNodePropertyList', false);\nexport const blankNodePropertyListPath = blankNodePropertyListImpl('blankNodePropertyListPath', true);\n\n/**\n * [[103]](https://www.w3.org/TR/sparql11-query/#rGraphNode)\n * [[105]](https://www.w3.org/TR/sparql11-query/#rGraphNodePath)\n */\nfunction graphNodeImpl<T extends string>(name: T, allowPaths: boolean): SparqlRule<T, Term | TripleCollection> {\n const triplesNodeRule = allowPaths ? triplesNodePath : triplesNode;\n return {\n name,\n impl: ({ SUBRULE, OR }) => C => OR<Term | TripleCollection>([\n { ALT: () => SUBRULE(varOrTerm, undefined) },\n {\n GATE: () => C.parseMode.has('canCreateBlankNodes'),\n ALT: () => SUBRULE(triplesNodeRule, undefined),\n },\n ]),\n gImpl: ({ SUBRULE }) => (ast, { factory: F }) => {\n if (F.isTerm(ast)) {\n SUBRULE(varOrTerm, ast, undefined);\n } else {\n SUBRULE(triplesNodeRule, ast, undefined);\n }\n },\n };\n}\nexport const graphNode = graphNodeImpl('graphNode', false);\nexport const graphNodePath = graphNodeImpl('graphNodePath', true);\n"]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { Wrap } from '@traqula/core';
|
|
2
|
+
import type { GraphQuads, GraphRef, GraphRefDefault, GraphRefSpecific, Quads, Update, UpdateOperation, UpdateOperationAdd, UpdateOperationClear, UpdateOperationCopy, UpdateOperationCreate, UpdateOperationDeleteData, UpdateOperationDeleteWhere, UpdateOperationDrop, UpdateOperationInsertData, UpdateOperationLoad, UpdateOperationModify, UpdateOperationMove } from '../../RoundTripTypes';
|
|
3
|
+
import type { SparqlGrammarRule, SparqlRule } from '../../Sparql11types';
|
|
4
|
+
/**
|
|
5
|
+
* [[3]](https://www.w3.org/TR/sparql11-query/#rUpdateUnit)
|
|
6
|
+
*/
|
|
7
|
+
export declare const updateUnit: SparqlGrammarRule<'updateUnit', Update>;
|
|
8
|
+
/**
|
|
9
|
+
* [[29]](https://www.w3.org/TR/sparql11-query/#rUpdate)
|
|
10
|
+
*/
|
|
11
|
+
export declare const update: SparqlRule<'update', Update>;
|
|
12
|
+
/**
|
|
13
|
+
* [[30]](https://www.w3.org/TR/sparql11-query/#rUpdate1)
|
|
14
|
+
*/
|
|
15
|
+
export declare const update1: SparqlRule<'update1', UpdateOperation>;
|
|
16
|
+
/**
|
|
17
|
+
* [[31]](https://www.w3.org/TR/sparql11-query/#rLoad)
|
|
18
|
+
*/
|
|
19
|
+
export declare const load: SparqlRule<'load', UpdateOperationLoad>;
|
|
20
|
+
/**
|
|
21
|
+
* [[32]](https://www.w3.org/TR/sparql11-query/#rClear)
|
|
22
|
+
*/
|
|
23
|
+
export declare const clear: SparqlRule<"clear", UpdateOperationClear | UpdateOperationDrop>;
|
|
24
|
+
/**
|
|
25
|
+
* [[33]](https://www.w3.org/TR/sparql11-query/#rDrop)
|
|
26
|
+
*/
|
|
27
|
+
export declare const drop: SparqlRule<"drop", UpdateOperationClear | UpdateOperationDrop>;
|
|
28
|
+
/**
|
|
29
|
+
* [[34]](https://www.w3.org/TR/sparql11-query/#rCreate)
|
|
30
|
+
*/
|
|
31
|
+
export declare const create: SparqlRule<'create', UpdateOperationCreate>;
|
|
32
|
+
/**
|
|
33
|
+
* [[35]](https://www.w3.org/TR/sparql11-query/#rAdd)
|
|
34
|
+
*/
|
|
35
|
+
export declare const add: SparqlRule<"add", UpdateOperationAdd | UpdateOperationMove | UpdateOperationCopy>;
|
|
36
|
+
/**
|
|
37
|
+
* [[36]](https://www.w3.org/TR/sparql11-query/#rMove)
|
|
38
|
+
*/
|
|
39
|
+
export declare const move: SparqlRule<"move", UpdateOperationAdd | UpdateOperationMove | UpdateOperationCopy>;
|
|
40
|
+
/**
|
|
41
|
+
* [[37]](https://www.w3.org/TR/sparql11-query/#rCopy)
|
|
42
|
+
*/
|
|
43
|
+
export declare const copy: SparqlRule<"copy", UpdateOperationAdd | UpdateOperationMove | UpdateOperationCopy>;
|
|
44
|
+
/**
|
|
45
|
+
* [[48]](https://www.w3.org/TR/sparql11-query/#rQuadPattern)
|
|
46
|
+
*/
|
|
47
|
+
export declare const quadPattern: SparqlGrammarRule<'quadPattern', Wrap<Quads[]>>;
|
|
48
|
+
/**
|
|
49
|
+
* [[49]](https://www.w3.org/TR/sparql11-query/#rQuadData)
|
|
50
|
+
*/
|
|
51
|
+
export declare const quadData: SparqlGrammarRule<'quadData', Wrap<Quads[]>>;
|
|
52
|
+
/**
|
|
53
|
+
* [[38]](https://www.w3.org/TR/sparql11-query/#rInsertData)
|
|
54
|
+
*/
|
|
55
|
+
export declare const insertData: SparqlRule<"insertData", UpdateOperationInsertData | UpdateOperationDeleteData | UpdateOperationDeleteWhere>;
|
|
56
|
+
/**
|
|
57
|
+
* [[39]](https://www.w3.org/TR/sparql11-query/#rDeleteData)
|
|
58
|
+
*/
|
|
59
|
+
export declare const deleteData: SparqlRule<"deleteData", UpdateOperationInsertData | UpdateOperationDeleteData | UpdateOperationDeleteWhere>;
|
|
60
|
+
/**
|
|
61
|
+
* [[40]](https://www.w3.org/TR/sparql11-query/#rDeleteWhere)
|
|
62
|
+
*/
|
|
63
|
+
export declare const deleteWhere: SparqlRule<"deleteWhere", UpdateOperationInsertData | UpdateOperationDeleteData | UpdateOperationDeleteWhere>;
|
|
64
|
+
/**
|
|
65
|
+
* [[41]](https://www.w3.org/TR/sparql11-query/#rModify)
|
|
66
|
+
*/
|
|
67
|
+
export declare const modify: SparqlRule<'modify', UpdateOperationModify>;
|
|
68
|
+
/**
|
|
69
|
+
* [[42]](https://www.w3.org/TR/sparql11-query/#rDeleteClause)
|
|
70
|
+
*/
|
|
71
|
+
export declare const deleteClause: SparqlGrammarRule<'deleteClause', Wrap<Quads[]>>;
|
|
72
|
+
/**
|
|
73
|
+
* [[43]](https://www.w3.org/TR/sparql11-query/#rInsertClause)
|
|
74
|
+
*/
|
|
75
|
+
export declare const insertClause: SparqlGrammarRule<'insertClause', Wrap<Quads[]>>;
|
|
76
|
+
/**
|
|
77
|
+
* [[45]](https://www.w3.org/TR/sparql11-query/#rGraphOrDefault)
|
|
78
|
+
*/
|
|
79
|
+
export declare const graphOrDefault: SparqlGrammarRule<'graphOrDefault', GraphRefDefault | GraphRefSpecific>;
|
|
80
|
+
/**
|
|
81
|
+
* [[46]](https://www.w3.org/TR/sparql11-query/#rGraphRef)
|
|
82
|
+
*/
|
|
83
|
+
export declare const graphRef: SparqlRule<'graphRef', GraphRefSpecific>;
|
|
84
|
+
/**
|
|
85
|
+
* [[47]](https://www.w3.org/TR/sparql11-query/#rGraphRefAll)
|
|
86
|
+
*/
|
|
87
|
+
export declare const graphRefAll: SparqlRule<'graphRefAll', GraphRef>;
|
|
88
|
+
/**
|
|
89
|
+
* [[50]](https://www.w3.org/TR/sparql11-query/#rQuads)
|
|
90
|
+
*/
|
|
91
|
+
export declare const quads: SparqlRule<'quads', Wrap<Quads[]>>;
|
|
92
|
+
/**
|
|
93
|
+
* [[51]](https://www.w3.org/TR/sparql11-query/#rQuadsNotTriples)
|
|
94
|
+
*/
|
|
95
|
+
export declare const quadsNotTriples: SparqlRule<'quadsNotTriples', GraphQuads>;
|