UNPKG

@comunica/actor-query-source-identify-hypermedia-sparql

Version:

A sparql query-source-identify-hypermedia actor

76 lines 4.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ActorQuerySourceIdentifyHypermediaSparql = void 0; const bus_query_source_identify_hypermedia_1 = require("@comunica/bus-query-source-identify-hypermedia"); const context_entries_1 = require("@comunica/context-entries"); const core_1 = require("@comunica/core"); const utils_algebra_1 = require("@comunica/utils-algebra"); const utils_bindings_factory_1 = require("@comunica/utils-bindings-factory"); const QuerySourceSparql_1 = require("./QuerySourceSparql"); /** * A comunica SPARQL Query Source Identify Hypermedia Actor. */ class ActorQuerySourceIdentifyHypermediaSparql extends bus_query_source_identify_hypermedia_1.ActorQuerySourceIdentifyHypermedia { mediatorHttp; mediatorMergeBindingsContext; mediatorQuerySerialize; checkUrlSuffix; forceHttpGet; cacheSize; forceSourceType; bindMethod; countTimeout; cardinalityCountQueries; cardinalityEstimateConstruction; forceGetIfUrlLengthBelow; sparqlServerSoftwarePatterns; constructor(args) { super(args, 'sparql'); this.mediatorHttp = args.mediatorHttp; this.mediatorMergeBindingsContext = args.mediatorMergeBindingsContext; this.mediatorQuerySerialize = args.mediatorQuerySerialize; this.checkUrlSuffix = args.checkUrlSuffix; this.forceHttpGet = args.forceHttpGet; this.cacheSize = args.cacheSize; this.forceSourceType = Boolean(args.forceSourceType); this.bindMethod = args.bindMethod; this.countTimeout = args.countTimeout; this.cardinalityCountQueries = args.cardinalityCountQueries; this.cardinalityEstimateConstruction = args.cardinalityEstimateConstruction; this.forceGetIfUrlLengthBelow = args.forceGetIfUrlLengthBelow; this.sparqlServerSoftwarePatterns = (args.sparqlServerSoftwarePatterns ?? []).map(pattern => new RegExp(pattern, 'u')); } checkServerSoftware(serverSoftware) { if (!serverSoftware) { return false; } for (const regex of this.sparqlServerSoftwarePatterns) { if (regex.test(serverSoftware)) { return true; } } return false; } async testMetadata(action) { if (!action.forceSourceType && !this.forceSourceType && !action.metadata.sparqlService && !(this.checkUrlSuffix && (action.url.endsWith('/sparql') || action.url.endsWith('/sparql/'))) && !this.checkServerSoftware(action.metadata.serverSoftware)) { return (0, core_1.failTest)(`Actor ${this.name} could not detect a SPARQL service description or URL ending on /sparql.`); } return (0, core_1.passTest)({ filterFactor: 1 }); } async run(action) { this.logInfo(action.context, `Identified ${action.url} as sparql source with service URL: ${action.metadata.sparqlService || action.url}`); const dataFactory = action.context.getSafe(context_entries_1.KeysInitQuery.dataFactory); const algebraFactory = new utils_algebra_1.AlgebraFactory(dataFactory); const isSingularSource = action.context.get(context_entries_1.KeysQueryOperation.querySources)?.length === 1; const source = new QuerySourceSparql_1.QuerySourceSparql((action.forceSourceType ?? this.forceSourceType) ? action.url : action.metadata.sparqlService || action.url, // Pass the original URL as backup, as some endpoints misconfigure their endpoint URL in the service description. action.url, action.context, this.mediatorHttp, this.mediatorQuerySerialize, this.bindMethod, dataFactory, algebraFactory, await utils_bindings_factory_1.BindingsFactory.create(this.mediatorMergeBindingsContext, action.context, dataFactory), this.forceHttpGet, this.cacheSize, this.countTimeout, // Cardinalities can be infinity when we're querying just a single source. this.cardinalityCountQueries && !isSingularSource, this.cardinalityEstimateConstruction, this.forceGetIfUrlLengthBelow, Boolean(action.context.get(context_entries_1.KeysInitQuery.parseUnsupportedVersions)), action.metadata); return { source }; } } exports.ActorQuerySourceIdentifyHypermediaSparql = ActorQuerySourceIdentifyHypermediaSparql; //# sourceMappingURL=ActorQuerySourceIdentifyHypermediaSparql.js.map