UNPKG

sparql-http-client

Version:
130 lines (111 loc) 4.53 kB
import mergeHeaders from './lib/mergeHeaders.js' import mergeParameters from './lib/mergeParameters.js' /** * A query implementation that prepares URLs and headers for SPARQL queries and returns the raw fetch response. */ class RawQuery { /** * @param {Object} options * @param {SimpleClient} options.client client that provides the HTTP I/O */ constructor ({ client }) { this.client = client } /** * Sends a request for a ASK query * * @param {string} query ASK query * @param {Object} [options] * @param {string[]} [options.defaultGraph] default graph URI parameter * @param {Headers} [options.headers] additional request headers * @param {string[]} [options.namedGraph] named graph URI parameter * @param {'get'|'postUrlencoded'|'postDirect'} [options.operation='get'] SPARQL Protocol operation * @param {Object} [options.parameters] additional request parameters * @return {Promise<Response>} */ async ask (query, { defaultGraph, headers, namedGraph, operation = 'get', parameters } = {}) { headers = mergeHeaders(headers) if (!headers.has('accept')) { headers.set('accept', 'application/sparql-results+json') } parameters = mergeParameters( parameters, { 'default-graph-uri': defaultGraph }, { 'named-graph-uri': namedGraph } ) return this.client[operation](query, { headers, parameters }) } /** * Sends a request for a CONSTRUCT or DESCRIBE query * * @param {string} query CONSTRUCT or DESCRIBE query * @param {Object} [options] * @param {string[]} [options.defaultGraph] default graph URI parameter * @param {Headers} [options.headers] additional request headers * @param {string[]} [options.namedGraph] named graph URI parameter * @param {'get'|'postUrlencoded'|'postDirect'} [options.operation='get'] SPARQL Protocol operation * @param {Object} [options.parameters] additional request parameters * @return {Promise<Response>} */ async construct (query, { defaultGraph, headers, namedGraph, operation = 'get', parameters = {} } = {}) { headers = mergeHeaders(headers) if (!headers.has('accept')) { headers.set('accept', 'application/n-triples, text/turtle') } parameters = mergeParameters( parameters, { 'default-graph-uri': defaultGraph }, { 'named-graph-uri': namedGraph } ) return this.client[operation](query, { headers, operation, parameters }) } /** * Sends a request for a SELECT query * * @param {string} query SELECT query * @param {Object} [options] * @param {string[]} [options.defaultGraph] default graph URI parameter * @param {Headers} [options.headers] additional request headers * @param {string[]} [options.namedGraph] named graph URI parameter * @param {'get'|'postUrlencoded'|'postDirect'} [options.operation='get'] SPARQL Protocol operation * @param {Object} [options.parameters] additional request parameters * @return {Promise<Response>} */ async select (query, { defaultGraph, headers, namedGraph, operation = 'get', parameters = {} } = {}) { headers = mergeHeaders(headers) if (!headers.has('accept')) { headers.set('accept', 'application/sparql-results+json') } parameters = mergeParameters( parameters, { 'default-graph-uri': defaultGraph }, { 'named-graph-uri': namedGraph } ) return this.client[operation](query, { headers, parameters }) } /** * Sends a request for an update query * * @param {string} query update query * @param {Object} [options] * @param {Headers} [options.headers] additional request headers * @param {'get'|'postUrlencoded'|'postDirect'} [options.operation='postUrlencoded'] SPARQL Protocol operation * @param {Object} [options.parameters] additional request parameters * @param {string[]} [options.usingGraph] using graph URI parameter * @param {string[]} [options.usingNamedGraph] using named graph URI parameter * @return {Promise<Response>} */ async update (query, { headers, operation = 'postUrlencoded', parameters, usingGraph, usingNamedGraph } = {}) { headers = mergeHeaders(headers) if (!headers.has('accept')) { headers.set('accept', '*/*') } parameters = mergeParameters( parameters, { 'using-graph-uri': usingGraph }, { 'using-named-graph-uri': usingNamedGraph } ) return this.client[operation](query, { headers, parameters, update: true }) } } export default RawQuery