@comunica/actor-query-source-identify-hypermedia-sparql 5.1.3 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -1
- package/components/ActorQuerySourceIdentifyHypermediaSparql.jsonld +40 -0
- package/components/QuerySourceSparql.jsonld +1 -1
- package/components/context.jsonld +8 -0
- package/lib/ActorQuerySourceIdentifyHypermediaSparql.d.ts +6 -0
- package/lib/ActorQuerySourceIdentifyHypermediaSparql.js +15 -1
- package/lib/ActorQuerySourceIdentifyHypermediaSparql.js.map +1 -1
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -31,7 +31,8 @@ After installing, this package can be added to your engine's configuration as fo
|
|
|
31
31
|
"@type": "ActorQuerySourceIdentifyHypermediaSparql",
|
|
32
32
|
"mediatorHttp": { "@id": "urn:comunica:default:http/mediators#main" },
|
|
33
33
|
"mediatorMergeBindingsContext": { "@id": "urn:comunica:default:merge-bindings-context/mediators#main" },
|
|
34
|
-
"mediatorQuerySerialize": { "@id": "urn:comunica:default:query-serialize/mediators#main" }
|
|
34
|
+
"mediatorQuerySerialize": { "@id": "urn:comunica:default:query-serialize/mediators#main" },
|
|
35
|
+
"sparqlServerSoftwarePatterns": ["Virtuoso", "Fuseki"]
|
|
35
36
|
}
|
|
36
37
|
]
|
|
37
38
|
}
|
|
@@ -50,3 +51,23 @@ After installing, this package can be added to your engine's configuration as fo
|
|
|
50
51
|
* `countTimeout`: Timeout in ms of how long count queries are allowed to take. If the timeout is reached, an infinity cardinality is returned. Defaults to `3000`.
|
|
51
52
|
* `cardinalityCountQueries`: If count queries should be sent to obtain the cardinality of (sub)queries. If set to false, resulting cardinalities will always be considered infinity. Defaults to `true`
|
|
52
53
|
* `cardinalityEstimateConstruction`: If cardinality estimates for larger queries should be constructed locally from (sub)query cardinalities when possible. Defaults to `false`. If set to false, count queries will be sent for every operation at all levels.
|
|
54
|
+
* `sparqlServerSoftwarePatterns`: An optional list of regular expressions to match against the `Server` HTTP response header. If a match is found, the source is identified as a SPARQL endpoint.
|
|
55
|
+
|
|
56
|
+
## Endpoint Server Header Report
|
|
57
|
+
|
|
58
|
+
The following endpoints have been observed to return the following `Server` headers (at the time of writing):
|
|
59
|
+
|
|
60
|
+
| Endpoint | Server Header |
|
|
61
|
+
| ----------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
62
|
+
| http://lod.sztaki.hu/sparql | `Virtuoso/06.01.3127 (Linux) i686-pc-linux-gnu` |
|
|
63
|
+
| http://linguistic.linkeddata.es/sparql | `Virtuoso/06.01.3127 (Linux) x86_64-pc-linux-gnu` |
|
|
64
|
+
| http://www.genome.jp/sparql/linkdb | `Virtuoso/07.20.3217 (Linux) x86_64-unknown-linux-gnu` |
|
|
65
|
+
| http://sparql.archives-ouvertes.fr/sparql | `Virtuoso/07.20.3229 (Linux) x86_64-pc-linux-gnu` |
|
|
66
|
+
| http://data.persee.fr/sparql | `Virtuoso/07.20.3230 (Linux) x86_64-generic_glibc25-linux-gnu` |
|
|
67
|
+
| http://linkedgeodata.org/sparql | `Virtuoso/07.20.3233 (Linux) x86_64-pc-linux-gnu` |
|
|
68
|
+
| http://kaiko.getalp.org/sparql | `Virtuoso/07.20.3240 (Linux) x86_64-pc-linux-gnu` |
|
|
69
|
+
| http://data.cervantesvirtual.com/openrdf-sesame/repositories/data | `Virtuoso/07.20.3240 (Linux) x86_64-pc-linux-gnu` |
|
|
70
|
+
| http://sparql.hegroup.org/sparql/ | `Virtuoso/07.20.3241 (Linux) x86_64-pc-linux-gnu` |
|
|
71
|
+
| http://dbpedia.org/sparql | `Virtuoso/08.03.3334 (Linux) x86_64-ubuntu_noble-linux-glibc2.39 VDB` |
|
|
72
|
+
| https://lov.linkeddata.es/dataset/lov/sparql | `Fuseki (1.1.1)` |
|
|
73
|
+
| http://lov.okfn.org/endpoint/lov | `Fuseki (1.1.1)` |
|
|
@@ -108,6 +108,22 @@
|
|
|
108
108
|
"default": "600",
|
|
109
109
|
"comment": "Force an HTTP GET instead of default POST (when forceHttpGet is false) when the url length (including encoded query) is below this number."
|
|
110
110
|
},
|
|
111
|
+
{
|
|
112
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_sparqlServerSoftwarePatterns",
|
|
113
|
+
"range": {
|
|
114
|
+
"@type": "ParameterRangeUnion",
|
|
115
|
+
"parameterRangeElements": [
|
|
116
|
+
{
|
|
117
|
+
"@type": "ParameterRangeArray",
|
|
118
|
+
"parameterRangeValue": "xsd:string"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"@type": "ParameterRangeUndefined"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"comment": "Regexes to match against the server header to identify SPARQL endpoints."
|
|
126
|
+
},
|
|
111
127
|
{
|
|
112
128
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_name",
|
|
113
129
|
"range": "xsd:string",
|
|
@@ -297,10 +313,24 @@
|
|
|
297
313
|
"memberFieldName": "forceGetIfUrlLengthBelow",
|
|
298
314
|
"range": "xsd:number"
|
|
299
315
|
},
|
|
316
|
+
{
|
|
317
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql__member_sparqlServerSoftwarePatterns",
|
|
318
|
+
"memberFieldName": "sparqlServerSoftwarePatterns",
|
|
319
|
+
"range": {
|
|
320
|
+
"@type": "ParameterRangeArray",
|
|
321
|
+
"parameterRangeValue": {
|
|
322
|
+
"@type": "ParameterRangeWildcard"
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
},
|
|
300
326
|
{
|
|
301
327
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql__member_constructor",
|
|
302
328
|
"memberFieldName": "constructor"
|
|
303
329
|
},
|
|
330
|
+
{
|
|
331
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql__member_checkServerSoftware",
|
|
332
|
+
"memberFieldName": "checkServerSoftware"
|
|
333
|
+
},
|
|
304
334
|
{
|
|
305
335
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql__member_testMetadata",
|
|
306
336
|
"memberFieldName": "testMetadata"
|
|
@@ -386,6 +416,12 @@
|
|
|
386
416
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_forceGetIfUrlLengthBelow"
|
|
387
417
|
}
|
|
388
418
|
},
|
|
419
|
+
{
|
|
420
|
+
"keyRaw": "sparqlServerSoftwarePatterns",
|
|
421
|
+
"value": {
|
|
422
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_sparqlServerSoftwarePatterns"
|
|
423
|
+
}
|
|
424
|
+
},
|
|
389
425
|
{
|
|
390
426
|
"keyRaw": "name",
|
|
391
427
|
"value": {
|
|
@@ -467,6 +503,10 @@
|
|
|
467
503
|
{
|
|
468
504
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#IActorQuerySourceIdentifyHypermediaSparqlArgs__member_forceGetIfUrlLengthBelow",
|
|
469
505
|
"memberFieldName": "forceGetIfUrlLengthBelow"
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#IActorQuerySourceIdentifyHypermediaSparqlArgs__member_sparqlServerSoftwarePatterns",
|
|
509
|
+
"memberFieldName": "sparqlServerSoftwarePatterns"
|
|
470
510
|
}
|
|
471
511
|
],
|
|
472
512
|
"constructorArguments": []
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_algebraFactory",
|
|
52
|
-
"range": "urn:npm:@
|
|
52
|
+
"range": "urn:npm:@comunica/utils-algebra:AlgebraFactory"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"@id": "caqsihs:components/QuerySourceSparql.jsonld#QuerySourceSparql_bindingsFactory",
|
|
@@ -44,6 +44,10 @@
|
|
|
44
44
|
"args_forceGetIfUrlLengthBelow": {
|
|
45
45
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_forceGetIfUrlLengthBelow"
|
|
46
46
|
},
|
|
47
|
+
"args_sparqlServerSoftwarePatterns": {
|
|
48
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_sparqlServerSoftwarePatterns",
|
|
49
|
+
"@container": "@list"
|
|
50
|
+
},
|
|
47
51
|
"args_name": {
|
|
48
52
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_name"
|
|
49
53
|
},
|
|
@@ -93,6 +97,10 @@
|
|
|
93
97
|
"forceGetIfUrlLengthBelow": {
|
|
94
98
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_forceGetIfUrlLengthBelow"
|
|
95
99
|
},
|
|
100
|
+
"sparqlServerSoftwarePatterns": {
|
|
101
|
+
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_sparqlServerSoftwarePatterns",
|
|
102
|
+
"@container": "@list"
|
|
103
|
+
},
|
|
96
104
|
"name": {
|
|
97
105
|
"@id": "caqsihs:components/ActorQuerySourceIdentifyHypermediaSparql.jsonld#ActorQuerySourceIdentifyHypermediaSparql_args_name"
|
|
98
106
|
},
|
|
@@ -20,7 +20,9 @@ export declare class ActorQuerySourceIdentifyHypermediaSparql extends ActorQuery
|
|
|
20
20
|
readonly cardinalityCountQueries: boolean;
|
|
21
21
|
readonly cardinalityEstimateConstruction: boolean;
|
|
22
22
|
readonly forceGetIfUrlLengthBelow: number;
|
|
23
|
+
readonly sparqlServerSoftwarePatterns: RegExp[];
|
|
23
24
|
constructor(args: IActorQuerySourceIdentifyHypermediaSparqlArgs);
|
|
25
|
+
checkServerSoftware(serverSoftware?: string): boolean;
|
|
24
26
|
testMetadata(action: IActionQuerySourceIdentifyHypermedia): Promise<TestResult<IActorQuerySourceIdentifyHypermediaTest>>;
|
|
25
27
|
run(action: IActionQuerySourceIdentifyHypermedia): Promise<IActorQuerySourceIdentifyHypermediaOutput>;
|
|
26
28
|
}
|
|
@@ -87,5 +89,9 @@ export interface IActorQuerySourceIdentifyHypermediaSparqlArgs extends IActorQue
|
|
|
87
89
|
* @default {600}
|
|
88
90
|
*/
|
|
89
91
|
forceGetIfUrlLengthBelow: number;
|
|
92
|
+
/**
|
|
93
|
+
* Regexes to match against the server header to identify SPARQL endpoints.
|
|
94
|
+
*/
|
|
95
|
+
sparqlServerSoftwarePatterns?: string[];
|
|
90
96
|
}
|
|
91
97
|
export type BindMethod = 'values' | 'union' | 'filter';
|
|
@@ -23,6 +23,7 @@ class ActorQuerySourceIdentifyHypermediaSparql extends bus_query_source_identify
|
|
|
23
23
|
cardinalityCountQueries;
|
|
24
24
|
cardinalityEstimateConstruction;
|
|
25
25
|
forceGetIfUrlLengthBelow;
|
|
26
|
+
sparqlServerSoftwarePatterns;
|
|
26
27
|
constructor(args) {
|
|
27
28
|
super(args, 'sparql');
|
|
28
29
|
this.mediatorHttp = args.mediatorHttp;
|
|
@@ -37,10 +38,23 @@ class ActorQuerySourceIdentifyHypermediaSparql extends bus_query_source_identify
|
|
|
37
38
|
this.cardinalityCountQueries = args.cardinalityCountQueries;
|
|
38
39
|
this.cardinalityEstimateConstruction = args.cardinalityEstimateConstruction;
|
|
39
40
|
this.forceGetIfUrlLengthBelow = args.forceGetIfUrlLengthBelow;
|
|
41
|
+
this.sparqlServerSoftwarePatterns = (args.sparqlServerSoftwarePatterns ?? []).map(pattern => new RegExp(pattern, 'u'));
|
|
42
|
+
}
|
|
43
|
+
checkServerSoftware(serverSoftware) {
|
|
44
|
+
if (!serverSoftware) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
for (const regex of this.sparqlServerSoftwarePatterns) {
|
|
48
|
+
if (regex.test(serverSoftware)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
40
53
|
}
|
|
41
54
|
async testMetadata(action) {
|
|
42
55
|
if (!action.forceSourceType && !this.forceSourceType && !action.metadata.sparqlService &&
|
|
43
|
-
!(this.checkUrlSuffix && (action.url.endsWith('/sparql') || action.url.endsWith('/sparql/')))
|
|
56
|
+
!(this.checkUrlSuffix && (action.url.endsWith('/sparql') || action.url.endsWith('/sparql/'))) &&
|
|
57
|
+
!this.checkServerSoftware(action.metadata.serverSoftware)) {
|
|
44
58
|
return (0, core_1.failTest)(`Actor ${this.name} could not detect a SPARQL service description or URL ending on /sparql.`);
|
|
45
59
|
}
|
|
46
60
|
return (0, core_1.passTest)({ filterFactor: 1 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorQuerySourceIdentifyHypermediaSparql.js","sourceRoot":"","sources":["ActorQuerySourceIdentifyHypermediaSparql.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MediatorHttp } from '@comunica/bus-http';\nimport type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';\nimport type { MediatorQuerySerialize } from '@comunica/bus-query-serialize';\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 mediatorQuerySerialize: MediatorQuerySerialize;\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 this.mediatorHttp = args.mediatorHttp;\n this.mediatorMergeBindingsContext = args.mediatorMergeBindingsContext;\n this.mediatorQuerySerialize = args.mediatorQuerySerialize;\n this.checkUrlSuffix = args.checkUrlSuffix;\n this.forceHttpGet = args.forceHttpGet;\n this.cacheSize = args.cacheSize;\n this.forceSourceType = Boolean(args.forceSourceType);\n this.bindMethod = args.bindMethod;\n this.countTimeout = args.countTimeout;\n this.cardinalityCountQueries = args.cardinalityCountQueries;\n this.cardinalityEstimateConstruction = args.cardinalityEstimateConstruction;\n this.forceGetIfUrlLengthBelow = args.forceGetIfUrlLengthBelow;\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 // Pass the original URL as backup, as some endpoints misconfigure their endpoint URL in the service description.\n action.url,\n action.context,\n this.mediatorHttp,\n this.mediatorQuerySerialize,\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 Boolean(action.context.get(KeysInitQuery.parseUnsupportedVersions)),\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 * Mediator for serializing queries.\n */\n mediatorQuerySerialize: MediatorQuerySerialize;\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
|
+
{"version":3,"file":"ActorQuerySourceIdentifyHypermediaSparql.js","sourceRoot":"","sources":["ActorQuerySourceIdentifyHypermediaSparql.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MediatorHttp } from '@comunica/bus-http';\nimport type { MediatorMergeBindingsContext } from '@comunica/bus-merge-bindings-context';\nimport type { MediatorQuerySerialize } from '@comunica/bus-query-serialize';\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 mediatorQuerySerialize: MediatorQuerySerialize;\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 public readonly sparqlServerSoftwarePatterns: RegExp[];\n\n public constructor(args: IActorQuerySourceIdentifyHypermediaSparqlArgs) {\n super(args, 'sparql');\n this.mediatorHttp = args.mediatorHttp;\n this.mediatorMergeBindingsContext = args.mediatorMergeBindingsContext;\n this.mediatorQuerySerialize = args.mediatorQuerySerialize;\n this.checkUrlSuffix = args.checkUrlSuffix;\n this.forceHttpGet = args.forceHttpGet;\n this.cacheSize = args.cacheSize;\n this.forceSourceType = Boolean(args.forceSourceType);\n this.bindMethod = args.bindMethod;\n this.countTimeout = args.countTimeout;\n this.cardinalityCountQueries = args.cardinalityCountQueries;\n this.cardinalityEstimateConstruction = args.cardinalityEstimateConstruction;\n this.forceGetIfUrlLengthBelow = args.forceGetIfUrlLengthBelow;\n this.sparqlServerSoftwarePatterns = (\n args.sparqlServerSoftwarePatterns ?? []\n ).map(pattern => new RegExp(pattern, 'u'));\n }\n\n public checkServerSoftware(serverSoftware?: string): boolean {\n if (!serverSoftware) {\n return false;\n }\n for (const regex of this.sparqlServerSoftwarePatterns) {\n if (regex.test(serverSoftware)) {\n return true;\n }\n }\n return false;\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 !this.checkServerSoftware(action.metadata.serverSoftware)) {\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 // Pass the original URL as backup, as some endpoints misconfigure their endpoint URL in the service description.\n action.url,\n action.context,\n this.mediatorHttp,\n this.mediatorQuerySerialize,\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 Boolean(action.context.get(KeysInitQuery.parseUnsupportedVersions)),\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 * Mediator for serializing queries.\n */\n mediatorQuerySerialize: MediatorQuerySerialize;\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 * Regexes to match against the server header to identify SPARQL endpoints.\n */\n sparqlServerSoftwarePatterns?: string[];\n}\n\nexport type BindMethod = 'values' | 'union' | 'filter';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/actor-query-source-identify-hypermedia-sparql",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"description": "A sparql query-source-identify-hypermedia actor",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,22 +41,22 @@
|
|
|
41
41
|
"build:components": "componentsjs-generator"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@comunica/bus-http": "^5.
|
|
45
|
-
"@comunica/bus-merge-bindings-context": "^5.
|
|
46
|
-
"@comunica/bus-query-serialize": "^5.
|
|
47
|
-
"@comunica/bus-query-source-identify-hypermedia": "^5.
|
|
48
|
-
"@comunica/context-entries": "^5.
|
|
49
|
-
"@comunica/core": "^5.
|
|
50
|
-
"@comunica/types": "^5.
|
|
51
|
-
"@comunica/utils-algebra": "^5.
|
|
52
|
-
"@comunica/utils-bindings-factory": "^5.
|
|
53
|
-
"@comunica/utils-metadata": "^5.
|
|
54
|
-
"@comunica/utils-query-operation": "^5.
|
|
44
|
+
"@comunica/bus-http": "^5.2.0",
|
|
45
|
+
"@comunica/bus-merge-bindings-context": "^5.2.0",
|
|
46
|
+
"@comunica/bus-query-serialize": "^5.2.0",
|
|
47
|
+
"@comunica/bus-query-source-identify-hypermedia": "^5.2.0",
|
|
48
|
+
"@comunica/context-entries": "^5.2.0",
|
|
49
|
+
"@comunica/core": "^5.2.0",
|
|
50
|
+
"@comunica/types": "^5.2.0",
|
|
51
|
+
"@comunica/utils-algebra": "^5.2.0",
|
|
52
|
+
"@comunica/utils-bindings-factory": "^5.2.0",
|
|
53
|
+
"@comunica/utils-metadata": "^5.2.0",
|
|
54
|
+
"@comunica/utils-query-operation": "^5.2.0",
|
|
55
55
|
"@rdfjs/types": "*",
|
|
56
56
|
"asynciterator": "^3.10.0",
|
|
57
57
|
"fetch-sparql-endpoint": "^7.1.0",
|
|
58
58
|
"lru-cache": "^11.2.2",
|
|
59
59
|
"rdf-terms": "^2.0.0"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "ebb0e79bddcd850fcb8d0fb5b422af88e67fa283"
|
|
62
62
|
}
|