@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,203 @@
|
|
|
1
|
+
import * as l from '../lexer';
|
|
2
|
+
import { builtInCall, canParseAggregate } from './builtIn';
|
|
3
|
+
import { brackettedExpression, expression } from './expression';
|
|
4
|
+
import { var_ } from './general';
|
|
5
|
+
import { constraint, functionCall } from './whereClause';
|
|
6
|
+
export const solutionModifier = {
|
|
7
|
+
name: 'solutionModifier',
|
|
8
|
+
impl: ({ ACTION, SUBRULE, OPTION1, OPTION2, OPTION3, OPTION4 }) => () => {
|
|
9
|
+
const group = OPTION1(() => SUBRULE(groupClause));
|
|
10
|
+
const having = OPTION2(() => SUBRULE(havingClause));
|
|
11
|
+
const order = OPTION3(() => SUBRULE(orderClause));
|
|
12
|
+
const limitAndOffset = OPTION4(() => SUBRULE(limitOffsetClauses));
|
|
13
|
+
return ACTION(() => ({
|
|
14
|
+
...limitAndOffset,
|
|
15
|
+
...(group && { group }),
|
|
16
|
+
...(having && { having }),
|
|
17
|
+
...(order && { order }),
|
|
18
|
+
}));
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* [[19]](https://www.w3.org/TR/sparql11-query/#rGroupClause)
|
|
23
|
+
*/
|
|
24
|
+
export const groupClause = {
|
|
25
|
+
name: 'groupClause',
|
|
26
|
+
impl: ({ AT_LEAST_ONE, SUBRULE, CONSUME }) => () => {
|
|
27
|
+
const groupings = [];
|
|
28
|
+
CONSUME(l.groupBy);
|
|
29
|
+
AT_LEAST_ONE(() => {
|
|
30
|
+
groupings.push(SUBRULE(groupCondition));
|
|
31
|
+
});
|
|
32
|
+
return groupings;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* [[20]](https://www.w3.org/TR/sparql11-query/#rGroupCondition)
|
|
37
|
+
*/
|
|
38
|
+
export const groupCondition = {
|
|
39
|
+
name: 'groupCondition',
|
|
40
|
+
impl: ({ SUBRULE, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR }) => () => OR([
|
|
41
|
+
{ ALT: () => {
|
|
42
|
+
const expression = SUBRULE(builtInCall);
|
|
43
|
+
return {
|
|
44
|
+
expression,
|
|
45
|
+
};
|
|
46
|
+
} },
|
|
47
|
+
{ ALT: () => {
|
|
48
|
+
const expression = SUBRULE(functionCall);
|
|
49
|
+
return {
|
|
50
|
+
expression,
|
|
51
|
+
};
|
|
52
|
+
} },
|
|
53
|
+
{
|
|
54
|
+
ALT: () => {
|
|
55
|
+
CONSUME(l.symbols.LParen);
|
|
56
|
+
const expressionValue = SUBRULE(expression);
|
|
57
|
+
const variable = OPTION(() => {
|
|
58
|
+
CONSUME(l.as);
|
|
59
|
+
return SUBRULE1(var_);
|
|
60
|
+
});
|
|
61
|
+
CONSUME(l.symbols.RParen);
|
|
62
|
+
return {
|
|
63
|
+
expression: expressionValue,
|
|
64
|
+
variable,
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{ ALT: () => {
|
|
69
|
+
const expression = SUBRULE2(var_);
|
|
70
|
+
return {
|
|
71
|
+
expression,
|
|
72
|
+
};
|
|
73
|
+
} },
|
|
74
|
+
]),
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* [[21]](https://www.w3.org/TR/sparql11-query/#rHavingClause)
|
|
78
|
+
*/
|
|
79
|
+
export const havingClause = {
|
|
80
|
+
name: 'havingClause',
|
|
81
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, context }) => () => {
|
|
82
|
+
const expressions = [];
|
|
83
|
+
CONSUME(l.having);
|
|
84
|
+
const couldParseAgg = ACTION(() => context.parseMode.has(canParseAggregate) || !context.parseMode.add(canParseAggregate));
|
|
85
|
+
AT_LEAST_ONE(() => {
|
|
86
|
+
expressions.push(SUBRULE(havingCondition));
|
|
87
|
+
});
|
|
88
|
+
ACTION(() => !couldParseAgg && context.parseMode.delete(canParseAggregate));
|
|
89
|
+
return expressions;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* [[22]](https://www.w3.org/TR/sparql11-query/#rHavingCondition)
|
|
94
|
+
*/
|
|
95
|
+
export const havingCondition = {
|
|
96
|
+
name: 'havingCondition',
|
|
97
|
+
impl: ({ SUBRULE }) => () => SUBRULE(constraint),
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* [[23]](https://www.w3.org/TR/sparql11-query/#rOrderClause)
|
|
101
|
+
*/
|
|
102
|
+
export const orderClause = {
|
|
103
|
+
name: 'orderClause',
|
|
104
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, context }) => () => {
|
|
105
|
+
const orderings = [];
|
|
106
|
+
CONSUME(l.order);
|
|
107
|
+
const couldParseAgg = ACTION(() => context.parseMode.has(canParseAggregate) || !context.parseMode.add(canParseAggregate));
|
|
108
|
+
AT_LEAST_ONE(() => {
|
|
109
|
+
orderings.push(SUBRULE(orderCondition));
|
|
110
|
+
});
|
|
111
|
+
ACTION(() => !couldParseAgg && context.parseMode.delete(canParseAggregate));
|
|
112
|
+
return orderings;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* [[24]](https://www.w3.org/TR/sparql11-query/#rOrderCondition)
|
|
117
|
+
*/
|
|
118
|
+
export const orderCondition = {
|
|
119
|
+
name: 'orderCondition',
|
|
120
|
+
impl: ({ SUBRULE, CONSUME, OR1, OR2 }) => () => OR1([
|
|
121
|
+
{
|
|
122
|
+
ALT: () => {
|
|
123
|
+
const descending = OR2([
|
|
124
|
+
{ ALT: () => {
|
|
125
|
+
CONSUME(l.orderAsc);
|
|
126
|
+
return false;
|
|
127
|
+
} },
|
|
128
|
+
{ ALT: () => {
|
|
129
|
+
CONSUME(l.orderDesc);
|
|
130
|
+
return true;
|
|
131
|
+
} },
|
|
132
|
+
]);
|
|
133
|
+
const expr = SUBRULE(brackettedExpression);
|
|
134
|
+
return {
|
|
135
|
+
expression: expr,
|
|
136
|
+
descending,
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
{ ALT: () => {
|
|
141
|
+
const expr = SUBRULE(constraint);
|
|
142
|
+
return {
|
|
143
|
+
expression: expr,
|
|
144
|
+
};
|
|
145
|
+
} },
|
|
146
|
+
{ ALT: () => {
|
|
147
|
+
const expr = SUBRULE(var_);
|
|
148
|
+
return {
|
|
149
|
+
expression: expr,
|
|
150
|
+
};
|
|
151
|
+
} },
|
|
152
|
+
]),
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Parses limit and or offset in any order.
|
|
156
|
+
* [[25]](https://www.w3.org/TR/sparql11-query/#rLimitOffsetClauses)
|
|
157
|
+
*/
|
|
158
|
+
export const limitOffsetClauses = {
|
|
159
|
+
name: 'limitOffsetClauses',
|
|
160
|
+
impl: ({ SUBRULE1, SUBRULE2, OPTION1, OPTION2, OR }) => () => OR([
|
|
161
|
+
{
|
|
162
|
+
ALT: () => {
|
|
163
|
+
const limit = SUBRULE1(limitClause);
|
|
164
|
+
const offset = OPTION1(() => SUBRULE1(offsetClause));
|
|
165
|
+
return {
|
|
166
|
+
limit,
|
|
167
|
+
offset,
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
ALT: () => {
|
|
173
|
+
const offset = SUBRULE2(offsetClause);
|
|
174
|
+
const limit = OPTION2(() => SUBRULE2(limitClause));
|
|
175
|
+
return {
|
|
176
|
+
limit,
|
|
177
|
+
offset,
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
]),
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* [[26]](https://www.w3.org/TR/sparql11-query/#rLimitClause)
|
|
185
|
+
*/
|
|
186
|
+
export const limitClause = {
|
|
187
|
+
name: 'limitClause',
|
|
188
|
+
impl: ({ CONSUME }) => () => {
|
|
189
|
+
CONSUME(l.limit);
|
|
190
|
+
return Number.parseInt(CONSUME(l.terminals.integer).image, 10);
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* [[27]](https://www.w3.org/TR/sparql11-query/#rWhereClause)
|
|
195
|
+
*/
|
|
196
|
+
export const offsetClause = {
|
|
197
|
+
name: 'offsetClause',
|
|
198
|
+
impl: ({ CONSUME }) => () => {
|
|
199
|
+
CONSUME(l.offset);
|
|
200
|
+
return Number.parseInt(CONSUME(l.terminals.integer).image, 10);
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=solutionModifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solutionModifier.js","sourceRoot":"","sources":["solutionModifier.ts"],"names":[],"mappings":"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","sourcesContent":["import * as l from '../lexer';\nimport type { RuleDef } from '@traqula/core';\nimport { builtInCall, canParseAggregate } from './builtIn';\nimport { brackettedExpression, expression } from './expression';\nimport { var_ } from './general';\nimport type { Expression, Grouping, Ordering, SelectQuery } from '../Sparql11types';\nimport { constraint, functionCall } from './whereClause';\n\n/**\n * [[18]](https://www.w3.org/TR/sparql11-query/#rSolutionModifier)\n */\nexport type ISolutionModifier = Pick<SelectQuery, 'group' | 'having' | 'order' | 'limit' | 'offset'>;\nexport const solutionModifier: RuleDef<'solutionModifier', ISolutionModifier> = <const> {\n name: 'solutionModifier',\n impl: ({ ACTION, SUBRULE, OPTION1, OPTION2, OPTION3, OPTION4 }) => () => {\n const group = OPTION1(() => SUBRULE(groupClause));\n const having = OPTION2(() => SUBRULE(havingClause));\n const order = OPTION3(() => SUBRULE(orderClause));\n const limitAndOffset = OPTION4(() => SUBRULE(limitOffsetClauses));\n\n return ACTION(() => ({\n ...limitAndOffset,\n ...(group && { group }),\n ...(having && { having }),\n ...(order && { order }),\n }));\n },\n};\n\n/**\n * [[19]](https://www.w3.org/TR/sparql11-query/#rGroupClause)\n */\nexport const groupClause: RuleDef<'groupClause', Grouping[]> = <const> {\n name: 'groupClause',\n impl: ({ AT_LEAST_ONE, SUBRULE, CONSUME }) => () => {\n const groupings: Grouping[] = [];\n CONSUME(l.groupBy);\n AT_LEAST_ONE(() => {\n groupings.push(SUBRULE(groupCondition));\n });\n\n return groupings;\n },\n};\n\n/**\n * [[20]](https://www.w3.org/TR/sparql11-query/#rGroupCondition)\n */\nexport const groupCondition: RuleDef<'groupCondition', Grouping> = <const> {\n name: 'groupCondition',\n impl: ({ SUBRULE, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR }) => () => OR<Grouping>([\n { ALT: () => {\n const expression = SUBRULE(builtInCall);\n return {\n expression,\n };\n } },\n { ALT: () => {\n const expression = SUBRULE(functionCall);\n return {\n expression,\n };\n } },\n {\n ALT: () => {\n CONSUME(l.symbols.LParen);\n const expressionValue = SUBRULE(expression);\n const variable = OPTION(() => {\n CONSUME(l.as);\n return SUBRULE1(var_);\n });\n CONSUME(l.symbols.RParen);\n\n return {\n expression: expressionValue,\n variable,\n };\n },\n },\n { ALT: () => {\n const expression = SUBRULE2(var_);\n return {\n expression,\n };\n } },\n ]),\n};\n\n/**\n * [[21]](https://www.w3.org/TR/sparql11-query/#rHavingClause)\n */\nexport const havingClause: RuleDef<'havingClause', Expression[]> = <const> {\n name: 'havingClause',\n impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, context }) => () => {\n const expressions: Expression[] = [];\n\n CONSUME(l.having);\n const couldParseAgg = ACTION(() =>\n context.parseMode.has(canParseAggregate) || !context.parseMode.add(canParseAggregate));\n AT_LEAST_ONE(() => {\n expressions.push(SUBRULE(havingCondition));\n });\n ACTION(() => !couldParseAgg && context.parseMode.delete(canParseAggregate));\n\n return expressions;\n },\n};\n\n/**\n * [[22]](https://www.w3.org/TR/sparql11-query/#rHavingCondition)\n */\nexport const havingCondition: RuleDef<'havingCondition', Expression> = <const> {\n name: 'havingCondition',\n impl: ({ SUBRULE }) => () => SUBRULE(constraint),\n};\n\n/**\n * [[23]](https://www.w3.org/TR/sparql11-query/#rOrderClause)\n */\nexport const orderClause: RuleDef<'orderClause', Ordering[]> = <const> {\n name: 'orderClause',\n impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, context }) => () => {\n const orderings: Ordering[] = [];\n\n CONSUME(l.order);\n const couldParseAgg = ACTION(() =>\n context.parseMode.has(canParseAggregate) || !context.parseMode.add(canParseAggregate));\n AT_LEAST_ONE(() => {\n orderings.push(SUBRULE(orderCondition));\n });\n ACTION(() => !couldParseAgg && context.parseMode.delete(canParseAggregate));\n\n return orderings;\n },\n};\n\n/**\n * [[24]](https://www.w3.org/TR/sparql11-query/#rOrderCondition)\n */\nexport const orderCondition: RuleDef<'orderCondition', Ordering> = <const> {\n name: 'orderCondition',\n impl: ({ SUBRULE, CONSUME, OR1, OR2 }) => () => OR1([\n {\n ALT: () => {\n const descending = OR2([\n { ALT: () => {\n CONSUME(l.orderAsc);\n return false;\n } },\n { ALT: () => {\n CONSUME(l.orderDesc);\n return true;\n } },\n ]);\n const expr = SUBRULE(brackettedExpression);\n\n return {\n expression: expr,\n descending,\n };\n },\n },\n { ALT: () => {\n const expr = SUBRULE(constraint);\n return {\n expression: expr,\n };\n } },\n { ALT: () => {\n const expr = SUBRULE(var_);\n return {\n expression: expr,\n };\n } },\n ]),\n};\n\n/**\n * Parses limit and or offset in any order.\n * [[25]](https://www.w3.org/TR/sparql11-query/#rLimitOffsetClauses)\n */\nexport const limitOffsetClauses: RuleDef<'limitOffsetClauses', Pick<SelectQuery, 'limit' | 'offset'>> = <const> {\n name: 'limitOffsetClauses',\n impl: ({ SUBRULE1, SUBRULE2, OPTION1, OPTION2, OR }) => () => OR<Pick<SelectQuery, 'limit' | 'offset'>>([\n {\n ALT: () => {\n const limit = SUBRULE1(limitClause);\n const offset = OPTION1(() => SUBRULE1(offsetClause));\n return {\n limit,\n offset,\n };\n },\n },\n {\n ALT: () => {\n const offset = SUBRULE2(offsetClause);\n const limit = OPTION2(() => SUBRULE2(limitClause));\n return {\n limit,\n offset,\n };\n },\n },\n ]),\n};\n\n/**\n * [[26]](https://www.w3.org/TR/sparql11-query/#rLimitClause)\n */\nexport const limitClause: RuleDef<'limitClause', number> = <const> {\n name: 'limitClause',\n impl: ({ CONSUME }) => () => {\n CONSUME(l.limit);\n return Number.parseInt(CONSUME(l.terminals.integer).image, 10);\n },\n};\n\n/**\n * [[27]](https://www.w3.org/TR/sparql11-query/#rWhereClause)\n */\nexport const offsetClause: RuleDef<'offsetClause', number> = <const> {\n name: <const> 'offsetClause',\n impl: ({ CONSUME }) => () => {\n CONSUME(l.offset);\n return Number.parseInt(CONSUME(l.terminals.integer).image, 10);\n },\n};\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { RuleDef } from '@traqula/core';
|
|
2
|
+
import type { BgpPattern, IGraphNode, IriTerm, ITriplesNode, PropertyPath, Triple, TripleCreatorS, TripleCreatorSP, VariableTerm } from '../Sparql11types';
|
|
3
|
+
/**
|
|
4
|
+
* [[55]](https://www.w3.org/TR/sparql11-query/#rTriplesBlock)
|
|
5
|
+
*/
|
|
6
|
+
export declare const triplesBlock: RuleDef<'triplesBlock', BgpPattern>;
|
|
7
|
+
export declare const triplesSameSubject: RuleDef<"triplesSameSubject", Triple[]>;
|
|
8
|
+
export declare const triplesSameSubjectPath: RuleDef<"triplesSameSubjectPath", Triple[]>;
|
|
9
|
+
export declare const propertyList: RuleDef<"propertyList", TripleCreatorS[]>;
|
|
10
|
+
export declare const propertyListPath: RuleDef<"propertyListPath", TripleCreatorS[]>;
|
|
11
|
+
export declare const propertyListNotEmpty: RuleDef<"propertyListNotEmpty", TripleCreatorS[]>;
|
|
12
|
+
export declare const propertyListPathNotEmpty: RuleDef<"propertyListPathNotEmpty", TripleCreatorS[]>;
|
|
13
|
+
/**
|
|
14
|
+
* [[84]](https://www.w3.org/TR/sparql11-query/#rVerbPath)
|
|
15
|
+
*/
|
|
16
|
+
export declare const verbPath: RuleDef<'verbPath', PropertyPath | IriTerm>;
|
|
17
|
+
/**
|
|
18
|
+
* [[85]](https://www.w3.org/TR/sparql11-query/#rVerbSimple)
|
|
19
|
+
*/
|
|
20
|
+
export declare const verbSimple: RuleDef<'verbSimple', VariableTerm>;
|
|
21
|
+
export declare const objectList: RuleDef<"objectList", TripleCreatorSP[]>;
|
|
22
|
+
export declare const objectListPath: RuleDef<"objectListPath", TripleCreatorSP[]>;
|
|
23
|
+
/**
|
|
24
|
+
* [[80]](https://www.w3.org/TR/sparql11-query/#rObject)
|
|
25
|
+
*/
|
|
26
|
+
export declare const object: RuleDef<"object", TripleCreatorSP[]>;
|
|
27
|
+
/**
|
|
28
|
+
* [[87]](https://www.w3.org/TR/sparql11-query/#rObjectPath)
|
|
29
|
+
*/
|
|
30
|
+
export declare const objectPath: RuleDef<"objectPath", TripleCreatorSP[]>;
|
|
31
|
+
/**
|
|
32
|
+
* [[98]](https://www.w3.org/TR/sparql11-query/#rTriplesNode)
|
|
33
|
+
* [[100]](https://www.w3.org/TR/sparql11-query/#rTriplesNodePath)
|
|
34
|
+
*/
|
|
35
|
+
export declare const triplesNode: RuleDef<'triplesNode', ITriplesNode>;
|
|
36
|
+
export declare const triplesNodePath: RuleDef<'triplesNodePath', ITriplesNode>;
|
|
37
|
+
export declare const blankNodePropertyList: RuleDef<"blankNodePropertyList", ITriplesNode>;
|
|
38
|
+
export declare const blankNodePropertyListPath: RuleDef<"blankNodePropertyListPath", ITriplesNode>;
|
|
39
|
+
export declare const collection: RuleDef<"collection", ITriplesNode>;
|
|
40
|
+
export declare const collectionPath: RuleDef<"collectionPath", ITriplesNode>;
|
|
41
|
+
export declare const graphNode: RuleDef<"graphNode", IGraphNode>;
|
|
42
|
+
export declare const graphNodePath: RuleDef<"graphNodePath", IGraphNode>;
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import * as l from '../lexer';
|
|
2
|
+
import { CommonIRIs } from '@traqula/core';
|
|
3
|
+
import { var_, varOrTerm, verb } from './general';
|
|
4
|
+
import { canCreateBlankNodes } from './literals';
|
|
5
|
+
import { path } from './propertyPaths';
|
|
6
|
+
/**
|
|
7
|
+
* [[55]](https://www.w3.org/TR/sparql11-query/#rTriplesBlock)
|
|
8
|
+
*/
|
|
9
|
+
export const triplesBlock = {
|
|
10
|
+
name: 'triplesBlock',
|
|
11
|
+
impl: ({ ACTION, SUBRULE, CONSUME, OPTION1, OPTION2 }) => () => {
|
|
12
|
+
const triples = SUBRULE(triplesSameSubjectPath);
|
|
13
|
+
const pattern = OPTION1(() => {
|
|
14
|
+
CONSUME(l.symbols.dot);
|
|
15
|
+
return OPTION2(() => SUBRULE(triplesBlock));
|
|
16
|
+
});
|
|
17
|
+
return ACTION(() => ({
|
|
18
|
+
type: 'bgp',
|
|
19
|
+
triples: [...triples, ...(pattern?.triples ?? [])],
|
|
20
|
+
}));
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* [[75]](https://www.w3.org/TR/sparql11-query/#rTriplesSameSubject)
|
|
25
|
+
* [[81]](https://www.w3.org/TR/sparql11-query/#rTriplesSameSubjectPath)
|
|
26
|
+
*/
|
|
27
|
+
function triplesSameSubjectImpl(name, allowPaths) {
|
|
28
|
+
return {
|
|
29
|
+
name,
|
|
30
|
+
impl: ({ ACTION, SUBRULE, OR }) => () => OR([
|
|
31
|
+
{
|
|
32
|
+
ALT: () => {
|
|
33
|
+
const subject = SUBRULE(varOrTerm);
|
|
34
|
+
const propNotEmpty = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty);
|
|
35
|
+
return ACTION(() => propNotEmpty.map(partial => partial({ subject })));
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
ALT: () => {
|
|
40
|
+
const subjectNode = SUBRULE(allowPaths ? triplesNodePath : triplesNode);
|
|
41
|
+
const restNode = SUBRULE(allowPaths ? propertyListPath : propertyList);
|
|
42
|
+
return ACTION(() => [
|
|
43
|
+
...restNode.map(partial => partial({ subject: subjectNode.node })),
|
|
44
|
+
...subjectNode.triples,
|
|
45
|
+
]);
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
]),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export const triplesSameSubject = triplesSameSubjectImpl('triplesSameSubject', false);
|
|
52
|
+
export const triplesSameSubjectPath = triplesSameSubjectImpl('triplesSameSubjectPath', true);
|
|
53
|
+
/**
|
|
54
|
+
* [[76]](https://www.w3.org/TR/sparql11-query/#rPropertyList)
|
|
55
|
+
* [[82]](https://www.w3.org/TR/sparql11-query/#rPropertyListPath)
|
|
56
|
+
*/
|
|
57
|
+
function propertyListImpl(name, allowPaths) {
|
|
58
|
+
return {
|
|
59
|
+
name,
|
|
60
|
+
impl: ({ SUBRULE, OPTION }) => () => OPTION(() => SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty)) ?? [],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export const propertyList = propertyListImpl('propertyList', false);
|
|
64
|
+
export const propertyListPath = propertyListImpl('propertyListPath', true);
|
|
65
|
+
// We could use gates for this, but in that case,
|
|
66
|
+
// a grammar not in need of paths would still have to include the path rules
|
|
67
|
+
/**
|
|
68
|
+
* [[77]](https://www.w3.org/TR/sparql11-query/#rPropertyListNotEmpty)
|
|
69
|
+
* [[83]](https://www.w3.org/TR/sparql11-query/#rPropertyListPathNotEmpty)
|
|
70
|
+
*/
|
|
71
|
+
function propertyListNotEmptyImplementation(name, allowPaths) {
|
|
72
|
+
return {
|
|
73
|
+
name,
|
|
74
|
+
impl: ({ ACTION, CONSUME, MANY, SUBRULE1, SUBRULE2, OPTION, OR1, OR2, context }) => () => {
|
|
75
|
+
const result = [];
|
|
76
|
+
const resultAppendage = [];
|
|
77
|
+
// Generates predicate and objectList
|
|
78
|
+
const firstProperty = allowPaths ?
|
|
79
|
+
OR1([
|
|
80
|
+
{ ALT: () => SUBRULE1(verbPath) },
|
|
81
|
+
{ ALT: () => SUBRULE1(verbSimple) },
|
|
82
|
+
]) :
|
|
83
|
+
SUBRULE1(verb);
|
|
84
|
+
const firstObjects = SUBRULE1(allowPaths ? objectListPath : objectList);
|
|
85
|
+
ACTION(() => {
|
|
86
|
+
// TODO: this filter is only here to be compliant with sparqlJS and is quite arbitrary.
|
|
87
|
+
// For the first predicate,
|
|
88
|
+
// additionally generated triples (like from collections) are shoved to the back of the result.
|
|
89
|
+
const filterSubject = context.dataFactory.namedNode('internal:filterSubject');
|
|
90
|
+
for (const cObject of firstObjects) {
|
|
91
|
+
const triple = cObject({ subject: filterSubject, predicate: firstProperty });
|
|
92
|
+
const generator = rest => cObject({ ...rest, predicate: firstProperty });
|
|
93
|
+
if (triple.subject === filterSubject) {
|
|
94
|
+
result.push(generator);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
resultAppendage.push(generator);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
MANY(() => {
|
|
102
|
+
CONSUME(l.symbols.semi);
|
|
103
|
+
OPTION(() => {
|
|
104
|
+
const predicate = allowPaths ?
|
|
105
|
+
OR2([
|
|
106
|
+
{ ALT: () => SUBRULE2(verbPath) },
|
|
107
|
+
{ ALT: () => SUBRULE2(verbSimple) },
|
|
108
|
+
]) :
|
|
109
|
+
SUBRULE2(verb);
|
|
110
|
+
// https://www.w3.org/2013/sparql-errata#errata-query-3
|
|
111
|
+
const objects = SUBRULE2(allowPaths ? objectListPath : objectList);
|
|
112
|
+
ACTION(() => {
|
|
113
|
+
result.push(...objects
|
|
114
|
+
.map(object => (partS) => object({ ...partS, predicate })));
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return [...result, ...resultAppendage];
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export const propertyListNotEmpty = propertyListNotEmptyImplementation('propertyListNotEmpty', false);
|
|
123
|
+
export const propertyListPathNotEmpty = propertyListNotEmptyImplementation('propertyListPathNotEmpty', true);
|
|
124
|
+
/**
|
|
125
|
+
* [[84]](https://www.w3.org/TR/sparql11-query/#rVerbPath)
|
|
126
|
+
*/
|
|
127
|
+
export const verbPath = {
|
|
128
|
+
name: 'verbPath',
|
|
129
|
+
impl: ({ SUBRULE }) => () => SUBRULE(path),
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* [[85]](https://www.w3.org/TR/sparql11-query/#rVerbSimple)
|
|
133
|
+
*/
|
|
134
|
+
export const verbSimple = {
|
|
135
|
+
name: 'verbSimple',
|
|
136
|
+
impl: ({ SUBRULE }) => () => SUBRULE(var_),
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* [[79]](https://www.w3.org/TR/sparql11-query/#rObjectList)
|
|
140
|
+
* [[86]](https://www.w3.org/TR/sparql11-query/#rObjectListPath)
|
|
141
|
+
*/
|
|
142
|
+
function objectListImpl(name, allowPaths) {
|
|
143
|
+
return {
|
|
144
|
+
name,
|
|
145
|
+
impl: ({ ACTION, SUBRULE, AT_LEAST_ONE_SEP }) => () => {
|
|
146
|
+
const objects = [];
|
|
147
|
+
AT_LEAST_ONE_SEP({
|
|
148
|
+
DEF: () => {
|
|
149
|
+
const objectTriples = SUBRULE(allowPaths ? objectPath : object);
|
|
150
|
+
ACTION(() => objects.push(...objectTriples));
|
|
151
|
+
},
|
|
152
|
+
SEP: l.symbols.comma,
|
|
153
|
+
});
|
|
154
|
+
return objects;
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
export const objectList = objectListImpl('objectList', false);
|
|
159
|
+
export const objectListPath = objectListImpl('objectListPath', true);
|
|
160
|
+
function objectImpl(name, allowPaths) {
|
|
161
|
+
return {
|
|
162
|
+
name,
|
|
163
|
+
impl: ({ ACTION, SUBRULE }) => () => {
|
|
164
|
+
const node = SUBRULE(allowPaths ? graphNodePath : graphNode);
|
|
165
|
+
return ACTION(() => [
|
|
166
|
+
part => ({ ...part, object: node.node }),
|
|
167
|
+
...node.triples.map(val => () => val),
|
|
168
|
+
]);
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* [[80]](https://www.w3.org/TR/sparql11-query/#rObject)
|
|
174
|
+
*/
|
|
175
|
+
export const object = objectImpl('object', false);
|
|
176
|
+
/**
|
|
177
|
+
* [[87]](https://www.w3.org/TR/sparql11-query/#rObjectPath)
|
|
178
|
+
*/
|
|
179
|
+
export const objectPath = objectImpl('objectPath', true);
|
|
180
|
+
/**
|
|
181
|
+
* [[98]](https://www.w3.org/TR/sparql11-query/#rTriplesNode)
|
|
182
|
+
* [[100]](https://www.w3.org/TR/sparql11-query/#rTriplesNodePath)
|
|
183
|
+
*/
|
|
184
|
+
export const triplesNode = {
|
|
185
|
+
name: 'triplesNode',
|
|
186
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
187
|
+
{ ALT: () => SUBRULE(collection) },
|
|
188
|
+
{ ALT: () => SUBRULE(blankNodePropertyList) },
|
|
189
|
+
]),
|
|
190
|
+
};
|
|
191
|
+
export const triplesNodePath = {
|
|
192
|
+
name: 'triplesNodePath',
|
|
193
|
+
impl: ({ SUBRULE, OR }) => () => OR([
|
|
194
|
+
{ ALT: () => SUBRULE(collectionPath) },
|
|
195
|
+
{ ALT: () => SUBRULE(blankNodePropertyListPath) },
|
|
196
|
+
]),
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* [[99]](https://www.w3.org/TR/sparql11-query/#rBlankNodePropertyList)
|
|
200
|
+
* [[101]](https://www.w3.org/TR/sparql11-query/#rBlankNodePropertyListPath)
|
|
201
|
+
*/
|
|
202
|
+
function blankNodePropertyListImpl(name, allowPaths) {
|
|
203
|
+
return {
|
|
204
|
+
name,
|
|
205
|
+
impl: ({ ACTION, SUBRULE, CONSUME, context }) => () => {
|
|
206
|
+
CONSUME(l.symbols.LSquare);
|
|
207
|
+
const propList = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty);
|
|
208
|
+
CONSUME(l.symbols.RSquare);
|
|
209
|
+
return ACTION(() => {
|
|
210
|
+
const subject = context.dataFactory.blankNode();
|
|
211
|
+
return {
|
|
212
|
+
node: subject,
|
|
213
|
+
triples: propList.map(part => part({ subject })),
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
export const blankNodePropertyList = blankNodePropertyListImpl('blankNodePropertyList', false);
|
|
220
|
+
export const blankNodePropertyListPath = blankNodePropertyListImpl('blankNodePropertyListPath', true);
|
|
221
|
+
/**
|
|
222
|
+
* [[102]](https://www.w3.org/TR/sparql11-query/#rCollection)
|
|
223
|
+
* [[103]](https://www.w3.org/TR/sparql11-query/#rCollectionPath)
|
|
224
|
+
*/
|
|
225
|
+
function collectionImpl(name, allowPaths) {
|
|
226
|
+
return {
|
|
227
|
+
name,
|
|
228
|
+
impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, context }) => () => {
|
|
229
|
+
// Construct a [cons list](https://en.wikipedia.org/wiki/Cons#Lists),
|
|
230
|
+
// here called a [RDF collection](https://www.w3.org/TR/sparql11-query/#collections).
|
|
231
|
+
const terms = [];
|
|
232
|
+
const dataFactory = context.dataFactory;
|
|
233
|
+
CONSUME(l.symbols.LParen);
|
|
234
|
+
AT_LEAST_ONE(() => {
|
|
235
|
+
terms.push(SUBRULE(allowPaths ? graphNodePath : graphNode));
|
|
236
|
+
});
|
|
237
|
+
CONSUME(l.symbols.RParen);
|
|
238
|
+
return ACTION(() => {
|
|
239
|
+
const triples = [];
|
|
240
|
+
const appendTriples = [];
|
|
241
|
+
const listHead = dataFactory.blankNode();
|
|
242
|
+
let iterHead = listHead;
|
|
243
|
+
const predFirst = dataFactory.namedNode(CommonIRIs.FIRST);
|
|
244
|
+
const predRest = dataFactory.namedNode(CommonIRIs.REST);
|
|
245
|
+
for (const [index, term] of terms.entries()) {
|
|
246
|
+
const headTriple = {
|
|
247
|
+
subject: iterHead,
|
|
248
|
+
predicate: predFirst,
|
|
249
|
+
object: term.node,
|
|
250
|
+
};
|
|
251
|
+
triples.push(headTriple);
|
|
252
|
+
appendTriples.push(...term.triples);
|
|
253
|
+
// If not the last, create new iterHead, otherwise, close list
|
|
254
|
+
if (index === terms.length - 1) {
|
|
255
|
+
const nilTriple = {
|
|
256
|
+
subject: iterHead,
|
|
257
|
+
predicate: predRest,
|
|
258
|
+
object: dataFactory.namedNode(CommonIRIs.NIL),
|
|
259
|
+
};
|
|
260
|
+
triples.push(nilTriple);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const tail = dataFactory.blankNode();
|
|
264
|
+
const linkTriple = {
|
|
265
|
+
subject: iterHead,
|
|
266
|
+
predicate: predRest,
|
|
267
|
+
object: tail,
|
|
268
|
+
};
|
|
269
|
+
triples.push(linkTriple);
|
|
270
|
+
iterHead = tail;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
node: listHead,
|
|
275
|
+
triples: [...triples, ...appendTriples],
|
|
276
|
+
};
|
|
277
|
+
});
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
export const collection = collectionImpl('collection', false);
|
|
282
|
+
export const collectionPath = collectionImpl('collectionPath', true);
|
|
283
|
+
/**
|
|
284
|
+
* [[103]](https://www.w3.org/TR/sparql11-query/#rGraphNode)
|
|
285
|
+
* [[105]](https://www.w3.org/TR/sparql11-query/#rGraphNodePath)
|
|
286
|
+
*/
|
|
287
|
+
function graphNodeImpl(name, allowPaths) {
|
|
288
|
+
return {
|
|
289
|
+
name,
|
|
290
|
+
impl: ({ SUBRULE, OR, context }) => () => OR([
|
|
291
|
+
{
|
|
292
|
+
ALT: () => {
|
|
293
|
+
const val = SUBRULE(varOrTerm);
|
|
294
|
+
return {
|
|
295
|
+
node: val,
|
|
296
|
+
triples: [],
|
|
297
|
+
};
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
GATE: () => context.parseMode.has(canCreateBlankNodes),
|
|
302
|
+
ALT: () => SUBRULE(allowPaths ? triplesNodePath : triplesNode),
|
|
303
|
+
},
|
|
304
|
+
]),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
export const graphNode = graphNodeImpl('graphNode', false);
|
|
308
|
+
export const graphNodePath = graphNodeImpl('graphNodePath', true);
|
|
309
|
+
//# 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 * as l from '../lexer';\nimport type { RuleDef } from '@traqula/core';\nimport { CommonIRIs } from '@traqula/core';\nimport { var_, varOrTerm, verb } from './general';\nimport { canCreateBlankNodes } from './literals';\nimport { path } from './propertyPaths';\nimport type {\n BgpPattern,\n IGraphNode,\n IriTerm,\n ITriplesNode,\n PropertyPath,\n Triple,\n TripleCreatorS,\n TripleCreatorSP,\n VariableTerm,\n} from '../Sparql11types';\n\n/**\n * [[55]](https://www.w3.org/TR/sparql11-query/#rTriplesBlock)\n */\nexport const triplesBlock: RuleDef<'triplesBlock', BgpPattern> = <const> {\n name: 'triplesBlock',\n impl: ({ ACTION, SUBRULE, CONSUME, OPTION1, OPTION2 }) => () => {\n const triples = SUBRULE(triplesSameSubjectPath);\n const pattern = OPTION1(() => {\n CONSUME(l.symbols.dot);\n return OPTION2(() => SUBRULE(triplesBlock));\n });\n return ACTION(() => ({\n type: 'bgp',\n triples: [ ...triples, ...(pattern?.triples ?? []) ],\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 */\nfunction triplesSameSubjectImpl<T extends string>(name: T, allowPaths: boolean): RuleDef<T, Triple[]> {\n return <const> {\n name,\n impl: ({ ACTION, SUBRULE, OR }) => () => OR<Triple[]>([\n {\n ALT: () => {\n const subject = SUBRULE(varOrTerm);\n const propNotEmpty = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty);\n\n return ACTION(() =>\n propNotEmpty.map(partial => partial({ subject })));\n },\n },\n {\n ALT: () => {\n const subjectNode = SUBRULE(allowPaths ? triplesNodePath : triplesNode);\n const restNode = SUBRULE(allowPaths ? propertyListPath : propertyList);\n return ACTION(() => [\n ...restNode.map(partial => partial({ subject: subjectNode.node })),\n ...subjectNode.triples,\n ]);\n },\n },\n ]),\n };\n}\nexport const triplesSameSubject = triplesSameSubjectImpl('triplesSameSubject', false);\nexport const triplesSameSubjectPath = triplesSameSubjectImpl('triplesSameSubjectPath', true);\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): RuleDef<T, TripleCreatorS[]> {\n return {\n name,\n impl: ({ SUBRULE, OPTION }) => () =>\n OPTION(() => SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty)) ?? [],\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): RuleDef<T, TripleCreatorS[]> {\n return {\n name,\n impl: ({ ACTION, CONSUME, MANY, SUBRULE1, SUBRULE2, OPTION, OR1, OR2, context }) => () => {\n const result: TripleCreatorS[] = [];\n const resultAppendage: typeof result = [];\n\n // Generates predicate and objectList\n const firstProperty = allowPaths ?\n OR1<IriTerm | VariableTerm | PropertyPath>([\n { ALT: () => SUBRULE1(verbPath) },\n { ALT: () => SUBRULE1(verbSimple) },\n ]) :\n SUBRULE1(verb);\n const firstObjects = SUBRULE1(allowPaths ? objectListPath : objectList);\n ACTION(() => {\n // TODO: this filter is only here to be compliant with sparqlJS and is quite arbitrary.\n // For the first predicate,\n // additionally generated triples (like from collections) are shoved to the back of the result.\n const filterSubject = context.dataFactory.namedNode('internal:filterSubject');\n for (const cObject of firstObjects) {\n const triple = cObject({ subject: filterSubject, predicate: firstProperty });\n const generator: TripleCreatorS = rest => cObject({ ...rest, predicate: firstProperty });\n if (triple.subject === filterSubject) {\n result.push(generator);\n } else {\n resultAppendage.push(generator);\n }\n }\n });\n\n MANY(() => {\n CONSUME(l.symbols.semi);\n OPTION(() => {\n const predicate = allowPaths ?\n OR2<IriTerm | VariableTerm | PropertyPath>([\n { ALT: () => SUBRULE2(verbPath) },\n { ALT: () => SUBRULE2(verbSimple) },\n ]) :\n SUBRULE2(verb);\n // https://www.w3.org/2013/sparql-errata#errata-query-3\n const objects = SUBRULE2(allowPaths ? objectListPath : objectList);\n\n ACTION(() => {\n result.push(\n ...objects\n .map(object => (partS: Pick<Triple, 'subject'>) => object({ ...partS, predicate })),\n );\n });\n });\n });\n return [ ...result, ...resultAppendage ];\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: RuleDef<'verbPath', PropertyPath | IriTerm> = <const> {\n name: 'verbPath',\n impl: ({ SUBRULE }) => () => SUBRULE(path),\n};\n\n/**\n * [[85]](https://www.w3.org/TR/sparql11-query/#rVerbSimple)\n */\nexport const verbSimple: RuleDef<'verbSimple', VariableTerm> = <const> {\n name: 'verbSimple',\n impl: ({ SUBRULE }) => () => SUBRULE(var_),\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): RuleDef<T, TripleCreatorSP[]> {\n return {\n name,\n impl: ({ ACTION, SUBRULE, AT_LEAST_ONE_SEP }) => () => {\n const objects: TripleCreatorSP[] = [];\n AT_LEAST_ONE_SEP({\n DEF: () => {\n const objectTriples = SUBRULE(allowPaths ? objectPath : object);\n ACTION(() => objects.push(...objectTriples));\n },\n SEP: l.symbols.comma,\n });\n return objects;\n },\n };\n}\nexport const objectList = objectListImpl('objectList', false);\nexport const objectListPath = objectListImpl('objectListPath', true);\n\nfunction objectImpl<T extends string>(name: T, allowPaths: boolean): RuleDef<T, TripleCreatorSP[]> {\n return {\n name,\n impl: ({ ACTION, SUBRULE }) => () => {\n const node = SUBRULE(allowPaths ? graphNodePath : graphNode);\n return ACTION(() => [\n part => ({ ...part, object: node.node }),\n ...node.triples.map(val => () => val),\n ] satisfies TripleCreatorSP[]);\n },\n };\n}\n/**\n * [[80]](https://www.w3.org/TR/sparql11-query/#rObject)\n */\nexport const object = objectImpl('object', false);\n/**\n * [[87]](https://www.w3.org/TR/sparql11-query/#rObjectPath)\n */\nexport const objectPath = objectImpl('objectPath', true);\n/**\n * [[98]](https://www.w3.org/TR/sparql11-query/#rTriplesNode)\n * [[100]](https://www.w3.org/TR/sparql11-query/#rTriplesNodePath)\n */\nexport const triplesNode: RuleDef<'triplesNode', ITriplesNode> = <const> {\n name: 'triplesNode',\n impl: ({ SUBRULE, OR }) => () => OR<ITriplesNode>([\n { ALT: () => SUBRULE(collection) },\n { ALT: () => SUBRULE(blankNodePropertyList) },\n ]),\n};\nexport const triplesNodePath: RuleDef<'triplesNodePath', ITriplesNode> = <const> {\n name: 'triplesNodePath',\n impl: ({ SUBRULE, OR }) => () => OR<ITriplesNode>([\n { ALT: () => SUBRULE(collectionPath) },\n { ALT: () => SUBRULE(blankNodePropertyListPath) },\n ]),\n};\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): RuleDef<T, ITriplesNode> {\n return {\n name,\n impl: ({ ACTION, SUBRULE, CONSUME, context }) => () => {\n CONSUME(l.symbols.LSquare);\n const propList = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty);\n CONSUME(l.symbols.RSquare);\n\n return ACTION(() => {\n const subject = context.dataFactory.blankNode();\n return {\n node: subject,\n triples: propList.map(part => part({ subject })),\n };\n });\n },\n };\n}\nexport const blankNodePropertyList = blankNodePropertyListImpl('blankNodePropertyList', false);\nexport const blankNodePropertyListPath = blankNodePropertyListImpl('blankNodePropertyListPath', 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): RuleDef<T, ITriplesNode> {\n return {\n name,\n impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, context }) => () => {\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: IGraphNode[] = [];\n const dataFactory = context.dataFactory;\n CONSUME(l.symbols.LParen);\n AT_LEAST_ONE(() => {\n terms.push(SUBRULE(allowPaths ? graphNodePath : graphNode));\n });\n CONSUME(l.symbols.RParen);\n\n return ACTION(() => {\n const triples: Triple[] = [];\n const appendTriples: Triple[] = [];\n\n const listHead = dataFactory.blankNode();\n let iterHead = listHead;\n const predFirst = dataFactory.namedNode(CommonIRIs.FIRST);\n const predRest = dataFactory.namedNode(CommonIRIs.REST);\n for (const [ index, term ] of terms.entries()) {\n const headTriple: Triple = {\n subject: iterHead,\n predicate: predFirst,\n object: term.node,\n };\n triples.push(headTriple);\n appendTriples.push(...term.triples);\n\n // If not the last, create new iterHead, otherwise, close list\n if (index === terms.length - 1) {\n const nilTriple: Triple = {\n subject: iterHead,\n predicate: predRest,\n object: dataFactory.namedNode(CommonIRIs.NIL),\n };\n triples.push(nilTriple);\n } else {\n const tail = dataFactory.blankNode();\n const linkTriple: Triple = {\n subject: iterHead,\n predicate: predRest,\n object: tail,\n };\n triples.push(linkTriple);\n iterHead = tail;\n }\n }\n return {\n node: listHead,\n triples: [ ...triples, ...appendTriples ],\n };\n });\n },\n };\n}\nexport const collection = collectionImpl('collection', false);\nexport const collectionPath = collectionImpl('collectionPath', 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): RuleDef<T, IGraphNode> {\n return {\n name,\n impl: ({ SUBRULE, OR, context }) => () => OR<IGraphNode>([\n {\n ALT: () => {\n const val = SUBRULE(varOrTerm);\n return {\n node: val,\n triples: [],\n };\n },\n },\n {\n GATE: () => context.parseMode.has(canCreateBlankNodes),\n ALT: () => SUBRULE(allowPaths ? triplesNodePath : triplesNode),\n },\n ]),\n };\n}\nexport const graphNode = graphNodeImpl('graphNode', false);\nexport const graphNodePath = graphNodeImpl('graphNodePath', true);\n"]}
|