@comunica/actor-query-operation-path-zero-or-more 2.10.1 → 3.0.1-alpha.44.0

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 CHANGED
@@ -22,14 +22,15 @@ After installing, this package can be added to your engine's configuration as fo
22
22
  {
23
23
  "@context": [
24
24
  ...
25
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-path-zero-or-more/^2.0.0/components/context.jsonld"
25
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-path-zero-or-more/^3.0.0/components/context.jsonld"
26
26
  ],
27
27
  "actors": [
28
28
  ...
29
29
  {
30
30
  "@id": "urn:comunica:default:query-operation/actors#path-zero-or-more",
31
31
  "@type": "ActorQueryOperationPathZeroOrMore",
32
- "mediatorQueryOperation": { "@id": "urn:comunica:default:query-operation/mediators#main" }
32
+ "mediatorQueryOperation": { "@id": "urn:comunica:default:query-operation/mediators#main" },
33
+ "mediatorMergeBindingsContext": { "@id": "urn:comunica:default:merge-bindings-context/mediators#main" }
33
34
  }
34
35
  ]
35
36
  }
@@ -38,3 +39,4 @@ After installing, this package can be added to your engine's configuration as fo
38
39
  ### Config Parameters
39
40
 
40
41
  * `mediatorQueryOperation`: A mediator over the [Query Operation bus](https://github.com/comunica/comunica/tree/master/packages/bus-query-operation).
42
+ * `mediatorMergeBindingsContext`: A mediator over the [Merge Bindings Context bus](https://github.com/comunica/comunica/tree/master/packages/bus-merge-bindings-context).
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-path-zero-or-more/^2.0.0/components/context.jsonld",
4
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^2.0.0/components/context.jsonld",
5
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-operation/^2.0.0/components/context.jsonld",
6
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-abstract-path/^2.0.0/components/context.jsonld"
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-path-zero-or-more/^3.0.0/components/context.jsonld",
4
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^3.0.0/components/context.jsonld",
5
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-operation/^3.0.0/components/context.jsonld",
6
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-abstract-path/^3.0.0/components/context.jsonld"
7
7
  ],
8
8
  "@id": "npmd:@comunica/actor-query-operation-path-zero-or-more",
9
9
  "components": [
@@ -16,6 +16,11 @@
16
16
  ],
17
17
  "comment": "A comunica Path ZeroOrMore Query Operation Actor.",
18
18
  "parameters": [
19
+ {
20
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorMergeBindingsContext",
21
+ "range": "cc:components/Mediator.jsonld#Mediator",
22
+ "comment": "A mediator for creating binding context merge handlers"
23
+ },
19
24
  {
20
25
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorQueryOperation",
21
26
  "range": "cc:components/Mediator.jsonld#Mediator"
@@ -40,29 +45,29 @@
40
45
  "genericTypeInstances": [
41
46
  {
42
47
  "@type": "ParameterRangeGenericTypeReference",
43
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
48
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
44
49
  },
45
50
  {
46
51
  "@type": "ParameterRangeGenericTypeReference",
47
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
52
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
48
53
  },
49
54
  {
50
55
  "@type": "ParameterRangeGenericTypeReference",
51
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
56
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
52
57
  }
53
58
  ]
54
59
  },
55
60
  {
56
61
  "@type": "ParameterRangeGenericTypeReference",
57
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
62
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
58
63
  },
59
64
  {
60
65
  "@type": "ParameterRangeGenericTypeReference",
61
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
66
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
62
67
  },
63
68
  {
64
69
  "@type": "ParameterRangeGenericTypeReference",
65
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
70
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
66
71
  }
67
72
  ]
68
73
  },
@@ -85,15 +90,15 @@
85
90
  "genericTypeInstances": [
86
91
  {
87
92
  "@type": "ParameterRangeGenericTypeReference",
88
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
93
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
89
94
  },
90
95
  {
91
96
  "@type": "ParameterRangeGenericTypeReference",
92
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
97
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
93
98
  },
94
99
  {
95
100
  "@type": "ParameterRangeGenericTypeReference",
96
- "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^2.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
101
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
97
102
  }
98
103
  ]
99
104
  }
