@comunica/actor-query-operation-path-zero-or-more 3.2.4-alpha.47.0 → 3.3.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.
|
@@ -54,10 +54,6 @@
|
|
|
54
54
|
{
|
|
55
55
|
"@type": "ParameterRangeGenericTypeReference",
|
|
56
56
|
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"@type": "ParameterRangeGenericTypeReference",
|
|
60
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
|
|
61
57
|
}
|
|
62
58
|
]
|
|
63
59
|
},
|
|
@@ -72,10 +68,6 @@
|
|
|
72
68
|
{
|
|
73
69
|
"@type": "ParameterRangeGenericTypeReference",
|
|
74
70
|
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"@type": "ParameterRangeGenericTypeReference",
|
|
78
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
|
|
79
71
|
}
|
|
80
72
|
]
|
|
81
73
|
},
|
|
@@ -85,20 +77,6 @@
|
|
|
85
77
|
},
|
|
86
78
|
"comment": "The bus this actor subscribes to."
|
|
87
79
|
},
|
|
88
|
-
{
|
|
89
|
-
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_busFailMessage",
|
|
90
|
-
"range": {
|
|
91
|
-
"@type": "ParameterRangeUnion",
|
|
92
|
-
"parameterRangeElements": [
|
|
93
|
-
"xsd:string",
|
|
94
|
-
{
|
|
95
|
-
"@type": "ParameterRangeUndefined"
|
|
96
|
-
}
|
|
97
|
-
]
|
|
98
|
-
},
|
|
99
|
-
"default": "Query operation processing failed: none of the configured actors were able to handle the operation type ${action.operation.type}",
|
|
100
|
-
"comment": "The message that will be configured in the bus for reporting failures. This message may be a template string that contains references to the executed `action`. For example, the following templated string is allowed: \"RDF dereferencing failed: no actors could handle ${action.handle.mediaType}\""
|
|
101
|
-
},
|
|
102
80
|
{
|
|
103
81
|
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_beforeActors",
|
|
104
82
|
"range": {
|
|
@@ -121,10 +99,6 @@
|
|
|
121
99
|
{
|
|
122
100
|
"@type": "ParameterRangeGenericTypeReference",
|
|
123
101
|
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"@type": "ParameterRangeGenericTypeReference",
|
|
127
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
|
|
128
102
|
}
|
|
129
103
|
]
|
|
130
104
|
}
|
|
@@ -180,12 +154,6 @@
|
|
|
180
154
|
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_bus"
|
|
181
155
|
}
|
|
182
156
|
},
|
|
183
|
-
{
|
|
184
|
-
"keyRaw": "busFailMessage",
|
|
185
|
-
"value": {
|
|
186
|
-
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_busFailMessage"
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
157
|
{
|
|
190
158
|
"keyRaw": "beforeActors",
|
|
191
159
|
"value": {
|
|
@@ -20,9 +20,6 @@
|
|
|
20
20
|
"args_bus": {
|
|
21
21
|
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_bus"
|
|
22
22
|
},
|
|
23
|
-
"args_busFailMessage": {
|
|
24
|
-
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_busFailMessage"
|
|
25
|
-
},
|
|
26
23
|
"args_beforeActors": {
|
|
27
24
|
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_beforeActors",
|
|
28
25
|
"@container": "@list"
|
|
@@ -39,9 +36,6 @@
|
|
|
39
36
|
"bus": {
|
|
40
37
|
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_bus"
|
|
41
38
|
},
|
|
42
|
-
"busFailMessage": {
|
|
43
|
-
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_busFailMessage"
|
|
44
|
-
},
|
|
45
39
|
"beforeActors": {
|
|
46
40
|
"@id": "caqopzom:components/ActorQueryOperationPathZeroOrMore.jsonld#ActorQueryOperationPathZeroOrMore_args_beforeActors",
|
|
47
41
|
"@container": "@list"
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ActorQueryOperationPathZeroOrMore = void 0;
|
|
4
4
|
const actor_abstract_path_1 = require("@comunica/actor-abstract-path");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const utils_query_operation_1 = require("@comunica/utils-query-operation");
|
|
5
|
+
const bindings_factory_1 = require("@comunica/bindings-factory");
|
|
6
|
+
const bus_query_operation_1 = require("@comunica/bus-query-operation");
|
|
8
7
|
const asynciterator_1 = require("asynciterator");
|
|
9
8
|
const rdf_string_1 = require("rdf-string");
|
|
10
9
|
const sparqlalgebrajs_1 = require("sparqlalgebrajs");
|
|
@@ -16,10 +15,8 @@ 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) {
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const bindingsFactory = await utils_bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, context, dataFactory);
|
|
22
|
-
const distinct = await this.isPathArbitraryLengthDistinct(algebraFactory, context, operation);
|
|
18
|
+
const bindingsFactory = await bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, context);
|
|
19
|
+
const distinct = await this.isPathArbitraryLengthDistinct(context, operation);
|
|
23
20
|
if (distinct.operation) {
|
|
24
21
|
return distinct.operation;
|
|
25
22
|
}
|
|
@@ -30,10 +27,10 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
|
|
|
30
27
|
const oVar = operation.object.termType === 'Variable';
|
|
31
28
|
if (operation.subject.termType === 'Variable' && operation.object.termType === 'Variable') {
|
|
32
29
|
// Query ?s ?p ?o, to get all possible namedNodes in de the db
|
|
33
|
-
const predVar = this.generateVariable(
|
|
34
|
-
const single = this.assignPatternSources(
|
|
30
|
+
const predVar = this.generateVariable(operation);
|
|
31
|
+
const single = this.assignPatternSources(actor_abstract_path_1.ActorAbstractPath.FACTORY
|
|
35
32
|
.createPattern(operation.subject, predVar, operation.object, operation.graph), sources);
|
|
36
|
-
const results =
|
|
33
|
+
const results = bus_query_operation_1.ActorQueryOperation.getSafeBindings(await this.mediatorQueryOperation.mediate({ context, operation: single }));
|
|
37
34
|
const subjectVar = operation.subject;
|
|
38
35
|
const objectVar = operation.object;
|
|
39
36
|
// Set with all namedNodes we have already started a predicate* search from
|
|
@@ -61,12 +58,12 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
|
|
|
61
58
|
// If not started from this namedNode (subject in triple) in this graph, start a search
|
|
62
59
|
if (!entities.has(subjectGraphHash)) {
|
|
63
60
|
entities.add(subjectGraphHash);
|
|
64
|
-
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);
|
|
65
62
|
}
|
|
66
63
|
// If not started from this namedNode (object in triple) in this graph, start a search
|
|
67
64
|
if (!entities.has(objectGraphHash)) {
|
|
68
65
|
entities.add(objectGraphHash);
|
|
69
|
-
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);
|
|
70
67
|
}
|
|
71
68
|
return it.transform({
|
|
72
69
|
transform(item, next, push) {
|
|
@@ -81,10 +78,9 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
|
|
|
81
78
|
});
|
|
82
79
|
},
|
|
83
80
|
});
|
|
84
|
-
const variables =
|
|
81
|
+
const variables = operation.graph.termType === 'Variable' ?
|
|
85
82
|
[subjectVar, operation.object, operation.graph] :
|
|
86
|
-
[subjectVar, operation.object]
|
|
87
|
-
.map(variable => ({ variable, canBeUndef: false }));
|
|
83
|
+
[subjectVar, operation.object];
|
|
88
84
|
return {
|
|
89
85
|
type: 'bindings',
|
|
90
86
|
bindingsStream,
|
|
@@ -92,8 +88,8 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
|
|
|
92
88
|
};
|
|
93
89
|
}
|
|
94
90
|
if (!sVar && !oVar) {
|
|
95
|
-
const variable = this.generateVariable(
|
|
96
|
-
const starEval = await this.getObjectsPredicateStarEval(operation.subject, predicate.path, variable, operation.graph, context, true,
|
|
91
|
+
const variable = this.generateVariable();
|
|
92
|
+
const starEval = await this.getObjectsPredicateStarEval(operation.subject, predicate.path, variable, operation.graph, context, true, bindingsFactory);
|
|
97
93
|
// Check this
|
|
98
94
|
const bindingsStream = starEval.bindingsStream.transform({
|
|
99
95
|
filter: item => operation.object.equals(item.get(variable)),
|
|
@@ -111,18 +107,16 @@ class ActorQueryOperationPathZeroOrMore extends actor_abstract_path_1.ActorAbstr
|
|
|
111
107
|
bindingsStream,
|
|
112
108
|
metadata: async () => ({
|
|
113
109
|
...await starEval.metadata(),
|
|
114
|
-
variables:
|
|
115
|
-
.map(variable => ({ variable, canBeUndef: false })),
|
|
110
|
+
variables: operation.graph.termType === 'Variable' ? [operation.graph] : [],
|
|
116
111
|
}),
|
|
117
112
|
};
|
|
118
113
|
}
|
|
119
114
|
// If (sVar || oVar)
|
|
120
115
|
const subject = sVar ? operation.object : operation.subject;
|
|
121
116
|
const value = (sVar ? operation.subject : operation.object);
|
|
122
|
-
const pred = sVar ?
|
|
123
|
-
const starEval = await this.getObjectsPredicateStarEval(subject, pred, value, operation.graph, context, true,
|
|
124
|
-
const variables =
|
|
125
|
-
.map(variable => ({ variable, canBeUndef: false }));
|
|
117
|
+
const pred = sVar ? actor_abstract_path_1.ActorAbstractPath.FACTORY.createInv(predicate.path) : predicate.path;
|
|
118
|
+
const starEval = await this.getObjectsPredicateStarEval(subject, pred, value, operation.graph, context, true, bindingsFactory);
|
|
119
|
+
const variables = operation.graph.termType === 'Variable' ? [value, operation.graph] : [value];
|
|
126
120
|
return {
|
|
127
121
|
type: 'bindings',
|
|
128
122
|
bindingsStream: starEval.bindingsStream,
|
|
@@ -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 type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';\nimport type { IActorQueryOperationTypedMediatedArgs } from '@comunica/bus-query-operation';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type {\n Bindings,\n IQueryOperationResult,\n IActionContext,\n ComunicaDataFactory,\n MetadataVariable,\n} from '@comunica/types';\nimport { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { getSafeBindings } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport { MultiTransformIterator, TransformIterator, EmptyIterator, BufferedIterator } from 'asynciterator';\nimport { termToString } from 'rdf-string';\nimport { Algebra, Factory } 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 dataFactory: ComunicaDataFactory = context.getSafe(KeysInitQuery.dataFactory);\n const algebraFactory = new Factory(dataFactory);\n const bindingsFactory = await BindingsFactory.create(this.mediatorMergeBindingsContext, context, dataFactory);\n\n const distinct = await this.isPathArbitraryLengthDistinct(algebraFactory, 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(dataFactory, operation);\n const single = this.assignPatternSources(algebraFactory, algebraFactory\n .createPattern(operation.subject, predVar, operation.object, operation.graph), sources);\n const results = 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 algebraFactory,\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 algebraFactory,\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: MetadataVariable[] = (operation.graph.termType === 'Variable' ?\n [ subjectVar, operation.object, operation.graph ] :\n [ subjectVar, operation.object ])\n .map(variable => ({ variable, canBeUndef: false }));\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(dataFactory);\n const starEval = await this.getObjectsPredicateStarEval(\n operation.subject,\n predicate.path,\n variable,\n operation.graph,\n context,\n true,\n algebraFactory,\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 .map(variable => ({ variable, canBeUndef: false })),\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 ? algebraFactory.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 algebraFactory,\n bindingsFactory,\n );\n const variables = (operation.graph.termType === 'Variable' ? [ value, operation.graph ] : [ value ])\n .map(variable => ({ variable, canBeUndef: false }));\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"]}
|
|
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,13 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/actor-query-operation-path-zero-or-more",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "A path-zero-or-more query-operation actor",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"funding": {
|
|
8
|
-
"type": "opencollective",
|
|
9
|
-
"url": "https://opencollective.com/comunica-association"
|
|
10
|
-
},
|
|
11
7
|
"homepage": "https://comunica.dev/",
|
|
12
8
|
"repository": {
|
|
13
9
|
"type": "git",
|
|
@@ -41,16 +37,14 @@
|
|
|
41
37
|
"build:components": "componentsjs-generator"
|
|
42
38
|
},
|
|
43
39
|
"dependencies": {
|
|
44
|
-
"@comunica/actor-abstract-path": "3.
|
|
45
|
-
"@comunica/
|
|
46
|
-
"@comunica/bus-
|
|
47
|
-
"@comunica/
|
|
48
|
-
"@comunica/types": "3.
|
|
49
|
-
"@comunica/utils-bindings-factory": "3.2.4-alpha.47.0",
|
|
50
|
-
"@comunica/utils-query-operation": "3.2.4-alpha.47.0",
|
|
40
|
+
"@comunica/actor-abstract-path": "^3.3.0",
|
|
41
|
+
"@comunica/bindings-factory": "^3.3.0",
|
|
42
|
+
"@comunica/bus-merge-bindings-context": "^3.3.0",
|
|
43
|
+
"@comunica/bus-query-operation": "^3.3.0",
|
|
44
|
+
"@comunica/types": "^3.3.0",
|
|
51
45
|
"asynciterator": "^3.9.0",
|
|
52
46
|
"rdf-string": "^1.6.1",
|
|
53
|
-
"sparqlalgebrajs": "^4.3.
|
|
47
|
+
"sparqlalgebrajs": "^4.3.7"
|
|
54
48
|
},
|
|
55
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "02bde397d206f1f5a523643a6a604c89e792e2f9"
|
|
56
50
|
}
|