@comunica/actor-query-source-identify-hypermedia-qpf 3.2.1 → 3.2.4-alpha.47.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.
@@ -97,6 +97,10 @@
97
97
  {
98
98
  "@type": "ParameterRangeGenericTypeReference",
99
99
  "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
100
+ },
101
+ {
102
+ "@type": "ParameterRangeGenericTypeReference",
103
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
100
104
  }
101
105
  ]
102
106
  },
@@ -111,6 +115,10 @@
111
115
  {
112
116
  "@type": "ParameterRangeGenericTypeReference",
113
117
  "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
118
+ },
119
+ {
120
+ "@type": "ParameterRangeGenericTypeReference",
121
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
114
122
  }
115
123
  ]
116
124
  },
@@ -120,6 +128,20 @@
120
128
  },
121
129
  "comment": "The bus this actor subscribes to."
122
130
  },
131
+ {
132
+ "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_busFailMessage",
133
+ "range": {
134
+ "@type": "ParameterRangeUnion",
135
+ "parameterRangeElements": [
136
+ "xsd:string",
137
+ {
138
+ "@type": "ParameterRangeUndefined"
139
+ }
140
+ ]
141
+ },
142
+ "default": "Query source hypermedia identification failed: none of the configured actors were able to identify ${action.url}",
143
+ "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}\""
144
+ },
123
145
  {
124
146
  "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_beforeActors",
125
147
  "range": {
@@ -142,6 +164,10 @@
142
164
  {
143
165
  "@type": "ParameterRangeGenericTypeReference",
144
166
  "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
167
+ },
168
+ {
169
+ "@type": "ParameterRangeGenericTypeReference",
170
+ "parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^3.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
145
171
  }
146
172
  ]
147
173
  }
@@ -280,6 +306,12 @@
280
306
  "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_bus"
281
307
  }
282
308
  },