@@ -107,6 +112,11 @@
107
112
  }
108
113
  ],
109
114
  "memberFields": [
115
+ {
116
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore__member_mediatorMergeBindingsContext",
117
+ "memberFieldName": "mediatorMergeBindingsContext",
118
+ "range": "cc:components/Mediator.jsonld#Mediator"
119
+ },
110
120
  {
111
121
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore__member_constructor",
112
122
  "memberFieldName": "constructor"
@@ -120,6 +130,12 @@
120
130
  {
121
131
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args__constructorArgument",
122
132
  "fields": [
133
+ {
134
+ "keyRaw": "mediatorMergeBindingsContext",
135
+ "value": {
136
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorMergeBindingsContext"
137
+ }
138
+ },
123
139
  {
124
140
  "keyRaw": "mediatorQueryOperation",
125
141
  "value": {
@@ -147,6 +163,22 @@
147
163
  ]
148
164
  }
149
165
  ]
166
+ },
167
+ {
168
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#IActorQueryOperationPathZeroOrMoreArgs",
169
+ "@type": "AbstractClass",
170
+ "requireElement": "IActorQueryOperationPathZeroOrMoreArgs",
171
+ "extends": [
172
+ "cbqo:components/ActorQueryOperationTypedMediated.jsonld#IActorQueryOperationTypedMediatedArgs"
173
+ ],
174
+ "parameters": [],
175
+ "memberFields": [
176
+ {
177
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#IActorQueryOperationPathZeroOrMoreArgs__member_mediatorMergeBindingsContext",
178
+ "memberFieldName": "mediatorMergeBindingsContext"
179
+ }
180
+ ],
181
+ "constructorArguments": []
150
182
  }
151
183
  ]
152
184
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "@context": [
3
- "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-path-zero-or-more/^2.0.0/components/context.jsonld"
3
+ "https://linkedsoftwaredependencies.org/bundles/npm/@comunica/actor-query-operation-path-zero-or-more/^3.0.0/components/context.jsonld"
4
4
  ],
5
5
  "@id": "npmd:@comunica/actor-query-operation-path-zero-or-more",
6
6
  "@type": "Module",
@@ -3,11 +3,14 @@
3
3
  "https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^5.0.0/components/context.jsonld",
4
4
  {
5
5
  "npmd": "https://linkedsoftwaredependencies.org/bundles/npm/",
6
- "caqopzom": "npmd:@comunica/actor-query-operation-path-zero-or-more/^2.0.0/",
6
+ "caqopzom": "npmd:@comunica/actor-query-operation-path-zero-or-more/^3.0.0/",
7
7
  "ActorQueryOperationPathZeroOrMore": {
8
8
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore",
9
9
  "@prefix": true,
10
10
  "@context": {
11
+ "args_mediatorMergeBindingsContext": {
12
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorMergeBindingsContext"
13
+ },
11
14
  "args_mediatorQueryOperation": {
12
15
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorQueryOperation"
13
16
  },
@@ -21,6 +24,9 @@
21
24
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_beforeActors",
22
25
  "@container": "@list"
23
26
  },
27
+ "mediatorMergeBindingsContext": {
28
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorMergeBindingsContext"
29
+ },
24
30
  "mediatorQueryOperation": {
25
31
  "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_mediatorQueryOperation"
26
32
  },
@@ -35,6 +41,11 @@
35
41
  "@container": "@list"
36
42
  }
37
43
  }
44
+ },
45
+ "IActorQueryOperationPathZeroOrMoreArgs": {
46
+ "@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#IActorQueryOperationPathZeroOrMoreArgs",
47
+ "@prefix": true,
48
+ "@context": {}
38
49
  }
39
50
  }
40
51
  ]
@@ -1,4 +1,5 @@
1
1
  import { ActorAbstractPath } from '@comunica/actor-abstract-path';
2
+ import type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';
2
3
  import type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';
3
4
  import type { IQueryOperationResult, IActionContext } from '@comunica/types';
4
5
  import { Algebra } from 'sparqlalgebrajs';
@@ -6,6 +7,13 @@ import { Algebra } from 'sparqlalgebrajs';
6
7
  * A comunica Path ZeroOrMore Query Operation Actor.
