@traqula/rules-sparql-1-1 0.0.1-alpha.145 → 0.0.1-alpha.176
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/README.md +5 -3
- package/lib/Sparql11types.d.ts +83 -32
- package/lib/Sparql11types.js.map +1 -1
- package/lib/SparqlParser.d.ts +14 -0
- package/lib/SparqlParser.js +29 -0
- package/lib/SparqlParser.js.map +1 -0
- package/lib/Wildcard.d.ts +9 -0
- package/lib/Wildcard.js +19 -0
- package/lib/Wildcard.js.map +1 -0
- package/lib/expressionHelpers.d.ts +8 -7
- package/lib/expressionHelpers.js +21 -21
- package/lib/expressionHelpers.js.map +1 -1
- package/lib/grammar/builtIn.d.ts +7 -9
- package/lib/grammar/builtIn.js +90 -75
- package/lib/grammar/builtIn.js.map +1 -1
- package/lib/grammar/dataSetClause.d.ts +5 -6
- package/lib/grammar/dataSetClause.js +6 -5
- package/lib/grammar/dataSetClause.js.map +1 -1
- package/lib/grammar/expression.d.ts +16 -17
- package/lib/grammar/expression.js +102 -44
- package/lib/grammar/expression.js.map +1 -1
- package/lib/grammar/general.d.ts +10 -16
- package/lib/grammar/general.js +71 -63
- package/lib/grammar/general.js.map +1 -1
- package/lib/grammar/literals.d.ts +11 -12
- package/lib/grammar/literals.js +101 -33
- package/lib/grammar/literals.js.map +1 -1
- package/lib/grammar/propertyPaths.d.ts +11 -12
- package/lib/grammar/propertyPaths.js +42 -24
- package/lib/grammar/propertyPaths.js.map +1 -1
- package/lib/grammar/queryUnit/queryUnit.d.ts +13 -14
- package/lib/grammar/queryUnit/queryUnit.js +146 -51
- package/lib/grammar/queryUnit/queryUnit.js.map +1 -1
- package/lib/grammar/solutionModifier.d.ts +11 -12
- package/lib/grammar/solutionModifier.js +61 -27
- package/lib/grammar/solutionModifier.js.map +1 -1
- package/lib/grammar/tripleBlock.d.ts +26 -23
- package/lib/grammar/tripleBlock.js +81 -55
- package/lib/grammar/tripleBlock.js.map +1 -1
- package/lib/grammar/updateUnit/updateUnit.d.ts +25 -26
- package/lib/grammar/updateUnit/updateUnit.js +208 -73
- package/lib/grammar/updateUnit/updateUnit.js.map +1 -1
- package/lib/grammar/whereClause.d.ts +19 -20
- package/lib/grammar/whereClause.js +113 -42
- package/lib/grammar/whereClause.js.map +1 -1
- package/lib/grammar-helpers/utils.d.ts +16 -0
- package/lib/grammar-helpers/utils.js +53 -0
- package/lib/grammar-helpers/utils.js.map +1 -0
- package/lib/index.cjs +2284 -1424
- package/lib/index.d.ts +3 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/lexer/BuildinCalls.d.ts +62 -184
- package/lib/lexer/BuildinCalls.js +1 -2
- package/lib/lexer/BuildinCalls.js.map +1 -1
- package/lib/lexer/graph.d.ts +5 -13
- package/lib/lexer/graph.js +1 -2
- package/lib/lexer/graph.js.map +1 -1
- package/lib/lexer/lexer.d.ts +49 -143
- package/lib/lexer/lexer.js +1 -2
- package/lib/lexer/lexer.js.map +1 -1
- package/lib/lexer/symbols.d.ts +27 -79
- package/lib/lexer/symbols.js +1 -2
- package/lib/lexer/symbols.js.map +1 -1
- package/lib/lexer/terminals.d.ts +25 -73
- package/lib/lexer/terminals.js +16 -27
- package/lib/lexer/terminals.js.map +1 -1
- package/lib/utils.d.ts +6 -1
- package/lib/utils.js +23 -0
- package/lib/utils.js.map +1 -1
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Traqula Rules SPARQL 1.1
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**WARNING:** V2 will come shortly and will have lots of breaking changes.
|
|
4
|
+
|
|
5
|
+
Traqula rules SPARQL 1.1 contains rules required for creating a parser for SPARQL 1.1.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -12,4 +14,4 @@ or
|
|
|
12
14
|
|
|
13
15
|
```bash
|
|
14
16
|
yarn add @traqula/rules-sparql-1-1
|
|
15
|
-
```
|
|
17
|
+
```
|
package/lib/Sparql11types.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import type * as
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
1
|
+
import type * as RDF from '@rdfjs/types';
|
|
2
|
+
import type { ParserRule, GeneratorRule } from '@traqula/core';
|
|
3
|
+
import type { BlankNode, DataFactory } from 'rdf-data-factory';
|
|
4
|
+
import type { CommonIRIs } from './grammar-helpers/utils';
|
|
5
|
+
import type { Wildcard } from './Wildcard';
|
|
6
|
+
type RdfJsTerm = Term | BaseQuadTerm;
|
|
7
|
+
export type BaseQuadTerm = RDF.BaseQuad & {
|
|
8
|
+
subject: RdfJsTerm;
|
|
9
|
+
predicate: RdfJsTerm;
|
|
10
|
+
object: RdfJsTerm;
|
|
11
|
+
};
|
|
4
12
|
export type GraphTerm = IriTerm | BlankTerm | LiteralTerm;
|
|
5
13
|
export type Term = GraphTerm | VariableTerm;
|
|
6
14
|
export type VerbA = IriTerm<CommonIRIs.TYPE>;
|
|
7
|
-
export interface Wildcard {
|
|
8
|
-
readonly termType: 'Wildcard';
|
|
9
|
-
readonly value: '*';
|
|
10
|
-
equals: (other: RdfJs.Term | null | undefined) => boolean;
|
|
11
|
-
}
|
|
12
15
|
export type Triple = {
|
|
13
16
|
subject: Term;
|
|
14
17
|
predicate: IriTerm | VariableTerm | PropertyPath;
|
|
@@ -41,14 +44,10 @@ export interface GraphQuads {
|
|
|
41
44
|
name: IriTerm | VariableTerm;
|
|
42
45
|
triples: Triple[];
|
|
43
46
|
}
|
|
44
|
-
export
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
export type VariableTerm = RdfJs.Variable;
|
|
49
|
-
export type IriTerm<IRI extends string = string> = RdfJs.NamedNode<IRI>;
|
|
50
|
-
export type LiteralTerm = RdfJs.Literal;
|
|
51
|
-
export type BlankTerm = RdfJs.BlankNode;
|
|
47
|
+
export type VariableTerm = RDF.Variable;
|
|
48
|
+
export type IriTerm<IRI extends string = string> = RDF.NamedNode<IRI>;
|
|
49
|
+
export type LiteralTerm = RDF.Literal;
|
|
50
|
+
export type BlankTerm = RDF.BlankNode;
|
|
52
51
|
export type PropertyPath = NegatedPropertySet | {
|
|
53
52
|
type: 'path';
|
|
54
53
|
pathType: '|' | '/' | '^' | '+' | '*' | '?';
|
|
@@ -61,11 +60,6 @@ export interface SelectQuery extends BaseQuery {
|
|
|
61
60
|
variables: Variable[] | [Wildcard];
|
|
62
61
|
distinct?: true | undefined;
|
|
63
62
|
reduced?: true | undefined;
|
|
64
|
-
group?: Grouping[] | undefined;
|
|
65
|
-
having?: Expression[] | undefined;
|
|
66
|
-
order?: Ordering[] | undefined;
|
|
67
|
-
limit?: number | undefined;
|
|
68
|
-
offset?: number | undefined;
|
|
69
63
|
}
|
|
70
64
|
export interface Grouping {
|
|
71
65
|
expression: Expression;
|
|
@@ -93,29 +87,30 @@ export interface Update {
|
|
|
93
87
|
updates: UpdateOperation[];
|
|
94
88
|
}
|
|
95
89
|
export type UpdateOperation = InsertDeleteOperation | ManagementOperation;
|
|
96
|
-
export type InsertDeleteOperation =
|
|
90
|
+
export type InsertDeleteOperation = InsertOperation | DeleteOperation | ModifyOperation | DeleteWhereOperation;
|
|
91
|
+
export interface InsertOperation {
|
|
97
92
|
updateType: 'insert';
|
|
98
|
-
graph?: GraphOrDefault;
|
|
99
93
|
insert: Quads[];
|
|
100
|
-
}
|
|
94
|
+
}
|
|
95
|
+
export interface DeleteOperation {
|
|
101
96
|
updateType: 'delete';
|
|
102
|
-
graph?: GraphOrDefault;
|
|
103
97
|
delete: Quads[];
|
|
104
|
-
}
|
|
98
|
+
}
|
|
99
|
+
export interface ModifyOperation {
|
|
105
100
|
updateType: 'insertdelete';
|
|
106
|
-
graph?: IriTerm;
|
|
107
101
|
insert: Quads[];
|
|
108
102
|
delete: Quads[];
|
|
103
|
+
graph?: IriTerm;
|
|
109
104
|
using?: {
|
|
110
105
|
default: IriTerm[];
|
|
111
106
|
named: IriTerm[];
|
|
112
107
|
};
|
|
113
108
|
where: Pattern[];
|
|
114
|
-
}
|
|
109
|
+
}
|
|
110
|
+
export interface DeleteWhereOperation {
|
|
115
111
|
updateType: 'deletewhere';
|
|
116
|
-
graph?: GraphOrDefault;
|
|
117
112
|
delete: Quads[];
|
|
118
|
-
}
|
|
113
|
+
}
|
|
119
114
|
export type Quads = BgpPattern | GraphQuads;
|
|
120
115
|
export type ManagementOperation = CopyMoveAddOperation | LoadOperation | CreateOperation | ClearDropOperation;
|
|
121
116
|
export interface CopyMoveAddOperation {
|
|
@@ -168,6 +163,11 @@ export interface BaseQuery {
|
|
|
168
163
|
} | undefined;
|
|
169
164
|
where?: Pattern[] | undefined;
|
|
170
165
|
values?: ValuePatternRow[] | undefined;
|
|
166
|
+
having?: Expression[] | undefined;
|
|
167
|
+
group?: Grouping[] | undefined;
|
|
168
|
+
order?: Ordering[] | undefined;
|
|
169
|
+
limit?: number | undefined;
|
|
170
|
+
offset?: number | undefined;
|
|
171
171
|
}
|
|
172
172
|
export type IriTermOrElt = IriTerm | {
|
|
173
173
|
type: 'path';
|
|
@@ -177,7 +177,7 @@ export type IriTermOrElt = IriTerm | {
|
|
|
177
177
|
export interface NegatedPropertySet {
|
|
178
178
|
type: 'path';
|
|
179
179
|
pathType: '!';
|
|
180
|
-
items: IriTermOrElt
|
|
180
|
+
items: [IriTermOrElt] | [
|
|
181
181
|
{
|
|
182
182
|
type: 'path';
|
|
183
183
|
pathType: '|';
|
|
@@ -234,7 +234,7 @@ export interface BaseExpression {
|
|
|
234
234
|
export interface OperationExpression extends BaseExpression {
|
|
235
235
|
type: 'operation';
|
|
236
236
|
operator: string;
|
|
237
|
-
args: (Expression | Pattern
|
|
237
|
+
args: (Expression)[] | [Pattern];
|
|
238
238
|
}
|
|
239
239
|
export interface AggregateExpression extends BaseExpression {
|
|
240
240
|
type: 'aggregate';
|
|
@@ -242,3 +242,54 @@ export interface AggregateExpression extends BaseExpression {
|
|
|
242
242
|
aggregation: string;
|
|
243
243
|
separator?: string | undefined;
|
|
244
244
|
}
|
|
245
|
+
export type SparqlRule<
|
|
246
|
+
/**
|
|
247
|
+
* Name of grammar rule, should be a strict subtype of string like 'myGrammarRule'.
|
|
248
|
+
*/
|
|
249
|
+
NameType extends string = string,
|
|
250
|
+
/**
|
|
251
|
+
* Type that will be returned after a correct parse of this rule.
|
|
252
|
+
* This type will be the return type of calling SUBRULE with this grammar rule.
|
|
253
|
+
*/
|
|
254
|
+
ReturnType = unknown,
|
|
255
|
+
/**
|
|
256
|
+
* Function arguments that can be given to convey the state of the current parse operation.
|
|
257
|
+
*/
|
|
258
|
+
ParamType = undefined> = ParserRule<SparqlContext, NameType, ReturnType, ParamType> & GeneratorRule<undefined, NameType, ReturnType, ParamType>;
|
|
259
|
+
export type SparqlGrammarRule<
|
|
260
|
+
/**
|
|
261
|
+
* Name of grammar rule, should be a strict subtype of string like 'myGrammarRule'.
|
|
262
|
+
*/
|
|
263
|
+
NameType extends string = string,
|
|
264
|
+
/**
|
|
265
|
+
* Type that will be returned after a correct parse of this rule.
|
|
266
|
+
* This type will be the return type of calling SUBRULE with this grammar rule.
|
|
267
|
+
*/
|
|
268
|
+
ReturnType = unknown,
|
|
269
|
+
/**
|
|
270
|
+
* Function arguments that can be given to convey the state of the current parse operation.
|
|
271
|
+
*/
|
|
272
|
+
ParamType = undefined> = ParserRule<SparqlContext, NameType, ReturnType, ParamType>;
|
|
273
|
+
export interface SparqlContext {
|
|
274
|
+
/**
|
|
275
|
+
* Data-factory to be used when constructing rdf primitives.
|
|
276
|
+
*/
|
|
277
|
+
dataFactory: DataFactory<BaseQuadTerm>;
|
|
278
|
+
/**
|
|
279
|
+
* Current scoped prefixes. Used for resolving prefixed names.
|
|
280
|
+
*/
|
|
281
|
+
prefixes: Record<string, string>;
|
|
282
|
+
/**
|
|
283
|
+
* The base IRI for the query. Used for resolving relative IRIs.
|
|
284
|
+
*/
|
|
285
|
+
baseIRI: string | undefined;
|
|
286
|
+
/**
|
|
287
|
+
* Can be used to disable the validation that used variables in a select clause are in scope.
|
|
288
|
+
*/
|
|
289
|
+
skipValidation: boolean;
|
|
290
|
+
/**
|
|
291
|
+
* Set of queryModes. Primarily used for note 8, 14.
|
|
292
|
+
*/
|
|
293
|
+
parseMode: Set<'canParseVars' | 'canCreateBlankNodes' | 'inAggregate' | 'canParseAggregate' | string>;
|
|
294
|
+
}
|
|
295
|
+
export {};
|
package/lib/Sparql11types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sparql11types.js","sourceRoot":"","sources":["Sparql11types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as
|
|
1
|
+
{"version":3,"file":"Sparql11types.js","sourceRoot":"","sources":["Sparql11types.ts"],"names":[],"mappings":"","sourcesContent":["import type * as RDF from '@rdfjs/types';\nimport type { ParserRule, GeneratorRule } from '@traqula/core';\nimport type { BlankNode, DataFactory } from 'rdf-data-factory';\nimport type { CommonIRIs } from './grammar-helpers/utils';\nimport type { Wildcard } from './Wildcard';\n\n// Make sure there cannot be a DefaultGraph in subject and object position\ntype RdfJsTerm = Term | BaseQuadTerm;\nexport type BaseQuadTerm = RDF.BaseQuad & { subject: RdfJsTerm; predicate: RdfJsTerm; object: RdfJsTerm };\nexport type GraphTerm = IriTerm | BlankTerm | LiteralTerm;\nexport type Term = GraphTerm | VariableTerm;\nexport type VerbA = IriTerm<CommonIRIs.TYPE>;\n\nexport type Triple = {\n subject: Term;\n predicate: IriTerm | VariableTerm | PropertyPath;\n object: Term;\n};\n\nexport interface IGraphNode {\n node: ITriplesNode['node'] | Term;\n triples: Triple[];\n}\n\nexport interface ITriplesNode {\n node: IriTerm | BlankNode;\n triples: Triple[];\n}\n\nexport type Pattern =\n | BgpPattern\n | BlockPattern\n | FilterPattern\n | BindPattern\n | ValuesPattern\n | Omit<SelectQuery, 'prefixes'>;\n\nexport type Expression =\n | OperationExpression\n | FunctionCallExpression\n | AggregateExpression\n // Used in `IN` operator\n | Expression[]\n | IriTerm\n | VariableTerm\n | LiteralTerm;\n\nexport interface FunctionCallExpression extends BaseExpression {\n type: 'functionCall';\n function: IriTerm;\n args: Expression[];\n}\n\n/**\n * Basic Graph Pattern\n */\nexport interface BgpPattern {\n type: 'bgp';\n triples: Triple[];\n}\n\nexport interface GraphQuads {\n type: 'graph';\n name: IriTerm | VariableTerm;\n triples: Triple[];\n}\n\nexport type VariableTerm = RDF.Variable;\nexport type IriTerm<IRI extends string = string> = RDF.NamedNode<IRI>;\nexport type LiteralTerm = RDF.Literal;\nexport type BlankTerm = RDF.BlankNode;\n\nexport type PropertyPath = NegatedPropertySet | {\n type: 'path';\n pathType: '|' | '/' | '^' | '+' | '*' | '?';\n items: (IriTerm | PropertyPath)[];\n};\n\nexport type SparqlQuery = Query | Update | Pick<Update, 'base' | 'prefixes'>;\n\nexport type Query = SelectQuery | ConstructQuery | AskQuery | DescribeQuery;\n\nexport interface SelectQuery extends BaseQuery {\n queryType: 'SELECT';\n variables: Variable[] | [Wildcard];\n distinct?: true | undefined;\n reduced?: true | undefined;\n}\n\nexport interface Grouping {\n expression: Expression;\n variable?: VariableTerm;\n}\n\nexport interface Ordering {\n expression: Expression;\n descending?: true | undefined;\n}\n\nexport interface ConstructQuery extends BaseQuery {\n queryType: 'CONSTRUCT';\n template?: Triple[] | undefined;\n}\n\nexport interface AskQuery extends BaseQuery {\n queryType: 'ASK';\n}\n\nexport interface DescribeQuery extends BaseQuery {\n queryType: 'DESCRIBE';\n variables: (VariableTerm | IriTerm)[] | [Wildcard];\n}\n\nexport interface Update {\n type: 'update';\n base?: string | undefined;\n prefixes: Record<string, string>;\n updates: UpdateOperation[];\n}\n\nexport type UpdateOperation = InsertDeleteOperation | ManagementOperation;\n\nexport type InsertDeleteOperation = InsertOperation | DeleteOperation | ModifyOperation | DeleteWhereOperation;\nexport interface InsertOperation {\n updateType: 'insert';\n insert: Quads[];\n}\nexport interface DeleteOperation {\n updateType: 'delete';\n delete: Quads[];\n}\nexport interface ModifyOperation {\n updateType: 'insertdelete';\n insert: Quads[];\n delete: Quads[];\n graph?: IriTerm;\n using?: {\n default: IriTerm[];\n named: IriTerm[];\n };\n where: Pattern[];\n}\nexport interface DeleteWhereOperation {\n updateType: 'deletewhere';\n delete: Quads[];\n}\n\nexport type Quads = BgpPattern | GraphQuads;\n\nexport type ManagementOperation =\n | CopyMoveAddOperation\n | LoadOperation\n | CreateOperation\n | ClearDropOperation;\n\nexport interface CopyMoveAddOperation {\n type: 'copy' | 'move' | 'add';\n silent: boolean;\n source: GraphOrDefault;\n destination: GraphOrDefault;\n}\n\nexport interface LoadOperation {\n type: 'load';\n silent: boolean;\n source: IriTerm;\n destination?: IriTerm;\n}\n\nexport interface CreateOperation {\n type: 'create';\n silent: boolean;\n graph: GraphOrDefault;\n}\n\nexport interface ClearDropOperation {\n type: 'clear' | 'drop';\n silent: boolean;\n graph: GraphReference;\n}\n\nexport interface GraphOrDefault {\n type?: 'graph';\n name?: IriTerm | undefined;\n default?: true | undefined;\n}\n\nexport interface GraphReference extends GraphOrDefault {\n named?: true | undefined;\n all?: true | undefined;\n}\n\n/**\n * Examples: '?var', '*',\n * SELECT (?a as ?b) ... ==> { expression: '?a', variable: '?b' }\n */\nexport type Variable = VariableExpression | VariableTerm;\n\nexport interface VariableExpression {\n expression: Expression;\n variable: VariableTerm;\n}\n\nexport interface BaseQuery {\n type: 'query';\n base?: string | undefined;\n prefixes: Record<string, string>;\n from?:\n | {\n default: IriTerm[];\n named: IriTerm[];\n }\n | undefined;\n where?: Pattern[] | undefined;\n values?: ValuePatternRow[] | undefined;\n having?: Expression[] | undefined;\n group?: Grouping[] | undefined;\n order?: Ordering[] | undefined;\n limit?: number | undefined;\n offset?: number | undefined;\n}\n\nexport type IriTermOrElt = IriTerm | {\n type: 'path';\n pathType: '^';\n items: [IriTerm];\n};\n\nexport interface NegatedPropertySet {\n type: 'path';\n pathType: '!';\n items: [IriTermOrElt] | [{\n type: 'path';\n pathType: '|';\n items: (IriTermOrElt)[];\n }];\n}\n\nexport interface GroupPattern {\n type: 'group';\n patterns: Pattern[];\n}\n\nexport interface GraphPattern {\n type: 'graph';\n name: IriTerm | VariableTerm;\n patterns: Pattern[];\n}\n\nexport interface MinusPattern {\n type: 'minus';\n patterns: Pattern[];\n}\n\nexport interface ServicePattern {\n type: 'service';\n name: IriTerm | VariableTerm;\n silent: boolean;\n patterns: Pattern[];\n}\n\nexport type BlockPattern =\n | OptionalPattern\n | UnionPattern\n | GroupPattern\n | GraphPattern\n | MinusPattern\n | ServicePattern;\n\nexport interface OptionalPattern {\n type: 'optional';\n patterns: Pattern[];\n}\n\nexport interface UnionPattern {\n type: 'union';\n patterns: Pattern[];\n}\n\nexport type ValuePatternRow = Record<string, IriTerm | BlankTerm | LiteralTerm | undefined>;\n\nexport interface FilterPattern {\n type: 'filter';\n expression: Expression;\n}\n\nexport interface BindPattern {\n type: 'bind';\n expression: Expression;\n variable: VariableTerm;\n}\n\nexport interface ValuesPattern {\n type: 'values';\n values: ValuePatternRow[];\n}\n\nexport interface BaseExpression {\n type: string;\n distinct?: boolean | undefined;\n}\n\nexport interface OperationExpression extends BaseExpression {\n type: 'operation';\n operator: string;\n // Can be a pattern in case of exists and not exists\n args: (Expression)[] | [Pattern];\n}\n\nexport interface AggregateExpression extends BaseExpression {\n type: 'aggregate';\n expression: Expression | Wildcard;\n aggregation: string;\n separator?: string | undefined;\n}\n\nexport type SparqlRule<\n /**\n * Name of grammar rule, should be a strict subtype of string like 'myGrammarRule'.\n */\n NameType extends string = string,\n /**\n * Type that will be returned after a correct parse of this rule.\n * This type will be the return type of calling SUBRULE with this grammar rule.\n */\n ReturnType = unknown,\n /**\n * Function arguments that can be given to convey the state of the current parse operation.\n */\n ParamType = undefined,\n> = ParserRule<SparqlContext, NameType, ReturnType, ParamType>\n & GeneratorRule<undefined, NameType, ReturnType, ParamType>;\n\nexport type SparqlGrammarRule<\n /**\n * Name of grammar rule, should be a strict subtype of string like 'myGrammarRule'.\n */\n NameType extends string = string,\n /**\n * Type that will be returned after a correct parse of this rule.\n * This type will be the return type of calling SUBRULE with this grammar rule.\n */\n ReturnType = unknown,\n /**\n * Function arguments that can be given to convey the state of the current parse operation.\n */\n ParamType = undefined,\n> = ParserRule<SparqlContext, NameType, ReturnType, ParamType>;\n\nexport interface SparqlContext {\n /**\n * Data-factory to be used when constructing rdf primitives.\n */\n dataFactory: DataFactory<BaseQuadTerm>;\n /**\n * Current scoped prefixes. Used for resolving prefixed names.\n */\n prefixes: Record<string, string>;\n /**\n * The base IRI for the query. Used for resolving relative IRIs.\n */\n baseIRI: string | undefined;\n /**\n * Can be used to disable the validation that used variables in a select clause are in scope.\n */\n skipValidation: boolean;\n /**\n * Set of queryModes. Primarily used for note 8, 14.\n */\n parseMode: Set<'canParseVars' | 'canCreateBlankNodes' | 'inAggregate' | 'canParseAggregate' | string>;\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IriTerm, PropertyPath, SparqlContext } from './Sparql11types';
|
|
2
|
+
interface Parser<ParseRet> {
|
|
3
|
+
queryOrUpdate: (input: string, context: SparqlContext, arg: undefined) => ParseRet;
|
|
4
|
+
path: (input: string, context: SparqlContext, arg: undefined) => IriTerm | PropertyPath;
|
|
5
|
+
}
|
|
6
|
+
export declare class SparqlParser<ParseRet> {
|
|
7
|
+
private readonly parser;
|
|
8
|
+
constructor(parser: Parser<ParseRet>);
|
|
9
|
+
parse(query: string, context?: Partial<SparqlContext>): ParseRet;
|
|
10
|
+
parsePath(query: string, context?: Partial<SparqlContext>): (PropertyPath & {
|
|
11
|
+
prefixes: object;
|
|
12
|
+
}) | IriTerm;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DataFactory } from 'rdf-data-factory';
|
|
2
|
+
function completeParseContext(context) {
|
|
3
|
+
return {
|
|
4
|
+
dataFactory: context.dataFactory ?? new DataFactory({ blankNodePrefix: 'g_' }),
|
|
5
|
+
baseIRI: context.baseIRI,
|
|
6
|
+
prefixes: { ...context.prefixes },
|
|
7
|
+
parseMode: context.parseMode ? new Set(context.parseMode) : new Set(['canParseVars', 'canCreateBlankNodes']),
|
|
8
|
+
skipValidation: context.skipValidation ?? false,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export class SparqlParser {
|
|
12
|
+
constructor(parser) {
|
|
13
|
+
this.parser = parser;
|
|
14
|
+
}
|
|
15
|
+
parse(query, context = {}) {
|
|
16
|
+
return this.parser.queryOrUpdate(query, completeParseContext(context), undefined);
|
|
17
|
+
}
|
|
18
|
+
parsePath(query, context = {}) {
|
|
19
|
+
const result = this.parser.path(query, completeParseContext(context), undefined);
|
|
20
|
+
if ('type' in result) {
|
|
21
|
+
return {
|
|
22
|
+
...result,
|
|
23
|
+
prefixes: {},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=SparqlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SparqlParser.js","sourceRoot":"","sources":["SparqlParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,SAAS,oBAAoB,CAAC,OAA+B;IAC3D,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,WAAW,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAC9E,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAE,cAAc,EAAE,qBAAqB,CAAE,CAAC;QAC9G,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAY;IACvB,YAAoC,MAAwB;QAAxB,WAAM,GAAN,MAAM,CAAkB;IAAG,CAAC;IAEzD,KAAK,CAAC,KAAa,EAAE,UAAkC,EAAE;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IACpF,CAAC;IAEM,SAAS,CAAC,KAAa,EAAE,UAAkC,EAAE;QAElE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { DataFactory } from 'rdf-data-factory';\nimport type { IriTerm, PropertyPath, SparqlContext } from './Sparql11types';\n\ninterface Parser<ParseRet> {\n queryOrUpdate: (input: string, context: SparqlContext, arg: undefined) => ParseRet;\n path: (input: string, context: SparqlContext, arg: undefined) => IriTerm | PropertyPath;\n}\n\nfunction completeParseContext(context: Partial<SparqlContext>): SparqlContext {\n return {\n dataFactory: context.dataFactory ?? new DataFactory({ blankNodePrefix: 'g_' }),\n baseIRI: context.baseIRI,\n prefixes: { ...context.prefixes },\n parseMode: context.parseMode ? new Set(context.parseMode) : new Set([ 'canParseVars', 'canCreateBlankNodes' ]),\n skipValidation: context.skipValidation ?? false,\n };\n}\n\nexport class SparqlParser<ParseRet> {\n public constructor(private readonly parser: Parser<ParseRet>) {}\n\n public parse(query: string, context: Partial<SparqlContext> = {}): ParseRet {\n return this.parser.queryOrUpdate(query, completeParseContext(context), undefined);\n }\n\n public parsePath(query: string, context: Partial<SparqlContext> = {}):\n (PropertyPath & { prefixes: object }) | IriTerm {\n const result = this.parser.path(query, completeParseContext(context), undefined);\n if ('type' in result) {\n return {\n ...result,\n prefixes: {},\n };\n }\n return result;\n }\n}\n"]}
|
package/lib/Wildcard.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class Wildcard {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.value = '*';
|
|
4
|
+
this.termType = 'Wildcard';
|
|
5
|
+
// eslint-disable-next-line no-constructor-return
|
|
6
|
+
return WILDCARD ?? this;
|
|
7
|
+
}
|
|
8
|
+
equals(other) {
|
|
9
|
+
return Boolean(other && (this.termType === other.termType));
|
|
10
|
+
}
|
|
11
|
+
toJSON() {
|
|
12
|
+
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
13
|
+
const { value, ...rest } = this;
|
|
14
|
+
return rest;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
let WILDCARD;
|
|
18
|
+
WILDCARD = new Wildcard();
|
|
19
|
+
//# sourceMappingURL=Wildcard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Wildcard.js","sourceRoot":"","sources":["Wildcard.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAQ;IAGnB;QAFO,UAAK,GAAW,GAAG,CAAC;QACpB,aAAQ,GAAW,UAAU,CAAC;QAEnC,iDAAiD;QACjD,OAAO,QAAQ,IAAI,IAAI,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,KAA+C;QAC3D,OAAO,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,MAAM;QACX,yDAAyD;QACzD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,IAAI,QAA8B,CAAC;AACnC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC","sourcesContent":["export class Wildcard {\n public value = <const> '*';\n public termType = <const> 'Wildcard';\n public constructor() {\n // eslint-disable-next-line no-constructor-return\n return WILDCARD ?? this;\n }\n\n public equals(other: { termType: unknown } | undefined | null): boolean {\n return Boolean(other && (this.termType === other.termType));\n }\n\n public toJSON(): object {\n // eslint-disable-next-line unused-imports/no-unused-vars\n const { value, ...rest } = this;\n return rest;\n }\n}\n\nlet WILDCARD: Wildcard | undefined;\nWILDCARD = new Wildcard();\n"]}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import type { TokenType } from 'chevrotain';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export interface IExpressionFunctionX<U extends (Expression | Pattern)[]> {
|
|
2
|
+
import type { Expression, OperationExpression, Pattern, SparqlGrammarRule, VariableTerm } from './Sparql11types';
|
|
3
|
+
import { Wildcard } from './Wildcard';
|
|
4
|
+
export interface IExpressionFunctionX<U extends Expression[] | [Pattern]> extends OperationExpression {
|
|
6
5
|
type: 'operation';
|
|
7
6
|
operator: string;
|
|
8
7
|
args: U;
|
|
9
8
|
}
|
|
10
|
-
export type RuleDefExpressionFunctionX<T extends string, U extends
|
|
9
|
+
export type RuleDefExpressionFunctionX<T extends string, U extends Expression[] | [Pattern]> = SparqlGrammarRule<T, IExpressionFunctionX<U>>;
|
|
11
10
|
export declare function funcExpr1<T extends string>(func: TokenType & {
|
|
12
11
|
name: T;
|
|
13
12
|
}): RuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]>;
|
|
@@ -41,7 +40,9 @@ export declare function funcExpr3or4<T extends string>(func: TokenType & {
|
|
|
41
40
|
] | [Expression, Expression, Expression, Expression]>;
|
|
42
41
|
export declare function funcGroupGraphPattern<T extends string>(func: TokenType & {
|
|
43
42
|
name: T;
|
|
44
|
-
}): RuleDefExpressionFunctionX<Uncapitalize<T>,
|
|
43
|
+
}): RuleDefExpressionFunctionX<Uncapitalize<T>, [
|
|
44
|
+
Pattern
|
|
45
|
+
]>;
|
|
45
46
|
export interface IExpressionAggregator {
|
|
46
47
|
type: 'aggregate';
|
|
47
48
|
distinct: boolean;
|
|
@@ -49,7 +50,7 @@ export interface IExpressionAggregator {
|
|
|
49
50
|
aggregation: string;
|
|
50
51
|
separator?: string;
|
|
51
52
|
}
|
|
52
|
-
export type RuleDefExpressionAggregatorX<T extends string> =
|
|
53
|
+
export type RuleDefExpressionAggregatorX<T extends string> = SparqlGrammarRule<T, IExpressionAggregator>;
|
|
53
54
|
export declare function baseAggregateFunc<T extends string>(func: TokenType & {
|
|
54
55
|
name: T;
|
|
55
56
|
}): RuleDefExpressionAggregatorX<Uncapitalize<T>>;
|
package/lib/expressionHelpers.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Wildcard } from '@traqula/core';
|
|
1
|
+
import { unCapitalize } from '@traqula/core';
|
|
3
2
|
import { expression, expressionList } from './grammar/expression';
|
|
4
3
|
import { var_ } from './grammar/general';
|
|
5
4
|
import { groupGraphPattern } from './grammar/whereClause';
|
|
6
|
-
import
|
|
5
|
+
import * as l from './lexer';
|
|
7
6
|
import { deGroupSingle } from './utils';
|
|
7
|
+
import { Wildcard } from './Wildcard';
|
|
8
8
|
function formatOperator(operator) {
|
|
9
9
|
return operator.toLowerCase().replaceAll(' ', '');
|
|
10
10
|
}
|
|
@@ -14,7 +14,7 @@ export function funcExpr1(func) {
|
|
|
14
14
|
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
15
15
|
const operator = CONSUME(func);
|
|
16
16
|
CONSUME(l.symbols.LParen);
|
|
17
|
-
const arg = SUBRULE(expression);
|
|
17
|
+
const arg = SUBRULE(expression, undefined);
|
|
18
18
|
CONSUME(l.symbols.RParen);
|
|
19
19
|
return {
|
|
20
20
|
type: 'operation',
|
|
@@ -30,9 +30,9 @@ export function funcExpr2(func) {
|
|
|
30
30
|
impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {
|
|
31
31
|
const operator = CONSUME(func);
|
|
32
32
|
CONSUME(l.symbols.LParen);
|
|
33
|
-
const arg1 = SUBRULE1(expression);
|
|
33
|
+
const arg1 = SUBRULE1(expression, undefined);
|
|
34
34
|
CONSUME(l.symbols.comma);
|
|
35
|
-
const arg2 = SUBRULE2(expression);
|
|
35
|
+
const arg2 = SUBRULE2(expression, undefined);
|
|
36
36
|
CONSUME(l.symbols.RParen);
|
|
37
37
|
return {
|
|
38
38
|
type: 'operation',
|
|
@@ -48,11 +48,11 @@ export function funcExpr3(func) {
|
|
|
48
48
|
impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {
|
|
49
49
|
const operator = CONSUME(func);
|
|
50
50
|
CONSUME(l.symbols.LParen);
|
|
51
|
-
const arg1 = SUBRULE1(expression);
|
|
51
|
+
const arg1 = SUBRULE1(expression, undefined);
|
|
52
52
|
CONSUME1(l.symbols.comma);
|
|
53
|
-
const arg2 = SUBRULE2(expression);
|
|
53
|
+
const arg2 = SUBRULE2(expression, undefined);
|
|
54
54
|
CONSUME2(l.symbols.comma);
|
|
55
|
-
const arg3 = SUBRULE3(expression);
|
|
55
|
+
const arg3 = SUBRULE3(expression, undefined);
|
|
56
56
|
CONSUME(l.symbols.RParen);
|
|
57
57
|
return {
|
|
58
58
|
type: 'operation',
|
|
@@ -68,7 +68,7 @@ export function funcVar1(func) {
|
|
|
68
68
|
impl: ({ SUBRULE, CONSUME }) => () => {
|
|
69
69
|
const operator = CONSUME(func);
|
|
70
70
|
CONSUME(l.symbols.LParen);
|
|
71
|
-
const arg = SUBRULE(var_);
|
|
71
|
+
const arg = SUBRULE(var_, undefined);
|
|
72
72
|
CONSUME(l.symbols.RParen);
|
|
73
73
|
return {
|
|
74
74
|
type: 'operation',
|
|
@@ -87,7 +87,7 @@ export function funcExprOrNil1(func) {
|
|
|
87
87
|
{
|
|
88
88
|
ALT: () => {
|
|
89
89
|
CONSUME(l.symbols.LParen);
|
|
90
|
-
const arg = SUBRULE(expression);
|
|
90
|
+
const arg = SUBRULE(expression, undefined);
|
|
91
91
|
CONSUME(l.symbols.RParen);
|
|
92
92
|
return [arg];
|
|
93
93
|
},
|
|
@@ -126,7 +126,7 @@ export function funcExprList1(func) {
|
|
|
126
126
|
name: unCapitalize(func.name),
|
|
127
127
|
impl: ({ CONSUME, SUBRULE }) => () => {
|
|
128
128
|
const operator = CONSUME(func);
|
|
129
|
-
const args = SUBRULE(expressionList);
|
|
129
|
+
const args = SUBRULE(expressionList, undefined);
|
|
130
130
|
return {
|
|
131
131
|
type: 'operation',
|
|
132
132
|
operator: formatOperator(operator.image),
|
|
@@ -141,12 +141,12 @@ export function funcExpr2or3(func) {
|
|
|
141
141
|
impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {
|
|
142
142
|
const operator = CONSUME(func);
|
|
143
143
|
CONSUME(l.symbols.LParen);
|
|
144
|
-
const arg1 = SUBRULE1(expression);
|
|
144
|
+
const arg1 = SUBRULE1(expression, undefined);
|
|
145
145
|
CONSUME1(l.symbols.comma);
|
|
146
|
-
const arg2 = SUBRULE2(expression);
|
|
146
|
+
const arg2 = SUBRULE2(expression, undefined);
|
|
147
147
|
const arg3 = OPTION(() => {
|
|
148
148
|
CONSUME2(l.symbols.comma);
|
|
149
|
-
return SUBRULE3(expression);
|
|
149
|
+
return SUBRULE3(expression, undefined);
|
|
150
150
|
});
|
|
151
151
|
CONSUME(l.symbols.RParen);
|
|
152
152
|
return {
|
|
@@ -163,14 +163,14 @@ export function funcExpr3or4(func) {
|
|
|
163
163
|
impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {
|
|
164
164
|
const operator = CONSUME(func);
|
|
165
165
|
CONSUME(l.symbols.LParen);
|
|
166
|
-
const arg1 = SUBRULE1(expression);
|
|
166
|
+
const arg1 = SUBRULE1(expression, undefined);
|
|
167
167
|
CONSUME1(l.symbols.comma);
|
|
168
|
-
const arg2 = SUBRULE2(expression);
|
|
168
|
+
const arg2 = SUBRULE2(expression, undefined);
|
|
169
169
|
CONSUME2(l.symbols.comma);
|
|
170
|
-
const arg3 = SUBRULE3(expression);
|
|
170
|
+
const arg3 = SUBRULE3(expression, undefined);
|
|
171
171
|
const arg4 = OPTION(() => {
|
|
172
172
|
CONSUME3(l.symbols.comma);
|
|
173
|
-
return SUBRULE4(expression);
|
|
173
|
+
return SUBRULE4(expression, undefined);
|
|
174
174
|
});
|
|
175
175
|
CONSUME(l.symbols.RParen);
|
|
176
176
|
return {
|
|
@@ -186,7 +186,7 @@ export function funcGroupGraphPattern(func) {
|
|
|
186
186
|
name: unCapitalize(func.name),
|
|
187
187
|
impl: ({ ACTION, SUBRULE, CONSUME }) => () => {
|
|
188
188
|
const operator = CONSUME(func);
|
|
189
|
-
const group = SUBRULE(groupGraphPattern);
|
|
189
|
+
const group = SUBRULE(groupGraphPattern, undefined);
|
|
190
190
|
return ACTION(() => ({
|
|
191
191
|
type: 'operation',
|
|
192
192
|
operator: formatOperator(operator.image),
|
|
@@ -209,7 +209,7 @@ export function baseAggregateFunc(func) {
|
|
|
209
209
|
return new Wildcard();
|
|
210
210
|
},
|
|
211
211
|
},
|
|
212
|
-
{ ALT: () => SUBRULE(expression) },
|
|
212
|
+
{ ALT: () => SUBRULE(expression, undefined) },
|
|
213
213
|
]);
|
|
214
214
|
CONSUME(l.symbols.RParen);
|
|
215
215
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressionHelpers.js","sourceRoot":"","sources":["expressionHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TokenType } from 'chevrotain';\nimport * as l from './lexer';\nimport { Wildcard } from '@traqula/core';\nimport type { RuleDef } from '@traqula/core';\nimport { expression, expressionList } from './grammar/expression';\nimport { var_ } from './grammar/general';\nimport type { Expression, Pattern, VariableTerm } from './Sparql11types';\nimport { groupGraphPattern } from './grammar/whereClause';\nimport { unCapitalize } from '@traqula/core';\nimport { deGroupSingle } from './utils';\n\nexport interface IExpressionFunctionX<U extends (Expression | Pattern)[]> {\n type: 'operation';\n operator: string;\n args: U;\n}\n\nexport type RuleDefExpressionFunctionX<T extends string, U extends (Expression | Pattern)[]>\n = RuleDef<T, IExpressionFunctionX<U>>;\n\nfunction formatOperator(operator: string): string {\n return operator.toLowerCase().replaceAll(' ', '');\n}\n\nexport function funcExpr1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg ],\n };\n },\n };\n}\n\nexport function funcExpr2<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg1, arg2 ],\n };\n },\n };\n}\n\nexport function funcExpr3<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg1, arg2, arg3 ],\n };\n },\n };\n}\n\nexport function funcVar1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [VariableTerm]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(var_);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg ],\n };\n },\n };\n}\n\nexport function funcExprOrNil1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [] | [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, OR, SUBRULE }) => () => {\n const operator = CONSUME(func);\n const args = OR<[] | [Expression]>([\n {\n ALT: () => {\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression);\n CONSUME(l.symbols.RParen);\n return [ arg ];\n },\n },\n {\n ALT: () => {\n CONSUME(l.terminals.nil);\n return [];\n },\n },\n ]);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args,\n };\n },\n };\n}\n\nexport function funcNil1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, []> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.terminals.nil);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [],\n };\n },\n };\n}\n\nexport function funcExprList1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, Expression[]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE }) => () => {\n const operator = CONSUME(func);\n const args = SUBRULE(expressionList);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args,\n };\n },\n };\n}\n\nexport function funcExpr2or3<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression] | [Expression, Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n const arg3 = OPTION(() => {\n CONSUME2(l.symbols.comma);\n return SUBRULE3(expression);\n });\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: arg3 ? [ arg1, arg2, arg3 ] : [ arg1, arg2 ],\n };\n },\n };\n}\n\nexport function funcExpr3or4<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<\n Uncapitalize<T>,\n [Expression, Expression, Expression] | [Expression, Expression, Expression, Expression]\n > {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression);\n const arg4 = OPTION(() => {\n CONSUME3(l.symbols.comma);\n return SUBRULE4(expression);\n });\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: arg4 ? [ arg1, arg2, arg3, arg4 ] : [ arg1, arg2, arg3 ],\n };\n },\n };\n}\n\nexport function funcGroupGraphPattern<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<\n Uncapitalize<T>,\n Pattern[]\n > {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n const group = SUBRULE(groupGraphPattern);\n return ACTION(() => ({\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ deGroupSingle(group) ],\n }));\n },\n };\n}\n\nexport interface IExpressionAggregator {\n type: 'aggregate';\n distinct: boolean;\n expression: Expression | Wildcard;\n aggregation: string;\n separator?: string;\n}\n\nexport type RuleDefExpressionAggregatorX<T extends string> = RuleDef<T, IExpressionAggregator>;\n\nexport function baseAggregateFunc<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionAggregatorX<Uncapitalize<T>> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE, OPTION, OR }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const distinct = OPTION(() => CONSUME(l.distinct));\n const expressionVal = OR<Expression | Wildcard>([\n {\n ALT: () => {\n CONSUME(l.symbols.star);\n return new Wildcard();\n },\n },\n { ALT: () => SUBRULE(expression) },\n ]);\n CONSUME(l.symbols.RParen);\n return {\n type: 'aggregate',\n aggregation: operator.image.toLowerCase(),\n expression: expressionVal,\n distinct: Boolean(distinct),\n };\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"expressionHelpers.js","sourceRoot":"","sources":["expressionHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { unCapitalize } from '@traqula/core';\nimport type { TokenType } from 'chevrotain';\nimport { expression, expressionList } from './grammar/expression';\nimport { var_ } from './grammar/general';\nimport { groupGraphPattern } from './grammar/whereClause';\nimport * as l from './lexer';\nimport type { Expression, OperationExpression, Pattern, SparqlGrammarRule, VariableTerm } from './Sparql11types';\nimport { deGroupSingle } from './utils';\nimport { Wildcard } from './Wildcard';\n\nexport interface IExpressionFunctionX<U extends Expression[] | [Pattern]> extends OperationExpression {\n type: 'operation';\n operator: string;\n args: U;\n}\n\nexport type RuleDefExpressionFunctionX<T extends string, U extends Expression[] | [Pattern]>\n = SparqlGrammarRule<T, IExpressionFunctionX<U>>;\n\nfunction formatOperator(operator: string): string {\n return operator.toLowerCase().replaceAll(' ', '');\n}\n\nexport function funcExpr1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression, undefined);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg ],\n };\n },\n };\n}\n\nexport function funcExpr2<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE1, SUBRULE2, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression, undefined);\n CONSUME(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg1, arg2 ],\n };\n },\n };\n}\n\nexport function funcExpr3<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE1, SUBRULE2, SUBRULE3, CONSUME, CONSUME1, CONSUME2 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression, undefined);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression, undefined);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg1, arg2, arg3 ],\n };\n },\n };\n}\n\nexport function funcVar1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [VariableTerm]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(var_, undefined);\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ arg ],\n };\n },\n };\n}\n\nexport function funcExprOrNil1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [] | [Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, OR, SUBRULE }) => () => {\n const operator = CONSUME(func);\n const args = OR<[] | [Expression]>([\n {\n ALT: () => {\n CONSUME(l.symbols.LParen);\n const arg = SUBRULE(expression, undefined);\n CONSUME(l.symbols.RParen);\n return [ arg ];\n },\n },\n {\n ALT: () => {\n CONSUME(l.terminals.nil);\n return [];\n },\n },\n ]);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args,\n };\n },\n };\n}\n\nexport function funcNil1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, []> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.terminals.nil);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [],\n };\n },\n };\n}\n\nexport function funcExprList1<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, Expression[]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE }) => () => {\n const operator = CONSUME(func);\n const args = SUBRULE(expressionList, undefined);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args,\n };\n },\n };\n}\n\nexport function funcExpr2or3<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<Uncapitalize<T>, [Expression, Expression] | [Expression, Expression, Expression]> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression, undefined);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n const arg3 = OPTION(() => {\n CONSUME2(l.symbols.comma);\n return SUBRULE3(expression, undefined);\n });\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: arg3 ? [ arg1, arg2, arg3 ] : [ arg1, arg2 ],\n };\n },\n };\n}\n\nexport function funcExpr3or4<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<\n Uncapitalize<T>,\n [Expression, Expression, Expression] | [Expression, Expression, Expression, Expression]\n> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE1, SUBRULE2, SUBRULE3, CONSUME1, OPTION, CONSUME2, SUBRULE4, CONSUME3 }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const arg1 = SUBRULE1(expression, undefined);\n CONSUME1(l.symbols.comma);\n const arg2 = SUBRULE2(expression, undefined);\n CONSUME2(l.symbols.comma);\n const arg3 = SUBRULE3(expression, undefined);\n const arg4 = OPTION(() => {\n CONSUME3(l.symbols.comma);\n return SUBRULE4(expression, undefined);\n });\n CONSUME(l.symbols.RParen);\n return {\n type: 'operation',\n operator: formatOperator(operator.image),\n args: arg4 ? [ arg1, arg2, arg3, arg4 ] : [ arg1, arg2, arg3 ],\n };\n },\n };\n}\n\nexport function funcGroupGraphPattern<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionFunctionX<\n Uncapitalize<T>,\n [ Pattern ]\n> {\n return {\n name: unCapitalize(func.name),\n impl: ({ ACTION, SUBRULE, CONSUME }) => () => {\n const operator = CONSUME(func);\n const group = SUBRULE(groupGraphPattern, undefined);\n return ACTION(() => ({\n type: 'operation',\n operator: formatOperator(operator.image),\n args: [ deGroupSingle(group) ],\n }));\n },\n };\n}\n\nexport interface IExpressionAggregator {\n type: 'aggregate';\n distinct: boolean;\n expression: Expression | Wildcard;\n aggregation: string;\n separator?: string;\n}\n\nexport type RuleDefExpressionAggregatorX<T extends string> = SparqlGrammarRule<T, IExpressionAggregator>;\n\nexport function baseAggregateFunc<T extends string>(func: TokenType & { name: T }):\nRuleDefExpressionAggregatorX<Uncapitalize<T>> {\n return {\n name: unCapitalize(func.name),\n impl: ({ CONSUME, SUBRULE, OPTION, OR }) => () => {\n const operator = CONSUME(func);\n CONSUME(l.symbols.LParen);\n const distinct = OPTION(() => CONSUME(l.distinct));\n const expressionVal = OR<Expression | Wildcard>([\n {\n ALT: () => {\n CONSUME(l.symbols.star);\n return new Wildcard();\n },\n },\n { ALT: () => SUBRULE(expression, undefined) },\n ]);\n CONSUME(l.symbols.RParen);\n return {\n type: 'aggregate',\n aggregation: operator.image.toLowerCase(),\n expression: expressionVal,\n distinct: Boolean(distinct),\n };\n },\n };\n}\n"]}
|
package/lib/grammar/builtIn.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { IOrAlt } from '@chevrotain/types';
|
|
2
|
-
import type { ImplArgs
|
|
2
|
+
import type { ImplArgs } from '@traqula/core';
|
|
3
3
|
import type { RuleDefExpressionFunctionX } from '../expressionHelpers';
|
|
4
|
-
import type { AggregateExpression, Expression } from '../Sparql11types';
|
|
4
|
+
import type { AggregateExpression, Expression, SparqlGrammarRule, SparqlRule } from '../Sparql11types';
|
|
5
5
|
export declare const builtInStr: RuleDefExpressionFunctionX<"builtInStr", [Expression]>;
|
|
6
6
|
export declare const builtInLang: RuleDefExpressionFunctionX<"builtInLang", [Expression]>;
|
|
7
7
|
export declare const builtInLangmatches: RuleDefExpressionFunctionX<"builtInLangmatches", [Expression, Expression]>;
|
|
@@ -55,7 +55,7 @@ export declare function builtInCallList(SUBRULE: ImplArgs['SUBRULE']): IOrAlt<Ex
|
|
|
55
55
|
/**
|
|
56
56
|
* [[121]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
|
|
57
57
|
*/
|
|
58
|
-
export declare const builtInCall:
|
|
58
|
+
export declare const builtInCall: SparqlGrammarRule<'builtInCall', Expression>;
|
|
59
59
|
/**
|
|
60
60
|
* [[122]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
|
|
61
61
|
*/
|
|
@@ -71,21 +71,19 @@ export declare const strReplaceExpression: RuleDefExpressionFunctionX<"builtInRe
|
|
|
71
71
|
/**
|
|
72
72
|
* [[125]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
|
|
73
73
|
*/
|
|
74
|
-
export declare const existsFunc: RuleDefExpressionFunctionX<"builtInExists", import("..").Pattern
|
|
74
|
+
export declare const existsFunc: RuleDefExpressionFunctionX<"builtInExists", [import("..").Pattern]>;
|
|
75
75
|
/**
|
|
76
76
|
* [[126]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
|
|
77
77
|
*/
|
|
78
|
-
export declare const notExistsFunc: RuleDefExpressionFunctionX<"builtInNotexists", import("..").Pattern
|
|
78
|
+
export declare const notExistsFunc: RuleDefExpressionFunctionX<"builtInNotexists", [import("..").Pattern]>;
|
|
79
79
|
export declare const aggregateCount: import(".").RuleDefExpressionAggregatorX<"builtInCount">;
|
|
80
80
|
export declare const aggregateSum: import(".").RuleDefExpressionAggregatorX<"builtInSum">;
|
|
81
81
|
export declare const aggregateMin: import(".").RuleDefExpressionAggregatorX<"builtInMin">;
|
|
82
82
|
export declare const aggregateMax: import(".").RuleDefExpressionAggregatorX<"builtInMax">;
|
|
83
83
|
export declare const aggregateAvg: import(".").RuleDefExpressionAggregatorX<"builtInAvg">;
|
|
84
84
|
export declare const aggregateSample: import(".").RuleDefExpressionAggregatorX<"builtInSample">;
|
|
85
|
-
export declare const aggregateGroup_concat:
|
|
86
|
-
export declare const canParseAggregate: unique symbol;
|
|
87
|
-
export declare const inAggregate: unique symbol;
|
|
85
|
+
export declare const aggregateGroup_concat: SparqlGrammarRule<'builtInGroup_concat', AggregateExpression>;
|
|
88
86
|
/**
|
|
89
87
|
* [[127]](https://www.w3.org/TR/sparql11-query/#rBuiltInCall)
|
|
90
88
|
*/
|
|
91
|
-
export declare const aggregate:
|
|
89
|
+
export declare const aggregate: SparqlRule<'aggregate', AggregateExpression>;
|