@comunica/actor-query-source-identify-hypermedia-sparql 4.4.1 → 4.4.2-alpha.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ActorQuerySourceIdentifyHypermediaSparql.jsonld +0 -0
- package/components/QuerySourceSparql.jsonld +48 -88
- package/components/components.jsonld +0 -0
- package/components/context.jsonld +7 -21
- package/lib/ActorQuerySourceIdentifyHypermediaSparql.d.ts +0 -0
- package/lib/ActorQuerySourceIdentifyHypermediaSparql.js +3 -3
- package/lib/ActorQuerySourceIdentifyHypermediaSparql.js.map +1 -1
- package/lib/QuerySourceSparql.d.ts +25 -8
- package/lib/QuerySourceSparql.js +130 -68
- package/lib/QuerySourceSparql.js.map +1 -1
- package/lib/index.d.ts +0 -0
- package/lib/index.js +0 -0
- package/lib/index.js.map +0 -0
- package/package.json +18 -15
|
File without changes
|
|
@@ -15,12 +15,6 @@
|
|
|
15
15
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_url",
|
|
16
16
|
"range": "xsd:string"
|
|
17
17
|
},
|
|
18
|
-
{
|
|
19
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_algebraFactory",
|
|
20
|
-
"range": {
|
|
21
|
-
"@type": "ParameterRangeWildcard"
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
18
|
{
|
|
25
19
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_forceHttpGet",
|
|
26
20
|
"range": "xsd:boolean"
|
|
@@ -45,10 +39,31 @@
|
|
|
45
39
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_forceGetIfUrlLengthBelow",
|
|
46
40
|
"range": "xsd:number"
|
|
47
41
|
},
|
|
42
|
+
{
|
|
43
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_algebraFactory",
|
|
44
|
+
"range": "urn:npm:@traqula/algebra-transformations-1-1:AlgebraFactory"
|
|
45
|
+
},
|
|
48
46
|
{
|
|
49
47
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_bindingsFactory",
|
|
50
48
|
"range": "urn:npm:@comunica/utils-bindings-factory:BindingsFactory"
|
|
51
49
|
},
|
|
50
|
+
{
|
|
51
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata",
|
|
52
|
+
"range": {
|
|
53
|
+
"@type": "ParameterRangeCollectEntries",
|
|
54
|
+
"parameterRangeCollectEntriesParameters": [
|
|
55
|
+
{
|
|
56
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata_key"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata_value",
|
|
60
|
+
"range": {
|
|
61
|
+
"@type": "ParameterRangeWildcard"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
},
|
|
52
67
|
{
|
|
53
68
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_context",
|
|
54
69
|
"range": "ct:components/IActionContext.jsonld#IActionContext"
|
|
@@ -77,30 +92,6 @@
|
|
|
77
92
|
]
|
|
78
93
|
}
|
|
79
94
|
},
|
|
80
|
-
{
|
|
81
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_defaultGraph",
|
|
82
|
-
"range": {
|
|
83
|
-
"@type": "ParameterRangeUnion",
|
|
84
|
-
"parameterRangeElements": [
|
|
85
|
-
"xsd:string",
|
|
86
|
-
{
|
|
87
|
-
"@type": "ParameterRangeUndefined"
|
|
88
|
-
}
|
|
89
|
-
]
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_unionDefaultGraph",
|
|
94
|
-
"range": {
|
|
95
|
-
"@type": "ParameterRangeUnion",
|
|
96
|
-
"parameterRangeElements": [
|
|
97
|
-
"xsd:boolean",
|
|
98
|
-
{
|
|
99
|
-
"@type": "ParameterRangeUndefined"
|
|
100
|
-
}
|
|
101
|
-
]
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
95
|
{
|
|
105
96
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_dataFactory",
|
|
106
97
|
"range": {
|
|
@@ -112,54 +103,14 @@
|
|
|
112
103
|
}
|
|
113
104
|
]
|
|
114
105
|
}
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_extensionFunctions",
|
|
118
|
-
"range": {
|
|
119
|
-
"@type": "ParameterRangeUnion",
|
|
120
|
-
"parameterRangeElements": [
|
|
121
|
-
{
|
|
122
|
-
"@type": "ParameterRangeArray",
|
|
123
|
-
"parameterRangeValue": "xsd:string"
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"@type": "ParameterRangeUndefined"
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
}
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_postAccepted",
|
|
133
|
-
"range": {
|
|
134
|
-
"@type": "ParameterRangeUnion",
|
|
135
|
-
"parameterRangeElements": [
|
|
136
|
-
{
|
|
137
|
-
"@type": "ParameterRangeArray",
|
|
138
|
-
"parameterRangeValue": "xsd:string"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
"@type": "ParameterRangeUndefined"
|
|
142
|
-
}
|
|
143
|
-
]
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_datasets",
|
|
148
|
-
"range": {
|
|
149
|
-
"@type": "ParameterRangeUnion",
|
|
150
|
-
"parameterRangeElements": [
|
|
151
|
-
{
|
|
152
|
-
"@type": "ParameterRangeArray",
|
|
153
|
-
"parameterRangeValue": "ct:components/IDataset.jsonld#IDataset"
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"@type": "ParameterRangeUndefined"
|
|
157
|
-
}
|
|
158
|
-
]
|
|
159
|
-
}
|
|
160
106
|
}
|
|
161
107
|
],
|
|
162
108
|
"memberFields": [
|
|
109
|
+
{
|
|
110
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_queryStringGenerator",
|
|
111
|
+
"memberFieldName": "queryStringGenerator",
|
|
112
|
+
"range": "urn:npm:@traqula/generator-sparql-1-2:Generator"
|
|
113
|
+
},
|
|
163
114
|
{
|
|
164
115
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_referenceValue",
|
|
165
116
|
"memberFieldName": "referenceValue",
|
|
@@ -201,6 +152,10 @@
|
|
|
201
152
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_unionDefaultGraph",
|
|
202
153
|
"memberFieldName": "unionDefaultGraph"
|
|
203
154
|
},
|
|
155
|
+
{
|
|
156
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_propertyFeatures",
|
|
157
|
+
"memberFieldName": "propertyFeatures"
|
|
158
|
+
},
|
|
204
159
|
{
|
|
205
160
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_datasets",
|
|
206
161
|
"memberFieldName": "datasets"
|
|
@@ -241,6 +196,10 @@
|
|
|
241
196
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_constructor",
|
|
242
197
|
"memberFieldName": "constructor"
|
|
243
198
|
},
|
|
199
|
+
{
|
|
200
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_getFilterFactor",
|
|
201
|
+
"memberFieldName": "getFilterFactor"
|
|
202
|
+
},
|
|
244
203
|
{
|
|
245
204
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_getSelectorShape",
|
|
246
205
|
"memberFieldName": "getSelectorShape"
|
|
@@ -273,6 +232,10 @@
|
|
|
273
232
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_estimateOperationCardinality",
|
|
274
233
|
"memberFieldName": "estimateOperationCardinality"
|
|
275
234
|
},
|
|
235
|
+
{
|
|
236
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_operationUsesPropertyFeatures",
|
|
237
|
+
"memberFieldName": "operationUsesPropertyFeatures"
|
|
238
|
+
},
|
|
276
239
|
{
|
|
277
240
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql__member_addBindingsToOperation",
|
|
278
241
|
"memberFieldName": "addBindingsToOperation"
|
|
@@ -343,19 +306,16 @@
|
|
|
343
306
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_forceGetIfUrlLengthBelow"
|
|
344
307
|
},
|
|
345
308
|
{
|
|
346
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
},
|
|
357
|
-
{
|
|
358
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_postAccepted"
|
|
309
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata__constructorArgument",
|
|
310
|
+
"fields": [
|
|
311
|
+
{
|
|
312
|
+
"collectEntries": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata",
|
|
313
|
+
"key": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata_key",
|
|
314
|
+
"value": {
|
|
315
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata_value"
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
]
|
|
359
319
|
}
|
|
360
320
|
]
|
|
361
321
|
}
|
|
File without changes
|
|
@@ -114,9 +114,6 @@
|
|
|
114
114
|
"url": {
|
|
115
115
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_url"
|
|
116
116
|
},
|
|
117
|
-
"algebraFactory": {
|
|
118
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_algebraFactory"
|
|
119
|
-
},
|
|
120
117
|
"forceHttpGet": {
|
|
121
118
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_forceHttpGet"
|
|
122
119
|
},
|
|
@@ -135,9 +132,16 @@
|
|
|
135
132
|
"forceGetIfUrlLengthBelow": {
|
|
136
133
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_forceGetIfUrlLengthBelow"
|
|
137
134
|
},
|
|
135
|
+
"algebraFactory": {
|
|
136
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_algebraFactory"
|
|
137
|
+
},
|
|
138
138
|
"bindingsFactory": {
|
|
139
139
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_bindingsFactory"
|
|
140
140
|
},
|
|
141
|
+
"metadata": {
|
|
142
|
+
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_metadata",
|
|
143
|
+
"@container": "@list"
|
|
144
|
+
},
|
|
141
145
|
"context": {
|
|
142
146
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_context"
|
|
143
147
|
},
|
|
@@ -147,26 +151,8 @@
|
|
|
147
151
|
"bindMethod": {
|
|
148
152
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_bindMethod"
|
|
149
153
|
},
|
|
150
|
-
"defaultGraph": {
|
|
151
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_defaultGraph"
|
|
152
|
-
},
|
|
153
|
-
"unionDefaultGraph": {
|
|
154
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_unionDefaultGraph"
|
|
155
|
-
},
|
|
156
154
|
"dataFactory": {
|
|
157
155
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_dataFactory"
|
|
158
|
-
},
|
|
159
|
-
"extensionFunctions": {
|
|
160
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_extensionFunctions",
|
|
161
|
-
"@container": "@list"
|
|
162
|
-
},
|
|
163
|
-
"postAccepted": {
|
|
164
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_postAccepted",
|
|
165
|
-
"@container": "@list"
|
|
166
|
-
},
|
|
167
|
-
"datasets": {
|
|
168
|
-
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_datasets",
|
|
169
|
-
"@container": "@list"
|
|
170
156
|
}
|
|
171
157
|
}
|
|
172
158
|
}
|
|
File without changes
|
|
@@ -4,8 +4,8 @@ exports.ActorQuerySourceIdentifyHypermediaSparql = void 0;
|
|
|
4
4
|
const bus_query_source_identify_hypermedia_1 = require("@comunica/bus-query-source-identify-hypermedia");
|
|
5
5
|
const context_entries_1 = require("@comunica/context-entries");
|
|
6
6
|
const core_1 = require("@comunica/core");
|
|
7
|
+
const utils_algebra_1 = require("@comunica/utils-algebra");
|
|
7
8
|
const utils_bindings_factory_1 = require("@comunica/utils-bindings-factory");
|
|
8
|
-
const sparqlalgebrajs_1 = require("sparqlalgebrajs");
|
|
9
9
|
const QuerySourceSparql_1 = require("./QuerySourceSparql");
|
|
10
10
|
/**
|
|
11
11
|
* A comunica SPARQL Query Source Identify Hypermedia Actor.
|
|
@@ -24,11 +24,11 @@ class ActorQuerySourceIdentifyHypermediaSparql extends bus_query_source_identify
|
|
|
24
24
|
async run(action) {
|
|
25
25
|
this.logInfo(action.context, `Identified ${action.url} as sparql source with service URL: ${action.metadata.sparqlService || action.url}`);
|
|
26
26
|
const dataFactory = action.context.getSafe(context_entries_1.KeysInitQuery.dataFactory);
|
|
27
|
-
const algebraFactory = new
|
|
27
|
+
const algebraFactory = new utils_algebra_1.AlgebraFactory(dataFactory);
|
|
28
28
|
const isSingularSource = action.context.get(context_entries_1.KeysQueryOperation.querySources)?.length === 1;
|
|
29
29
|
const source = new QuerySourceSparql_1.QuerySourceSparql((action.forceSourceType ?? this.forceSourceType) ? action.url : action.metadata.sparqlService || action.url, action.context, this.mediatorHttp, this.bindMethod, dataFactory, algebraFactory, await utils_bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, action.context, dataFactory), this.forceHttpGet, this.cacheSize, this.countTimeout,
|
|
30
30
|
// Cardinalities can be infinity when we're querying just a single source.
|
|
31
|
-
this.cardinalityCountQueries && !isSingularSource, this.cardinalityEstimateConstruction, this.forceGetIfUrlLengthBelow, action.metadata
|
|
31
|
+
this.cardinalityCountQueries && !isSingularSource, this.cardinalityEstimateConstruction, this.forceGetIfUrlLengthBelow, action.metadata);
|
|
32
32
|
return { source };
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorQuerySourceIdentifyHypermediaSparql.js","sourceRoot":"","sources":["ActorQuerySourceIdentifyHypermediaSparql.ts"],"names":[],"mappings":";;;AAQA,yGAEwD;AACxD,+DAA8E;AAE9E,yCAAoD;AAEpD,6EAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"ActorQuerySourceIdentifyHypermediaSparql.js","sourceRoot":"","sources":["ActorQuerySourceIdentifyHypermediaSparql.ts"],"names":[],"mappings":";;;AAQA,yGAEwD;AACxD,+DAA8E;AAE9E,yCAAoD;AAEpD,2DAAyD;AACzD,6EAAmE;AACnE,2DAAwD;AAExD;;GAEG;AACH,MAAa,wCAAyC,SAAQ,yEAAkC;IAa9F,YAAmB,IAAmD;QACpE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,MAA4C;QAE5C,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa;YACpF,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,OAAO,IAAA,eAAQ,EAAC,SAAS,IAAI,CAAC,IAAI,0EAA0E,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,IAAA,eAAQ,EAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,MAA4C;QAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,MAAM,CAAC,GAAG,uCAAuC,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAE3I,MAAM,WAAW,GAAwB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,+BAAa,CAAC,WAAW,CAAC,CAAC;QAC3F,MAAM,cAAc,GAAG,IAAI,8BAAc,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,qCAAiB,CAClC,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,GAAG,EAC3G,MAAM,CAAC,OAAO,EACd,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,WAAW,EACX,cAAc,EACd,MAAM,wCAAe,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAC5F,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,YAAY;QACjB,0EAA0E;QAC1E,IAAI,CAAC,uBAAuB,IAAI,CAAC,gBAAgB,EACjD,IAAI,CAAC,+BAA+B,EACpC,IAAI,CAAC,wBAAwB,EAC7B,MAAM,CAAC,QAAQ,CAChB,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AApDD,4FAoDC","sourcesContent":["import type { MediatorHttp } from '@comunica/bus-http';\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 { KeysInitQuery, KeysQueryOperation } from '@comunica/context-entries';\nimport type { TestResult } from '@comunica/core';\nimport { failTest, passTest } from '@comunica/core';\nimport type { ComunicaDataFactory } from '@comunica/types';\nimport { AlgebraFactory } from '@comunica/utils-algebra';\nimport { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { QuerySourceSparql } from './QuerySourceSparql';\n\n/**\n * A comunica SPARQL Query Source Identify Hypermedia Actor.\n */\nexport class ActorQuerySourceIdentifyHypermediaSparql extends ActorQuerySourceIdentifyHypermedia {\n public readonly mediatorHttp: MediatorHttp;\n public readonly mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n public readonly checkUrlSuffix: boolean;\n public readonly forceHttpGet: boolean;\n public readonly cacheSize: number;\n public readonly forceSourceType: boolean;\n public readonly bindMethod: BindMethod;\n public readonly countTimeout: number;\n public readonly cardinalityCountQueries: boolean;\n public readonly cardinalityEstimateConstruction: boolean;\n public readonly forceGetIfUrlLengthBelow: number;\n\n public constructor(args: IActorQuerySourceIdentifyHypermediaSparqlArgs) {\n super(args, 'sparql');\n }\n\n public async testMetadata(\n action: IActionQuerySourceIdentifyHypermedia,\n ): Promise<TestResult<IActorQuerySourceIdentifyHypermediaTest>> {\n if (!action.forceSourceType && !this.forceSourceType && !action.metadata.sparqlService &&\n !(this.checkUrlSuffix && (action.url.endsWith('/sparql') || action.url.endsWith('/sparql/')))) {\n return failTest(`Actor ${this.name} could not detect a SPARQL service description or URL ending on /sparql.`);\n }\n return passTest({ filterFactor: 1 });\n }\n\n public async run(action: IActionQuerySourceIdentifyHypermedia): Promise<IActorQuerySourceIdentifyHypermediaOutput> {\n this.logInfo(action.context, `Identified ${action.url} as sparql source with service URL: ${action.metadata.sparqlService || action.url}`);\n\n const dataFactory: ComunicaDataFactory = action.context.getSafe(KeysInitQuery.dataFactory);\n const algebraFactory = new AlgebraFactory(dataFactory);\n const isSingularSource = action.context.get(KeysQueryOperation.querySources)?.length === 1;\n const source = new QuerySourceSparql(\n (action.forceSourceType ?? this.forceSourceType) ? action.url : action.metadata.sparqlService || action.url,\n action.context,\n this.mediatorHttp,\n this.bindMethod,\n dataFactory,\n algebraFactory,\n await BindingsFactory.create(this.mediatorMergeBindingsContext, action.context, dataFactory),\n this.forceHttpGet,\n this.cacheSize,\n this.countTimeout,\n // Cardinalities can be infinity when we're querying just a single source.\n this.cardinalityCountQueries && !isSingularSource,\n this.cardinalityEstimateConstruction,\n this.forceGetIfUrlLengthBelow,\n action.metadata,\n );\n return { source };\n }\n}\n\nexport interface IActorQuerySourceIdentifyHypermediaSparqlArgs extends IActorQuerySourceIdentifyHypermediaArgs {\n /**\n * The HTTP mediator\n */\n mediatorHttp: MediatorHttp;\n /**\n * A mediator for creating binding context merge handlers\n */\n mediatorMergeBindingsContext: MediatorMergeBindingsContext;\n /**\n * If URLs ending with '/sparql' should also be considered SPARQL endpoints.\n * @default {true}\n */\n checkUrlSuffix: boolean;\n /**\n * If non-update queries should be sent via HTTP GET instead of POST\n * @default {false}\n */\n forceHttpGet: boolean;\n /**\n * The cache size for COUNT queries.\n * @range {integer}\n * @default {1024}\n */\n cacheSize?: number;\n /**\n * If provided, forces the source type of a source.\n * @default {false}\n */\n forceSourceType?: boolean;\n /**\n * The query operation for communicating bindings.\n * @default {values}\n */\n bindMethod: BindMethod;\n /**\n * Timeout in ms of how long count queries are allowed to take.\n * If the timeout is reached, an infinity cardinality is returned.\n * @default {3000}\n */\n countTimeout: number;\n /**\n * If count queries should be sent to obtain the cardinality of (sub)queries.\n * If set to false, resulting cardinalities will always be considered infinity.\n * @default {true}\n */\n cardinalityCountQueries: boolean;\n /**\n * If estimates for queries should be constructed locally from sub-query cardinalities.\n * If set to false, count queries will used for cardinality estimation at all levels.\n * @default {false}\n */\n cardinalityEstimateConstruction: boolean;\n /**\n * Force an HTTP GET instead of default POST (when forceHttpGet is false)\n * when the url length (including encoded query) is below this number.\n * @default {600}\n */\n forceGetIfUrlLengthBelow?: number;\n}\n\nexport type BindMethod = 'values' | 'union' | 'filter';\n"]}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import type { MediatorHttp } from '@comunica/bus-http';
|
|
2
|
-
import type { BindingsStream, ComunicaDataFactory, FragmentSelectorShape, IActionContext,
|
|
2
|
+
import type { BindingsStream, ComunicaDataFactory, FragmentSelectorShape, IActionContext, IQueryBindingsOptions, IQuerySource, MetadataBindings, QueryResultCardinality } from '@comunica/types';
|
|
3
|
+
import { Algebra } from '@comunica/utils-algebra';
|
|
4
|
+
import type { AlgebraFactory } from '@comunica/utils-algebra';
|
|
3
5
|
import type { BindingsFactory } from '@comunica/utils-bindings-factory';
|
|
4
6
|
import type * as RDF from '@rdfjs/types';
|
|
7
|
+
import { Generator } from '@traqula/generator-sparql-1-2';
|
|
5
8
|
import type { AsyncIterator } from 'asynciterator';
|
|
6
|
-
import type { Factory } from 'sparqlalgebrajs';
|
|
7
|
-
import { Algebra } from 'sparqlalgebrajs';
|
|
8
9
|
import type { BindMethod } from './ActorQuerySourceIdentifyHypermediaSparql';
|
|
9
10
|
export declare class QuerySourceSparql implements IQuerySource {
|
|
11
|
+
/**
|
|
12
|
+
* A query string generator that has an indentation of -1,
|
|
13
|
+
* meaning it does not print newlines as part of its query structure.
|
|
14
|
+
* We also put the indentIncrements to 0 so it does not change the indentation.
|
|
15
|
+
* @protected
|
|
16
|
+
*/
|
|
17
|
+
protected static readonly queryStringGenerator: Generator;
|
|
10
18
|
readonly referenceValue: string;
|
|
11
19
|
private readonly url;
|
|
12
20
|
private readonly context;
|
|
@@ -17,6 +25,7 @@ export declare class QuerySourceSparql implements IQuerySource {
|
|
|
17
25
|
private readonly cardinalityEstimateConstruction;
|
|
18
26
|
private readonly defaultGraph?;
|
|
19
27
|
private readonly unionDefaultGraph;
|
|
28
|
+
private readonly propertyFeatures?;
|
|
20
29
|
private readonly datasets?;
|
|
21
30
|
readonly extensionFunctions?: string[];
|
|
22
31
|
private readonly dataFactory;
|
|
@@ -25,12 +34,13 @@ export declare class QuerySourceSparql implements IQuerySource {
|
|
|
25
34
|
private readonly endpointFetcher;
|
|
26
35
|
private readonly cache;
|
|
27
36
|
private lastSourceContext;
|
|
28
|
-
constructor(url: string, context: IActionContext, mediatorHttp: MediatorHttp, bindMethod: BindMethod, dataFactory: ComunicaDataFactory, algebraFactory:
|
|
37
|
+
constructor(url: string, context: IActionContext, mediatorHttp: MediatorHttp, bindMethod: BindMethod, dataFactory: ComunicaDataFactory, algebraFactory: AlgebraFactory, bindingsFactory: BindingsFactory, forceHttpGet: boolean, cacheSize: number, countTimeout: number, cardinalityCountQueries: boolean, cardinalityEstimateConstruction: boolean, forceGetIfUrlLengthBelow: number, metadata: Record<string, any>);
|
|
38
|
+
getFilterFactor(): Promise<number>;
|
|
29
39
|
getSelectorShape(): Promise<FragmentSelectorShape>;
|
|
30
40
|
queryBindings(operationIn: Algebra.Operation, context: IActionContext, options?: IQueryBindingsOptions): BindingsStream;
|
|
31
41
|
queryQuads(operation: Algebra.Operation, context: IActionContext): AsyncIterator<RDF.Quad>;
|
|
32
42
|
queryBoolean(operation: Algebra.Ask, context: IActionContext): Promise<boolean>;
|
|
33
|
-
queryVoid(operation: Algebra.
|
|
43
|
+
queryVoid(operation: Algebra.Operation, context: IActionContext): Promise<void>;
|
|
34
44
|
protected attachMetadata(target: AsyncIterator<any>, context: IActionContext, operationPromise: Promise<Algebra.Operation>): void;
|
|
35
45
|
/**
|
|
36
46
|
* Convert an algebra operation into a query string, and if the operation is a simple triple pattern,
|
|
@@ -45,6 +55,13 @@ export declare class QuerySourceSparql implements IQuerySource {
|
|
|
45
55
|
* @param {Algebra.Operation} operation A query operation.
|
|
46
56
|
*/
|
|
47
57
|
estimateOperationCardinality(operation: Algebra.Operation): Promise<QueryResultCardinality>;
|
|
58
|
+
/**
|
|
59
|
+
* Checks whether the provided operation makes use of this endpoint's property features,
|
|
60
|
+
* if the endpoint has property features detected.
|
|
61
|
+
* @param {Algebra.Operation} operation The operation to check.
|
|
62
|
+
* @returns {boolean} Whether the operation makes use of property features.
|
|
63
|
+
*/
|
|
64
|
+
operationUsesPropertyFeatures(operation: Algebra.Operation): boolean;
|
|
48
65
|
/**
|
|
49
66
|
* Create an operation that includes the bindings from the given bindings stream.
|
|
50
67
|
* @param algebraFactory The algebra factory.
|
|
@@ -54,7 +71,7 @@ export declare class QuerySourceSparql implements IQuerySource {
|
|
|
54
71
|
* @param addBindings.bindings The bindings stream.
|
|
55
72
|
* @param addBindings.metadata The bindings metadata.
|
|
56
73
|
*/
|
|
57
|
-
static addBindingsToOperation(algebraFactory:
|
|
74
|
+
static addBindingsToOperation(algebraFactory: AlgebraFactory, bindMethod: BindMethod, operation: Algebra.Operation, addBindings: {
|
|
58
75
|
bindings: BindingsStream;
|
|
59
76
|
metadata: MetadataBindings;
|
|
60
77
|
}): Promise<Algebra.Operation>;
|
|
@@ -65,7 +82,7 @@ export declare class QuerySourceSparql implements IQuerySource {
|
|
|
65
82
|
* @param {RDF.Variable[]} variables The variables in scope for the operation.
|
|
66
83
|
* @return {string} A select query string.
|
|
67
84
|
*/
|
|
68
|
-
static operationToSelectQuery(algebraFactory:
|
|
85
|
+
static operationToSelectQuery(algebraFactory: AlgebraFactory, operation: Algebra.Operation, variables: RDF.Variable[]): string;
|
|
69
86
|
/**
|
|
70
87
|
* Convert an operation to a count query for the number of matching triples for this pattern.
|
|
71
88
|
* @param dataFactory The data factory.
|
|
@@ -73,7 +90,7 @@ export declare class QuerySourceSparql implements IQuerySource {
|
|
|
73
90
|
* @param {Algebra.Operation} operation A query operation.
|
|
74
91
|
* @return {string} A count query string.
|
|
75
92
|
*/
|
|
76
|
-
static operationToCountQuery(dataFactory: ComunicaDataFactory, algebraFactory:
|
|
93
|
+
static operationToCountQuery(dataFactory: ComunicaDataFactory, algebraFactory: AlgebraFactory, operation: Algebra.Operation): string;
|
|
77
94
|
/**
|
|
78
95
|
* Convert an operation to a query for this pattern.
|
|
79
96
|
* @param {Algebra.Operation} operation A query operation.
|
package/lib/QuerySourceSparql.js
CHANGED
|
@@ -3,15 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.QuerySourceSparql = void 0;
|
|
4
4
|
const context_entries_1 = require("@comunica/context-entries");
|
|
5
5
|
const core_1 = require("@comunica/core");
|
|
6
|
+
const utils_algebra_1 = require("@comunica/utils-algebra");
|
|
6
7
|
const utils_metadata_1 = require("@comunica/utils-metadata");
|
|
7
8
|
const utils_query_operation_1 = require("@comunica/utils-query-operation");
|
|
9
|
+
const algebra_sparql_1_2_1 = require("@traqula/algebra-sparql-1-2");
|
|
10
|
+
const core_2 = require("@traqula/core");
|
|
11
|
+
const generator_sparql_1_2_1 = require("@traqula/generator-sparql-1-2");
|
|
8
12
|
const asynciterator_1 = require("asynciterator");
|
|
9
13
|
const fetch_sparql_endpoint_1 = require("fetch-sparql-endpoint");
|
|
10
14
|
const lru_cache_1 = require("lru-cache");
|
|
11
15
|
const rdf_terms_1 = require("rdf-terms");
|
|
12
|
-
const sparqlalgebrajs_1 = require("sparqlalgebrajs");
|
|
13
16
|
class QuerySourceSparql {
|
|
14
|
-
constructor(url, context, mediatorHttp, bindMethod, dataFactory, algebraFactory, bindingsFactory, forceHttpGet, cacheSize, countTimeout, cardinalityCountQueries, cardinalityEstimateConstruction, forceGetIfUrlLengthBelow,
|
|
17
|
+
constructor(url, context, mediatorHttp, bindMethod, dataFactory, algebraFactory, bindingsFactory, forceHttpGet, cacheSize, countTimeout, cardinalityCountQueries, cardinalityEstimateConstruction, forceGetIfUrlLengthBelow, metadata) {
|
|
15
18
|
this.referenceValue = url;
|
|
16
19
|
this.url = url;
|
|
17
20
|
this.context = context;
|
|
@@ -26,7 +29,7 @@ class QuerySourceSparql {
|
|
|
26
29
|
prefixVariableQuestionMark: true,
|
|
27
30
|
dataFactory,
|
|
28
31
|
forceGetIfUrlLengthBelow,
|
|
29
|
-
directPost: postAccepted && !postAccepted.includes('application/x-www-form-urlencoded'),
|
|
32
|
+
directPost: metadata.postAccepted && !metadata.postAccepted.includes('application/x-www-form-urlencoded'),
|
|
30
33
|
});
|
|
31
34
|
this.cache = cacheSize > 0 ?
|
|
32
35
|
new lru_cache_1.LRUCache({ max: cacheSize }) :
|
|
@@ -34,10 +37,14 @@ class QuerySourceSparql {
|
|
|
34
37
|
this.countTimeout = countTimeout;
|
|
35
38
|
this.cardinalityCountQueries = cardinalityCountQueries;
|
|
36
39
|
this.cardinalityEstimateConstruction = cardinalityEstimateConstruction;
|
|
37
|
-
this.defaultGraph = defaultGraph;
|
|
38
|
-
this.unionDefaultGraph = unionDefaultGraph ?? false;
|
|
39
|
-
this.datasets = datasets;
|
|
40
|
-
this.extensionFunctions = extensionFunctions;
|
|
40
|
+
this.defaultGraph = metadata.defaultGraph;
|
|
41
|
+
this.unionDefaultGraph = metadata.unionDefaultGraph ?? false;
|
|
42
|
+
this.datasets = metadata.datasets;
|
|
43
|
+
this.extensionFunctions = metadata.extensionFunctions;
|
|
44
|
+
this.propertyFeatures = metadata.propertyFeatures ? new Set(metadata.propertyFeatures) : undefined;
|
|
45
|
+
}
|
|
46
|
+
async getFilterFactor() {
|
|
47
|
+
return 1;
|
|
41
48
|
}
|
|
42
49
|
async getSelectorShape() {
|
|
43
50
|
const innerDisjunction = {
|
|
@@ -55,7 +62,7 @@ class QuerySourceSparql {
|
|
|
55
62
|
type: 'operation',
|
|
56
63
|
operation: {
|
|
57
64
|
operationType: 'type',
|
|
58
|
-
type:
|
|
65
|
+
type: utils_algebra_1.Algebra.Types.EXPRESSION,
|
|
59
66
|
extensionFunctions: this.extensionFunctions,
|
|
60
67
|
},
|
|
61
68
|
joinBindings: true,
|
|
@@ -70,11 +77,11 @@ class QuerySourceSparql {
|
|
|
70
77
|
type: 'negation',
|
|
71
78
|
child: {
|
|
72
79
|
type: 'operation',
|
|
73
|
-
operation: { operationType: 'type', type:
|
|
80
|
+
operation: { operationType: 'type', type: utils_algebra_1.Algebra.Types.DISTINCT },
|
|
74
81
|
children: [
|
|
75
82
|
{
|
|
76
83
|
type: 'operation',
|
|
77
|
-
operation: { operationType: 'type', type:
|
|
84
|
+
operation: { operationType: 'type', type: utils_algebra_1.Algebra.Types.CONSTRUCT },
|
|
78
85
|
},
|
|
79
86
|
],
|
|
80
87
|
},
|
|
@@ -94,7 +101,7 @@ class QuerySourceSparql {
|
|
|
94
101
|
const bindings = new asynciterator_1.TransformIterator(async () => {
|
|
95
102
|
// Prepare queries
|
|
96
103
|
const operation = await operationPromise;
|
|
97
|
-
const variables =
|
|
104
|
+
const variables = utils_algebra_1.algebraUtils.inScopeVariables(operation);
|
|
98
105
|
const queryString = context.get(context_entries_1.KeysInitQuery.queryString);
|
|
99
106
|
const queryFormat = context.getSafe(context_entries_1.KeysInitQuery.queryFormat);
|
|
100
107
|
const selectQuery = !options?.joinBindings && queryString && queryFormat.language === 'sparql' ?
|
|
@@ -116,6 +123,11 @@ class QuerySourceSparql {
|
|
|
116
123
|
return quads;
|
|
117
124
|
}
|
|
118
125
|
queryBoolean(operation, context) {
|
|
126
|
+
// Shortcut the ASK query to return true when supported propertyFeature predicates are used in it.
|
|
127
|
+
if (this.operationUsesPropertyFeatures(operation)) {
|
|
128
|
+
return Promise.resolve(true);
|
|
129
|
+
}
|
|
130
|
+
// Without propertyFeature overlap, perform the actual ASK query.
|
|
119
131
|
this.lastSourceContext = this.context.merge(context);
|
|
120
132
|
const query = context.get(context_entries_1.KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);
|
|
121
133
|
const promise = this.endpointFetcher.fetchAsk(this.url, query);
|
|
@@ -136,7 +148,7 @@ class QuerySourceSparql {
|
|
|
136
148
|
new Promise(async (resolve, reject) => {
|
|
137
149
|
try {
|
|
138
150
|
const operation = await operationPromise;
|
|
139
|
-
const variablesScoped =
|
|
151
|
+
const variablesScoped = utils_algebra_1.algebraUtils.inScopeVariables(operation);
|
|
140
152
|
const countQuery = this.operationToNormalizedCountQuery(operation);
|
|
141
153
|
const undefVariables = QuerySourceSparql.getOperationUndefs(operation);
|
|
142
154
|
variablesCount = variablesScoped.map(variable => ({
|
|
@@ -168,7 +180,8 @@ class QuerySourceSparql {
|
|
|
168
180
|
const varCount = this.dataFactory.variable('count');
|
|
169
181
|
const bindingsStream = await this
|
|
170
182
|
.queryBindingsRemote(this.url, countQuery, [varCount], context, []);
|
|
171
|
-
bindingsStream
|
|
183
|
+
bindingsStream
|
|
184
|
+
.on('data', (bindings) => {
|
|
172
185
|
clearTimeout(timeoutHandler);
|
|
173
186
|
const count = bindings.get(varCount);
|
|
174
187
|
const cardinality = {
|
|
@@ -185,27 +198,25 @@ class QuerySourceSparql {
|
|
|
185
198
|
}
|
|
186
199
|
}
|
|
187
200
|
return resolve(cardinality);
|
|
188
|
-
})
|
|
189
|
-
|
|
201
|
+
})
|
|
202
|
+
.on('error', () => {
|
|
190
203
|
clearTimeout(timeoutHandler);
|
|
191
204
|
resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });
|
|
192
|
-
})
|
|
193
|
-
|
|
205
|
+
})
|
|
206
|
+
.on('end', () => {
|
|
194
207
|
clearTimeout(timeoutHandler);
|
|
195
208
|
resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });
|
|
196
209
|
});
|
|
197
210
|
}
|
|
198
211
|
catch (error) {
|
|
199
|
-
|
|
212
|
+
reject(error);
|
|
200
213
|
}
|
|
201
214
|
})
|
|
202
|
-
.then(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
});
|
|
208
|
-
})
|
|
215
|
+
.then(cardinality => target.setProperty('metadata', {
|
|
216
|
+
state: new utils_metadata_1.MetadataValidationState(),
|
|
217
|
+
cardinality,
|
|
218
|
+
variables: variablesCount,
|
|
219
|
+
}))
|
|
209
220
|
.catch(() => target.setProperty('metadata', {
|
|
210
221
|
state: new utils_metadata_1.MetadataValidationState(),
|
|
211
222
|
cardinality: { type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url },
|
|
@@ -219,7 +230,7 @@ class QuerySourceSparql {
|
|
|
219
230
|
* @returns {string} Query string for a COUNT query over the operation.
|
|
220
231
|
*/
|
|
221
232
|
operationToNormalizedCountQuery(operation) {
|
|
222
|
-
const normalizedOperation = operation
|
|
233
|
+
const normalizedOperation = (0, utils_algebra_1.isKnownOperation)(operation, utils_algebra_1.Algebra.Types.PATTERN) ?
|
|
223
234
|
this.algebraFactory.createPattern(operation.subject.termType === 'Variable' ? this.dataFactory.variable('s') : operation.subject, operation.predicate.termType === 'Variable' ? this.dataFactory.variable('p') : operation.predicate, operation.object.termType === 'Variable' ? this.dataFactory.variable('o') : operation.object) :
|
|
224
235
|
operation;
|
|
225
236
|
const operationString = QuerySourceSparql.operationToCountQuery(this.dataFactory, this.algebraFactory, normalizedOperation);
|
|
@@ -231,6 +242,9 @@ class QuerySourceSparql {
|
|
|
231
242
|
* @param {Algebra.Operation} operation A query operation.
|
|
232
243
|
*/
|
|
233
244
|
async estimateOperationCardinality(operation) {
|
|
245
|
+
if (this.operationUsesPropertyFeatures(operation)) {
|
|
246
|
+
return { type: 'estimate', value: 1, dataset: this.url };
|
|
247
|
+
}
|
|
234
248
|
const dataset = {
|
|
235
249
|
getCardinality: (operation) => {
|
|
236
250
|
const queryString = this.operationToNormalizedCountQuery(operation);
|
|
@@ -255,6 +269,44 @@ class QuerySourceSparql {
|
|
|
255
269
|
};
|
|
256
270
|
return (0, utils_query_operation_1.estimateCardinality)(operation, dataset);
|
|
257
271
|
}
|
|
272
|
+
/**
|
|
273
|
+
* Checks whether the provided operation makes use of this endpoint's property features,
|
|
274
|
+
* if the endpoint has property features detected.
|
|
275
|
+
* @param {Algebra.Operation} operation The operation to check.
|
|
276
|
+
* @returns {boolean} Whether the operation makes use of property features.
|
|
277
|
+
*/
|
|
278
|
+
operationUsesPropertyFeatures(operation) {
|
|
279
|
+
let propertyFeaturesUsed = false;
|
|
280
|
+
if (this.propertyFeatures) {
|
|
281
|
+
utils_algebra_1.algebraUtils.visitOperation(operation, {
|
|
282
|
+
[utils_algebra_1.Algebra.Types.PATTERN]: {
|
|
283
|
+
visitor: (subOp) => {
|
|
284
|
+
if (subOp.predicate.termType === 'NamedNode' && this.propertyFeatures.has(subOp.predicate.value)) {
|
|
285
|
+
propertyFeaturesUsed = true;
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
[utils_algebra_1.Algebra.Types.LINK]: {
|
|
291
|
+
visitor: (subOp) => {
|
|
292
|
+
if (this.propertyFeatures.has(subOp.iri.value)) {
|
|
293
|
+
propertyFeaturesUsed = true;
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
[utils_algebra_1.Algebra.Types.NPS]: {
|
|
299
|
+
visitor: (subOp) => {
|
|
300
|
+
if (subOp.iris.some(iri => this.propertyFeatures.has(iri.value))) {
|
|
301
|
+
propertyFeaturesUsed = true;
|
|
302
|
+
}
|
|
303
|
+
return false;
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return propertyFeaturesUsed;
|
|
309
|
+
}
|
|
258
310
|
/**
|
|
259
311
|
* Create an operation that includes the bindings from the given bindings stream.
|
|
260
312
|
* @param algebraFactory The algebra factory.
|
|
@@ -270,7 +322,7 @@ class QuerySourceSparql {
|
|
|
270
322
|
case 'values':
|
|
271
323
|
return algebraFactory.createJoin([
|
|
272
324
|
algebraFactory.createValues(addBindings.metadata.variables.map(v => v.variable), bindings.map(binding => Object.fromEntries([...binding]
|
|
273
|
-
.map(([key, value]) => [
|
|
325
|
+
.map(([key, value]) => [key.value, value])))),
|
|
274
326
|
operation,
|
|
275
327
|
], false);
|
|
276
328
|
case 'union': {
|
|
@@ -307,7 +359,12 @@ class QuerySourceSparql {
|
|
|
307
359
|
* @return {string} A query string.
|
|
308
360
|
*/
|
|
309
361
|
static operationToQuery(operation) {
|
|
310
|
-
|
|
362
|
+
// This query source only handles the Known Algebra from @comunica/utils-algebra.
|
|
363
|
+
// It will likely throw when unknown algebra operations are being translated
|
|
364
|
+
// or the translation will not happen correctly.
|
|
365
|
+
// TODO: add a query generation bus to Comunica to mitigate this problem.
|
|
366
|
+
const ast = (0, algebra_sparql_1_2_1.toAst)(operation);
|
|
367
|
+
return this.queryStringGenerator.generate(ast).trim();
|
|
311
368
|
}
|
|
312
369
|
/**
|
|
313
370
|
* Check if the given operation may produce undefined values.
|
|
@@ -315,35 +372,35 @@ class QuerySourceSparql {
|
|
|
315
372
|
*/
|
|
316
373
|
static getOperationUndefs(operation) {
|
|
317
374
|
const variables = [];
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
375
|
+
utils_algebra_1.algebraUtils.visitOperation(operation, {
|
|
376
|
+
[utils_algebra_1.Algebra.Types.LEFT_JOIN]: { preVisitor: (subOperation) => {
|
|
377
|
+
const left = utils_algebra_1.algebraUtils.inScopeVariables(subOperation.input[0]);
|
|
378
|
+
const right = utils_algebra_1.algebraUtils.inScopeVariables(subOperation.input[1]);
|
|
379
|
+
for (const varRight of right) {
|
|
380
|
+
if (!left.some(varLeft => varLeft.equals(varRight))) {
|
|
381
|
+
variables.push(varRight);
|
|
382
|
+
}
|
|
325
383
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
384
|
+
return { continue: false };
|
|
385
|
+
} },
|
|
386
|
+
[utils_algebra_1.Algebra.Types.VALUES]: { preVisitor: (values) => {
|
|
387
|
+
for (const variable of values.variables) {
|
|
388
|
+
if (values.bindings.some(bindings => !(variable.value in bindings))) {
|
|
389
|
+
variables.push(variable);
|
|
390
|
+
}
|
|
333
391
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
392
|
+
return { continue: false };
|
|
393
|
+
} },
|
|
394
|
+
[utils_algebra_1.Algebra.Types.UNION]: { preVisitor: (union) => {
|
|
395
|
+
// Determine variables in scope of the union branches that are not occurring in every branch
|
|
396
|
+
const scopedVariables = union.input.map(op => utils_algebra_1.algebraUtils.inScopeVariables(op));
|
|
397
|
+
for (const variable of (0, rdf_terms_1.uniqTerms)(scopedVariables.flat())) {
|
|
398
|
+
if (!scopedVariables.every(input => input.some(inputVar => inputVar.equals(variable)))) {
|
|
399
|
+
variables.push(variable);
|
|
400
|
+
}
|
|
343
401
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
},
|
|
402
|
+
return {};
|
|
403
|
+
} },
|
|
347
404
|
});
|
|
348
405
|
return (0, rdf_terms_1.uniqTerms)(variables);
|
|
349
406
|
}
|
|
@@ -358,27 +415,32 @@ class QuerySourceSparql {
|
|
|
358
415
|
*/
|
|
359
416
|
async queryBindingsRemote(endpoint, query, variables, context, undefVariables) {
|
|
360
417
|
// Index undef variables
|
|
361
|
-
const
|
|
362
|
-
for (const undefVariable of undefVariables) {
|
|
363
|
-
undefVariablesIndex.add(undefVariable.value);
|
|
364
|
-
}
|
|
418
|
+
const undefVariablesSet = new Set(undefVariables.map(v => v.value));
|
|
365
419
|
this.lastSourceContext = this.context.merge(context);
|
|
366
420
|
const rawStream = await this.endpointFetcher.fetchBindings(endpoint, query);
|
|
367
421
|
this.lastSourceContext = undefined;
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
.map((variable) => {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
.
|
|
422
|
+
const wrapped = (0, asynciterator_1.wrap)(rawStream, { autoStart: false, maxBufferSize: Number.POSITIVE_INFINITY });
|
|
423
|
+
return wrapped.map((rawData) => {
|
|
424
|
+
const bindings = variables.map((variable) => {
|
|
425
|
+
const value = rawData[`?${variable.value}`];
|
|
426
|
+
if (!undefVariablesSet.has(variable.value) && !value) {
|
|
427
|
+
core_1.Actor.getContextLogger(this.context)?.warn(`The endpoint ${endpoint} failed to provide a binding for ${variable.value}.`);
|
|
428
|
+
}
|
|
429
|
+
return [variable, value];
|
|
430
|
+
}).filter(([_, v]) => Boolean(v));
|
|
431
|
+
return this.bindingsFactory.bindings(bindings);
|
|
432
|
+
});
|
|
378
433
|
}
|
|
379
434
|
toString() {
|
|
380
435
|
return `QuerySourceSparql(${this.url})`;
|
|
381
436
|
}
|
|
382
437
|
}
|
|
383
438
|
exports.QuerySourceSparql = QuerySourceSparql;
|
|
439
|
+
/**
|
|
440
|
+
* A query string generator that has an indentation of -1,
|
|
441
|
+
* meaning it does not print newlines as part of its query structure.
|
|
442
|
+
* We also put the indentIncrements to 0 so it does not change the indentation.
|
|
443
|
+
* @protected
|
|
444
|
+
*/
|
|
445
|
+
QuerySourceSparql.queryStringGenerator = new generator_sparql_1_2_1.Generator({ [core_2.traqulaIndentation]: -1, indentInc: 0 });
|
|
384
446
|
//# sourceMappingURL=QuerySourceSparql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuerySourceSparql.js","sourceRoot":"","sources":["QuerySourceSparql.ts"],"names":[],"mappings":";;;AACA,+DAA0D;AAC1D,yCAAuC;AAevC,6DAAmE;AACnE,2EAAsE;AAGtE,iDAAwD;AACxD,iEAA8D;AAC9D,yCAAqC;AACrC,yCAAsC;AAEtC,qDAA0D;AAG1D,MAAa,iBAAiB;IAsB5B,YACE,GAAW,EACX,OAAuB,EACvB,YAA0B,EAC1B,UAAsB,EACtB,WAAgC,EAChC,cAAuB,EACvB,eAAgC,EAChC,YAAqB,EACrB,SAAiB,EACjB,YAAoB,EACpB,uBAAgC,EAChC,+BAAwC,EACxC,wBAAgC,EAChC,YAAqB,EACrB,iBAA2B,EAC3B,QAAqB,EACrB,kBAA6B,EAC7B,YAAuB;QAEvB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,IAAI,6CAAqB,CAAC;YAC/C,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YACrC,KAAK,EAAE,CAAC,KAAuB,EAAE,IAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAC/E,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAkB,EAAE,CAClD;YACD,0BAA0B,EAAE,IAAI;YAChC,WAAW;YACX,wBAAwB;YACxB,UAAU,EAAE,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACxF,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,oBAAQ,CAAiC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAClE,SAAS,CAAC;QACZ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,+BAA+B,GAAG,+BAA+B,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,KAAK,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,MAAM,gBAAgB,GAA0B;YAC9C,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;oBACxC,YAAY,EAAE,IAAI;iBACnB;aACF;SACF,CAAC;QACF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7B,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE;oBACT,aAAa,EAAE,MAAM;oBACrB,IAAI,EAAE,yBAAO,CAAC,KAAK,CAAC,UAAU;oBAC9B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;iBAC5C;gBACD,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE;gBACR,gBAAgB;gBAChB;oBACE,mFAAmF;oBACnF,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE;wBACL,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;wBAClE,QAAQ,EAAE;4BACR;gCACE,IAAI,EAAE,WAAW;gCACjB,SAAS,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAO,CAAC,KAAK,CAAC,SAAS,EAAE;6BACpE;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEM,aAAa,CAClB,WAA8B,EAC9B,OAAuB,EACvB,OAA+B;QAE/B,gDAAgD;QAChD,IAAI,gBAA4C,CAAC;QACjD,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,gBAAgB,GAAG,iBAAiB,CAAC,sBAAsB,CACzD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,UAAU,EACf,WAAW,EACX,OAAO,CAAC,YAAY,CACrB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,QAAQ,GAAmB,IAAI,iCAAiB,CAAC,KAAK,IAAG,EAAE;YAC/D,kBAAkB;YAClB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;YACzC,MAAM,SAAS,GAAmB,sBAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACnE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAS,+BAAa,CAAC,WAAW,CAAC,CAAC;YACnE,MAAM,WAAW,GAAoB,OAAO,CAAC,OAAO,CAAC,+BAAa,CAAC,WAAW,CAAC,CAAC;YAChF,MAAM,WAAW,GAAW,CAAC,OAAO,EAAE,YAAY,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;gBACtG,WAAW,CAAC,CAAC;gBACb,iBAAiB,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YACtF,MAAM,cAAc,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAEvE,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAC7F,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAEzD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,UAAU,CAAC,SAA4B,EAAE,OAAuB;QACrE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAW,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9G,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,MAAM,KAAK,GAAG,IAAA,oBAAI,EAAM,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,YAAY,CAAC,SAAsB,EAAE,OAAuB;QACjE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAW,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,SAAS,CAAC,SAAyB,EAAE,OAAuB;QACjE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAW,OAAO,CAAC,GAAG,CAAC,+BAAa,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,cAAc,CACtB,MAA0B,EAC1B,OAAuB,EACvB,gBAA4C;QAE5C,+CAA+C;QAC/C,IAAI,cAAc,GAAuB,EAAE,CAAC;QAC5C,4EAA4E;QAC5E,IAAI,OAAO,CAAyB,KAAK,EAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;gBACzC,MAAM,eAAe,GAAG,sBAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACzD,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;gBACnE,MAAM,cAAc,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACvE,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAChD,QAAQ;oBACR,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBACjF,CAAC,CAAC,CAAC;gBAEJ,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACpC,CAAC;gBAED,+FAA+F;gBAC/F,2FAA2F;gBAC3F,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;oBACzC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;oBACzE,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;wBAC3C,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;gBAED,wCAAwC;gBACxC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;gBAED,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;oBAC9C,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,MAAM,CAAC,iBAAiB;oBAC/B,OAAO,EAAE,IAAI,CAAC,GAAG;iBAClB,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,cAAc,GAAmB,MAAM,IAAI;qBAC9C,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,CAAE,QAAQ,CAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBACxE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAkB,EAAE,EAAE;oBAC/C,YAAY,CAAC,cAAc,CAAC,CAAC;oBAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM,WAAW,GAA2B;wBAC1C,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,MAAM,CAAC,iBAAiB;wBAC/B,OAAO,EAAE,IAAI,CAAC,GAAG;qBAClB,CAAC;oBACF,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,gBAAgB,GAAW,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;4BACpC,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC;4BAC3B,WAAW,CAAC,KAAK,GAAG,gBAAgB,CAAC;4BACrC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;oBACD,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC9B,YAAY,CAAC,cAAc,CAAC,CAAC;oBAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpF,CAAC,CAAC,CAAC;gBACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBAC5B,YAAY,CAAC,cAAc,CAAC,CAAC;oBAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpF,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;aACC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;YACpB,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE;gBAC7B,KAAK,EAAE,IAAI,wCAAuB,EAAE;gBACpC,WAAW;gBACX,SAAS,EAAE,cAAc;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE;YAC1C,KAAK,EAAE,IAAI,wCAAuB,EAAE;YACpC,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;YACrF,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;;;;OAKG;IACI,+BAA+B,CAAC,SAA4B;QACjE,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,KAAK,yBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,cAAc,CAAC,aAAa,CAC/B,SAAS,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAC9F,SAAS,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAClG,SAAS,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAC7F,CAAC,CAAC;YACH,SAAS,CAAC;QACZ,MAAM,eAAe,GAAG,iBAAiB,CAAC,qBAAqB,CAC7D,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,mBAAmB,CACpB,CAAC;QACF,OAAO,eAAe,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,4BAA4B,CAAC,SAA4B;QACpE,MAAM,OAAO,GAAa;YACxB,cAAc,EAAE,CAAC,SAA4B,EAAsC,EAAE;gBACnF,MAAM,WAAW,GAAG,IAAI,CAAC,+BAA+B,CAAC,SAAS,CAAC,CAAC;gBAEpE,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;gBACvD,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,iBAAiB,CAAC;gBAC3B,CAAC;gBAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ;yBAChC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;yBACjG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,2CAAmB,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;oBAEjD,MAAM,WAAW,GAA2B;wBAC1C,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;wBACjF,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9F,OAAO,EAAE,IAAI,CAAC,GAAG;qBAClB,CAAC;oBAEF,OAAO,WAAW,CAAC;gBACrB,CAAC;YACH,CAAC;YACD,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;QAEF,OAAO,IAAA,2CAAmB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CAAC,sBAAsB,CACxC,cAAuB,EACvB,UAAsB,EACtB,SAA4B,EAC5B,WAAqE;QAErE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEtD,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,cAAc,CAAC,UAAU,CAAC;oBAC/B,cAAc,CAAC,YAAY,CACzB,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EACnD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAE,GAAG,OAAO,CAAE;yBACtD,GAAG,CAAC,CAAC,CAAE,GAAG,EAAE,KAAK,CAAE,EAAE,EAAE,CAAC,CAAE,IAAI,GAAG,CAAC,KAAK,EAAE,EAAgC,KAAK,CAAE,CAAC,CAAC,CAAC,CACvF;oBACD,SAAS;iBACV,EAAE,KAAK,CAAC,CAAC;YACZ,KAAK,OAAO,CAAC,CAAC,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAAC,CAAC;YACvE,KAAK,QAAQ,CAAC,CAAC,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,sBAAsB,CAClC,cAAuB,EACvB,SAA4B,EAC5B,SAAyB;QAEzB,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,qBAAqB,CACjC,WAAgC,EAChC,cAAuB,EACvB,SAA4B;QAE5B,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CACpE,cAAc,CAAC,YAAY,CACzB,cAAc,CAAC,WAAW,CACxB,SAAS,EACT,EAAE,EACF,CAAE,cAAc,CAAC,oBAAoB,CACnC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC5B,OAAO,EACP,cAAc,CAAC,wBAAwB,EAAE,EACzC,KAAK,CACN,CAAE,CACJ,EACD,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC7B,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAClE,EACD,CAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAE,CAClC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,gBAAgB,CAAC,SAA4B;QACzD,OAAO,IAAA,0BAAQ,EAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,kBAAkB,CAAC,SAA4B;QAC3D,MAAM,SAAS,GAAmB,EAAE,CAAC;QACrC,sBAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;YAC/B,QAAQ,CAAC,YAAY;gBACnB,MAAM,IAAI,GAAG,sBAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,MAAM,KAAK,GAAG,sBAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;wBACpD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,CAAC,MAAsB;gBAC3B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC;wBAC1E,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,CAAC,KAAoB;gBACxB,4FAA4F;gBAC5F,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC/D,KAAK,MAAM,QAAQ,IAAI,IAAA,qBAAS,EAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACzD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QACH,OAAO,IAAA,qBAAS,EAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,mBAAmB,CAC9B,QAAgB,EAChB,KAAa,EACb,SAAyB,EACzB,OAAuB,EACvB,cAA8B;QAE9B,wBAAwB;QACxB,MAAM,mBAAmB,GAAgB,IAAI,GAAG,EAAE,CAAC;QACnD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,mBAAmB,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAEnC,OAAO,IAAA,oBAAI,EAAM,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;aACvF,GAAG,CAAe,CAAC,OAAiC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS;aAC9F,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvD,YAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,QAAQ,oCAAoC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YAC5H,CAAC;YACD,OAAiC,CAAE,QAAQ,EAAE,KAAK,CAAE,CAAC;QACvD,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEM,QAAQ;QACb,OAAO,qBAAqB,IAAI,CAAC,GAAG,GAAG,CAAC;IAC1C,CAAC;CACF;AA/eD,8CA+eC","sourcesContent":["import type { MediatorHttp } from '@comunica/bus-http';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport { Actor } from '@comunica/core';\nimport type {\n Bindings,\n BindingsStream,\n ComunicaDataFactory,\n FragmentSelectorShape,\n IActionContext,\n IDataset,\n IQueryBindingsOptions,\n IQuerySource,\n MetadataBindings,\n MetadataVariable,\n QueryResultCardinality,\n} from '@comunica/types';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { MetadataValidationState } from '@comunica/utils-metadata';\nimport { estimateCardinality } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { TransformIterator, wrap } from 'asynciterator';\nimport { SparqlEndpointFetcher } from 'fetch-sparql-endpoint';\nimport { LRUCache } from 'lru-cache';\nimport { uniqTerms } from 'rdf-terms';\nimport type { Factory } from 'sparqlalgebrajs';\nimport { toSparql, Algebra, Util } from 'sparqlalgebrajs';\nimport type { BindMethod } from './ActorQuerySourceIdentifyHypermediaSparql';\n\nexport class QuerySourceSparql implements IQuerySource {\n public readonly referenceValue: string;\n private readonly url: string;\n private readonly context: IActionContext;\n private readonly mediatorHttp: MediatorHttp;\n private readonly bindMethod: BindMethod;\n private readonly countTimeout: number;\n private readonly cardinalityCountQueries: boolean;\n private readonly cardinalityEstimateConstruction: boolean;\n private readonly defaultGraph?: string;\n private readonly unionDefaultGraph: boolean;\n private readonly datasets?: IDataset[];\n public readonly extensionFunctions?: string[];\n private readonly dataFactory: ComunicaDataFactory;\n private readonly algebraFactory: Factory;\n private readonly bindingsFactory: BindingsFactory;\n\n private readonly endpointFetcher: SparqlEndpointFetcher;\n private readonly cache: LRUCache<string, QueryResultCardinality> | undefined;\n\n private lastSourceContext: IActionContext | undefined;\n\n public constructor(\n url: string,\n context: IActionContext,\n mediatorHttp: MediatorHttp,\n bindMethod: BindMethod,\n dataFactory: ComunicaDataFactory,\n algebraFactory: Factory,\n bindingsFactory: BindingsFactory,\n forceHttpGet: boolean,\n cacheSize: number,\n countTimeout: number,\n cardinalityCountQueries: boolean,\n cardinalityEstimateConstruction: boolean,\n forceGetIfUrlLengthBelow: number,\n defaultGraph?: string,\n unionDefaultGraph?: boolean,\n datasets?: IDataset[],\n extensionFunctions?: string[],\n postAccepted?: string[],\n ) {\n this.referenceValue = url;\n this.url = url;\n this.context = context;\n this.mediatorHttp = mediatorHttp;\n this.bindMethod = bindMethod;\n this.dataFactory = dataFactory;\n this.algebraFactory = algebraFactory;\n this.bindingsFactory = bindingsFactory;\n this.endpointFetcher = new SparqlEndpointFetcher({\n method: forceHttpGet ? 'GET' : 'POST',\n fetch: (input: Request | string, init?: RequestInit) => this.mediatorHttp.mediate(\n { input, init, context: this.lastSourceContext! },\n ),\n prefixVariableQuestionMark: true,\n dataFactory,\n forceGetIfUrlLengthBelow,\n directPost: postAccepted && !postAccepted.includes('application/x-www-form-urlencoded'),\n });\n this.cache = cacheSize > 0 ?\n new LRUCache<string, QueryResultCardinality>({ max: cacheSize }) :\n undefined;\n this.countTimeout = countTimeout;\n this.cardinalityCountQueries = cardinalityCountQueries;\n this.cardinalityEstimateConstruction = cardinalityEstimateConstruction;\n this.defaultGraph = defaultGraph;\n this.unionDefaultGraph = unionDefaultGraph ?? false;\n this.datasets = datasets;\n this.extensionFunctions = extensionFunctions;\n }\n\n public async getSelectorShape(): Promise<FragmentSelectorShape> {\n const innerDisjunction: FragmentSelectorShape = {\n type: 'disjunction',\n children: [\n {\n type: 'operation',\n operation: { operationType: 'wildcard' },\n joinBindings: true,\n },\n ],\n };\n if (this.extensionFunctions) {\n innerDisjunction.children.push({\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.EXPRESSION,\n extensionFunctions: this.extensionFunctions,\n },\n joinBindings: true,\n });\n }\n return {\n type: 'conjunction',\n children: [\n innerDisjunction,\n {\n // DISTINCT CONSTRUCT is not allowed in SPARQL 1.1, so we explicitly disallowed it.\n type: 'negation',\n child: {\n type: 'operation',\n operation: { operationType: 'type', type: Algebra.types.DISTINCT },\n children: [\n {\n type: 'operation',\n operation: { operationType: 'type', type: Algebra.types.CONSTRUCT },\n },\n ],\n },\n },\n ],\n };\n }\n\n public queryBindings(\n operationIn: Algebra.Operation,\n context: IActionContext,\n options?: IQueryBindingsOptions,\n ): BindingsStream {\n // If bindings are passed, modify the operations\n let operationPromise: Promise<Algebra.Operation>;\n if (options?.joinBindings) {\n operationPromise = QuerySourceSparql.addBindingsToOperation(\n this.algebraFactory,\n this.bindMethod,\n operationIn,\n options.joinBindings,\n );\n } else {\n operationPromise = Promise.resolve(operationIn);\n }\n\n const bindings: BindingsStream = new TransformIterator(async() => {\n // Prepare queries\n const operation = await operationPromise;\n const variables: RDF.Variable[] = Util.inScopeVariables(operation);\n const queryString = context.get<string>(KeysInitQuery.queryString);\n const queryFormat: RDF.QueryFormat = context.getSafe(KeysInitQuery.queryFormat);\n const selectQuery: string = !options?.joinBindings && queryString && queryFormat.language === 'sparql' ?\n queryString :\n QuerySourceSparql.operationToSelectQuery(this.algebraFactory, operation, variables);\n const undefVariables = QuerySourceSparql.getOperationUndefs(operation);\n\n return this.queryBindingsRemote(this.url, selectQuery, variables, context, undefVariables);\n }, { autoStart: false });\n this.attachMetadata(bindings, context, operationPromise);\n\n return bindings;\n }\n\n public queryQuads(operation: Algebra.Operation, context: IActionContext): AsyncIterator<RDF.Quad> {\n this.lastSourceContext = this.context.merge(context);\n const query: string = context.get(KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);\n const rawStream = this.endpointFetcher.fetchTriples(this.url, query);\n this.lastSourceContext = undefined;\n const quads = wrap<any>(rawStream, { autoStart: false, maxBufferSize: Number.POSITIVE_INFINITY });\n this.attachMetadata(quads, context, Promise.resolve(operation.input));\n return quads;\n }\n\n public queryBoolean(operation: Algebra.Ask, context: IActionContext): Promise<boolean> {\n this.lastSourceContext = this.context.merge(context);\n const query: string = context.get(KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);\n const promise = this.endpointFetcher.fetchAsk(this.url, query);\n this.lastSourceContext = undefined;\n return promise;\n }\n\n public queryVoid(operation: Algebra.Update, context: IActionContext): Promise<void> {\n this.lastSourceContext = this.context.merge(context);\n const query: string = context.get(KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);\n const promise = this.endpointFetcher.fetchUpdate(this.url, query);\n this.lastSourceContext = undefined;\n return promise;\n }\n\n protected attachMetadata(\n target: AsyncIterator<any>,\n context: IActionContext,\n operationPromise: Promise<Algebra.Operation>,\n ): void {\n // Emit metadata containing the estimated count\n let variablesCount: MetadataVariable[] = [];\n // eslint-disable-next-line no-async-promise-executor,ts/no-misused-promises\n new Promise<QueryResultCardinality>(async(resolve, reject) => {\n try {\n const operation = await operationPromise;\n const variablesScoped = Util.inScopeVariables(operation);\n const countQuery = this.operationToNormalizedCountQuery(operation);\n const undefVariables = QuerySourceSparql.getOperationUndefs(operation);\n variablesCount = variablesScoped.map(variable => ({\n variable,\n canBeUndef: undefVariables.some(undefVariable => undefVariable.equals(variable)),\n }));\n\n const cachedCardinality = this.cache?.get(countQuery);\n if (cachedCardinality) {\n return resolve(cachedCardinality);\n }\n\n // Attempt to estimate locally prior to sending a COUNT request, as this should be much faster.\n // The estimates may be off by varying amounts, so this is set behind a configuration flag.\n if (this.cardinalityEstimateConstruction) {\n const localEstimate = await this.estimateOperationCardinality(operation);\n if (Number.isFinite(localEstimate.value)) {\n this.cache?.set(countQuery, localEstimate);\n return resolve(localEstimate);\n }\n }\n\n // Don't send count queries if disabled.\n if (!this.cardinalityCountQueries) {\n return resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });\n }\n\n const timeoutHandler = setTimeout(() => resolve({\n type: 'estimate',\n value: Number.POSITIVE_INFINITY,\n dataset: this.url,\n }), this.countTimeout);\n const varCount = this.dataFactory.variable('count');\n const bindingsStream: BindingsStream = await this\n .queryBindingsRemote(this.url, countQuery, [ varCount ], context, []);\n bindingsStream.on('data', (bindings: Bindings) => {\n clearTimeout(timeoutHandler);\n const count = bindings.get(varCount);\n const cardinality: QueryResultCardinality = {\n type: 'estimate',\n value: Number.POSITIVE_INFINITY,\n dataset: this.url,\n };\n if (count) {\n const cardinalityValue: number = Number.parseInt(count.value, 10);\n if (!Number.isNaN(cardinalityValue)) {\n cardinality.type = 'exact';\n cardinality.value = cardinalityValue;\n this.cache?.set(countQuery, cardinality);\n }\n }\n return resolve(cardinality);\n });\n bindingsStream.on('error', () => {\n clearTimeout(timeoutHandler);\n resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });\n });\n bindingsStream.on('end', () => {\n clearTimeout(timeoutHandler);\n resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });\n });\n } catch (error: unknown) {\n return reject(error);\n }\n })\n .then((cardinality) => {\n target.setProperty('metadata', {\n state: new MetadataValidationState(),\n cardinality,\n variables: variablesCount,\n });\n })\n .catch(() => target.setProperty('metadata', {\n state: new MetadataValidationState(),\n cardinality: { type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url },\n variables: variablesCount,\n }));\n }\n\n /**\n * Convert an algebra operation into a query string, and if the operation is a simple triple pattern,\n * then also replace any variables with s, p, and o to increase the chance of cache hits.\n * @param {Algebra.Operation} operation The operation to convert into a query string.\n * @returns {string} Query string for a COUNT query over the operation.\n */\n public operationToNormalizedCountQuery(operation: Algebra.Operation): string {\n const normalizedOperation = operation.type === Algebra.types.PATTERN ?\n this.algebraFactory.createPattern(\n operation.subject.termType === 'Variable' ? this.dataFactory.variable('s') : operation.subject,\n operation.predicate.termType === 'Variable' ? this.dataFactory.variable('p') : operation.predicate,\n operation.object.termType === 'Variable' ? this.dataFactory.variable('o') : operation.object,\n ) :\n operation;\n const operationString = QuerySourceSparql.operationToCountQuery(\n this.dataFactory,\n this.algebraFactory,\n normalizedOperation,\n );\n return operationString;\n }\n\n /**\n * Performs local cardinality estimation for the specified SPARQL algebra operation, which should\n * result in better estimation performance at the expense of accuracy.\n * @param {Algebra.Operation} operation A query operation.\n */\n public async estimateOperationCardinality(operation: Algebra.Operation): Promise<QueryResultCardinality> {\n const dataset: IDataset = {\n getCardinality: (operation: Algebra.Operation): QueryResultCardinality | undefined => {\n const queryString = this.operationToNormalizedCountQuery(operation);\n\n const cachedCardinality = this.cache?.get(queryString);\n if (cachedCardinality) {\n return cachedCardinality;\n }\n\n if (this.datasets) {\n const cardinalities = this.datasets\n .filter(ds => this.unionDefaultGraph || (this.defaultGraph && ds.uri.endsWith(this.defaultGraph)))\n .map(ds => estimateCardinality(operation, ds));\n\n const cardinality: QueryResultCardinality = {\n type: cardinalities.some(card => card.type === 'estimate') ? 'estimate' : 'exact',\n value: cardinalities.length > 0 ? cardinalities.reduce((acc, card) => acc + card.value, 0) : 0,\n dataset: this.url,\n };\n\n return cardinality;\n }\n },\n source: this.url,\n uri: this.url,\n };\n\n return estimateCardinality(operation, dataset);\n }\n\n /**\n * Create an operation that includes the bindings from the given bindings stream.\n * @param algebraFactory The algebra factory.\n * @param bindMethod A method for adding bindings to an operation.\n * @param operation The operation to bind to.\n * @param addBindings The bindings to add.\n * @param addBindings.bindings The bindings stream.\n * @param addBindings.metadata The bindings metadata.\n */\n public static async addBindingsToOperation(\n algebraFactory: Factory,\n bindMethod: BindMethod,\n operation: Algebra.Operation,\n addBindings: { bindings: BindingsStream; metadata: MetadataBindings },\n ): Promise<Algebra.Operation> {\n const bindings = await addBindings.bindings.toArray();\n\n switch (bindMethod) {\n case 'values':\n return algebraFactory.createJoin([\n algebraFactory.createValues(\n addBindings.metadata.variables.map(v => v.variable),\n bindings.map(binding => Object.fromEntries([ ...binding ]\n .map(([ key, value ]) => [ `?${key.value}`, <RDF.Literal | RDF.NamedNode> value ]))),\n ),\n operation,\n ], false);\n case 'union': { throw new Error('Not implemented yet: \"union\" case'); }\n case 'filter': { throw new Error('Not implemented yet: \"filter\" case'); }\n }\n }\n\n /**\n * Convert an operation to a select query for this pattern.\n * @param algebraFactory The algebra factory.\n * @param {Algebra.Operation} operation A query operation.\n * @param {RDF.Variable[]} variables The variables in scope for the operation.\n * @return {string} A select query string.\n */\n public static operationToSelectQuery(\n algebraFactory: Factory,\n operation: Algebra.Operation,\n variables: RDF.Variable[],\n ): string {\n return QuerySourceSparql.operationToQuery(algebraFactory.createProject(operation, variables));\n }\n\n /**\n * Convert an operation to a count query for the number of matching triples for this pattern.\n * @param dataFactory The data factory.\n * @param algebraFactory The algebra factory.\n * @param {Algebra.Operation} operation A query operation.\n * @return {string} A count query string.\n */\n public static operationToCountQuery(\n dataFactory: ComunicaDataFactory,\n algebraFactory: Factory,\n operation: Algebra.Operation,\n ): string {\n return QuerySourceSparql.operationToQuery(algebraFactory.createProject(\n algebraFactory.createExtend(\n algebraFactory.createGroup(\n operation,\n [],\n [ algebraFactory.createBoundAggregate(\n dataFactory.variable('var0'),\n 'count',\n algebraFactory.createWildcardExpression(),\n false,\n ) ],\n ),\n dataFactory.variable('count'),\n algebraFactory.createTermExpression(dataFactory.variable('var0')),\n ),\n [ dataFactory.variable('count') ],\n ));\n }\n\n /**\n * Convert an operation to a query for this pattern.\n * @param {Algebra.Operation} operation A query operation.\n * @return {string} A query string.\n */\n public static operationToQuery(operation: Algebra.Operation): string {\n return toSparql(operation, { sparqlStar: true });\n }\n\n /**\n * Check if the given operation may produce undefined values.\n * @param operation\n */\n public static getOperationUndefs(operation: Algebra.Operation): RDF.Variable[] {\n const variables: RDF.Variable[] = [];\n Util.recurseOperation(operation, {\n leftjoin(subOperation): boolean {\n const left = Util.inScopeVariables(subOperation.input[0]);\n const right = Util.inScopeVariables(subOperation.input[1]);\n for (const varRight of right) {\n if (!left.some(varLeft => varLeft.equals(varRight))) {\n variables.push(varRight);\n }\n }\n return false;\n },\n values(values: Algebra.Values): boolean {\n for (const variable of values.variables) {\n if (values.bindings.some(bindings => !(`?${variable.value}` in bindings))) {\n variables.push(variable);\n }\n }\n return false;\n },\n union(union: Algebra.Union): boolean {\n // Determine variables in scope of the union branches that are not occurring in every branch\n const scopedVariables = union.input.map(Util.inScopeVariables);\n for (const variable of uniqTerms(scopedVariables.flat())) {\n if (!scopedVariables.every(input => input.some(inputVar => inputVar.equals(variable)))) {\n variables.push(variable);\n }\n }\n\n return true;\n },\n });\n return uniqTerms(variables);\n }\n\n /**\n * Send a SPARQL query to a SPARQL endpoint and retrieve its bindings as a stream.\n * @param {string} endpoint A SPARQL endpoint URL.\n * @param {string} query A SPARQL query string.\n * @param {RDF.Variable[]} variables The expected variables.\n * @param {IActionContext} context The source context.\n * @param undefVariables Variables that may have undefs.\n * @return {BindingsStream} A stream of bindings.\n */\n public async queryBindingsRemote(\n endpoint: string,\n query: string,\n variables: RDF.Variable[],\n context: IActionContext,\n undefVariables: RDF.Variable[],\n ): Promise<BindingsStream> {\n // Index undef variables\n const undefVariablesIndex: Set<string> = new Set();\n for (const undefVariable of undefVariables) {\n undefVariablesIndex.add(undefVariable.value);\n }\n\n this.lastSourceContext = this.context.merge(context);\n const rawStream = await this.endpointFetcher.fetchBindings(endpoint, query);\n this.lastSourceContext = undefined;\n\n return wrap<any>(rawStream, { autoStart: false, maxBufferSize: Number.POSITIVE_INFINITY })\n .map<RDF.Bindings>((rawData: Record<string, RDF.Term>) => this.bindingsFactory.bindings(variables\n .map((variable) => {\n const value = rawData[`?${variable.value}`];\n if (!undefVariablesIndex.has(variable.value) && !value) {\n Actor.getContextLogger(this.context)?.warn(`The endpoint ${endpoint} failed to provide a binding for ${variable.value}.`);\n }\n return <[RDF.Variable, RDF.Term]>[ variable, value ];\n })\n .filter(([ _, v ]) => Boolean(v))));\n }\n\n public toString(): string {\n return `QuerySourceSparql(${this.url})`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"QuerySourceSparql.js","sourceRoot":"","sources":["QuerySourceSparql.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MediatorHttp } from '@comunica/bus-http';\nimport { KeysInitQuery } from '@comunica/context-entries';\nimport { Actor } from '@comunica/core';\nimport type {\n Bindings,\n BindingsStream,\n ComunicaDataFactory,\n FragmentSelectorShape,\n IActionContext,\n IDataset,\n IQueryBindingsOptions,\n IQuerySource,\n MetadataBindings,\n MetadataVariable,\n QueryResultCardinality,\n} from '@comunica/types';\nimport { Algebra, algebraUtils, isKnownOperation } from '@comunica/utils-algebra';\nimport type { AlgebraFactory } from '@comunica/utils-algebra';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { MetadataValidationState } from '@comunica/utils-metadata';\nimport { estimateCardinality } from '@comunica/utils-query-operation';\nimport type * as RDF from '@rdfjs/types';\nimport { toAst } from '@traqula/algebra-sparql-1-2';\nimport type { Algebra as TraqualAlgebra } from '@traqula/algebra-transformations-1-2';\nimport { traqulaIndentation } from '@traqula/core';\nimport { Generator } from '@traqula/generator-sparql-1-2';\nimport type { AsyncIterator } from 'asynciterator';\nimport { TransformIterator, wrap } from 'asynciterator';\nimport { SparqlEndpointFetcher } from 'fetch-sparql-endpoint';\nimport { LRUCache } from 'lru-cache';\nimport { uniqTerms } from 'rdf-terms';\nimport type { BindMethod } from './ActorQuerySourceIdentifyHypermediaSparql';\n\nexport class QuerySourceSparql implements IQuerySource {\n /**\n * A query string generator that has an indentation of -1,\n * meaning it does not print newlines as part of its query structure.\n * We also put the indentIncrements to 0 so it does not change the indentation.\n * @protected\n */\n protected static readonly queryStringGenerator = new Generator({ [traqulaIndentation]: -1, indentInc: 0 });\n\n public readonly referenceValue: string;\n private readonly url: string;\n private readonly context: IActionContext;\n private readonly mediatorHttp: MediatorHttp;\n private readonly bindMethod: BindMethod;\n private readonly countTimeout: number;\n private readonly cardinalityCountQueries: boolean;\n private readonly cardinalityEstimateConstruction: boolean;\n private readonly defaultGraph?: string;\n private readonly unionDefaultGraph: boolean;\n private readonly propertyFeatures?: Set<string>;\n private readonly datasets?: IDataset[];\n public readonly extensionFunctions?: string[];\n private readonly dataFactory: ComunicaDataFactory;\n private readonly algebraFactory: AlgebraFactory;\n private readonly bindingsFactory: BindingsFactory;\n\n private readonly endpointFetcher: SparqlEndpointFetcher;\n private readonly cache: LRUCache<string, QueryResultCardinality> | undefined;\n\n private lastSourceContext: IActionContext | undefined;\n\n public constructor(\n url: string,\n context: IActionContext,\n mediatorHttp: MediatorHttp,\n bindMethod: BindMethod,\n dataFactory: ComunicaDataFactory,\n algebraFactory: AlgebraFactory,\n bindingsFactory: BindingsFactory,\n forceHttpGet: boolean,\n cacheSize: number,\n countTimeout: number,\n cardinalityCountQueries: boolean,\n cardinalityEstimateConstruction: boolean,\n forceGetIfUrlLengthBelow: number,\n metadata: Record<string, any>,\n ) {\n this.referenceValue = url;\n this.url = url;\n this.context = context;\n this.mediatorHttp = mediatorHttp;\n this.bindMethod = bindMethod;\n this.dataFactory = dataFactory;\n this.algebraFactory = algebraFactory;\n this.bindingsFactory = bindingsFactory;\n this.endpointFetcher = new SparqlEndpointFetcher({\n method: forceHttpGet ? 'GET' : 'POST',\n fetch: (input: Request | string, init?: RequestInit) => this.mediatorHttp.mediate(\n { input, init, context: this.lastSourceContext! },\n ),\n prefixVariableQuestionMark: true,\n dataFactory,\n forceGetIfUrlLengthBelow,\n directPost: metadata.postAccepted && !metadata.postAccepted.includes('application/x-www-form-urlencoded'),\n });\n this.cache = cacheSize > 0 ?\n new LRUCache<string, QueryResultCardinality>({ max: cacheSize }) :\n undefined;\n this.countTimeout = countTimeout;\n this.cardinalityCountQueries = cardinalityCountQueries;\n this.cardinalityEstimateConstruction = cardinalityEstimateConstruction;\n this.defaultGraph = metadata.defaultGraph;\n this.unionDefaultGraph = metadata.unionDefaultGraph ?? false;\n this.datasets = metadata.datasets;\n this.extensionFunctions = metadata.extensionFunctions;\n this.propertyFeatures = metadata.propertyFeatures ? new Set(metadata.propertyFeatures) : undefined;\n }\n\n public async getFilterFactor(): Promise<number> {\n return 1;\n }\n\n public async getSelectorShape(): Promise<FragmentSelectorShape> {\n const innerDisjunction: FragmentSelectorShape = {\n type: 'disjunction',\n children: [\n {\n type: 'operation',\n operation: { operationType: 'wildcard' },\n joinBindings: true,\n },\n ],\n };\n if (this.extensionFunctions) {\n innerDisjunction.children.push({\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.Types.EXPRESSION,\n extensionFunctions: this.extensionFunctions,\n },\n joinBindings: true,\n });\n }\n return {\n type: 'conjunction',\n children: [\n innerDisjunction,\n {\n // DISTINCT CONSTRUCT is not allowed in SPARQL 1.1, so we explicitly disallowed it.\n type: 'negation',\n child: {\n type: 'operation',\n operation: { operationType: 'type', type: Algebra.Types.DISTINCT },\n children: [\n {\n type: 'operation',\n operation: { operationType: 'type', type: Algebra.Types.CONSTRUCT },\n },\n ],\n },\n },\n ],\n };\n }\n\n public queryBindings(\n operationIn: Algebra.Operation,\n context: IActionContext,\n options?: IQueryBindingsOptions,\n ): BindingsStream {\n // If bindings are passed, modify the operations\n let operationPromise: Promise<Algebra.Operation>;\n if (options?.joinBindings) {\n operationPromise = QuerySourceSparql.addBindingsToOperation(\n this.algebraFactory,\n this.bindMethod,\n operationIn,\n options.joinBindings,\n );\n } else {\n operationPromise = Promise.resolve(operationIn);\n }\n\n const bindings: BindingsStream = new TransformIterator(async() => {\n // Prepare queries\n const operation = await operationPromise;\n const variables: RDF.Variable[] = algebraUtils.inScopeVariables(operation);\n const queryString = context.get<string>(KeysInitQuery.queryString);\n const queryFormat: RDF.QueryFormat = context.getSafe(KeysInitQuery.queryFormat);\n const selectQuery: string = !options?.joinBindings && queryString && queryFormat.language === 'sparql' ?\n queryString :\n QuerySourceSparql.operationToSelectQuery(this.algebraFactory, operation, variables);\n const undefVariables = QuerySourceSparql.getOperationUndefs(operation);\n\n return this.queryBindingsRemote(this.url, selectQuery, variables, context, undefVariables);\n }, { autoStart: false });\n this.attachMetadata(bindings, context, operationPromise);\n\n return bindings;\n }\n\n public queryQuads(operation: Algebra.Operation, context: IActionContext): AsyncIterator<RDF.Quad> {\n this.lastSourceContext = this.context.merge(context);\n const query: string = context.get(KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);\n const rawStream = this.endpointFetcher.fetchTriples(this.url, query);\n this.lastSourceContext = undefined;\n const quads = wrap<any>(rawStream, { autoStart: false, maxBufferSize: Number.POSITIVE_INFINITY });\n this.attachMetadata(quads, context, Promise.resolve((<Algebra.Operation & { input: any }>operation).input));\n return quads;\n }\n\n public queryBoolean(operation: Algebra.Ask, context: IActionContext): Promise<boolean> {\n // Shortcut the ASK query to return true when supported propertyFeature predicates are used in it.\n if (this.operationUsesPropertyFeatures(operation)) {\n return Promise.resolve(true);\n }\n // Without propertyFeature overlap, perform the actual ASK query.\n this.lastSourceContext = this.context.merge(context);\n const query: string = context.get(KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);\n const promise = this.endpointFetcher.fetchAsk(this.url, query);\n this.lastSourceContext = undefined;\n return promise;\n }\n\n public queryVoid(operation: Algebra.Operation, context: IActionContext): Promise<void> {\n this.lastSourceContext = this.context.merge(context);\n const query: string = context.get(KeysInitQuery.queryString) ?? QuerySourceSparql.operationToQuery(operation);\n const promise = this.endpointFetcher.fetchUpdate(this.url, query);\n this.lastSourceContext = undefined;\n return promise;\n }\n\n protected attachMetadata(\n target: AsyncIterator<any>,\n context: IActionContext,\n operationPromise: Promise<Algebra.Operation>,\n ): void {\n // Emit metadata containing the estimated count\n let variablesCount: MetadataVariable[] = [];\n // eslint-disable-next-line no-async-promise-executor,ts/no-misused-promises\n new Promise<QueryResultCardinality>(async(resolve, reject) => {\n try {\n const operation = await operationPromise;\n const variablesScoped = algebraUtils.inScopeVariables(operation);\n const countQuery = this.operationToNormalizedCountQuery(operation);\n\n const undefVariables = QuerySourceSparql.getOperationUndefs(operation);\n variablesCount = variablesScoped.map(variable => ({\n variable,\n canBeUndef: undefVariables.some(undefVariable => undefVariable.equals(variable)),\n }));\n\n const cachedCardinality = this.cache?.get(countQuery);\n if (cachedCardinality) {\n return resolve(cachedCardinality);\n }\n\n // Attempt to estimate locally prior to sending a COUNT request, as this should be much faster.\n // The estimates may be off by varying amounts, so this is set behind a configuration flag.\n if (this.cardinalityEstimateConstruction) {\n const localEstimate = await this.estimateOperationCardinality(operation);\n if (Number.isFinite(localEstimate.value)) {\n this.cache?.set(countQuery, localEstimate);\n return resolve(localEstimate);\n }\n }\n\n // Don't send count queries if disabled.\n if (!this.cardinalityCountQueries) {\n return resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });\n }\n\n const timeoutHandler = setTimeout(() => resolve({\n type: 'estimate',\n value: Number.POSITIVE_INFINITY,\n dataset: this.url,\n }), this.countTimeout);\n const varCount = this.dataFactory.variable('count');\n const bindingsStream: BindingsStream = await this\n .queryBindingsRemote(this.url, countQuery, [ varCount ], context, []);\n bindingsStream\n .on('data', (bindings: Bindings) => {\n clearTimeout(timeoutHandler);\n const count = bindings.get(varCount);\n const cardinality: QueryResultCardinality = {\n type: 'estimate',\n value: Number.POSITIVE_INFINITY,\n dataset: this.url,\n };\n if (count) {\n const cardinalityValue: number = Number.parseInt(count.value, 10);\n if (!Number.isNaN(cardinalityValue)) {\n cardinality.type = 'exact';\n cardinality.value = cardinalityValue;\n this.cache?.set(countQuery, cardinality);\n }\n }\n return resolve(cardinality);\n })\n .on('error', () => {\n clearTimeout(timeoutHandler);\n resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });\n })\n .on('end', () => {\n clearTimeout(timeoutHandler);\n resolve({ type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url });\n });\n } catch (error: unknown) {\n reject(error);\n }\n })\n .then(cardinality => target.setProperty('metadata', {\n state: new MetadataValidationState(),\n cardinality,\n variables: variablesCount,\n }))\n .catch(() => target.setProperty('metadata', {\n state: new MetadataValidationState(),\n cardinality: { type: 'estimate', value: Number.POSITIVE_INFINITY, dataset: this.url },\n variables: variablesCount,\n }));\n }\n\n /**\n * Convert an algebra operation into a query string, and if the operation is a simple triple pattern,\n * then also replace any variables with s, p, and o to increase the chance of cache hits.\n * @param {Algebra.Operation} operation The operation to convert into a query string.\n * @returns {string} Query string for a COUNT query over the operation.\n */\n public operationToNormalizedCountQuery(operation: Algebra.Operation): string {\n const normalizedOperation = isKnownOperation(operation, Algebra.Types.PATTERN) ?\n this.algebraFactory.createPattern(\n operation.subject.termType === 'Variable' ? this.dataFactory.variable('s') : operation.subject,\n operation.predicate.termType === 'Variable' ? this.dataFactory.variable('p') : operation.predicate,\n operation.object.termType === 'Variable' ? this.dataFactory.variable('o') : operation.object,\n ) :\n operation;\n const operationString = QuerySourceSparql.operationToCountQuery(\n this.dataFactory,\n this.algebraFactory,\n normalizedOperation,\n );\n return operationString;\n }\n\n /**\n * Performs local cardinality estimation for the specified SPARQL algebra operation, which should\n * result in better estimation performance at the expense of accuracy.\n * @param {Algebra.Operation} operation A query operation.\n */\n public async estimateOperationCardinality(operation: Algebra.Operation): Promise<QueryResultCardinality> {\n if (this.operationUsesPropertyFeatures(operation)) {\n return { type: 'estimate', value: 1, dataset: this.url };\n }\n\n const dataset: IDataset = {\n getCardinality: (operation: Algebra.Operation): QueryResultCardinality | undefined => {\n const queryString = this.operationToNormalizedCountQuery(operation);\n\n const cachedCardinality = this.cache?.get(queryString);\n if (cachedCardinality) {\n return cachedCardinality;\n }\n\n if (this.datasets) {\n const cardinalities = this.datasets\n .filter(ds => this.unionDefaultGraph || (this.defaultGraph && ds.uri.endsWith(this.defaultGraph)))\n .map(ds => estimateCardinality(operation, ds));\n\n const cardinality: QueryResultCardinality = {\n type: cardinalities.some(card => card.type === 'estimate') ? 'estimate' : 'exact',\n value: cardinalities.length > 0 ? cardinalities.reduce((acc, card) => acc + card.value, 0) : 0,\n dataset: this.url,\n };\n\n return cardinality;\n }\n },\n source: this.url,\n uri: this.url,\n };\n\n return estimateCardinality(operation, dataset);\n }\n\n /**\n * Checks whether the provided operation makes use of this endpoint's property features,\n * if the endpoint has property features detected.\n * @param {Algebra.Operation} operation The operation to check.\n * @returns {boolean} Whether the operation makes use of property features.\n */\n public operationUsesPropertyFeatures(operation: Algebra.Operation): boolean {\n let propertyFeaturesUsed = false;\n if (this.propertyFeatures) {\n algebraUtils.visitOperation(operation, {\n [Algebra.Types.PATTERN]: {\n visitor: (subOp) => {\n if (subOp.predicate.termType === 'NamedNode' && this.propertyFeatures!.has(subOp.predicate.value)) {\n propertyFeaturesUsed = true;\n }\n return false;\n },\n },\n [Algebra.Types.LINK]: {\n visitor: (subOp) => {\n if (this.propertyFeatures!.has(subOp.iri.value)) {\n propertyFeaturesUsed = true;\n }\n return false;\n },\n },\n [Algebra.Types.NPS]: {\n visitor: (subOp) => {\n if (subOp.iris.some(iri => this.propertyFeatures!.has(iri.value))) {\n propertyFeaturesUsed = true;\n }\n return false;\n },\n },\n });\n }\n return propertyFeaturesUsed;\n }\n\n /**\n * Create an operation that includes the bindings from the given bindings stream.\n * @param algebraFactory The algebra factory.\n * @param bindMethod A method for adding bindings to an operation.\n * @param operation The operation to bind to.\n * @param addBindings The bindings to add.\n * @param addBindings.bindings The bindings stream.\n * @param addBindings.metadata The bindings metadata.\n */\n public static async addBindingsToOperation(\n algebraFactory: AlgebraFactory,\n bindMethod: BindMethod,\n operation: Algebra.Operation,\n addBindings: { bindings: BindingsStream; metadata: MetadataBindings },\n ): Promise<Algebra.Operation> {\n const bindings = await addBindings.bindings.toArray();\n\n switch (bindMethod) {\n case 'values':\n return algebraFactory.createJoin([\n algebraFactory.createValues(\n addBindings.metadata.variables.map(v => v.variable),\n bindings.map(binding => Object.fromEntries([ ...binding ]\n .map(([ key, value ]) => [ key.value, <RDF.Literal | RDF.NamedNode> value ]))),\n ),\n operation,\n ], false);\n case 'union': { throw new Error('Not implemented yet: \"union\" case'); }\n case 'filter': { throw new Error('Not implemented yet: \"filter\" case'); }\n }\n }\n\n /**\n * Convert an operation to a select query for this pattern.\n * @param algebraFactory The algebra factory.\n * @param {Algebra.Operation} operation A query operation.\n * @param {RDF.Variable[]} variables The variables in scope for the operation.\n * @return {string} A select query string.\n */\n public static operationToSelectQuery(\n algebraFactory: AlgebraFactory,\n operation: Algebra.Operation,\n variables: RDF.Variable[],\n ): string {\n return QuerySourceSparql.operationToQuery(algebraFactory.createProject(operation, variables));\n }\n\n /**\n * Convert an operation to a count query for the number of matching triples for this pattern.\n * @param dataFactory The data factory.\n * @param algebraFactory The algebra factory.\n * @param {Algebra.Operation} operation A query operation.\n * @return {string} A count query string.\n */\n public static operationToCountQuery(\n dataFactory: ComunicaDataFactory,\n algebraFactory: AlgebraFactory,\n operation: Algebra.Operation,\n ): string {\n return QuerySourceSparql.operationToQuery(algebraFactory.createProject(\n algebraFactory.createExtend(\n algebraFactory.createGroup(\n operation,\n [],\n [ algebraFactory.createBoundAggregate(\n dataFactory.variable('var0'),\n 'count',\n algebraFactory.createWildcardExpression(),\n false,\n ) ],\n ),\n dataFactory.variable('count'),\n algebraFactory.createTermExpression(dataFactory.variable('var0')),\n ),\n [ dataFactory.variable('count') ],\n ));\n }\n\n /**\n * Convert an operation to a query for this pattern.\n * @param {Algebra.Operation} operation A query operation.\n * @return {string} A query string.\n */\n public static operationToQuery(operation: Algebra.Operation): string {\n // This query source only handles the Known Algebra from @comunica/utils-algebra.\n // It will likely throw when unknown algebra operations are being translated\n // or the translation will not happen correctly.\n // TODO: add a query generation bus to Comunica to mitigate this problem.\n const ast = toAst(<TraqualAlgebra.Operation> operation);\n return this.queryStringGenerator.generate(ast).trim();\n }\n\n /**\n * Check if the given operation may produce undefined values.\n * @param operation\n */\n public static getOperationUndefs(operation: Algebra.Operation): RDF.Variable[] {\n const variables: RDF.Variable[] = [];\n algebraUtils.visitOperation(operation, {\n [Algebra.Types.LEFT_JOIN]: { preVisitor: (subOperation) => {\n const left = algebraUtils.inScopeVariables(subOperation.input[0]);\n const right = algebraUtils.inScopeVariables(subOperation.input[1]);\n for (const varRight of right) {\n if (!left.some(varLeft => varLeft.equals(varRight))) {\n variables.push(varRight);\n }\n }\n return { continue: false };\n } },\n [Algebra.Types.VALUES]: { preVisitor: (values) => {\n for (const variable of values.variables) {\n if (values.bindings.some(bindings => !(variable.value in bindings))) {\n variables.push(variable);\n }\n }\n return { continue: false };\n } },\n [Algebra.Types.UNION]: { preVisitor: (union) => {\n // Determine variables in scope of the union branches that are not occurring in every branch\n const scopedVariables = union.input.map(op => algebraUtils.inScopeVariables(op));\n for (const variable of uniqTerms(scopedVariables.flat())) {\n if (!scopedVariables.every(input => input.some(inputVar => inputVar.equals(variable)))) {\n variables.push(variable);\n }\n }\n return {};\n } },\n });\n return uniqTerms(variables);\n }\n\n /**\n * Send a SPARQL query to a SPARQL endpoint and retrieve its bindings as a stream.\n * @param {string} endpoint A SPARQL endpoint URL.\n * @param {string} query A SPARQL query string.\n * @param {RDF.Variable[]} variables The expected variables.\n * @param {IActionContext} context The source context.\n * @param undefVariables Variables that may have undefs.\n * @return {BindingsStream} A stream of bindings.\n */\n public async queryBindingsRemote(\n endpoint: string,\n query: string,\n variables: RDF.Variable[],\n context: IActionContext,\n undefVariables: RDF.Variable[],\n ): Promise<BindingsStream> {\n // Index undef variables\n const undefVariablesSet = new Set(undefVariables.map(v => v.value));\n\n this.lastSourceContext = this.context.merge(context);\n const rawStream = await this.endpointFetcher.fetchBindings(endpoint, query);\n this.lastSourceContext = undefined;\n\n const wrapped = wrap<any>(rawStream, { autoStart: false, maxBufferSize: Number.POSITIVE_INFINITY });\n return wrapped.map<RDF.Bindings>((rawData: Record<string, RDF.Term>) => {\n const bindings = variables.map((variable) => {\n const value = rawData[`?${variable.value}`];\n if (!undefVariablesSet.has(variable.value) && !value) {\n Actor.getContextLogger(this.context)?.warn(`The endpoint ${endpoint} failed to provide a binding for ${variable.value}.`);\n }\n return <[RDF.Variable, RDF.Term]>[ variable, value ];\n }).filter(([ _, v ]) => Boolean(v));\n return this.bindingsFactory.bindings(bindings);\n });\n }\n\n public toString(): string {\n return `QuerySourceSparql(${this.url})`;\n }\n}\n"]}
|
package/lib/index.d.ts
CHANGED
|
File without changes
|
package/lib/index.js
CHANGED
|
File without changes
|
package/lib/index.js.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/actor-query-source-identify-hypermedia-sparql",
|
|
3
|
-
"version": "4.4.
|
|
3
|
+
"version": "4.4.2-alpha.49.0",
|
|
4
4
|
"description": "A sparql query-source-identify-hypermedia actor",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,21 +41,24 @@
|
|
|
41
41
|
"build:components": "componentsjs-generator"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@comunica/bus-http": "
|
|
45
|
-
"@comunica/bus-merge-bindings-context": "
|
|
46
|
-
"@comunica/bus-query-source-identify-hypermedia": "
|
|
47
|
-
"@comunica/context-entries": "
|
|
48
|
-
"@comunica/core": "
|
|
49
|
-
"@comunica/types": "
|
|
50
|
-
"@comunica/utils-
|
|
51
|
-
"@comunica/utils-
|
|
52
|
-
"@comunica/utils-
|
|
44
|
+
"@comunica/bus-http": "4.4.2-alpha.49.0",
|
|
45
|
+
"@comunica/bus-merge-bindings-context": "4.4.2-alpha.49.0",
|
|
46
|
+
"@comunica/bus-query-source-identify-hypermedia": "4.4.2-alpha.49.0",
|
|
47
|
+
"@comunica/context-entries": "4.4.2-alpha.49.0",
|
|
48
|
+
"@comunica/core": "4.4.2-alpha.49.0",
|
|
49
|
+
"@comunica/types": "4.4.2-alpha.49.0",
|
|
50
|
+
"@comunica/utils-algebra": "4.4.2-alpha.49.0",
|
|
51
|
+
"@comunica/utils-bindings-factory": "4.4.2-alpha.49.0",
|
|
52
|
+
"@comunica/utils-metadata": "4.4.2-alpha.49.0",
|
|
53
|
+
"@comunica/utils-query-operation": "4.4.2-alpha.49.0",
|
|
53
54
|
"@rdfjs/types": "*",
|
|
54
|
-
"
|
|
55
|
-
"
|
|
55
|
+
"@traqula/algebra-sparql-1-2": "^0.0.24",
|
|
56
|
+
"@traqula/core": "^0.0.24",
|
|
57
|
+
"@traqula/generator-sparql-1-2": "^0.0.24",
|
|
58
|
+
"asynciterator": "^3.10.0",
|
|
59
|
+
"fetch-sparql-endpoint": "7.0.0-beta.1",
|
|
56
60
|
"lru-cache": "^10.0.0",
|
|
57
|
-
"rdf-terms": "^
|
|
58
|
-
"sparqlalgebrajs": "^4.3.8"
|
|
61
|
+
"rdf-terms": "^2.0.0"
|
|
59
62
|
},
|
|
60
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "ef6f96cfd8faf7c37955bb7e0fe9f6fc6a994bdf"
|
|
61
64
|
}
|