7
8
  */
8
9
  export declare class ActorQueryOperationPathZeroOrMore extends ActorAbstractPath {
9
- constructor(args: IActorQueryOperationTypedMediatedArgs);
10
+ readonly mediatorMergeBindingsContext: MediatorMergeBindingsContext;
11
+ constructor(args: IActorQueryOperationPathZeroOrMoreArgs);
10
12
  runOperation(operation: Algebra.Path, context: IActionContext): Promise<IQueryOperationResult>;
11
13
  }
14
+ export interface IActorQueryOperationPathZeroOrMoreArgs extends IActorQueryOperationTypedMediatedArgs {
15
+ /**
16
+ * A mediator for creating binding context merge handlers
17
+ */
18
+ mediatorMergeBindingsContext: MediatorMergeBindingsContext;
19
+ }
@@ -7,7 +7,6 @@ const bus_query_operation_1 = require("@comunica/bus-query-operation");
7
7
  const asynciterator_1 = require("asynciterator");
8
8
  const rdf_string_1 = require("rdf-string");
9
9
  const sparqlalgebrajs_1 = require("sparqlalgebrajs");
10
- const BF = new bindings_factory_1.BindingsFactory();
11
10
  /**
12
11
  * A comunica Path ZeroOrMore Query Operation Actor.
13
12
  */
@@ -16,19 +15,21 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
16
15
  super(args, sparqlalgebrajs_1.Algebra.types.ZERO_OR_MORE_PATH);
17
16
  }
18
17
  async runOperation(operation, context) {
18
+ const bindingsFactory = await bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, context);
19
19
  const distinct = await this.isPathArbitraryLengthDistinct(context, operation);
20
20
  if (distinct.operation) {
21
21
  return distinct.operation;
22
22
  }
23
23
  context = distinct.context;
24
24
  const predicate = operation.predicate;
25
+ const sources = this.getPathSources(predicate);
25
26
  const sVar = operation.subject.termType === 'Variable';
26
27
  const oVar = operation.object.termType === 'Variable';
27
28
  if (operation.subject.termType === 'Variable' && operation.object.termType === 'Variable') {
28
29
  // Query ?s ?p ?o, to get all possible namedNodes in de the db
29
30
  const predVar = this.generateVariable(operation);
30
- const single = actor_abstract_path_1.ActorAbstractPath.FACTORY
31
- .createPattern(operation.subject, predVar, operation.object, operation.graph);
31
+ const single = this.assignPatternSources(actor_abstract_path_1.ActorAbstractPath.FACTORY
32
+ .createPattern(operation.subject, predVar, operation.object, operation.graph), sources);
32
33
  const results = bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({ context, operation: single }));
33
34
  const subjectVar = operation.subject;
34
35
  const objectVar = operation.object;
@@ -57,12 +58,12 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
57
58
  // If not started from this namedNode (subject in triple) in this graph, start a search
58
59
  if (!entities.has(subjectGraphHash)) {
59
60
  entities.add(subjectGraphHash);
60
- await this.getSubjectAndObjectBindingsPredicateStar(subjectVar, objectVar, subject, subject, predicate.path, graph, context, termHashes, {}, it, counter);
61
+ await this.getSubjectAndObjectBindingsPredicateStar(subjectVar, objectVar, subject, subject, predicate.path, graph, context, termHashes, {}, it, counter, bindingsFactory);
61
62
  }
62
63
  // If not started from this namedNode (object in triple) in this graph, start a search
63
64
  if (!entities.has(objectGraphHash)) {
64
65
  entities.add(objectGraphHash);
65
- await this.getSubjectAndObjectBindingsPredicateStar(subjectVar, objectVar, object, object, predicate.path, graph, context, termHashes, {}, it, counter);
66
+ await this.getSubjectAndObjectBindingsPredicateStar(subjectVar, objectVar, object, object, predicate.path, graph, context, termHashes, {}, it, counter, bindingsFactory);
66
67
  }