309
+ {
310
+ "keyRaw": "busFailMessage",
311
+ "value": {
312
+ "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_busFailMessage"
313
+ }
314
+ },
283
315
  {
284
316
  "keyRaw": "beforeActors",
285
317
  "value": {
@@ -11,6 +11,12 @@
11
11
  "@type": "Class",
12
12
  "requireElement": "QuerySourceQpf",
13
13
  "parameters": [
14
+ {
15
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_algebraFactory",
16
+ "range": {
17
+ "@type": "ParameterRangeWildcard"
18
+ }
19
+ },
14
20
  {
15
21
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_subjectUri",
16
22
  "range": "xsd:string"
@@ -33,7 +39,7 @@
33
39
  },
34
40
  {
35
41
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_bindingsFactory",
36
- "range": "urn:npm:@comunica/bindings-factory:BindingsFactory"
42
+ "range": "urn:npm:@comunica/utils-bindings-factory:BindingsFactory"
37
43
  },
38
44
  {
39
45
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_metadata",
@@ -89,19 +95,24 @@
89
95
  }
90
96
  ]
91
97
  }
92
- }
93
- ],
94
- "memberFields": [
98
+ },
95
99
  {
96
- "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_SELECTOR_SHAPE",
97
- "memberFieldName": "SELECTOR_SHAPE",
100
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_dataFactory",
98
101
  "range": {
99
- "@type": "ParameterRangeWildcard"
102
+ "@type": "ParameterRangeIntersection",
103
+ "parameterRangeElements": [
104
+ "urn:npm:@rdfjs/types:DataFactory",
105
+ {
106
+ "@type": "ParameterRangeWildcard"
107
+ }
108
+ ]
100
109
  }
101
- },
110
+ }
111
+ ],
112
+ "memberFields": [
102
113
  {
103
- "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_SELECTOR_SHAPE_BR",
104
- "memberFieldName": "SELECTOR_SHAPE_BR",
114
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_selectorShape",
115
+ "memberFieldName": "selectorShape",
105
116
  "range": {
106
117
  "@type": "ParameterRangeWildcard"
107
118
  }
@@ -123,6 +134,14 @@
123
134
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_mediatorDereferenceRdf",
124
135
  "memberFieldName": "mediatorDereferenceRdf"
125
136
  },
137
+ {
138
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_dataFactory",
139
+ "memberFieldName": "dataFactory"
140
+ },
141
+ {
142
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_algebraFactory",
143
+ "memberFieldName": "algebraFactory"
144
+ },
126
145
  {
127
146
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf__member_bindingsFactory",
128
147
  "memberFieldName": "bindingsFactory"
@@ -231,6 +250,12 @@
231
250
  {
232
251
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_mediatorDereferenceRdf"
233
252
  },
253
+ {
254
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_dataFactory"
255
+ },
256
+ {
257
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_algebraFactory"
258
+ },
234
259
  {
235
260
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_bindingsFactory"
236
261
  },
@@ -38,6 +38,9 @@
38
38
  "args_bus": {
39
39
  "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_bus"
40
40
  },
41
+ "args_busFailMessage": {
42
+ "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_busFailMessage"
43
+ },
41
44
  "args_beforeActors": {
42
45
  "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_beforeActors",
43
46
  "@container": "@list"
@@ -72,6 +75,9 @@
72
75
  "bus": {
73
76
  "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_bus"
74
77
  },
78
+ "busFailMessage": {
79
+ "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_busFailMessage"
80
+ },
75
81
  "beforeActors": {
76
82
  "@id": "caqsihq:components/ActorQuerySourceIdentifyHypermediaQpf.jsonld#ActorQuerySourceIdentifyHypermediaQpf_args_beforeActors",
77
83
  "@container": "@list"
@@ -87,6 +93,9 @@
87
93
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf",
88
94
  "@prefix": true,
89
95
  "@context": {
96
+ "algebraFactory": {
97
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_algebraFactory"
98
+ },
90
99
  "subjectUri": {
91
100
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_subjectUri"
92
101
  },
@@ -123,6 +132,30 @@
123
132
  },
124
133
  "initialQuads": {
125
134
  "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_initialQuads"
135
+ },
136
+ "dataFactory": {
137
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_dataFactory"
138
+ },
139
+ "ry": {
140
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_algebraFactory"
141
+ },
142
+ "": {
143
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_initialQuads"
144
+ },
145
+ "ricted": {
146
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_bindingsRestricted"
147
+ },
148
+ "ory": {
149
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_bindingsFactory"
150
+ },
151
+ "data": {
152
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_mediatorMetadata"
153
+ },
154
+ "dataExtract": {
155
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_mediatorMetadataExtract"
156
+ },
157
+ "ferenceRdf": {
158
+ "@id": "caqsihq:components/QuerySourceQpf.jsonld#QuerySourceQpf_mediatorDereferenceRdf"
126
159
  }
127
160
  }
128
161
  }
@@ -4,6 +4,7 @@ import type { IActionQuerySourceIdentifyHypermedia, IActorQuerySourceIdentifyHyp
4
4
  import { ActorQuerySourceIdentifyHypermedia } from '@comunica/bus-query-source-identify-hypermedia';
5
5
  import type { MediatorRdfMetadata } from '@comunica/bus-rdf-metadata';
6
6
  import type { MediatorRdfMetadataExtract } from '@comunica/bus-rdf-metadata-extract';
7
+ import type { TestResult } from '@comunica/core';
7
8
  import type { IActionContext } from '@comunica/types';
8
9
  import type * as RDF from '@rdfjs/types';
9
10
  import { QuerySourceQpf } from './QuerySourceQpf';
@@ -20,8 +21,8 @@ export declare class ActorQuerySourceIdentifyHypermediaQpf extends ActorQuerySou
20
21
  readonly objectUri: string;
21
22
  readonly graphUri?: string;
22
23
  constructor(args: IActorQuerySourceIdentifyHypermediaQpfArgs);
23
- test(action: IActionQuerySourceIdentifyHypermedia): Promise<IActorQuerySourceIdentifyHypermediaTest>;
24
- testMetadata(action: IActionQuerySourceIdentifyHypermedia): Promise<IActorQuerySourceIdentifyHypermediaTest>;
24
+ test(action: IActionQuerySourceIdentifyHypermedia): Promise<TestResult<IActorQuerySourceIdentifyHypermediaTest>>;
25
+ testMetadata(action: IActionQuerySourceIdentifyHypermedia): Promise<TestResult<IActorQuerySourceIdentifyHypermediaTest>>;
25
26
  /**
26
27
  * Look for the search form
27
28
  * @param {IActionRdfResolveHypermedia} action the metadata to look for the form.
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ActorQuerySourceIdentifyHypermediaQpf = void 0;
4
- const bindings_factory_1 = require("@comunica/bindings-factory");
5
4
  const bus_query_source_identify_hypermedia_1 = require("@comunica/bus-query-source-identify-hypermedia");
5
+ const context_entries_1 = require("@comunica/context-entries");
6
+ const core_1 = require("@comunica/core");
7
+ const utils_bindings_factory_1 = require("@comunica/utils-bindings-factory");
8
+ const sparqlalgebrajs_1 = require("sparqlalgebrajs");
6
9
  const QuerySourceQpf_1 = require("./QuerySourceQpf");
7
10
  /**
8
11
  * A comunica QPF Query Source Identify Hypermedia Actor.
@@ -13,16 +16,19 @@ class ActorQuerySourceIdentifyHypermediaQpf extends bus_query_source_identify_hy
13
16
  }
14
17
  async test(action) {
15
18
  if (action.forceSourceType && (action.forceSourceType !== 'qpf' && action.forceSourceType !== 'brtpf')) {
16
- throw new Error(`Actor ${this.name} is not able to handle source type ${action.forceSourceType}.`);
19
+ return (0, core_1.failTest)(`Actor ${this.name} is not able to handle source type ${action.forceSourceType}.`);
17
20
  }
18
21
  return this.testMetadata(action);
19
22
  }
20
23
  async testMetadata(action) {
21
24
  const { searchForm } = await this.createSource(action.url, action.metadata, action.context, action.forceSourceType === 'brtpf');
25
+ if (!searchForm) {
26
+ return (0, core_1.failTest)('Illegal state: found no TPF/QPF search form anymore in metadata.');
27
+ }
22
28
  if (action.handledDatasets && action.handledDatasets[searchForm.dataset]) {
23
- throw new Error(`Actor ${this.name} can only be applied for the first page of a QPF dataset.`);
29
+ return (0, core_1.failTest)(`Actor ${this.name} can only be applied for the first page of a QPF dataset.`);
24
30
  }
25
- return { filterFactor: 1 };
31
+ return (0, core_1.passTest)({ filterFactor: 1 });
26
32
  }
27
33
  /**
28
34
  * Look for the search form
@@ -35,7 +41,9 @@ class ActorQuerySourceIdentifyHypermediaQpf extends bus_query_source_identify_hy
35
41
  return { source, dataset: source.searchForm.dataset };
36
42
  }
37
43
  async createSource(url, metadata, context, bindingsRestricted, quads) {
38
- return new QuerySourceQpf_1.QuerySourceQpf(this.mediatorMetadata, this.mediatorMetadataExtract, this.mediatorDereferenceRdf, await bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, context), this.subjectUri, this.predicateUri, this.objectUri, this.graphUri, url, metadata, bindingsRestricted, quads);
44
+ const dataFactory = context.getSafe(context_entries_1.KeysInitQuery.dataFactory);
45
+ const algebraFactory = new sparqlalgebrajs_1.Factory(dataFactory);
46
+ return new QuerySourceQpf_1.QuerySourceQpf(this.mediatorMetadata, this.mediatorMetadataExtract, this.mediatorDereferenceRdf, dataFactory, algebraFactory, await utils_bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, context, dataFactory), this.subjectUri, this.predicateUri, this.objectUri, this.graphUri, url, metadata, bindingsRestricted, quads);
39
47
  }
40
48
  }
41
49
  exports.ActorQuerySourceIdentifyHypermediaQpf = ActorQuerySourceIdentifyHypermediaQpf;
@@ -1 +1 @@
1
- {"version":3,"file":"ActorQuerySourceIdentifyHypermediaQpf.js","sourceRoot":"","sources":["ActorQuerySourceIdentifyHypermediaQpf.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAS7D,yGAEwD;AAKxD,qDAAkD;AAElD;;GAEG;AACH,MAAa,qCAAsC,SAAQ,yEAAkC;IAU3F,YAAmB,IAAgD;QACjE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAEe,KAAK,CAAC,IAAI,CACxB,MAA4C;QAE5C,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,IAAI,MAAM,CAAC,eAAe,KAAK,OAAO,CAAC,EAAE,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,sCAAsC,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,MAA4C;QAE5C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAC5C,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,eAAe,KAAK,OAAO,CACnC,CAAC;QACF,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,2DAA2D,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,GAAG,CAAC,MAA4C;QAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,6BAA6B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CACpC,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,eAAe,KAAK,OAAO,EAClC,MAAM,CAAC,KAAK,CACb,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,GAAW,EACX,QAA6B,EAC7B,OAAuB,EACvB,kBAA2B,EAC3B,KAAkB;QAElB,OAAO,IAAI,+BAAc,CACvB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,sBAAsB,EAC3B,MAAM,kCAAe,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,EACxE,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,GAAG,EACH,QAAQ,EACR,kBAAkB,EAClB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AA7ED,sFA6EC","sourcesContent":["import { BindingsFactory } from '@comunica/bindings-factory';\nimport type { MediatorDereferenceRdf } from '@comunica/bus-dereference-rdf';\nimport type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';\nimport type {\n IActionQuerySourceIdentifyHypermedia,\n IActorQuerySourceIdentifyHypermediaOutput,\n IActorQuerySourceIdentifyHypermediaArgs,\n IActorQuerySourceIdentifyHypermediaTest,\n} from '@comunica/bus-query-source-identify-hypermedia';\nimport {\n ActorQuerySourceIdentifyHypermedia,\n} from '@comunica/bus-query-source-identify-hypermedia';\nimport type { MediatorRdfMetadata } from '@comunica/bus-rdf-metadata';\nimport type { MediatorRdfMetadataExtract } from '@comunica/bus-rdf-metadata-extract';\nimport type { IActionContext } from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport { QuerySourceQpf } from './QuerySourceQpf';\n\n/**\n * A comunica QPF Query Source Identify Hypermedia Actor.\n */\nexport class ActorQuerySourceIdentifyHypermediaQpf extends ActorQuerySourceIdentifyHypermedia\n implements IActorQuerySourceIdentifyHypermediaQpfArgs {\n public readonly mediatorMetadata: MediatorRdfMetadata;\n public readonly mediatorMetadataExtract: MediatorRdfMetadataExtract;\n public readonly mediatorDereferenceRdf: MediatorDereferenceRdf;\n public readonly mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n public readonly subjectUri: string;\n public readonly predicateUri: string;\n public readonly objectUri: string;\n public readonly graphUri?: string;\n public constructor(args: IActorQuerySourceIdentifyHypermediaQpfArgs) {\n super(args, 'qpf');\n }\n\n public override async test(\n action: IActionQuerySourceIdentifyHypermedia,\n ): Promise<IActorQuerySourceIdentifyHypermediaTest> {\n if (action.forceSourceType && (action.forceSourceType !== 'qpf' && action.forceSourceType !== 'brtpf')) {\n throw new Error(`Actor ${this.name} is not able to handle source type ${action.forceSourceType}.`);\n }\n return this.testMetadata(action);\n }\n\n public async testMetadata(\n action: IActionQuerySourceIdentifyHypermedia,\n ): Promise<IActorQuerySourceIdentifyHypermediaTest> {\n const { searchForm } = await this.createSource(\n action.url,\n action.metadata,\n action.context,\n action.forceSourceType === 'brtpf',\n );\n if (action.handledDatasets && action.handledDatasets[searchForm.dataset]) {\n throw new Error(`Actor ${this.name} can only be applied for the first page of a QPF dataset.`);\n }\n return { filterFactor: 1 };\n }\n\n /**\n * Look for the search form\n * @param {IActionRdfResolveHypermedia} action the metadata to look for the form.\n * @return {Promise<IActorRdfResolveHypermediaOutput>} A promise resolving to a hypermedia form.\n */\n public async run(action: IActionQuerySourceIdentifyHypermedia): Promise<IActorQuerySourceIdentifyHypermediaOutput> {\n this.logInfo(action.context, `Identified as qpf source: ${action.url}`);\n const source = await this.createSource(\n action.url,\n action.metadata,\n action.context,\n action.forceSourceType === 'brtpf',\n action.quads,\n );\n return { source, dataset: source.searchForm.dataset };\n }\n\n protected async createSource(\n url: string,\n metadata: Record<string, any>,\n context: IActionContext,\n bindingsRestricted: boolean,\n quads?: RDF.Stream,\n ): Promise<QuerySourceQpf> {\n return new QuerySourceQpf(\n this.mediatorMetadata,\n this.mediatorMetadataExtract,\n this.mediatorDereferenceRdf,\n await BindingsFactory.create(this.mediatorMergeBindingsContext, context),\n this.subjectUri,\n this.predicateUri,\n this.objectUri,\n this.graphUri,\n url,\n metadata,\n bindingsRestricted,\n quads,\n );\n }\n}\n\nexport interface IActorQuerySourceIdentifyHypermediaQpfArgs extends IActorQuerySourceIdentifyHypermediaArgs {\n /**\n * The metadata mediator\n */\n mediatorMetadata: MediatorRdfMetadata;\n /**\n * The metadata extract mediator\n */\n mediatorMetadataExtract: MediatorRdfMetadataExtract;\n /**\n * The RDF dereference mediator\n */\n mediatorDereferenceRdf: MediatorDereferenceRdf;\n /**\n * A mediator for creating binding context merge handlers\n */\n mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n /**\n * The URI that should be interpreted as subject URI\n * @default {http://www.w3.org/1999/02/22-rdf-syntax-ns#subject}\n */\n subjectUri: string;\n /**\n * The URI that should be interpreted as predicate URI\n * @default {http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate}\n */\n predicateUri: string;\n /**\n * The URI that should be interpreted as object URI\n * @default {http://www.w3.org/1999/02/22-rdf-syntax-ns#object}\n */\n objectUri: string;\n /**\n * The URI that should be interpreted as graph URI\n * @default {http://www.w3.org/ns/sparql-service-description#graph}\n */\n graphUri?: string;\n}\n"]}
1
+ {"version":3,"file":"ActorQuerySourceIdentifyHypermediaQpf.js","sourceRoot":"","sources":["ActorQuerySourceIdentifyHypermediaQpf.ts"],"names":[],"mappings":";;;AAQA,yGAEwD;AAGxD,+DAA0D;AAE1D,yCAAoD;AAEpD,6EAAmE;AAEnE,qDAA0C;AAC1C,qDAAkD;AAElD;;GAEG;AACH,MAAa,qCAAsC,SAAQ,yEAAkC;IAU3F,YAAmB,IAAgD;QACjE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAEe,KAAK,CAAC,IAAI,CACxB,MAA4C;QAE5C,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,IAAI,MAAM,CAAC,eAAe,KAAK,OAAO,CAAC,EAAE,CAAC;YACvG,OAAO,IAAA,eAAQ,EAAC,SAAS,IAAI,CAAC,IAAI,sCAAsC,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,MAA4C;QAE5C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAC5C,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,eAAe,KAAK,OAAO,CACnC,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAA,eAAQ,EAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,OAAO,IAAA,eAAQ,EAAC,SAAS,IAAI,CAAC,IAAI,2DAA2D,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,IAAA,eAAQ,EAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,GAAG,CAAC,MAA4C;QAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,6BAA6B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CACpC,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,eAAe,KAAK,OAAO,EAClC,MAAM,CAAC,KAAK,CACb,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,GAAW,EACX,QAA6B,EAC7B,OAAuB,EACvB,kBAA2B,EAC3B,KAAkB;QAElB,MAAM,WAAW,GAAwB,OAAO,CAAC,OAAO,CAAC,+BAAa,CAAC,WAAW,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,IAAI,yBAAO,CAAC,WAAW,CAAC,CAAC;QAChD,OAAO,IAAI,+BAAc,CACvB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,sBAAsB,EAC3B,WAAW,EACX,cAAc,EACd,MAAM,wCAAe,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,OAAO,EAAE,WAAW,CAAC,EACrF,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,GAAG,EACH,QAAQ,EACR,kBAAkB,EAClB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AApFD,sFAoFC","sourcesContent":["import type { MediatorDereferenceRdf } from '@comunica/bus-dereference-rdf';\nimport type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';\nimport type {\n IActionQuerySourceIdentifyHypermedia,\n IActorQuerySourceIdentifyHypermediaOutput,\n IActorQuerySourceIdentifyHypermediaArgs,\n IActorQuerySourceIdentifyHypermediaTest,\n} from '@comunica/bus-query-source-identify-hypermedia';\nimport {\n ActorQuerySourceIdentifyHypermedia,\n} from '@comunica/bus-query-source-identify-hypermedia';\nimport type { MediatorRdfMetadata } from '@comunica/bus-rdf-metadata';\nimport type { MediatorRdfMetadataExtract } from '@comunica/bus-rdf-metadata-extract';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport type { TestResult } from '@comunica/core';\nimport { failTest, passTest } from '@comunica/core';\nimport type { ComunicaDataFactory, IActionContext } from '@comunica/types';\nimport { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport type * as RDF from '@rdfjs/types';\nimport { Factory } from 'sparqlalgebrajs';\nimport { QuerySourceQpf } from './QuerySourceQpf';\n\n/**\n * A comunica QPF Query Source Identify Hypermedia Actor.\n */\nexport class ActorQuerySourceIdentifyHypermediaQpf extends ActorQuerySourceIdentifyHypermedia\n implements IActorQuerySourceIdentifyHypermediaQpfArgs {\n public readonly mediatorMetadata: MediatorRdfMetadata;\n public readonly mediatorMetadataExtract: MediatorRdfMetadataExtract;\n public readonly mediatorDereferenceRdf: MediatorDereferenceRdf;\n public readonly mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n public readonly subjectUri: string;\n public readonly predicateUri: string;\n public readonly objectUri: string;\n public readonly graphUri?: string;\n public constructor(args: IActorQuerySourceIdentifyHypermediaQpfArgs) {\n super(args, 'qpf');\n }\n\n public override async test(\n action: IActionQuerySourceIdentifyHypermedia,\n ): Promise<TestResult<IActorQuerySourceIdentifyHypermediaTest>> {\n if (action.forceSourceType && (action.forceSourceType !== 'qpf' && action.forceSourceType !== 'brtpf')) {\n return failTest(`Actor ${this.name} is not able to handle source type ${action.forceSourceType}.`);\n }\n return this.testMetadata(action);\n }\n\n public async testMetadata(\n action: IActionQuerySourceIdentifyHypermedia,\n ): Promise<TestResult<IActorQuerySourceIdentifyHypermediaTest>> {\n const { searchForm } = await this.createSource(\n action.url,\n action.metadata,\n action.context,\n action.forceSourceType === 'brtpf',\n );\n if (!searchForm) {\n return failTest('Illegal state: found no TPF/QPF search form anymore in metadata.');\n }\n if (action.handledDatasets && action.handledDatasets[searchForm.dataset]) {\n return failTest(`Actor ${this.name} can only be applied for the first page of a QPF dataset.`);\n }\n return passTest({ filterFactor: 1 });\n }\n\n /**\n * Look for the search form\n * @param {IActionRdfResolveHypermedia} action the metadata to look for the form.\n * @return {Promise<IActorRdfResolveHypermediaOutput>} A promise resolving to a hypermedia form.\n */\n public async run(action: IActionQuerySourceIdentifyHypermedia): Promise<IActorQuerySourceIdentifyHypermediaOutput> {\n this.logInfo(action.context, `Identified as qpf source: ${action.url}`);\n const source = await this.createSource(\n action.url,\n action.metadata,\n action.context,\n action.forceSourceType === 'brtpf',\n action.quads,\n );\n return { source, dataset: source.searchForm.dataset };\n }\n\n protected async createSource(\n url: string,\n metadata: Record<string, any>,\n context: IActionContext,\n bindingsRestricted: boolean,\n quads?: RDF.Stream,\n ): Promise<QuerySourceQpf> {\n const dataFactory: ComunicaDataFactory = context.getSafe(KeysInitQuery.dataFactory);\n const algebraFactory = new Factory(dataFactory);\n return new QuerySourceQpf(\n this.mediatorMetadata,\n this.mediatorMetadataExtract,\n this.mediatorDereferenceRdf,\n dataFactory,\n algebraFactory,\n await BindingsFactory.create(this.mediatorMergeBindingsContext, context, dataFactory),\n this.subjectUri,\n this.predicateUri,\n this.objectUri,\n this.graphUri,\n url,\n metadata,\n bindingsRestricted,\n quads,\n );\n }\n}\n\nexport interface IActorQuerySourceIdentifyHypermediaQpfArgs extends IActorQuerySourceIdentifyHypermediaArgs {\n /**\n * The metadata mediator\n */\n mediatorMetadata: MediatorRdfMetadata;\n /**\n * The metadata extract mediator\n */\n mediatorMetadataExtract: MediatorRdfMetadataExtract;\n /**\n * The RDF dereference mediator\n */\n mediatorDereferenceRdf: MediatorDereferenceRdf;\n /**\n * A mediator for creating binding context merge handlers\n */\n mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n /**\n * The URI that should be interpreted as subject URI\n * @default {http://www.w3.org/1999/02/22-rdf-syntax-ns#subject}\n */\n subjectUri: string;\n /**\n * The URI that should be interpreted as predicate URI\n * @default {http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate}\n */\n predicateUri: string;\n /**\n * The URI that should be interpreted as object URI\n * @default {http://www.w3.org/1999/02/22-rdf-syntax-ns#object}\n */\n objectUri: string;\n /**\n * The URI that should be interpreted as graph URI\n * @default {http://www.w3.org/ns/sparql-service-description#graph}\n */\n graphUri?: string;\n}\n"]}
@@ -1,19 +1,20 @@
1
1
  import type { ISearchForm } from '@comunica/actor-rdf-metadata-extract-hydra-controls';
2
- import type { BindingsFactory } from '@comunica/bindings-factory';
3
2
  import type { MediatorDereferenceRdf } from '@comunica/bus-dereference-rdf';
4
3
  import type { MediatorRdfMetadata } from '@comunica/bus-rdf-metadata';
5
4
  import type { MediatorRdfMetadataExtract } from '@comunica/bus-rdf-metadata-extract';
6
- import type { IQuerySource, BindingsStream, IActionContext, FragmentSelectorShape, IQueryBindingsOptions, MetadataBindings } from '@comunica/types';
5
+ import type { IQuerySource, BindingsStream, IActionContext, FragmentSelectorShape, IQueryBindingsOptions, MetadataBindings, ComunicaDataFactory } from '@comunica/types';
6
+ import type { BindingsFactory } from '@comunica/utils-bindings-factory';
7
7
  import type * as RDF from '@rdfjs/types';
8
8
  import type { AsyncIterator } from 'asynciterator';
9
- import type { Algebra } from 'sparqlalgebrajs';
9
+ import type { Algebra, Factory } from 'sparqlalgebrajs';
10
10
  export declare class QuerySourceQpf implements IQuerySource {
11
- protected static readonly SELECTOR_SHAPE: FragmentSelectorShape;
12
- protected static readonly SELECTOR_SHAPE_BR: FragmentSelectorShape;
11
+ protected readonly selectorShape: FragmentSelectorShape;
13
12
  readonly searchForm: ISearchForm;
14
13
  private readonly mediatorMetadata;
15
14
  private readonly mediatorMetadataExtract;
16
15
  private readonly mediatorDereferenceRdf;
16
+ private readonly dataFactory;
17
+ private readonly algebraFactory;
17
18
  private readonly bindingsFactory;
18
19
  readonly referenceValue: string;
19
20
  private readonly subjectUri;
@@ -24,7 +25,7 @@ export declare class QuerySourceQpf implements IQuerySource {
24
25
  private readonly defaultGraph?;
25
26
  private readonly bindingsRestricted;
26
27
  private readonly cachedQuads;
27
- constructor(mediatorMetadata: MediatorRdfMetadata, mediatorMetadataExtract: MediatorRdfMetadataExtract, mediatorDereferenceRdf: MediatorDereferenceRdf, bindingsFactory: BindingsFactory, subjectUri: string, predicateUri: string, objectUri: string, graphUri: string | undefined, url: string, metadata: Record<string, any>, bindingsRestricted: boolean, initialQuads?: RDF.Stream);
28
+ constructor(mediatorMetadata: MediatorRdfMetadata, mediatorMetadataExtract: MediatorRdfMetadataExtract, mediatorDereferenceRdf: MediatorDereferenceRdf, dataFactory: ComunicaDataFactory, algebraFactory: Factory, bindingsFactory: BindingsFactory, subjectUri: string, predicateUri: string, objectUri: string, graphUri: string | undefined, url: string, metadata: Record<string, any>, bindingsRestricted: boolean, initialQuads?: RDF.Stream);
28
29
  getSelectorShape(): Promise<FragmentSelectorShape>;
29
30
  queryBindings(operation: Algebra.Operation, context: IActionContext, options?: IQueryBindingsOptions): BindingsStream;
30
31
  /**
@@ -3,20 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QuerySourceQpf = void 0;
4
4
  const bus_query_source_identify_1 = require("@comunica/bus-query-source-identify");
5
5
  const context_entries_1 = require("@comunica/context-entries");
6
+ const utils_metadata_1 = require("@comunica/utils-metadata");
6
7
  const asynciterator_1 = require("asynciterator");
7
- const rdf_data_factory_1 = require("rdf-data-factory");
8
8
  const rdf_string_1 = require("rdf-string");
9
9
  const rdf_string_ttl_1 = require("rdf-string-ttl");
10
10
  const rdf_terms_1 = require("rdf-terms");
11
- const sparqlalgebrajs_1 = require("sparqlalgebrajs");
12
- const AF = new sparqlalgebrajs_1.Factory();
13
- const DF = new rdf_data_factory_1.DataFactory();
14
11
  class QuerySourceQpf {
15
- constructor(mediatorMetadata, mediatorMetadataExtract, mediatorDereferenceRdf, bindingsFactory, subjectUri, predicateUri, objectUri, graphUri, url, metadata, bindingsRestricted, initialQuads) {
12
+ constructor(mediatorMetadata, mediatorMetadataExtract, mediatorDereferenceRdf, dataFactory, algebraFactory, bindingsFactory, subjectUri, predicateUri, objectUri, graphUri, url, metadata, bindingsRestricted, initialQuads) {
16
13
  this.referenceValue = url;
17
14
  this.mediatorMetadata = mediatorMetadata;
18
15
  this.mediatorMetadataExtract = mediatorMetadataExtract;
19
16
  this.mediatorDereferenceRdf = mediatorDereferenceRdf;
17
+ this.dataFactory = dataFactory;
18
+ this.algebraFactory = algebraFactory;
20
19
  this.bindingsFactory = bindingsFactory;
21
20
  this.subjectUri = subjectUri;
22
21
  this.predicateUri = predicateUri;
@@ -25,23 +24,48 @@ class QuerySourceQpf {
25
24
  this.url = url;
26
25
  this.bindingsRestricted = bindingsRestricted;
27
26
  this.cachedQuads = {};
28
- const searchForm = this.getSearchForm(metadata);
29
- if (!searchForm) {
30
- throw new Error('Illegal state: found no TPF/QPF search form anymore in metadata.');
31
- }
32
- this.searchForm = searchForm;
33
- this.defaultGraph = metadata.defaultGraph ? DF.namedNode(metadata.defaultGraph) : undefined;
27
+ this.searchForm = this.getSearchForm(metadata);
28
+ this.defaultGraph = metadata.defaultGraph ? this.dataFactory.namedNode(metadata.defaultGraph) : undefined;
34
29
  if (initialQuads) {
35
30
  let wrappedQuads = (0, asynciterator_1.wrap)(initialQuads);
36
31
  if (this.defaultGraph) {
37
32
  wrappedQuads = this.reverseMapQuadsToDefaultGraph(wrappedQuads);
38
33
  }
34
+ metadata = { ...metadata, state: new utils_metadata_1.MetadataValidationState() };
39
35
  wrappedQuads.setProperty('metadata', metadata);
40
- this.cacheQuads(wrappedQuads, DF.variable(''), DF.variable(''), DF.variable(''), DF.variable(''));
36
+ this.cacheQuads(wrappedQuads, this.dataFactory.variable(''), this.dataFactory.variable(''), this.dataFactory.variable(''), this.dataFactory.variable(''));
41
37
  }
38
+ this.selectorShape = this.bindingsRestricted ?
39
+ {
40
+ type: 'operation',
41
+ operation: {
42
+ operationType: 'pattern',
43
+ pattern: this.algebraFactory.createPattern(this.dataFactory.variable('s'), this.dataFactory.variable('p'), this.dataFactory.variable('o'), this.dataFactory.variable('g')),
44
+ },
45
+ variablesOptional: [
46
+ this.dataFactory.variable('s'),
47
+ this.dataFactory.variable('p'),
48
+ this.dataFactory.variable('o'),
49
+ this.dataFactory.variable('g'),
50
+ ],
51
+ filterBindings: true,
52
+ } :
53
+ {
54
+ type: 'operation',
55
+ operation: {
56
+ operationType: 'pattern',
57
+ pattern: this.algebraFactory.createPattern(this.dataFactory.variable('s'), this.dataFactory.variable('p'), this.dataFactory.variable('o'), this.dataFactory.variable('g')),
58
+ },
59
+ variablesOptional: [
60
+ this.dataFactory.variable('s'),
61
+ this.dataFactory.variable('p'),
62
+ this.dataFactory.variable('o'),
63
+ this.dataFactory.variable('g'),
64
+ ],
65
+ };
42
66
  }
43
67
  async getSelectorShape() {
44
- return this.bindingsRestricted ? QuerySourceQpf.SELECTOR_SHAPE_BR : QuerySourceQpf.SELECTOR_SHAPE;
68
+ return this.selectorShape;
45
69
  }
46
70
  queryBindings(operation, context, options) {
47
71
  if (operation.type !== 'pattern') {
@@ -51,7 +75,7 @@ class QuerySourceQpf {
51
75
  // Create an async iterator from the matched quad stream
52
76
  let it = this.match(operation.subject, operation.predicate, operation.object, operation.graph, unionDefaultGraph, context, options);
53
77
  it = (0, bus_query_source_identify_1.filterMatchingQuotedQuads)(operation, it);
54
- return (0, bus_query_source_identify_1.quadsToBindings)(it, operation, this.bindingsFactory, unionDefaultGraph);
78
+ return (0, bus_query_source_identify_1.quadsToBindings)(it, operation, this.dataFactory, this.bindingsFactory, unionDefaultGraph);
55
79
  }
56
80
  /**
57
81
  * Get a first QPF search form.
@@ -121,25 +145,25 @@ class QuerySourceQpf {
121
145
  // If the sd:defaultGraph is not declared on a QPF endpoint
122
146
  if (unionDefaultGraph) {
123
147
  // With union-default-graph, take union of graphs.
124
- graph = DF.variable('g');
148
+ graph = this.dataFactory.variable('g');
125
149
  }
126
150
  else {
127
151
  // Without union-default-graph, the default graph must be empty.
128
152
  const quads = new asynciterator_1.ArrayIterator([], { autoStart: false });
129
153
  quads.setProperty('metadata', {
154
+ state: new utils_metadata_1.MetadataValidationState(),
130
155
  requestTime: 0,
131
156
  cardinality: { type: 'exact', value: 0 },
132
157
  first: null,
133
158
  next: null,
134
159
  last: null,
135
- canContainUndefs: false,
136
160
  });
137
161
  return quads;
138
162
  }
139
163
  }
140
164
  else if (Object.keys(this.searchForm.mappings).length === 3) {
141
165
  // If have a TPF endpoint, set graph to variable so we could get the cached triples
142
- graph = DF.variable('g');
166
+ graph = this.dataFactory.variable('g');
143
167
  }
144
168
  }
145
169
  // Try to emit from cache (skip if filtering bindings)
@@ -171,7 +195,7 @@ class QuerySourceQpf {
171
195
  metadata: rdfMetadataOuput.metadata,
172
196
  requestTime: dereferenceRdfOutput.requestTime,
173
197
  });
174
- quads.setProperty('metadata', { ...metadata, canContainUndefs: false, subsetOf: self.url });
198
+ quads.setProperty('metadata', { ...metadata, state: new utils_metadata_1.MetadataValidationState(), subsetOf: self.url });
175
199
  // While we could resolve this before metadata extraction, we do it afterwards to ensure metadata emission
176
200
  // before the end event is emitted.
177
201
  return rdfMetadataOuput.data;
@@ -181,7 +205,7 @@ class QuerySourceQpf {
181
205
  // The server is free to send any data in its response (such as metadata),
182
206
  // including quads that do not match the given matter.
183
207
  // Therefore, we have to filter away all non-matching quads here.
184
- const actualDefaultGraph = DF.defaultGraph();
208
+ const actualDefaultGraph = this.dataFactory.defaultGraph();
185
209
  let filteredOutput = (0, asynciterator_1.wrap)(dataStream)
186
210
  .transform({
187
211
  filter(quad) {
@@ -225,7 +249,7 @@ class QuerySourceQpf {
225
249
  for (const binding of await filterBindings.bindings.toArray()) {
226
250
  const value = ['('];
227
251
  for (const variable of filterBindings.metadata.variables) {
228
- const term = binding.get(variable);
252
+ const term = binding.get(variable.variable);
229
253
  value.push(term ? (0, rdf_string_ttl_1.termToString)(term) : 'UNDEF');
230
254
  value.push(' ');
231
255
  }
@@ -238,11 +262,11 @@ class QuerySourceQpf {
238
262
  values.push('(<ex:comunica:unknown>)');
239
263
  }
240
264
  // Append to URL (brTPF uses the SPARQL VALUES syntax, without the VALUES prefix)
241
- const valuesUrl = encodeURIComponent(`(${filterBindings.metadata.variables.map(variable => `?${variable.value}`).join(' ')}) { ${values.join(' ')} }`);
265
+ const valuesUrl = encodeURIComponent(`(${filterBindings.metadata.variables.map(variable => `?${variable.variable.value}`).join(' ')}) { ${values.join(' ')} }`);
242
266
  return `${url}&values=${valuesUrl}`;
243
267
  }
244
268
  reverseMapQuadsToDefaultGraph(quads) {
245
- const actualDefaultGraph = DF.defaultGraph();
269
+ const actualDefaultGraph = this.dataFactory.defaultGraph();
246
270
  return quads.map(quad => (0, rdf_terms_1.mapTerms)(quad, (term, key) => key === 'graph' && term.equals(this.defaultGraph) ? actualDefaultGraph : term));
247
271
  }
248
272
  getPatternId(subject, predicate, object, graph) {
@@ -275,33 +299,6 @@ class QuerySourceQpf {
275
299
  }
276
300
  }
277
301
  exports.QuerySourceQpf = QuerySourceQpf;
278
- QuerySourceQpf.SELECTOR_SHAPE = {
279
- type: 'operation',
280
- operation: {
281
- operationType: 'pattern',
282
- pattern: AF.createPattern(DF.variable('s'), DF.variable('p'), DF.variable('o'), DF.variable('g')),
283
- },
284
- variablesOptional: [
285
- DF.variable('s'),
286
- DF.variable('p'),
287
- DF.variable('o'),
288
- DF.variable('g'),
289
- ],
290
- };
291
- QuerySourceQpf.SELECTOR_SHAPE_BR = {
292
- type: 'operation',
293
- operation: {
294
- operationType: 'pattern',
295
- pattern: AF.createPattern(DF.variable('s'), DF.variable('p'), DF.variable('o'), DF.variable('g')),
296
- },
297
- variablesOptional: [
298
- DF.variable('s'),
299
- DF.variable('p'),
300
- DF.variable('o'),
301
- DF.variable('g'),
302
- ],
303
- filterBindings: true,
304
- };
305
302
  function _termToString(term) {
306
303
  return term.termType === 'DefaultGraph' ?
307
304
  // Any character that cannot be present in a URL will do
@@ -1 +1 @@
1
- {"version":3,"file":"QuerySourceQpf.js","sourceRoot":"","sources":["QuerySourceQpf.ts"],"names":[],"mappings":";;;AAGA,mFAAiG;AAGjG,+DAA+D;AAW/D,iDAAuE;AACvE,uDAA+C;AAC/C,2CAA0C;AAC1C,mDAAiE;AACjE,yCAImB;AAEnB,qDAA0C;AAE1C,MAAM,EAAE,GAAG,IAAI,yBAAO,EAAE,CAAC;AACzB,MAAM,EAAE,GAAG,IAAI,8BAAW,EAAgB,CAAC;AAE3C,MAAa,cAAc;IA+CzB,YACE,gBAAqC,EACrC,uBAAmD,EACnD,sBAA8C,EAC9C,eAAgC,EAChC,UAAkB,EAClB,YAAoB,EACpB,SAAiB,EACjB,QAA4B,EAC5B,GAAW,EACX,QAA6B,EAC7B,kBAA2B,EAC3B,YAAyB;QAEzB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,GAA4B,IAAA,oBAAI,EAAW,YAAY,CAAC,CAAC;YACzE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;YAClE,CAAC;YACD,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC;IACpG,CAAC;IAEM,aAAa,CAClB,SAA4B,EAC5B,OAAuB,EACvB,OAA+B;QAE/B,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,CAAC,IAAI,qBAAqB,CAAC,CAAC;QACnG,CAAC;QAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAErF,wDAAwD;QACxD,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CACjB,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,KAAK,EACf,iBAAiB,EACjB,OAAO,EACP,OAAO,CACR,CAAC;QAEF,EAAE,GAAG,IAAA,qDAAyB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAA,2CAAe,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,QAA6B;QAChD,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,QAAQ;gBACf,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ;gBACtC,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,QAAQ;gBACxC,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ;gBACrC,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ;gBACpC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ;gBACxC,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,QAAQ;gBACxC,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ;gBACrC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,OAAO,UAAU,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACI,iBAAiB,CACtB,UAAuB,EACvB,OAAiB,EACjB,SAAmB,EACnB,MAAgB,EAChB,KAAe;QAEf,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG;YACZ,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;YACvC,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3C,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;YACrC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;SACpC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,sFAAsF;YACtF,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU;gBAC9E,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAA,4BAAgB,EAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7G,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAA,yBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAES,KAAK,CACb,OAAiB,EACjB,SAAmB,EACnB,MAAgB,EAChB,KAAe,EACf,iBAA0B,EAC1B,OAAuB,EACvB,OAA+B;QAE/B,wCAAwC;QACxC,0FAA0F;QAC1F,mDAAmD;QACnD,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,aAAa,GAAG,IAAI,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAC5B,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpF,2DAA2D;gBAC3D,IAAI,iBAAiB,EAAE,CAAC;oBACtB,kDAAkD;oBAClD,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,gEAAgE;oBAChE,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAW,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;oBACpE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE;wBAC5B,WAAW,EAAE,CAAC;wBACd,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;wBACxC,KAAK,EAAE,IAAI;wBACX,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,IAAI;wBACV,gBAAgB,EAAE,KAAK;qBACxB,CAAC,CAAC;oBACH,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,mFAAmF;gBACnF,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACtE,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,KAA8B,CAAC;QACnC,MAAM,iBAAiB,GAAG,CAAC,KAAK;YAC9B,IAAI,GAAG,GAAW,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAE7F,wCAAwC;YACxC,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;gBAC5B,GAAG,GAAG,MAAM,IAAI,CAAC,yBAAyB,CACxC,OAAO,EACP,SAAS,EACT,MAAM,EACN,KAAK,EACL,GAAG,EACH,OAAO,CAAC,cAAc,CACvB,CAAC;YACJ,CAAC;YAED,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACzF,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC;YAE/B,yBAAyB;YACzB,MAAM,gBAAgB,GAA4B,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACnF,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,CACpG,CAAC;YAEF,uBAAuB;YACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB;iBACpD,OAAO,CAAC;gBACP,OAAO;gBACP,GAAG;gBACH,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;gBACnC,WAAW,EAAE,oBAAoB,CAAC,WAAW;aAC9C,CAAC,CAAC;YACL,KAAM,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,GAAG,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE7F,0GAA0G;YAC1G,mCAAmC;YACnC,OAAO,gBAAgB,CAAC,IAAI,CAAC;QAC/B,CAAC,CAAC,EAAE,CAAC;QAEL,KAAK,GAAG,IAAI,iCAAiB,CAAC,KAAK,IAAG,EAAE;YACtC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC;YAE3C,0EAA0E;YAC1E,sDAAsD;YACtD,iEAAiE;YACjE,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,cAAc,GAA4B,IAAA,oBAAI,EAAW,UAAU,CAAC;iBACrE,SAAS,CAAC;gBACT,MAAM,CAAC,IAAc;oBACnB,IAAI,IAAA,wBAAY,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;wBAC1D,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,iGAAiG;oBACjG,+EAA+E;oBAC/E,OAAO,aAAa,IAAI,IAAA,wBAAY,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;gBAC7F,CAAC;aACF,CAAC,CAAC;YACL,IAAI,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnD,4EAA4E;gBAC5E,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,cAAc,CAAC;QACxB,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAEzB,mCAAmC;QACnC,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAE,CAAC;IACjE,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,yBAAyB,CACpC,OAAiB,EACjB,SAAmB,EACnB,MAAgB,EAChB,KAAe,EACf,GAAW,EACX,cAAwE;QAExE,mBAAmB;QACnB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,MAAM,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,KAAK,GAAa,CAAE,GAAG,CAAE,CAAC;YAChC,KAAK,MAAM,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACzD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,6BAAe,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,gDAAgD;YAChD,2EAA2E;YAC3E,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAED,iFAAiF;QACjF,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvJ,OAAO,GAAG,GAAG,WAAW,SAAS,EAAE,CAAC;IACtC,CAAC;IAES,6BAA6B,CAAC,KAA8B;QACpE,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC,GAAG,CACd,IAAI,CAAC,EAAE,CAAC,IAAA,oBAAQ,EACd,IAAI,EACJ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAC7F,CACF,CAAC;IACJ,CAAC;IAEM,YAAY,CAAC,OAAiB,EAAE,SAAmB,EAAE,MAAgB,EAAE,KAAe;QAC3F,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,CAAC,EAAE,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;YAChE,CAAC,EAAE,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;YACpE,CAAC,EAAE,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;YAC9D,CAAC,EAAE,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAES,UAAU,CAClB,KAA8B,EAC9B,OAAiB,EACjB,SAAmB,EACnB,MAAgB,EAChB,KAAe;QAEf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAES,cAAc,CAAC,OAAiB,EAAE,SAAmB,EAAE,MAAgB,EAAE,KAAe;QAEhG,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEM,UAAU,CACf,UAA6B,EAC7B,QAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAEM,YAAY,CACjB,UAAuB,EACvB,QAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAEM,SAAS,CACd,UAA0B,EAC1B,QAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;;AA3ZH,wCA4ZC;AA3Z2B,6BAAc,GAA0B;IAChE,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE;QACT,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAClG;IACD,iBAAiB,EAAE;QACjB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;KACjB;CACF,CAAC;AAEwB,gCAAiB,GAA0B;IACnE,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE;QACT,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAClG;IACD,iBAAiB,EAAE;QACjB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;KACjB;IACD,cAAc,EAAE,IAAI;CACrB,CAAC;AAkYJ,SAAS,aAAa,CAAC,IAAc;IACnC,OAAO,IAAI,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAC;QACvC,wDAAwD;QACxD,GAAG,CAAC,CAAC;QACL,IAAA,yBAAY,EAAC,IAAI,CAAC,CAAC;AACvB,CAAC","sourcesContent":["import type { ISearchForm } from '@comunica/actor-rdf-metadata-extract-hydra-controls';\nimport type { BindingsFactory } from '@comunica/bindings-factory';\nimport type { MediatorDereferenceRdf } from '@comunica/bus-dereference-rdf';\nimport { filterMatchingQuotedQuads, quadsToBindings } from '@comunica/bus-query-source-identify';\nimport type { MediatorRdfMetadata, IActorRdfMetadataOutput } from '@comunica/bus-rdf-metadata';\nimport type { MediatorRdfMetadataExtract } from '@comunica/bus-rdf-metadata-extract';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport type {\n IQuerySource,\n BindingsStream,\n IActionContext,\n FragmentSelectorShape,\n IQueryBindingsOptions,\n MetadataBindings,\n} from '@comunica/types';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { ArrayIterator, TransformIterator, wrap } from 'asynciterator';\nimport { DataFactory } from 'rdf-data-factory';\nimport { termToString } from 'rdf-string';\nimport { termToString as termToStringTtl } from 'rdf-string-ttl';\nimport {\n everyTermsNested,\n mapTerms,\n matchPattern,\n} from 'rdf-terms';\nimport type { Algebra } from 'sparqlalgebrajs';\nimport { Factory } from 'sparqlalgebrajs';\n\nconst AF = new Factory();\nconst DF = new DataFactory<RDF.BaseQuad>();\n\nexport class QuerySourceQpf implements IQuerySource {\n protected static readonly SELECTOR_SHAPE: FragmentSelectorShape = {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: AF.createPattern(DF.variable('s'), DF.variable('p'), DF.variable('o'), DF.variable('g')),\n },\n variablesOptional: [\n DF.variable('s'),\n DF.variable('p'),\n DF.variable('o'),\n DF.variable('g'),\n ],\n };\n\n protected static readonly SELECTOR_SHAPE_BR: FragmentSelectorShape = {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: AF.createPattern(DF.variable('s'), DF.variable('p'), DF.variable('o'), DF.variable('g')),\n },\n variablesOptional: [\n DF.variable('s'),\n DF.variable('p'),\n DF.variable('o'),\n DF.variable('g'),\n ],\n filterBindings: true,\n };\n\n public readonly searchForm: ISearchForm;\n\n private readonly mediatorMetadata: MediatorRdfMetadata;\n private readonly mediatorMetadataExtract: MediatorRdfMetadataExtract;\n private readonly mediatorDereferenceRdf: MediatorDereferenceRdf;\n private readonly bindingsFactory: BindingsFactory;\n\n public readonly referenceValue: string;\n private readonly subjectUri: string;\n private readonly predicateUri: string;\n private readonly objectUri: string;\n private readonly graphUri?: string;\n private readonly url: string;\n private readonly defaultGraph?: RDF.NamedNode;\n private readonly bindingsRestricted: boolean;\n private readonly cachedQuads: Record<string, AsyncIterator<RDF.Quad>>;\n\n public constructor(\n mediatorMetadata: MediatorRdfMetadata,\n mediatorMetadataExtract: MediatorRdfMetadataExtract,\n mediatorDereferenceRdf: MediatorDereferenceRdf,\n bindingsFactory: BindingsFactory,\n subjectUri: string,\n predicateUri: string,\n objectUri: string,\n graphUri: string | undefined,\n url: string,\n metadata: Record<string, any>,\n bindingsRestricted: boolean,\n initialQuads?: RDF.Stream,\n ) {\n this.referenceValue = url;\n this.mediatorMetadata = mediatorMetadata;\n this.mediatorMetadataExtract = mediatorMetadataExtract;\n this.mediatorDereferenceRdf = mediatorDereferenceRdf;\n this.bindingsFactory = bindingsFactory;\n this.subjectUri = subjectUri;\n this.predicateUri = predicateUri;\n this.objectUri = objectUri;\n this.graphUri = graphUri;\n this.url = url;\n this.bindingsRestricted = bindingsRestricted;\n this.cachedQuads = {};\n const searchForm = this.getSearchForm(metadata);\n if (!searchForm) {\n throw new Error('Illegal state: found no TPF/QPF search form anymore in metadata.');\n }\n this.searchForm = searchForm;\n this.defaultGraph = metadata.defaultGraph ? DF.namedNode(metadata.defaultGraph) : undefined;\n if (initialQuads) {\n let wrappedQuads: AsyncIterator<RDF.Quad> = wrap<RDF.Quad>(initialQuads);\n if (this.defaultGraph) {\n wrappedQuads = this.reverseMapQuadsToDefaultGraph(wrappedQuads);\n }\n wrappedQuads.setProperty('metadata', metadata);\n this.cacheQuads(wrappedQuads, DF.variable(''), DF.variable(''), DF.variable(''), DF.variable(''));\n }\n }\n\n public async getSelectorShape(): Promise<FragmentSelectorShape> {\n return this.bindingsRestricted ? QuerySourceQpf.SELECTOR_SHAPE_BR : QuerySourceQpf.SELECTOR_SHAPE;\n }\n\n public queryBindings(\n operation: Algebra.Operation,\n context: IActionContext,\n options?: IQueryBindingsOptions,\n ): BindingsStream {\n if (operation.type !== 'pattern') {\n throw new Error(`Attempted to pass non-pattern operation '${operation.type}' to QuerySourceQpf`);\n }\n\n const unionDefaultGraph = Boolean(context.get(KeysQueryOperation.unionDefaultGraph));\n\n // Create an async iterator from the matched quad stream\n let it = this.match(\n operation.subject,\n operation.predicate,\n operation.object,\n operation.graph,\n unionDefaultGraph,\n context,\n options,\n );\n\n it = filterMatchingQuotedQuads(operation, it);\n return quadsToBindings(it, operation, this.bindingsFactory, unionDefaultGraph);\n }\n\n /**\n * Get a first QPF search form.\n * @param {{[p: string]: any}} metadata A metadata object.\n * @return {ISearchForm} A search form, or null if none could be found.\n */\n public getSearchForm(metadata: Record<string, any>): ISearchForm | undefined {\n if (!metadata.searchForms || !metadata.searchForms.values) {\n return;\n }\n\n // Find a quad pattern or triple pattern search form\n const { searchForms } = metadata;\n for (const searchForm of searchForms.values) {\n if (this.graphUri &&\n this.subjectUri in searchForm.mappings &&\n this.predicateUri in searchForm.mappings &&\n this.objectUri in searchForm.mappings &&\n this.graphUri in searchForm.mappings &&\n Object.keys(searchForm.mappings).length === 4) {\n return searchForm;\n }\n if (this.subjectUri in searchForm.mappings &&\n this.predicateUri in searchForm.mappings &&\n this.objectUri in searchForm.mappings &&\n Object.keys(searchForm.mappings).length === 3) {\n return searchForm;\n }\n }\n }\n\n /**\n * Create a QPF fragment IRI for the given quad pattern.\n * @param {ISearchForm} searchForm A search form.\n * @param {Term} subject A term.\n * @param {Term} predicate A term.\n * @param {Term} object A term.\n * @param {Term} graph A term.\n * @return {string} A URI.\n */\n public createFragmentUri(\n searchForm: ISearchForm,\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n ): string {\n const entries: Record<string, string> = {};\n const input = [\n { uri: this.subjectUri, term: subject },\n { uri: this.predicateUri, term: predicate },\n { uri: this.objectUri, term: object },\n { uri: this.graphUri, term: graph },\n ];\n for (const entry of input) {\n // If bindingsRestricted, also pass variables, so the server knows how to bind values.\n if (entry.uri && (this.bindingsRestricted || (entry.term.termType !== 'Variable' &&\n (entry.term.termType !== 'Quad' || everyTermsNested(entry.term, value => value.termType !== 'Variable'))))) {\n entries[entry.uri] = termToString(entry.term);\n }\n }\n return searchForm.getUri(entries);\n }\n\n protected match(\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n unionDefaultGraph: boolean,\n context: IActionContext,\n options?: IQueryBindingsOptions,\n ): AsyncIterator<RDF.Quad> {\n // If we are querying the default graph,\n // and the source has an overridden value for the default graph (such as QPF can provide),\n // we override the graph parameter with that value.\n let modifiedGraph = false;\n if (graph.termType === 'DefaultGraph') {\n if (this.defaultGraph) {\n modifiedGraph = true;\n graph = this.defaultGraph;\n } else if (Object.keys(this.searchForm.mappings).length === 4 && !this.defaultGraph) {\n // If the sd:defaultGraph is not declared on a QPF endpoint\n if (unionDefaultGraph) {\n // With union-default-graph, take union of graphs.\n graph = DF.variable('g');\n } else {\n // Without union-default-graph, the default graph must be empty.\n const quads = new ArrayIterator<RDF.Quad>([], { autoStart: false });\n quads.setProperty('metadata', {\n requestTime: 0,\n cardinality: { type: 'exact', value: 0 },\n first: null,\n next: null,\n last: null,\n canContainUndefs: false,\n });\n return quads;\n }\n } else if (Object.keys(this.searchForm.mappings).length === 3) {\n // If have a TPF endpoint, set graph to variable so we could get the cached triples\n graph = DF.variable('g');\n }\n }\n\n // Try to emit from cache (skip if filtering bindings)\n if (!options?.filterBindings) {\n const cached = this.getCachedQuads(subject, predicate, object, graph);\n if (cached) {\n return cached;\n }\n }\n\n // Kickstart metadata collection, because the quads iterator is lazy\n // eslint-disable-next-line ts/no-this-alias\n const self = this;\n let quads: AsyncIterator<RDF.Quad>;\n const dataStreamPromise = (async function() {\n let url: string = self.createFragmentUri(self.searchForm, subject, predicate, object, graph);\n\n // Handle bindings-restricted interfaces\n if (options?.filterBindings) {\n url = await self.getBindingsRestrictedLink(\n subject,\n predicate,\n object,\n graph,\n url,\n options.filterBindings,\n );\n }\n\n const dereferenceRdfOutput = await self.mediatorDereferenceRdf.mediate({ context, url });\n url = dereferenceRdfOutput.url;\n\n // Determine the metadata\n const rdfMetadataOuput: IActorRdfMetadataOutput = await self.mediatorMetadata.mediate(\n { context, url, quads: dereferenceRdfOutput.data, triples: dereferenceRdfOutput.metadata?.triples },\n );\n\n // Extract the metadata\n const { metadata } = await self.mediatorMetadataExtract\n .mediate({\n context,\n url,\n metadata: rdfMetadataOuput.metadata,\n requestTime: dereferenceRdfOutput.requestTime,\n });\n quads!.setProperty('metadata', { ...metadata, canContainUndefs: false, subsetOf: self.url });\n\n // While we could resolve this before metadata extraction, we do it afterwards to ensure metadata emission\n // before the end event is emitted.\n return rdfMetadataOuput.data;\n })();\n\n quads = new TransformIterator(async() => {\n const dataStream = await dataStreamPromise;\n\n // The server is free to send any data in its response (such as metadata),\n // including quads that do not match the given matter.\n // Therefore, we have to filter away all non-matching quads here.\n const actualDefaultGraph = DF.defaultGraph();\n let filteredOutput: AsyncIterator<RDF.Quad> = wrap<RDF.Quad>(dataStream)\n .transform({\n filter(quad: RDF.Quad) {\n if (matchPattern(quad, subject, predicate, object, graph)) {\n return true;\n }\n // Special case: if we are querying in the default graph, and we had an overridden default graph,\n // also accept that incoming triples may be defined in the actual default graph\n return modifiedGraph && matchPattern(quad, subject, predicate, object, actualDefaultGraph);\n },\n });\n if (modifiedGraph || graph.termType === 'Variable') {\n // Reverse-map the overridden default graph back to the actual default graph\n filteredOutput = this.reverseMapQuadsToDefaultGraph(filteredOutput);\n }\n\n return filteredOutput;\n }, { autoStart: false });\n\n // Skip cache if filtering bindings\n if (options?.filterBindings) {\n return quads;\n }\n\n this.cacheQuads(quads, subject, predicate, object, graph);\n return this.getCachedQuads(subject, predicate, object, graph)!;\n }\n\n /**\n * If we add bindings for brTPF, append it to the URL.\n * We have to hardcode this because brTPF doesn't expose a URL template for passing bindings.\n * @param subject The subject.\n * @param predicate The predicate.\n * @param object The object.\n * @param graph The graph.\n * @param url The original QPF URL.\n * @param filterBindings The bindings to restrict with.\n * @param filterBindings.bindings The bindings stream.\n * @param filterBindings.metadata The bindings metadata.\n * @protected\n */\n public async getBindingsRestrictedLink(\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n url: string,\n filterBindings: { bindings: BindingsStream; metadata: MetadataBindings },\n ): Promise<string> {\n // Determine values\n const values: string[] = [];\n for (const binding of await filterBindings.bindings.toArray()) {\n const value: string[] = [ '(' ];\n for (const variable of filterBindings.metadata.variables) {\n const term = binding.get(variable);\n value.push(term ? termToStringTtl(term) : 'UNDEF');\n value.push(' ');\n }\n value.push(')');\n values.push(value.join(''));\n }\n\n if (values.length === 0) {\n // This is a hack to force an empty result page,\n // because the brTPF server returns a server error when passing 0 bindings.\n values.push('(<ex:comunica:unknown>)');\n }\n\n // Append to URL (brTPF uses the SPARQL VALUES syntax, without the VALUES prefix)\n const valuesUrl = encodeURIComponent(`(${filterBindings.metadata.variables.map(variable => `?${variable.value}`).join(' ')}) { ${values.join(' ')} }`);\n return `${url}&values=${valuesUrl}`;\n }\n\n protected reverseMapQuadsToDefaultGraph(quads: AsyncIterator<RDF.Quad>): AsyncIterator<RDF.Quad> {\n const actualDefaultGraph = DF.defaultGraph();\n return quads.map(\n quad => mapTerms(\n quad,\n (term, key) => key === 'graph' && term.equals(this.defaultGraph) ? actualDefaultGraph : term,\n ),\n );\n }\n\n public getPatternId(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, graph: RDF.Term): string {\n return JSON.stringify({\n s: subject.termType === 'Variable' ? '' : _termToString(subject),\n p: predicate.termType === 'Variable' ? '' : _termToString(predicate),\n o: object.termType === 'Variable' ? '' : _termToString(object),\n g: graph.termType === 'Variable' ? '' : _termToString(graph),\n });\n }\n\n protected cacheQuads(\n quads: AsyncIterator<RDF.Quad>,\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n ): void {\n const patternId = this.getPatternId(subject, predicate, object, graph);\n this.cachedQuads[patternId] = quads.clone();\n }\n\n protected getCachedQuads(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, graph: RDF.Term):\n AsyncIterator<RDF.Quad> | undefined {\n const patternId = this.getPatternId(subject, predicate, object, graph);\n const quads = this.cachedQuads[patternId];\n if (quads) {\n return quads.clone();\n }\n }\n\n public queryQuads(\n _operation: Algebra.Operation,\n _context: IActionContext,\n ): AsyncIterator<RDF.Quad> {\n throw new Error('queryQuads is not implemented in QuerySourceQpf');\n }\n\n public queryBoolean(\n _operation: Algebra.Ask,\n _context: IActionContext,\n ): Promise<boolean> {\n throw new Error('queryBoolean is not implemented in QuerySourceQpf');\n }\n\n public queryVoid(\n _operation: Algebra.Update,\n _context: IActionContext,\n ): Promise<void> {\n throw new Error('queryVoid is not implemented in QuerySourceQpf');\n }\n}\n\nfunction _termToString(term: RDF.Term): string {\n return term.termType === 'DefaultGraph' ?\n // Any character that cannot be present in a URL will do\n '|' :\n termToString(term);\n}\n"]}
1
+ {"version":3,"file":"QuerySourceQpf.js","sourceRoot":"","sources":["QuerySourceQpf.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ISearchForm } from '@comunica/actor-rdf-metadata-extract-hydra-controls';\nimport type { MediatorDereferenceRdf } from '@comunica/bus-dereference-rdf';\nimport { filterMatchingQuotedQuads, quadsToBindings } from '@comunica/bus-query-source-identify';\nimport type { MediatorRdfMetadata, IActorRdfMetadataOutput } from '@comunica/bus-rdf-metadata';\nimport type { MediatorRdfMetadataExtract } from '@comunica/bus-rdf-metadata-extract';\nimport { KeysQueryOperation } from '@comunica/context-entries';\nimport type {\n IQuerySource,\n BindingsStream,\n IActionContext,\n FragmentSelectorShape,\n IQueryBindingsOptions,\n MetadataBindings,\n ComunicaDataFactory,\n} from '@comunica/types';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { MetadataValidationState } from '@comunica/utils-metadata';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { ArrayIterator, TransformIterator, wrap } from 'asynciterator';\nimport { termToString } from 'rdf-string';\nimport { termToString as termToStringTtl } from 'rdf-string-ttl';\nimport {\n everyTermsNested,\n mapTerms,\n matchPattern,\n} from 'rdf-terms';\nimport type { Algebra, Factory } from 'sparqlalgebrajs';\n\nexport class QuerySourceQpf implements IQuerySource {\n protected readonly selectorShape: FragmentSelectorShape;\n\n public readonly searchForm: ISearchForm;\n\n private readonly mediatorMetadata: MediatorRdfMetadata;\n private readonly mediatorMetadataExtract: MediatorRdfMetadataExtract;\n private readonly mediatorDereferenceRdf: MediatorDereferenceRdf;\n private readonly dataFactory: ComunicaDataFactory;\n private readonly algebraFactory: Factory;\n private readonly bindingsFactory: BindingsFactory;\n\n public readonly referenceValue: string;\n private readonly subjectUri: string;\n private readonly predicateUri: string;\n private readonly objectUri: string;\n private readonly graphUri?: string;\n private readonly url: string;\n private readonly defaultGraph?: RDF.NamedNode;\n private readonly bindingsRestricted: boolean;\n private readonly cachedQuads: Record<string, AsyncIterator<RDF.Quad>>;\n\n public constructor(\n mediatorMetadata: MediatorRdfMetadata,\n mediatorMetadataExtract: MediatorRdfMetadataExtract,\n mediatorDereferenceRdf: MediatorDereferenceRdf,\n dataFactory: ComunicaDataFactory,\n algebraFactory: Factory,\n bindingsFactory: BindingsFactory,\n subjectUri: string,\n predicateUri: string,\n objectUri: string,\n graphUri: string | undefined,\n url: string,\n metadata: Record<string, any>,\n bindingsRestricted: boolean,\n initialQuads?: RDF.Stream,\n ) {\n this.referenceValue = url;\n this.mediatorMetadata = mediatorMetadata;\n this.mediatorMetadataExtract = mediatorMetadataExtract;\n this.mediatorDereferenceRdf = mediatorDereferenceRdf;\n this.dataFactory = dataFactory;\n this.algebraFactory = algebraFactory;\n this.bindingsFactory = bindingsFactory;\n this.subjectUri = subjectUri;\n this.predicateUri = predicateUri;\n this.objectUri = objectUri;\n this.graphUri = graphUri;\n this.url = url;\n this.bindingsRestricted = bindingsRestricted;\n this.cachedQuads = {};\n this.searchForm = this.getSearchForm(metadata)!;\n this.defaultGraph = metadata.defaultGraph ? this.dataFactory.namedNode(metadata.defaultGraph) : undefined;\n if (initialQuads) {\n let wrappedQuads: AsyncIterator<RDF.Quad> = wrap<RDF.Quad>(initialQuads);\n if (this.defaultGraph) {\n wrappedQuads = this.reverseMapQuadsToDefaultGraph(wrappedQuads);\n }\n metadata = { ...metadata, state: new MetadataValidationState() };\n wrappedQuads.setProperty('metadata', metadata);\n this.cacheQuads(\n wrappedQuads,\n this.dataFactory.variable(''),\n this.dataFactory.variable(''),\n this.dataFactory.variable(''),\n this.dataFactory.variable(''),\n );\n }\n\n this.selectorShape = this.bindingsRestricted ?\n {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: this.algebraFactory.createPattern(\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n this.dataFactory.variable('g'),\n ),\n },\n variablesOptional: [\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n this.dataFactory.variable('g'),\n ],\n filterBindings: true,\n } :\n {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: this.algebraFactory.createPattern(\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n this.dataFactory.variable('g'),\n ),\n },\n variablesOptional: [\n this.dataFactory.variable('s'),\n this.dataFactory.variable('p'),\n this.dataFactory.variable('o'),\n this.dataFactory.variable('g'),\n ],\n };\n }\n\n public async getSelectorShape(): Promise<FragmentSelectorShape> {\n return this.selectorShape;\n }\n\n public queryBindings(\n operation: Algebra.Operation,\n context: IActionContext,\n options?: IQueryBindingsOptions,\n ): BindingsStream {\n if (operation.type !== 'pattern') {\n throw new Error(`Attempted to pass non-pattern operation '${operation.type}' to QuerySourceQpf`);\n }\n\n const unionDefaultGraph = Boolean(context.get(KeysQueryOperation.unionDefaultGraph));\n\n // Create an async iterator from the matched quad stream\n let it = this.match(\n operation.subject,\n operation.predicate,\n operation.object,\n operation.graph,\n unionDefaultGraph,\n context,\n options,\n );\n\n it = filterMatchingQuotedQuads(operation, it);\n return quadsToBindings(it, operation, this.dataFactory, this.bindingsFactory, unionDefaultGraph);\n }\n\n /**\n * Get a first QPF search form.\n * @param {{[p: string]: any}} metadata A metadata object.\n * @return {ISearchForm} A search form, or null if none could be found.\n */\n public getSearchForm(metadata: Record<string, any>): ISearchForm | undefined {\n if (!metadata.searchForms || !metadata.searchForms.values) {\n return;\n }\n\n // Find a quad pattern or triple pattern search form\n const { searchForms } = metadata;\n for (const searchForm of searchForms.values) {\n if (this.graphUri &&\n this.subjectUri in searchForm.mappings &&\n this.predicateUri in searchForm.mappings &&\n this.objectUri in searchForm.mappings &&\n this.graphUri in searchForm.mappings &&\n Object.keys(searchForm.mappings).length === 4) {\n return searchForm;\n }\n if (this.subjectUri in searchForm.mappings &&\n this.predicateUri in searchForm.mappings &&\n this.objectUri in searchForm.mappings &&\n Object.keys(searchForm.mappings).length === 3) {\n return searchForm;\n }\n }\n }\n\n /**\n * Create a QPF fragment IRI for the given quad pattern.\n * @param {ISearchForm} searchForm A search form.\n * @param {Term} subject A term.\n * @param {Term} predicate A term.\n * @param {Term} object A term.\n * @param {Term} graph A term.\n * @return {string} A URI.\n */\n public createFragmentUri(\n searchForm: ISearchForm,\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n ): string {\n const entries: Record<string, string> = {};\n const input = [\n { uri: this.subjectUri, term: subject },\n { uri: this.predicateUri, term: predicate },\n { uri: this.objectUri, term: object },\n { uri: this.graphUri, term: graph },\n ];\n for (const entry of input) {\n // If bindingsRestricted, also pass variables, so the server knows how to bind values.\n if (entry.uri && (this.bindingsRestricted || (entry.term.termType !== 'Variable' &&\n (entry.term.termType !== 'Quad' || everyTermsNested(entry.term, value => value.termType !== 'Variable'))))) {\n entries[entry.uri] = termToString(entry.term);\n }\n }\n return searchForm.getUri(entries);\n }\n\n protected match(\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n unionDefaultGraph: boolean,\n context: IActionContext,\n options?: IQueryBindingsOptions,\n ): AsyncIterator<RDF.Quad> {\n // If we are querying the default graph,\n // and the source has an overridden value for the default graph (such as QPF can provide),\n // we override the graph parameter with that value.\n let modifiedGraph = false;\n if (graph.termType === 'DefaultGraph') {\n if (this.defaultGraph) {\n modifiedGraph = true;\n graph = this.defaultGraph;\n } else if (Object.keys(this.searchForm.mappings).length === 4 && !this.defaultGraph) {\n // If the sd:defaultGraph is not declared on a QPF endpoint\n if (unionDefaultGraph) {\n // With union-default-graph, take union of graphs.\n graph = this.dataFactory.variable('g');\n } else {\n // Without union-default-graph, the default graph must be empty.\n const quads = new ArrayIterator<RDF.Quad>([], { autoStart: false });\n quads.setProperty('metadata', {\n state: new MetadataValidationState(),\n requestTime: 0,\n cardinality: { type: 'exact', value: 0 },\n first: null,\n next: null,\n last: null,\n });\n return quads;\n }\n } else if (Object.keys(this.searchForm.mappings).length === 3) {\n // If have a TPF endpoint, set graph to variable so we could get the cached triples\n graph = this.dataFactory.variable('g');\n }\n }\n\n // Try to emit from cache (skip if filtering bindings)\n if (!options?.filterBindings) {\n const cached = this.getCachedQuads(subject, predicate, object, graph);\n if (cached) {\n return cached;\n }\n }\n\n // Kickstart metadata collection, because the quads iterator is lazy\n // eslint-disable-next-line ts/no-this-alias\n const self = this;\n let quads: AsyncIterator<RDF.Quad>;\n const dataStreamPromise = (async function() {\n let url: string = self.createFragmentUri(self.searchForm, subject, predicate, object, graph);\n\n // Handle bindings-restricted interfaces\n if (options?.filterBindings) {\n url = await self.getBindingsRestrictedLink(\n subject,\n predicate,\n object,\n graph,\n url,\n options.filterBindings,\n );\n }\n\n const dereferenceRdfOutput = await self.mediatorDereferenceRdf.mediate({ context, url });\n url = dereferenceRdfOutput.url;\n\n // Determine the metadata\n const rdfMetadataOuput: IActorRdfMetadataOutput = await self.mediatorMetadata.mediate(\n { context, url, quads: dereferenceRdfOutput.data, triples: dereferenceRdfOutput.metadata?.triples },\n );\n\n // Extract the metadata\n const { metadata } = await self.mediatorMetadataExtract\n .mediate({\n context,\n url,\n metadata: rdfMetadataOuput.metadata,\n requestTime: dereferenceRdfOutput.requestTime,\n });\n quads!.setProperty(\n 'metadata',\n { ...metadata, state: new MetadataValidationState(), subsetOf: self.url },\n );\n\n // While we could resolve this before metadata extraction, we do it afterwards to ensure metadata emission\n // before the end event is emitted.\n return rdfMetadataOuput.data;\n })();\n\n quads = new TransformIterator(async() => {\n const dataStream = await dataStreamPromise;\n\n // The server is free to send any data in its response (such as metadata),\n // including quads that do not match the given matter.\n // Therefore, we have to filter away all non-matching quads here.\n const actualDefaultGraph = this.dataFactory.defaultGraph();\n let filteredOutput: AsyncIterator<RDF.Quad> = wrap<RDF.Quad>(dataStream)\n .transform({\n filter(quad: RDF.Quad) {\n if (matchPattern(quad, subject, predicate, object, graph)) {\n return true;\n }\n // Special case: if we are querying in the default graph, and we had an overridden default graph,\n // also accept that incoming triples may be defined in the actual default graph\n return modifiedGraph && matchPattern(quad, subject, predicate, object, actualDefaultGraph);\n },\n });\n if (modifiedGraph || graph.termType === 'Variable') {\n // Reverse-map the overridden default graph back to the actual default graph\n filteredOutput = this.reverseMapQuadsToDefaultGraph(filteredOutput);\n }\n\n return filteredOutput;\n }, { autoStart: false });\n\n // Skip cache if filtering bindings\n if (options?.filterBindings) {\n return quads;\n }\n\n this.cacheQuads(quads, subject, predicate, object, graph);\n return this.getCachedQuads(subject, predicate, object, graph)!;\n }\n\n /**\n * If we add bindings for brTPF, append it to the URL.\n * We have to hardcode this because brTPF doesn't expose a URL template for passing bindings.\n * @param subject The subject.\n * @param predicate The predicate.\n * @param object The object.\n * @param graph The graph.\n * @param url The original QPF URL.\n * @param filterBindings The bindings to restrict with.\n * @param filterBindings.bindings The bindings stream.\n * @param filterBindings.metadata The bindings metadata.\n * @protected\n */\n public async getBindingsRestrictedLink(\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n url: string,\n filterBindings: { bindings: BindingsStream; metadata: MetadataBindings },\n ): Promise<string> {\n // Determine values\n const values: string[] = [];\n for (const binding of await filterBindings.bindings.toArray()) {\n const value: string[] = [ '(' ];\n for (const variable of filterBindings.metadata.variables) {\n const term = binding.get(variable.variable);\n value.push(term ? termToStringTtl(term) : 'UNDEF');\n value.push(' ');\n }\n value.push(')');\n values.push(value.join(''));\n }\n\n if (values.length === 0) {\n // This is a hack to force an empty result page,\n // because the brTPF server returns a server error when passing 0 bindings.\n values.push('(<ex:comunica:unknown>)');\n }\n\n // Append to URL (brTPF uses the SPARQL VALUES syntax, without the VALUES prefix)\n const valuesUrl = encodeURIComponent(`(${filterBindings.metadata.variables.map(variable => `?${variable.variable.value}`).join(' ')}) { ${values.join(' ')} }`);\n return `${url}&values=${valuesUrl}`;\n }\n\n protected reverseMapQuadsToDefaultGraph(quads: AsyncIterator<RDF.Quad>): AsyncIterator<RDF.Quad> {\n const actualDefaultGraph = this.dataFactory.defaultGraph();\n return quads.map(\n quad => mapTerms(\n quad,\n (term, key) => key === 'graph' && term.equals(this.defaultGraph) ? actualDefaultGraph : term,\n ),\n );\n }\n\n public getPatternId(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, graph: RDF.Term): string {\n return JSON.stringify({\n s: subject.termType === 'Variable' ? '' : _termToString(subject),\n p: predicate.termType === 'Variable' ? '' : _termToString(predicate),\n o: object.termType === 'Variable' ? '' : _termToString(object),\n g: graph.termType === 'Variable' ? '' : _termToString(graph),\n });\n }\n\n protected cacheQuads(\n quads: AsyncIterator<RDF.Quad>,\n subject: RDF.Term,\n predicate: RDF.Term,\n object: RDF.Term,\n graph: RDF.Term,\n ): void {\n const patternId = this.getPatternId(subject, predicate, object, graph);\n this.cachedQuads[patternId] = quads.clone();\n }\n\n protected getCachedQuads(subject: RDF.Term, predicate: RDF.Term, object: RDF.Term, graph: RDF.Term):\n AsyncIterator<RDF.Quad> | undefined {\n const patternId = this.getPatternId(subject, predicate, object, graph);\n const quads = this.cachedQuads[patternId];\n if (quads) {\n return quads.clone();\n }\n }\n\n public queryQuads(\n _operation: Algebra.Operation,\n _context: IActionContext,\n ): AsyncIterator<RDF.Quad> {\n throw new Error('queryQuads is not implemented in QuerySourceQpf');\n }\n\n public queryBoolean(\n _operation: Algebra.Ask,\n _context: IActionContext,\n ): Promise<boolean> {\n throw new Error('queryBoolean is not implemented in QuerySourceQpf');\n }\n\n public queryVoid(\n _operation: Algebra.Update,\n _context: IActionContext,\n ): Promise<void> {\n throw new Error('queryVoid is not implemented in QuerySourceQpf');\n }\n}\n\nfunction _termToString(term: RDF.Term): string {\n return term.termType === 'DefaultGraph' ?\n // Any character that cannot be present in a URL will do\n '|' :\n termToString(term);\n}\n"]}
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@comunica/actor-query-source-identify-hypermedia-qpf",
3
- "version": "3.2.1",
3
+ "version": "3.2.4-alpha.47.0",
4
4
  "description": "A qpf query-source-identify-hypermedia actor",
5
5
  "lsd:module": true,
6
6
  "license": "MIT",
7
+ "funding": {
8
+ "type": "opencollective",
9
+ "url": "https://opencollective.com/comunica-association"
10
+ },
7
11
  "homepage": "https://comunica.dev/",
8
12
  "repository": {
9
13
  "type": "git",
@@ -37,23 +41,24 @@
37
41
  "build:components": "componentsjs-generator"
38
42
  },
39
43
  "dependencies": {
40
- "@comunica/actor-rdf-metadata-extract-hydra-controls": "^3.2.1",
41
- "@comunica/bindings-factory": "^3.2.1",
42
- "@comunica/bus-dereference-rdf": "^3.2.1",
43
- "@comunica/bus-merge-bindings-context": "^3.2.1",
44
- "@comunica/bus-query-source-identify": "^3.2.1",
45
- "@comunica/bus-query-source-identify-hypermedia": "^3.2.1",
46
- "@comunica/bus-rdf-metadata": "^3.2.1",
47
- "@comunica/bus-rdf-metadata-extract": "^3.2.1",
48
- "@comunica/context-entries": "^3.2.1",
49
- "@comunica/types": "^3.2.1",
44
+ "@comunica/actor-rdf-metadata-extract-hydra-controls": "3.2.4-alpha.47.0",
45
+ "@comunica/bus-dereference-rdf": "3.2.4-alpha.47.0",
46
+ "@comunica/bus-merge-bindings-context": "3.2.4-alpha.47.0",
47
+ "@comunica/bus-query-source-identify": "3.2.4-alpha.47.0",
48
+ "@comunica/bus-query-source-identify-hypermedia": "3.2.4-alpha.47.0",
49
+ "@comunica/bus-rdf-metadata": "3.2.4-alpha.47.0",
50
+ "@comunica/bus-rdf-metadata-extract": "3.2.4-alpha.47.0",
51
+ "@comunica/context-entries": "3.2.4-alpha.47.0",
52
+ "@comunica/core": "3.2.4-alpha.47.0",
53
+ "@comunica/types": "3.2.4-alpha.47.0",
54
+ "@comunica/utils-bindings-factory": "3.2.4-alpha.47.0",
55
+ "@comunica/utils-metadata": "3.2.4-alpha.47.0",
50
56
  "@rdfjs/types": "*",
51
57
  "asynciterator": "^3.9.0",
52
- "rdf-data-factory": "^1.1.1",
53
58
  "rdf-string": "^1.6.1",
54
59
  "rdf-string-ttl": "^1.3.2",
55
60
  "rdf-terms": "^1.11.0",
56
- "sparqlalgebrajs": "^4.3.7"
61
+ "sparqlalgebrajs": "^4.3.8"
57
62
  },
58
- "gitHead": "f558377c3cefbd1606c51ede80440b862e7dda4f"
63
+ "gitHead": "85bd4c5cf07dfc293ebbc3a1416b70e2db8bfc48"
59
64
  }