67
68
  return it.transform({
68
69
  transform(item, next, push) {
@@ -88,14 +89,15 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
88
89
  }
89
90
  if (!sVar && !oVar) {
90
91
  const variable = this.generateVariable();
91
- const starEval = await this.getObjectsPredicateStarEval(operation.subject, predicate.path, variable, operation.graph, context, true);
92
+ const starEval = await this.getObjectsPredicateStarEval(operation.subject, predicate.path, variable, operation.graph, context, true, bindingsFactory);
93
+ // Check this
92
94
  const bindingsStream = starEval.bindingsStream.transform({
93
95
  filter: item => operation.object.equals(item.get(variable)),
94
96
  transform(item, next, push) {
95
97
  // Return graph binding if graph was a variable, otherwise empty binding
96
98
  const binding = operation.graph.termType === 'Variable' ?
97
- BF.bindings([[operation.graph, item.get(operation.graph)]]) :
98
- BF.bindings();
99
+ bindingsFactory.bindings([[operation.graph, item.get(operation.graph)]]) :
100
+ bindingsFactory.bindings();
99
101
  push(binding);
100
102
  next();
101
103
  },
@@ -113,7 +115,7 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
113
115
  const subject = sVar ? operation.object : operation.subject;
114
116
  const value = (sVar ? operation.subject : operation.object);
115
117
  const pred = sVar ? actor_abstract_path_1.ActorAbstractPath.FACTORY.createInv(predicate.path) : predicate.path;
116
- const starEval = await this.getObjectsPredicateStarEval(subject, pred, value, operation.graph, context, true);
118
+ const starEval = await this.getObjectsPredicateStarEval(subject, pred, value, operation.graph, context, true, bindingsFactory);
117
119
  const variables = operation.graph.termType === 'Variable' ? [value, operation.graph] : [value];
118
120
  return {
119
121
  type: 'bindings',
@@ -1 +1 @@
1
- {"version":3,"file":"ActorQueryOperationPathZeroOrMore.js","sourceRoot":"","sources":["ActorQueryOperationPathZeroOrMore.ts"],"names":[],"mappings":"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","sourcesContent":["import { ActorAbstractPath } from '@comunica/actor-abstract-path';\nimport { BindingsFactory } from '@comunica/bindings-factory';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport { ActorQueryOperation } from '@comunica/bus-query-operation';\nimport type { Bindings, IQueryOperationResult, IActionContext } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { MultiTransformIterator, TransformIterator, EmptyIterator, BufferedIterator } from 'asynciterator';\nimport { termToString } from 'rdf-string';\nimport { Algebra } from 'sparqlalgebrajs';\n\nconst BF = new BindingsFactory();\n\n/**\n * A comunica Path ZeroOrMore Query Operation Actor.\n */\nexport class ActorQueryOperationPathZeroOrMore extends ActorAbstractPath {\n public constructor(args: IActorQueryOperationTypedMediatedArgs) {\n super(args, Algebra.types.ZERO_OR_MORE_PATH);\n }\n\n public async runOperation(operation: Algebra.Path, context: IActionContext): Promise<IQueryOperationResult> {\n const distinct = await this.isPathArbitraryLengthDistinct(context, operation);\n if (distinct.operation) {\n return distinct.operation;\n }\n\n context = distinct.context;\n\n const predicate = <Algebra.ZeroOrMorePath> operation.predicate;\n\n const sVar = operation.subject.termType === 'Variable';\n const oVar = operation.object.termType === 'Variable';\n\n if (operation.subject.termType === 'Variable' && operation.object.termType === 'Variable') {\n // Query ?s ?p ?o, to get all possible namedNodes in de the db\n const predVar = this.generateVariable(operation);\n const single = ActorAbstractPath.FACTORY\n .createPattern(operation.subject, predVar, operation.object, operation.graph);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ context, operation: single }),\n );\n const subjectVar = operation.subject;\n const objectVar = operation.object;\n\n // Set with all namedNodes we have already started a predicate* search from\n const entities: Set<string> = new Set();\n\n const termHashes = {};\n\n const bindingsStream: MultiTransformIterator<Bindings, Bindings> = new MultiTransformIterator(\n results.bindingsStream,\n {\n multiTransform: (bindings: Bindings) => {\n // Get the subject and object of the triples (?s ?p ?o) and extract graph if it was a variable\n const subject: RDF.Term = bindings.get(subjectVar)!;\n const object: RDF.Term = bindings.get(objectVar)!;\n const graph: RDF.Term = operation.graph.termType === 'Variable' ?\n bindings.get(operation.graph)! :\n operation.graph;\n // Make a hash of namedNode + graph to remember from where we already started a search\n const subjectGraphHash = termToString(subject) + termToString(graph);\n const objectGraphHash = termToString(object) + termToString(graph);\n return new TransformIterator<Bindings>(\n async() => {\n // If no new namedNodes in this triple, return nothing\n if (entities.has(subjectGraphHash) && entities.has(objectGraphHash)) {\n return new EmptyIterator();\n }\n // Set up an iterator to which getSubjectAndObjectBindingsPredicateStar will push solutions\n const it = new BufferedIterator<Bindings>();\n const counter = { count: 0 };\n // If not started from this namedNode (subject in triple) in this graph, start a search\n if (!entities.has(subjectGraphHash)) {\n entities.add(subjectGraphHash);\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n subject,\n subject,\n predicate.path,\n graph,\n context,\n termHashes,\n {},\n it,\n counter,\n );\n }\n // If not started from this namedNode (object in triple) in this graph, start a search\n if (!entities.has(objectGraphHash)) {\n entities.add(objectGraphHash);\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n object,\n object,\n predicate.path,\n graph,\n context,\n termHashes,\n {},\n it,\n counter,\n );\n }\n return it.transform<Bindings>({\n transform(item, next, push) {\n // If the graph was a variable, fill in it's binding (we got it from the ?s ?p ?o binding)\n if (operation.graph.termType === 'Variable') {\n item = item.set(operation.graph, graph);\n }\n push(item);\n next();\n },\n });\n },\n );\n },\n },\n );\n const variables: RDF.Variable[] = operation.graph.termType === 'Variable' ?\n [ subjectVar, operation.object, operation.graph ] :\n [ subjectVar, operation.object ];\n return {\n type: 'bindings',\n bindingsStream,\n metadata: async() => ({ ...await results.metadata(), variables }),\n };\n }\n if (!sVar && !oVar) {\n const variable = this.generateVariable();\n const starEval = await this.getObjectsPredicateStarEval(\n operation.subject,\n predicate.path,\n variable,\n operation.graph,\n context,\n true,\n );\n const bindingsStream = starEval.bindingsStream.transform<Bindings>({\n filter: item => operation.object.equals(item.get(variable)),\n transform(item, next, push) {\n // Return graph binding if graph was a variable, otherwise empty binding\n const binding = operation.graph.termType === 'Variable' ?\n BF.bindings([[ operation.graph, item.get(operation.graph)! ]]) :\n BF.bindings();\n push(binding);\n next();\n },\n });\n return {\n type: 'bindings',\n bindingsStream,\n metadata: async() => ({\n ...await starEval.metadata(),\n variables: operation.graph.termType === 'Variable' ? [ operation.graph ] : [],\n }),\n };\n }\n // If (sVar || oVar)\n const subject = sVar ? operation.object : operation.subject;\n const value: RDF.Variable = <RDF.Variable> (sVar ? operation.subject : operation.object);\n const pred = sVar ? ActorAbstractPath.FACTORY.createInv(predicate.path) : predicate.path;\n const starEval = await this.getObjectsPredicateStarEval(\n subject,\n pred,\n value,\n operation.graph,\n context,\n true,\n );\n const variables: RDF.Variable[] = operation.graph.termType === 'Variable' ? [ value, operation.graph ] : [ value ];\n return {\n type: 'bindings',\n bindingsStream: starEval.bindingsStream,\n metadata: async() => ({ ...await starEval.metadata(), variables }),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ActorQueryOperationPathZeroOrMore.js","sourceRoot":"","sources":["ActorQueryOperationPathZeroOrMore.ts"],"names":[],"mappings":"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","sourcesContent":["import { ActorAbstractPath } from '@comunica/actor-abstract-path';\nimport { BindingsFactory } from '@comunica/bindings-factory';\nimport type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport { ActorQueryOperation } from '@comunica/bus-query-operation';\nimport type { Bindings, IQueryOperationResult, IActionContext } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { MultiTransformIterator, TransformIterator, EmptyIterator, BufferedIterator } from 'asynciterator';\nimport { termToString } from 'rdf-string';\nimport { Algebra } from 'sparqlalgebrajs';\n\n/**\n * A comunica Path ZeroOrMore Query Operation Actor.\n */\nexport class ActorQueryOperationPathZeroOrMore extends ActorAbstractPath {\n public readonly mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n\n public constructor(args: IActorQueryOperationPathZeroOrMoreArgs) {\n super(args, Algebra.types.ZERO_OR_MORE_PATH);\n }\n\n public async runOperation(operation: Algebra.Path, context: IActionContext): Promise<IQueryOperationResult> {\n const bindingsFactory = await BindingsFactory.create(this.mediatorMergeBindingsContext, context);\n\n const distinct = await this.isPathArbitraryLengthDistinct(context, operation);\n if (distinct.operation) {\n return distinct.operation;\n }\n\n context = distinct.context;\n\n const predicate = <Algebra.ZeroOrMorePath> operation.predicate;\n const sources = this.getPathSources(predicate);\n\n const sVar = operation.subject.termType === 'Variable';\n const oVar = operation.object.termType === 'Variable';\n\n if (operation.subject.termType === 'Variable' && operation.object.termType === 'Variable') {\n // Query ?s ?p ?o, to get all possible namedNodes in de the db\n const predVar = this.generateVariable(operation);\n const single = this.assignPatternSources(ActorAbstractPath.FACTORY\n .createPattern(operation.subject, predVar, operation.object, operation.graph), sources);\n const results = ActorQueryOperation.getSafeBindings(\n await this.mediatorQueryOperation.mediate({ context, operation: single }),\n );\n const subjectVar = operation.subject;\n const objectVar = operation.object;\n\n // Set with all namedNodes we have already started a predicate* search from\n const entities: Set<string> = new Set();\n\n const termHashes = {};\n\n const bindingsStream: MultiTransformIterator<Bindings, Bindings> = new MultiTransformIterator(\n results.bindingsStream,\n {\n multiTransform: (bindings: Bindings) => {\n // Get the subject and object of the triples (?s ?p ?o) and extract graph if it was a variable\n const subject: RDF.Term = bindings.get(subjectVar)!;\n const object: RDF.Term = bindings.get(objectVar)!;\n const graph: RDF.Term = operation.graph.termType === 'Variable' ?\n bindings.get(operation.graph)! :\n operation.graph;\n // Make a hash of namedNode + graph to remember from where we already started a search\n const subjectGraphHash = termToString(subject) + termToString(graph);\n const objectGraphHash = termToString(object) + termToString(graph);\n return new TransformIterator<Bindings>(\n async() => {\n // If no new namedNodes in this triple, return nothing\n if (entities.has(subjectGraphHash) && entities.has(objectGraphHash)) {\n return new EmptyIterator();\n }\n // Set up an iterator to which getSubjectAndObjectBindingsPredicateStar will push solutions\n const it = new BufferedIterator<Bindings>();\n const counter = { count: 0 };\n // If not started from this namedNode (subject in triple) in this graph, start a search\n if (!entities.has(subjectGraphHash)) {\n entities.add(subjectGraphHash);\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n subject,\n subject,\n predicate.path,\n graph,\n context,\n termHashes,\n {},\n it,\n counter,\n bindingsFactory,\n );\n }\n // If not started from this namedNode (object in triple) in this graph, start a search\n if (!entities.has(objectGraphHash)) {\n entities.add(objectGraphHash);\n await this.getSubjectAndObjectBindingsPredicateStar(\n subjectVar,\n objectVar,\n object,\n object,\n predicate.path,\n graph,\n context,\n termHashes,\n {},\n it,\n counter,\n bindingsFactory,\n );\n }\n return it.transform<Bindings>({\n transform(item, next, push) {\n // If the graph was a variable, fill in it's binding (we got it from the ?s ?p ?o binding)\n if (operation.graph.termType === 'Variable') {\n item = item.set(operation.graph, graph);\n }\n push(item);\n next();\n },\n });\n },\n );\n },\n },\n );\n const variables: RDF.Variable[] = operation.graph.termType === 'Variable' ?\n [ subjectVar, operation.object, operation.graph ] :\n [ subjectVar, operation.object ];\n return {\n type: 'bindings',\n bindingsStream,\n metadata: async() => ({ ...await results.metadata(), variables }),\n };\n }\n if (!sVar && !oVar) {\n const variable = this.generateVariable();\n const starEval = await this.getObjectsPredicateStarEval(\n operation.subject,\n predicate.path,\n variable,\n operation.graph,\n context,\n true,\n bindingsFactory,\n );\n // Check this\n const bindingsStream = starEval.bindingsStream.transform<Bindings>({\n filter: item => operation.object.equals(item.get(variable)),\n transform(item, next, push) {\n // Return graph binding if graph was a variable, otherwise empty binding\n const binding = operation.graph.termType === 'Variable' ?\n bindingsFactory.bindings([[ operation.graph, item.get(operation.graph)! ]]) :\n bindingsFactory.bindings();\n push(binding);\n next();\n },\n });\n return {\n type: 'bindings',\n bindingsStream,\n metadata: async() => ({\n ...await starEval.metadata(),\n variables: operation.graph.termType === 'Variable' ? [ operation.graph ] : [],\n }),\n };\n }\n // If (sVar || oVar)\n const subject = sVar ? operation.object : operation.subject;\n const value: RDF.Variable = <RDF.Variable> (sVar ? operation.subject : operation.object);\n const pred = sVar ? ActorAbstractPath.FACTORY.createInv(predicate.path) : predicate.path;\n const starEval = await this.getObjectsPredicateStarEval(\n subject,\n pred,\n value,\n operation.graph,\n context,\n true,\n bindingsFactory,\n );\n const variables: RDF.Variable[] = operation.graph.termType === 'Variable' ? [ value, operation.graph ] : [ value ];\n return {\n type: 'bindings',\n bindingsStream: starEval.bindingsStream,\n metadata: async() => ({ ...await starEval.metadata(), variables }),\n };\n }\n}\n\nexport interface IActorQueryOperationPathZeroOrMoreArgs extends IActorQueryOperationTypedMediatedArgs {\n /**\n * A mediator for creating binding context merge handlers\n */\n mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comunica/actor-query-operation-path-zero-or-more",
3
- "version": "2.10.1",
3
+ "version": "3.0.1-alpha.44.0",
4
4
  "description": "A path-zero-or-more query-operation actor",
5
5
  "lsd:module": true,
6
6
  "main": "lib/index.js",
@@ -32,18 +32,19 @@
32
32
  "lib/**/*.js.map"
33
33
  ],
34
34
  "dependencies": {
35
- "@comunica/actor-abstract-path": "^2.10.1",
36
- "@comunica/bindings-factory": "^2.10.1",
37
- "@comunica/bus-query-operation": "^2.10.1",
38
- "@comunica/types": "^2.10.0",
35
+ "@comunica/actor-abstract-path": "3.0.1-alpha.44.0",
36
+ "@comunica/bindings-factory": "3.0.1-alpha.44.0",
37
+ "@comunica/bus-merge-bindings-context": "3.0.1-alpha.44.0",
38
+ "@comunica/bus-query-operation": "3.0.1-alpha.44.0",
39
+ "@comunica/types": "3.0.1-alpha.44.0",
39
40
  "asynciterator": "^3.8.1",
40
41
  "rdf-string": "^1.6.1",
41
- "sparqlalgebrajs": "^4.2.0"
42
+ "sparqlalgebrajs": "^4.3.3"
42
43
  },
43
44
  "scripts": {
44
45
  "build": "npm run build:ts && npm run build:components",
45
46
  "build:ts": "node \"../../node_modules/typescript/bin/tsc\"",
46
47
  "build:components": "componentsjs-generator"
47
48
  },
48
- "gitHead": "4d0383bd0f7cef463daf7044e9add498f8c67797"
49
+ "gitHead": "0b13082c2eef06a45298b30620323d0f956e1a3e"
49
50
  }