diff --git a/src/server/index.js b/src/server/index.js index ee505da647eac6e848143b034ec380af36b4d968..47715fe853487439489bc9c3649700a16bf0502d 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -1,40 +1,41 @@ -import express from 'express'; -import path from 'path'; -import bodyParser from 'body-parser'; -import { has } from 'lodash'; +import express from 'express' +import path from 'path' +import bodyParser from 'body-parser' +import { has } from 'lodash' import { getResultCount, getPaginatedResults, getAllResults, - getByURI } from './sparql/FacetResults'; -import { getFacet } from './sparql/FacetValues'; -import { queryJenaIndex } from './sparql/JenaQuery'; -const DEFAULT_PORT = 3001; -const app = express(); -app.set('port', process.env.PORT || DEFAULT_PORT); -app.use(bodyParser.json()); + getByURI +} from './sparql/FacetResults' +import { getFacet } from './sparql/FacetValues' +import { queryJenaIndex } from './sparql/JenaQuery' +const DEFAULT_PORT = 3001 +const app = express() +app.set('port', process.env.PORT || DEFAULT_PORT) +app.use(bodyParser.json()) // NODE_ENV is defined in package.json when running in localhost -const isDevelopment = process.env.NODE_ENV === 'development' ? true : false; +const isDevelopment = process.env.NODE_ENV === 'development' // allow CORS -app.use(function(req, res, next) { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); - next(); -}); +app.use(function (req, res, next) { + res.header('Access-Control-Allow-Origin', '*') + res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') + next() +}) -let publicPath = null; +let publicPath = null // Express server is used to serve the React app only in production if (!isDevelopment) { // The root directory from which to serve static assets - publicPath = path.join(__dirname, './../public/'); - app.use(express.static(publicPath)); + publicPath = path.join(__dirname, './../public/') + app.use(express.static(publicPath)) } // React app makes requests to these api urls -const apiPath = '/api'; +const apiPath = '/api' // https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016 app.get(`${apiPath}/:resultClass/paginated`, async (req, res, next) => { @@ -47,35 +48,35 @@ app.get(`${apiPath}/:resultClass/paginated`, async (req, res, next) => { sortDirection: req.query.sortDirection || null, constraints: req.query.constraints == null ? null : JSON.parse(req.query.constraints), resultFormat: req.query.resultFormat == null ? 'json' : req.query.resultFormat - }); - res.json(data); - } catch(error) { - next(error); + }) + res.json(data) + } catch (error) { + next(error) } -}); +}) app.get(`${apiPath}/:resultClass/all`, async (req, res, next) => { try { - const resultFormat = req.query.resultFormat == null ? 'json' : req.query.resultFormat; + const resultFormat = req.query.resultFormat == null ? 'json' : req.query.resultFormat const data = await getAllResults({ resultClass: req.params.resultClass, facetClass: req.query.facetClass || null, constraints: req.query.constraints == null ? null : JSON.parse(req.query.constraints), resultFormat: resultFormat - }); + }) if (resultFormat === 'csv') { res.writeHead(200, { 'Content-Type': 'text/csv', 'Content-Disposition': 'attachment; filename=results.csv' - }); - res.end(data); + }) + res.end(data) } else { - res.json(data); + res.json(data) } - } catch(error) { - next(error); + } catch (error) { + next(error) } -}); +}) app.get(`${apiPath}/:resultClass/count`, async (req, res, next) => { try { @@ -83,12 +84,12 @@ app.get(`${apiPath}/:resultClass/count`, async (req, res, next) => { resultClass: req.params.resultClass, constraints: req.query.constraints == null ? null : JSON.parse(req.query.constraints), resultFormat: req.query.resultFormat == null ? 'json' : req.query.resultFormat - }); - res.json(data); - } catch(error) { - next(error); + }) + res.json(data) + } catch (error) { + next(error) } -}); +}) app.get(`${apiPath}/:resultClass/instance/:uri`, async (req, res, next) => { try { @@ -99,12 +100,12 @@ app.get(`${apiPath}/:resultClass/instance/:uri`, async (req, res, next) => { variant: req.query.variant || null, uri: req.params.uri, resultFormat: req.query.resultFormat == null ? 'json' : req.query.resultFormat - }); - res.json(data); - } catch(error) { - next(error); + }) + res.json(data) + } catch (error) { + next(error) } -}); +}) app.get(`${apiPath}/:facetClass/facet/:id`, async (req, res, next) => { try { @@ -116,27 +117,27 @@ app.get(`${apiPath}/:facetClass/facet/:id`, async (req, res, next) => { constraints: req.query.constraints == null ? null : JSON.parse(req.query.constraints), resultFormat: req.query.resultFormat == null ? 'json' : req.query.resultFormat, constrainSelf: req.query.constrainSelf || false - }); - res.json(data); - } catch(error) { - next(error); + }) + res.json(data) + } catch (error) { + next(error) } -}); +}) app.get(`${apiPath}/search`, async (req, res, next) => { - let queryTerm = ''; - let latMin = 0; - let longMin = 0; - let latMax = 0; - let longMax = 0; + let queryTerm = '' + let latMin = 0 + let longMin = 0 + let latMax = 0 + let longMax = 0 if (has(req.query, 'q')) { - queryTerm = req.query.q; + queryTerm = req.query.q } if (has(req.query, 'latMin')) { - latMin = req.query.latMin; - longMin = req.query.longMin; - latMax = req.query.latMax; - longMax = req.query.longMax; + latMin = req.query.latMin + longMin = req.query.longMin + latMax = req.query.latMax + longMax = req.query.longMax } try { const data = await queryJenaIndex({ @@ -146,27 +147,27 @@ app.get(`${apiPath}/search`, async (req, res, next) => { latMax: latMax, longMax: longMax, resultFormat: req.query.resultFormat == null ? 'json' : req.query.resultFormat - }); - res.json(data); - } catch(error) { - next(error); + }) + res.json(data) + } catch (error) { + next(error) } -}); +}) // Express server is used to serve the React app only in production if (!isDevelopment) { /* Routes are matched to a url in order of their definition Redirect all the the rest for react-router to handle */ - app.get('*', function(request, response) { - response.sendFile(path.join(publicPath, 'index.html')); - }); + app.get('*', function (request, response) { + response.sendFile(path.join(publicPath, 'index.html')) + }) } -let servingInfo = isDevelopment ? - `NODE_ENV=development, so Webpack serves the React app` - : `Static files (e.g. the React app) will be served from ${publicPath}`; +const servingInfo = isDevelopment + ? 'NODE_ENV=development, so Webpack serves the React app' + : `Static files (e.g. the React app) will be served from ${publicPath}` -const port = app.get('port'); +const port = app.get('port') app.listen(port, () => console.log(` @@ -174,4 +175,4 @@ app.listen(port, () => API path is ${apiPath} ${servingInfo} `) -); +) diff --git a/src/server/sparql/FacetConfigsMMM.js b/src/server/sparql/FacetConfigsMMM.js index d466ec04dcbc7c244ce9296b944e09e875160813..89a7ace09ac42a01c42957f0973043add7d3df30 100644 --- a/src/server/sparql/FacetConfigsMMM.js +++ b/src/server/sparql/FacetConfigsMMM.js @@ -23,7 +23,7 @@ const invalidActorTimespans = ` <http://ldf.fi/mmm/time/sdbm_754_birth_timespan>, <http://ldf.fi/mmm/time/sdbm_41046_birth_timespan>, <http://ldf.fi/mmm/time/sdbm_5963_birth_timespan> -`; +` const invalidTransferOfCustodyTimespans = ` <http://ldf.fi/mmm/time/bibale_element_478356>, @@ -39,19 +39,19 @@ const invalidTransferOfCustodyTimespans = ` <http://ldf.fi/mmm/time/bibale_element_456150>, <http://ldf.fi/mmm/time/bibale_element_466496>, <http://ldf.fi/mmm/time/bibale_element_471075> -`; +` const invalidActors = ` <http://ldf.fi/mmm/actor/sdbm_names/> -`; +` const invalidLanguages = ` <http://ldf.fi/mmm/language/sdbm_languages/> -`; +` const invalidMaterials = ` <http://ldf.fi/mmm/material/> -`; +` export const facetConfigs = { manuscripts: { @@ -61,7 +61,7 @@ export const facetConfigs = { labelPath: 'skos:prefLabel', textQueryPredicate: '', // empty for querying the facetClass textQueryProperty: 'skos:prefLabel', // limit only to prefLabels - type: 'text', + type: 'text' }, author: { id: 'author', @@ -80,7 +80,7 @@ export const facetConfigs = { labelPath: 'mmm-schema:manuscript_work/skos:prefLabel', textQueryPredicate: 'mmm-schema:manuscript_work', // text query for works textQueryProperty: '', // query everything in text index - type: 'text', + type: 'text' }, productionPlace: { id: 'productionPlace', @@ -92,7 +92,7 @@ export const facetConfigs = { predicate: '^crm:P108_has_produced/crm:P7_took_place_at', parentProperty: 'gvp:broaderPreferred', parentPredicate: '^crm:P108_has_produced/crm:P7_took_place_at/gvp:broaderPreferred+', - type: 'hierarchical', + type: 'hierarchical' }, productionTimespan: { id: 'productionTimespan', @@ -102,14 +102,14 @@ export const facetConfigs = { predicate: '^crm:P108_has_produced/crm:P4_has_time-span', startProperty: 'crm:P82a_begin_of_the_begin', endProperty: 'crm:P82b_end_of_the_end', - type: 'timespan', + type: 'timespan' }, note: { id: 'note', labelPath: 'crm:P3_has_note', textQueryPredicate: '', // empty for querying the facetClass textQueryProperty: 'crm:P3_has_note', - type: 'text', + type: 'text' }, transferOfCustodyPlace: { id: 'productionPlace', @@ -121,7 +121,7 @@ export const facetConfigs = { predicate: '^crm:P30_transferred_custody_of/crm:P7_took_place_at', parentProperty: 'gvp:broaderPreferred', parentPredicate: '^crm:P30_transferred_custody_of/crm:P7_took_place_at/gvp:broaderPreferred+', - type: 'hierarchical', + type: 'hierarchical' }, transferOfCustodyTimespan: { @@ -136,7 +136,7 @@ export const facetConfigs = { predicate: '^crm:P30_transferred_custody_of/crm:P4_has_time-span', startProperty: 'crm:P82a_begin_of_the_begin', endProperty: 'crm:P82b_end_of_the_end', - type: 'timespan', + type: 'timespan' }, lastKnownLocation: { id: 'lastKnownLocation', @@ -148,7 +148,7 @@ export const facetConfigs = { predicate: 'mmm-schema:last_known_location', parentProperty: 'gvp:broaderPreferred', parentPredicate: 'mmm-schema:last_known_location/gvp:broaderPreferred+', - type: 'hierarchical', + type: 'hierarchical' }, language: { id: 'language', @@ -160,7 +160,7 @@ export const facetConfigs = { label: 'Language', labelPath: 'crm:P128_carries/crm:P72_has_language/skos:prefLabel', predicate: 'crm:P128_carries/crm:P72_has_language', - type: 'list', + type: 'list' }, material: { id: 'material', @@ -172,70 +172,70 @@ export const facetConfigs = { label: 'Language', labelPath: 'crm:P45_consists_of/skos:prefLabel', predicate: 'crm:P45_consists_of', - type: 'list', + type: 'list' }, height: { id: 'height', facetValueFilter: '', labelPath: 'mmm-schema:height/crm:P90_has_value', predicate: 'mmm-schema:height/crm:P90_has_value', - type: 'integer', + type: 'integer' }, width: { id: 'width', facetValueFilter: '', labelPath: 'mmm-schema:width/crm:P90_has_value', predicate: 'mmm-schema:width/crm:P90_has_value', - type: 'integer', + type: 'integer' }, folios: { id: 'folios', facetValueFilter: '', labelPath: 'mmm-schema:folios/crm:P90_has_value', predicate: 'mmm-schema:folios/crm:P90_has_value', - type: 'integer', + type: 'integer' }, lines: { id: 'lines', facetValueFilter: '', labelPath: 'mmm-schema:lines/crm:P90_has_value', predicate: 'mmm-schema:lines/crm:P90_has_value', - type: 'integer', + type: 'integer' }, columns: { id: 'columns', facetValueFilter: '', labelPath: 'mmm-schema:columns/crm:P90_has_value', predicate: 'mmm-schema:columns/crm:P90_has_value', - type: 'integer', + type: 'integer' }, miniatures: { id: 'miniatures', facetValueFilter: '', labelPath: 'mmm-schema:miniatures/crm:P90_has_value', predicate: 'mmm-schema:miniatures/crm:P90_has_value', - type: 'integer', + type: 'integer' }, decoratedInitials: { id: 'decoratedInitials', facetValueFilter: '', labelPath: 'mmm-schema:decorated_initials/crm:P90_has_value', predicate: 'mmm-schema:decorated_initials/crm:P90_has_value', - type: 'integer', + type: 'integer' }, historiatedInitials: { id: 'historiatedInitials', facetValueFilter: '', labelPath: 'mmm-schema:historiated_initials/crm:P90_has_value', predicate: 'mmm-schema:historiated_initials/crm:P90_has_value', - type: 'integer', + type: 'integer' }, collection: { id: 'collection', facetValueFilter: '', labelPath: 'crm:P46i_forms_part_of/skos:prefLabel', predicate: 'crm:P46i_forms_part_of', - type: 'list', + type: 'list' }, owner: { id: 'owner', @@ -247,7 +247,7 @@ export const facetConfigs = { label: 'Owner', labelPath: 'crm:P51_has_former_or_current_owner/skos:prefLabel', predicate: 'crm:P51_has_former_or_current_owner', - type: 'list', + type: 'list' }, source: { id: 'source', @@ -255,8 +255,8 @@ export const facetConfigs = { label: 'Source', labelPath: 'dct:source/skos:prefLabel', predicate: 'dct:source', - type: 'list', - }, + type: 'list' + } }, works: { facetClass: 'frbroo:F1_Work', @@ -265,14 +265,14 @@ export const facetConfigs = { labelPath: 'skos:prefLabel', textQueryPredicate: '', // empty for querying the facetClass textQueryProperty: 'skos:prefLabel', // limit only to prefLabels - type: 'text', + type: 'text' }, source: { id: 'source', facetValueFilter: '', labelPath: 'dct:source/skos:prefLabel', predicate: 'dct:source', - type: 'list', + type: 'list' }, author: { id: 'author', @@ -295,7 +295,7 @@ export const facetConfigs = { label: 'Language', labelPath: '^frbroo:R19_created_a_realisation_of/frbroo:R17_created/crm:P72_has_language/skos:prefLabel', predicate: '^frbroo:R19_created_a_realisation_of/frbroo:R17_created/crm:P72_has_language', - type: 'list', + type: 'list' }, material: { id: 'material', @@ -303,14 +303,14 @@ export const facetConfigs = { label: 'Language', labelPath: '^mmm-schema:manuscript_work/crm:P45_consists_of/skos:prefLabel', predicate: '^mmm-schema:manuscript_work/crm:P45_consists_of', - type: 'list', + type: 'list' }, collection: { id: 'collection', facetValueFilter: '', labelPath: '^mmm-schema:manuscript_work/crm:P46i_forms_part_of/skos:prefLabel', predicate: '^mmm-schema:manuscript_work/crm:P46i_forms_part_of', - type: 'list', + type: 'list' }, productionTimespan: { id: 'productionTimespan', @@ -320,27 +320,26 @@ export const facetConfigs = { predicate: '^mmm-schema:manuscript_work/^crm:P108_has_produced/crm:P4_has_time-span', startProperty: 'crm:P82a_begin_of_the_begin', endProperty: 'crm:P82b_end_of_the_end', - type: 'timespan', - }, + type: 'timespan' + } }, events: { facetClass: 'crm:E10_Transfer_of_Custody crm:E12_Production crm:E7_Activity', prefLabel: { id: 'prefLabel', - labelPath: 'skos:prefLabel', + labelPath: 'skos:prefLabel' }, type: { predicate: 'a', facetValueFilter: '', type: 'list', - labelPath: 'a/(skos:prefLabel|rdfs:label)', + labelPath: 'a/(skos:prefLabel|rdfs:label)' }, manuscript: { textQueryPredicate: ` (crm:P30_transferred_custody_of |crm:P108_has_produced - |mmm-schema:observed_manuscript)` - , + |mmm-schema:observed_manuscript)`, textQueryProperty: 'skos:prefLabel', // limit only to prefLabels type: 'text', labelPath: `(crm:P30_transferred_custody_of @@ -356,7 +355,7 @@ export const facetConfigs = { predicate: 'crm:P4_has_time-span', startProperty: 'crm:P82a_begin_of_the_begin', endProperty: 'crm:P82b_end_of_the_end', - type: 'timespan', + type: 'timespan' }, place: { id: 'place', @@ -368,15 +367,15 @@ export const facetConfigs = { predicate: 'crm:P7_took_place_at', parentProperty: 'gvp:broaderPreferred', parentPredicate: 'crm:P7_took_place_at/gvp:broaderPreferred+', - type: 'hierarchical', + type: 'hierarchical' }, source: { id: 'source', facetValueFilter: '', labelPath: 'dct:source/skos:prefLabel', predicate: 'dct:source', - type: 'list', - }, + type: 'list' + } }, actors: { facetClass: 'crm:E21_Person crm:E74_Group crm:E39_Actor', @@ -385,20 +384,20 @@ export const facetConfigs = { labelPath: 'skos:prefLabel', textQueryPredicate: '', // empty for querying the facetClass textQueryProperty: 'skos:prefLabel', // limit only to prefLabels - type: 'text', + type: 'text' }, type: { predicate: 'a', facetValueFilter: '', type: 'list', - labelPath: 'a/(skos:prefLabel|rdfs:label)', + labelPath: 'a/(skos:prefLabel|rdfs:label)' }, source: { id: 'source', facetValueFilter: '', labelPath: 'dct:source/skos:prefLabel', predicate: 'dct:source', - type: 'list', + type: 'list' }, birthDateTimespan: { id: 'birthDateTimespan', @@ -412,7 +411,7 @@ export const facetConfigs = { predicate: 'crm:P98i_was_born/crm:P4_has_time-span', startProperty: 'crm:P82a_begin_of_the_begin', endProperty: 'crm:P82b_end_of_the_end', - type: 'timespan', + type: 'timespan' }, deathDateTimespan: { id: 'deathDateTimespan', @@ -426,7 +425,7 @@ export const facetConfigs = { predicate: 'crm:P98i_was_born/crm:P4_has_time-span', startProperty: 'crm:P82a_begin_of_the_begin', endProperty: 'crm:P82b_end_of_the_end', - type: 'timespan', + type: 'timespan' }, place: { id: 'source', @@ -437,7 +436,7 @@ export const facetConfigs = { predicate: '^crm:P11_had_participant/crm:P7_took_place_at', parentProperty: 'gvp:broaderPreferred', parentPredicate: '^crm:P11_had_participant/crm:P7_took_place_at/gvp:broaderPreferred+', - type: 'hierarchical', + type: 'hierarchical' }, work: { labelPath: ` @@ -446,8 +445,8 @@ export const facetConfigs = { |^mmm-schema:carried_out_by_as_commissioner |^mmm-schema:carried_out_by_as_editor) /frbroo:R16_initiated/skos:prefLabel - `, - }, + ` + } }, places: { facetClass: 'crm:E53_Place', @@ -456,7 +455,7 @@ export const facetConfigs = { labelPath: 'skos:prefLabel', textQueryPredicate: '', // empty for querying the facetClass textQueryProperty: 'skos:prefLabel', // limit only to prefLabels - type: 'text', + type: 'text' }, source: { id: 'source', @@ -464,7 +463,7 @@ export const facetConfigs = { label: 'Source', labelPath: 'dct:source/skos:prefLabel', predicate: 'dct:source', - type: 'list', + type: 'list' }, area: { id: 'area', @@ -476,7 +475,7 @@ export const facetConfigs = { predicate: 'gvp:broaderPreferred', parentProperty: 'gvp:broaderPreferred', parentPredicate: 'gvp:broaderPreferred+', - type: 'hierarchical', + type: 'hierarchical' }, placeType: { id: 'type', @@ -484,7 +483,7 @@ export const facetConfigs = { label: 'Type', labelPath: 'gvp:placeTypePreferred', predicate: 'gvp:placeTypePreferred', - type: 'list', - }, - }, -}; + type: 'list' + } + } +} diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index 5faba03b0909e9d839f2dc146131cf3e8471b16d..62ee9c2cf83071354472672d1177bf99c5ce9b2d 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -1,11 +1,11 @@ -import { runSelectQuery } from './SparqlApi'; -import { prefixes } from './SparqlQueriesPrefixes'; +import { runSelectQuery } from './SparqlApi' +import { prefixes } from './SparqlQueriesPrefixes' import { endpoint, countQuery, facetResultSetQuery, instanceQuery -} from './SparqlQueriesGeneral'; +} from './SparqlQueriesGeneral' import { manuscriptPropertiesFacetResults, manuscriptPropertiesInstancePage, @@ -16,14 +16,14 @@ import { migrationsQuery, networkQuery, allManuscriptsQuery -} from './SparqlQueriesManuscripts'; -import { workProperties } from './SparqlQueriesWorks'; -import { eventProperties, eventPlacesQuery } from './SparqlQueriesEvents'; -import { generateEventsByPeriodQuery } from './FacetResultsEvents'; +} from './SparqlQueriesManuscripts' +import { workProperties } from './SparqlQueriesWorks' +import { eventProperties, eventPlacesQuery } from './SparqlQueriesEvents' +import { generateEventsByPeriodQuery } from './FacetResultsEvents' import { actorProperties, - placesActorsQuery, -} from './SparqlQueriesActors'; + placesActorsQuery +} from './SparqlQueriesActors' import { placePropertiesInstancePage, placePropertiesFacetResults, @@ -31,12 +31,12 @@ import { manuscriptsProducedAt, lastKnownLocationsAt, actorsAt, - allPlacesQuery, -} from './SparqlQueriesPlaces'; -import { facetConfigs } from './FacetConfigsMMM'; -import { mapCount, mapPlaces } from './Mappers'; -import { makeObjectList } from './SparqlObjectMapper'; -import { generateConstraintsBlock } from './Filters'; + allPlacesQuery +} from './SparqlQueriesPlaces' +import { facetConfigs } from './FacetConfigsMMM' +import { mapCount, mapPlaces } from './Mappers' +import { makeObjectList } from './SparqlObjectMapper' +import { generateConstraintsBlock } from './Filters' export const getPaginatedResults = async ({ resultClass, @@ -55,7 +55,7 @@ export const getPaginatedResults = async ({ sortBy, sortDirection, resultFormat - }); + }) if (resultFormat === 'json') { return { resultClass: resultClass, @@ -63,11 +63,11 @@ export const getPaginatedResults = async ({ pagesize: pagesize, data: response.data, sparqlQuery: response.sparqlQuery - }; + } } else { - return response; + return response } -}; +} export const getAllResults = ({ resultClass, @@ -75,52 +75,52 @@ export const getAllResults = ({ constraints, resultFormat }) => { - let q = ''; - let filterTarget = ''; - let mapper = makeObjectList; + let q = '' + let filterTarget = '' + let mapper = makeObjectList switch (resultClass) { case 'placesAll': - q = allPlacesQuery; - filterTarget = 'id'; - break; + q = allPlacesQuery + filterTarget = 'id' + break case 'placesMsProduced': - q = productionPlacesQuery; - filterTarget = 'manuscripts'; - mapper = mapPlaces; - break; + q = productionPlacesQuery + filterTarget = 'manuscripts' + mapper = mapPlaces + break case 'lastKnownLocations': - q = lastKnownLocationsQuery; - filterTarget = 'manuscripts'; - mapper = mapPlaces; - break; + q = lastKnownLocationsQuery + filterTarget = 'manuscripts' + mapper = mapPlaces + break case 'placesActors': - q = placesActorsQuery; - filterTarget = 'actor__id'; - mapper = mapPlaces; - break; + q = placesActorsQuery + filterTarget = 'actor__id' + mapper = mapPlaces + break case 'placesMsMigrations': - q = migrationsQuery; - filterTarget = 'manuscript__id'; - break; + q = migrationsQuery + filterTarget = 'manuscript__id' + break case 'placesEvents': - q = eventPlacesQuery; - filterTarget = 'event'; - break; + q = eventPlacesQuery + filterTarget = 'event' + break case 'eventsByTimePeriod': - q = generateEventsByPeriodQuery({ startYear: 1600, endYear: 1620, periodLength: 10 }); - filterTarget = 'event'; - break; + q = generateEventsByPeriodQuery({ startYear: 1600, endYear: 1620, periodLength: 10 }) + filterTarget = 'event' + break case 'network': - q = networkQuery; - filterTarget = 'manuscript__id'; - break; + q = networkQuery + filterTarget = 'manuscript__id' + break case 'allManuscripts': - q = allManuscriptsQuery; - filterTarget = 'id'; - break; + q = allManuscriptsQuery + filterTarget = 'id' + break } if (constraints == null) { - q = q.replace('<FILTER>', '# no filters'); + q = q.replace('<FILTER>', '# no filters') } else { q = q.replace('<FILTER>', generateConstraintsBlock({ resultClass: resultClass, @@ -128,7 +128,7 @@ export const getAllResults = ({ constraints: constraints, filterTarget: filterTarget, facetID: null - })); + })) } // console.log(prefixes + q) return runSelectQuery({ @@ -136,18 +136,18 @@ export const getAllResults = ({ endpoint, resultMapper: mapper, resultFormat - }); -}; + }) +} export const getResultCount = async ({ resultClass, constraints, resultFormat }) => { - let q = countQuery; - q = q.replace('<FACET_CLASS>', facetConfigs[resultClass].facetClass); + let q = countQuery + q = q.replace('<FACET_CLASS>', facetConfigs[resultClass].facetClass) if (constraints == null) { - q = q.replace('<FILTER>', '# no filters'); + q = q.replace('<FILTER>', '# no filters') } else { q = q.replace('<FILTER>', generateConstraintsBlock({ resultClass: resultClass, @@ -155,20 +155,20 @@ export const getResultCount = async ({ constraints: constraints, filterTarget: 'id', facetID: null - })); + })) } const response = await runSelectQuery({ query: prefixes + q, endpoint, resultMapper: mapCount, resultFormat - }); - return({ + }) + return ({ resultClass: resultClass, data: response.data, sparqlQuery: response.sparqlQuery - }); -}; + }) +} const getPaginatedData = ({ resultClass, @@ -179,66 +179,67 @@ const getPaginatedData = ({ sortDirection, resultFormat }) => { - let q = facetResultSetQuery; - const facetConfig = facetConfigs[resultClass]; + let q = facetResultSetQuery + const facetConfig = facetConfigs[resultClass] if (constraints == null) { - q = q.replace('<FILTER>', '# no filters'); + q = q.replace('<FILTER>', '# no filters') } else { q = q.replace('<FILTER>', generateConstraintsBlock({ resultClass: resultClass, facetClass: resultClass, constraints: constraints, filterTarget: 'id', - facetID: null})); + facetID: null + })) } - q = q.replace('<FACET_CLASS>', facetConfig.facetClass); + q = q.replace('<FACET_CLASS>', facetConfig.facetClass) if (sortBy == null) { - q = q.replace('<ORDER_BY_TRIPLE>', ''); - q = q.replace('<ORDER_BY>', '# no sorting'); + q = q.replace('<ORDER_BY_TRIPLE>', '') + q = q.replace('<ORDER_BY>', '# no sorting') } else { - let sortByPredicate = ''; + let sortByPredicate = '' if (sortBy.endsWith('Timespan')) { sortByPredicate = sortDirection === 'asc' ? facetConfig[sortBy].sortByAscPredicate - : facetConfig[sortBy].sortByDescPredicate; + : facetConfig[sortBy].sortByDescPredicate } else { - sortByPredicate = facetConfig[sortBy].labelPath; + sortByPredicate = facetConfig[sortBy].labelPath } q = q.replace('<ORDER_BY_TRIPLE>', - `OPTIONAL { ?id ${sortByPredicate} ?orderBy }`); + `OPTIONAL { ?id ${sortByPredicate} ?orderBy }`) q = q.replace('<ORDER_BY>', - `ORDER BY (!BOUND(?orderBy)) ${sortDirection}(?orderBy)`); + `ORDER BY (!BOUND(?orderBy)) ${sortDirection}(?orderBy)`) } - q = q.replace('<PAGE>', `LIMIT ${pagesize} OFFSET ${page * pagesize}`); - let resultSetProperties; + q = q.replace('<PAGE>', `LIMIT ${pagesize} OFFSET ${page * pagesize}`) + let resultSetProperties switch (resultClass) { case 'manuscripts': - resultSetProperties = manuscriptPropertiesFacetResults; - break; + resultSetProperties = manuscriptPropertiesFacetResults + break case 'works': - resultSetProperties = workProperties; - break; + resultSetProperties = workProperties + break case 'events': - resultSetProperties = eventProperties; - break; + resultSetProperties = eventProperties + break case 'places': - resultSetProperties = placePropertiesFacetResults; - break; + resultSetProperties = placePropertiesFacetResults + break case 'actors': - resultSetProperties = actorProperties; - break; + resultSetProperties = actorProperties + break default: - resultSetProperties = ''; + resultSetProperties = '' } - q = q.replace('<RESULT_SET_PROPERTIES>', resultSetProperties); + q = q.replace('<RESULT_SET_PROPERTIES>', resultSetProperties) // console.log(prefixes + q); return runSelectQuery({ query: prefixes + q, endpoint, resultMapper: makeObjectList, resultFormat - }); -}; + }) +} export const getByURI = ({ resultClass, @@ -247,85 +248,86 @@ export const getByURI = ({ uri, resultFormat }) => { - let q; + let q switch (resultClass) { case 'manuscripts': - q = instanceQuery; - q = q.replace('<PROPERTIES>', manuscriptPropertiesInstancePage); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', manuscriptPropertiesInstancePage) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'expressions': - q = instanceQuery; - q = q.replace('<PROPERTIES>', expressionProperties); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', expressionProperties) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'collections': - q = instanceQuery; - q = q.replace('<PROPERTIES>', collectionProperties); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', collectionProperties) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'works': - q = instanceQuery; - q = q.replace('<PROPERTIES>', workProperties); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', workProperties) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'events': - q = instanceQuery; - q = q.replace('<PROPERTIES>', eventProperties); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', eventProperties) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'actors': - q = instanceQuery; - q = q.replace('<PROPERTIES>', actorProperties); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', actorProperties) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'places': - q = instanceQuery; - q = q.replace('<PROPERTIES>', placePropertiesInstancePage); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', placePropertiesInstancePage) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'placesAll': - q = instanceQuery; - q = q.replace('<PROPERTIES>', placePropertiesInfoWindow); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', placePropertiesInfoWindow) + q = q.replace('<RELATED_INSTANCES>', '') + break case 'placesActors': - q = instanceQuery; - q = q.replace('<PROPERTIES>', placePropertiesInfoWindow); - q = q.replace('<RELATED_INSTANCES>', actorsAt); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', placePropertiesInfoWindow) + q = q.replace('<RELATED_INSTANCES>', actorsAt) + break case 'placesMsProduced': - q = instanceQuery; - q = q.replace('<PROPERTIES>', placePropertiesInfoWindow); - q = q.replace('<RELATED_INSTANCES>', manuscriptsProducedAt); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', placePropertiesInfoWindow) + q = q.replace('<RELATED_INSTANCES>', manuscriptsProducedAt) + break case 'lastKnownLocations': - q = instanceQuery; - q = q.replace('<PROPERTIES>', placePropertiesInfoWindow); - q = q.replace('<RELATED_INSTANCES>', lastKnownLocationsAt); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', placePropertiesInfoWindow) + q = q.replace('<RELATED_INSTANCES>', lastKnownLocationsAt) + break case 'placesEvents': - q = instanceQuery; - q = q.replace('<PROPERTIES>', placePropertiesInfoWindow); - q = q.replace('<RELATED_INSTANCES>', ''); - break; + q = instanceQuery + q = q.replace('<PROPERTIES>', placePropertiesInfoWindow) + q = q.replace('<RELATED_INSTANCES>', '') + break } if (constraints == null) { - q = q.replace('<FILTER>', '# no filters'); + q = q.replace('<FILTER>', '# no filters') } else { q = q.replace('<FILTER>', generateConstraintsBlock({ resultClass: resultClass, facetClass: facetClass, constraints: constraints, filterTarget: 'related__id', - facetID: null})); + facetID: null + })) } - q = q.replace('<ID>', `<${uri}>`); + q = q.replace('<ID>', `<${uri}>`) // console.log(prefixes + q) return runSelectQuery({ query: prefixes + q, endpoint, resultMapper: makeObjectList, resultFormat - }); -}; + }) +} diff --git a/src/server/sparql/FacetResultsEvents.js b/src/server/sparql/FacetResultsEvents.js index c28b6dfd2c3216becb7c31375ab668f902a1273f..a62a93074602db06ea9e4acf0053519fbe01c61a 100644 --- a/src/server/sparql/FacetResultsEvents.js +++ b/src/server/sparql/FacetResultsEvents.js @@ -1,6 +1,6 @@ -import { eventsByTimePeriodQuery, eventsByTimePeriodQuery2 } from './SparqlQueriesEvents'; +import { eventsByTimePeriodQuery } from './SparqlQueriesEvents' -export const generateEventsByPeriodQuery = ({ +export const generateEventsByPeriodQuery = ({ startYear, endYear, periodLength @@ -17,33 +17,33 @@ export const generateEventsByPeriodQuery = ({ FILTER(?begin >= "<PERIOD_BEGIN>"^^xsd:date) FILTER(?end <= "<PERIOD_END>"^^xsd:date) } - `; - const timePeriodTemplate2 = ` - { - SELECT ?id ?prefLabel ?period - (COUNT(DISTINCT ?event) as ?instanceCount) { - ?event crm:P4_has_time-span ?timespan . - ?event a ?id . - ?id skos:prefLabel|rdfs:label ?prefLabel . - ?timespan crm:P82a_begin_of_the_begin ?begin . - ?timespan crm:P82b_end_of_the_end ?end . - BIND(<PERIOD_LABEL> as ?period) - # both start and end within the decade - FILTER(?begin >= "<PERIOD_BEGIN>"^^xsd:date) - FILTER(?end <= "<PERIOD_END>"^^xsd:date) - } - GROUP BY ?id ?prefLabel ?period - } - `; - let timePeriods = ``; + ` + // const timePeriodTemplate2 = ` + // { + // SELECT ?id ?prefLabel ?period + // (COUNT(DISTINCT ?event) as ?instanceCount) { + // ?event crm:P4_has_time-span ?timespan . + // ?event a ?id . + // ?id skos:prefLabel|rdfs:label ?prefLabel . + // ?timespan crm:P82a_begin_of_the_begin ?begin . + // ?timespan crm:P82b_end_of_the_end ?end . + // BIND(<PERIOD_LABEL> as ?period) + // # both start and end within the decade + // FILTER(?begin >= "<PERIOD_BEGIN>"^^xsd:date) + // FILTER(?end <= "<PERIOD_END>"^^xsd:date) + // } + // GROUP BY ?id ?prefLabel ?period + // } + // ` + let timePeriods = '' for (let year = startYear; year < endYear; year += periodLength) { - let timePeriod = timePeriodTemplate.replace('<PERIOD_LABEL>', parseInt(year)); - timePeriod = timePeriod.replace('<PERIOD_BEGIN>', `${year}-01-01`); - timePeriod = timePeriod.replace('<PERIOD_END>', `${year + periodLength - 1}-12-31`); - timePeriods += timePeriod; + let timePeriod = timePeriodTemplate.replace('<PERIOD_LABEL>', parseInt(year)) + timePeriod = timePeriod.replace('<PERIOD_BEGIN>', `${year}-01-01`) + timePeriod = timePeriod.replace('<PERIOD_END>', `${year + periodLength - 1}-12-31`) + timePeriods += timePeriod if (year + periodLength < endYear) { - timePeriods += ' UNION'; + timePeriods += ' UNION' } } - return eventsByTimePeriodQuery.replace('<TIME_PERIODS>', timePeriods); -}; + return eventsByTimePeriodQuery.replace('<TIME_PERIODS>', timePeriods) +} diff --git a/src/server/sparql/FacetValues.js b/src/server/sparql/FacetValues.js index 83ae0dc777c1593a2b3861b104ed7139d982324c..938951004bb2aef62ec6172bab5c85ef418a9bb4 100644 --- a/src/server/sparql/FacetValues.js +++ b/src/server/sparql/FacetValues.js @@ -1,25 +1,25 @@ -import { runSelectQuery } from './SparqlApi'; -import { has } from 'lodash'; +import { runSelectQuery } from './SparqlApi' +import { has } from 'lodash' import { endpoint, facetValuesQuery, facetValuesQueryTimespan, facetValuesRange -} from './SparqlQueriesGeneral'; -import { prefixes } from './SparqlQueriesPrefixes'; -import { facetConfigs } from './FacetConfigsMMM'; +} from './SparqlQueriesGeneral' +import { prefixes } from './SparqlQueriesPrefixes' +import { facetConfigs } from './FacetConfigsMMM' import { hasPreviousSelections, hasPreviousSelectionsFromOtherFacets, getUriFilters, generateConstraintsBlock, generateSelectedFilter -} from './Filters'; +} from './Filters' import { mapFacet, mapHierarchicalFacet, mapTimespanFacet -} from './Mappers'; +} from './Mappers' export const getFacet = async ({ facetClass, @@ -30,37 +30,37 @@ export const getFacet = async ({ resultFormat, constrainSelf }) => { - const facetConfig = facetConfigs[facetClass][facetID]; + const facetConfig = facetConfigs[facetClass][facetID] // choose query template and result mapper: - let q = ''; - let mapper = null; - let previousSelections = null; - switch(facetConfig.type) { + let q = '' + let mapper = null + let previousSelections = null + switch (facetConfig.type) { case 'list': - q = facetValuesQuery; - mapper = mapFacet; - break; + q = facetValuesQuery + mapper = mapFacet + break case 'hierarchical': - q = facetValuesQuery; - mapper = mapHierarchicalFacet; - break; + q = facetValuesQuery + mapper = mapHierarchicalFacet + break case 'timespan': - q = facetValuesQueryTimespan; - mapper = mapTimespanFacet; - break; + q = facetValuesQueryTimespan + mapper = mapTimespanFacet + break case 'integer': - q = facetValuesRange; - mapper = mapTimespanFacet; - break; + q = facetValuesRange + mapper = mapTimespanFacet + break default: - q = facetValuesQuery; - mapper = mapFacet; + q = facetValuesQuery + mapper = mapFacet } - let selectedBlock = '# no selections'; - let selectedNoHitsBlock = '# no filters from other facets'; - let filterBlock = '# no filters'; - let parentBlock = '# no parents'; - let parentsForFacetValues = '# no parents for facet values'; + let selectedBlock = '# no selections' + let selectedNoHitsBlock = '# no filters from other facets' + let filterBlock = '# no filters' + let parentBlock = '# no parents' + let parentsForFacetValues = '# no parents for facet values' if (constraints !== null) { filterBlock = generateConstraintsBlock({ facetClass: facetClass, @@ -69,14 +69,14 @@ export const getFacet = async ({ facetID: facetID, inverse: false, constrainSelf - }); - previousSelections = new Set(getUriFilters(constraints, facetID)); + }) + previousSelections = new Set(getUriFilters(constraints, facetID)) // if this facet has previous selections, include them in the query if (hasPreviousSelections(constraints, facetID)) { selectedBlock = generateSelectedBlock({ facetID, constraints - }); + }) /* if there are also filters from other facets, we need this additional block for facet values that return 0 hits */ if (hasPreviousSelectionsFromOtherFacets(constraints, facetID)) { @@ -84,44 +84,44 @@ export const getFacet = async ({ facetClass, facetID, constraints - }); + }) } } } if (facetConfig.type === 'hierarchical') { - const { parentPredicate } = facetConfig; + const { parentPredicate } = facetConfig parentBlock = generateParentBlock({ facetClass, facetID, constraints, parentPredicate - }); + }) parentsForFacetValues = ` OPTIONAL { ?id ${facetConfig.parentProperty} ?parent_ } BIND(COALESCE(?parent_, '0') as ?parent) - `; + ` } - q = q.replace('<SELECTED_VALUES>', selectedBlock); - q = q.replace('<SELECTED_VALUES_NO_HITS>', selectedNoHitsBlock); - q = q.replace(/<FACET_VALUE_FILTER>/g, facetConfig.facetValueFilter); + q = q.replace('<SELECTED_VALUES>', selectedBlock) + q = q.replace('<SELECTED_VALUES_NO_HITS>', selectedNoHitsBlock) + q = q.replace(/<FACET_VALUE_FILTER>/g, facetConfig.facetValueFilter) q = q.replace(/<FACET_LABEL_FILTER>/g, has(facetConfig, 'facetLabelFilter') ? facetConfig.facetLabelFilter : '' - ); - q = q.replace('<PARENTS>', parentBlock); - q = q.replace('<PARENTS_FOR_FACET_VALUES>', parentsForFacetValues); + ) + q = q.replace('<PARENTS>', parentBlock) + q = q.replace('<PARENTS_FOR_FACET_VALUES>', parentsForFacetValues) if (facetConfig.type === 'list') { - q = q.replace('<ORDER_BY>', `ORDER BY ${sortDirection}(?${sortBy})` ); + q = q.replace('<ORDER_BY>', `ORDER BY ${sortDirection}(?${sortBy})`) } else { - q = q.replace('<ORDER_BY>', '# no need for ordering'); + q = q.replace('<ORDER_BY>', '# no need for ordering') } - q = q.replace(/<FACET_CLASS>/g, facetConfigs[facetClass].facetClass); - q = q.replace(/<FILTER>/g, filterBlock ); - q = q.replace(/<PREDICATE>/g, facetConfig.predicate); + q = q.replace(/<FACET_CLASS>/g, facetConfigs[facetClass].facetClass) + q = q.replace(/<FILTER>/g, filterBlock) + q = q.replace(/<PREDICATE>/g, facetConfig.predicate) if (facetConfig.type === 'timespan') { - q = q.replace('<START_PROPERTY>', facetConfig.startProperty); - q = q.replace('<END_PROPERTY>', facetConfig.endProperty); + q = q.replace('<START_PROPERTY>', facetConfig.startProperty) + q = q.replace('<END_PROPERTY>', facetConfig.endProperty) } // console.log(prefixes + q) const response = await runSelectQuery({ @@ -130,41 +130,41 @@ export const getFacet = async ({ resultMapper: mapper, previousSelections, resultFormat - }); + }) if (facetConfig.type === 'hierarchical') { - return({ + return ({ facetClass: facetClass, id: facetID, data: response.data.treeData, flatData: response.data.flatData, sparqlQuery: response.sparqlQuery - }); + }) } else { - return({ + return ({ facetClass: facetClass, id: facetID, data: response.data, sparqlQuery: response.sparqlQuery - }); + }) } -}; +} const generateSelectedBlock = ({ facetID, - constraints, + constraints }) => { const selectedFilter = generateSelectedFilter({ facetID, constraints, inverse: false - }); + }) return ` OPTIONAL { ${selectedFilter} BIND(true AS ?selected_) } - `; -}; + ` +} const generateSelectedNoHitsBlock = ({ facetClass, @@ -176,8 +176,8 @@ const generateSelectedNoHitsBlock = ({ constraints: constraints, filterTarget: 'instance', facetID: facetID, - inverse: true, - }); + inverse: true + }) return ` UNION { @@ -186,8 +186,8 @@ const generateSelectedNoHitsBlock = ({ ${noHitsFilter} BIND(true AS ?selected_) } - `; -}; + ` +} const generateParentBlock = ({ facetClass, @@ -195,8 +195,8 @@ const generateParentBlock = ({ constraints, parentPredicate }) => { - let parentFilterStr = '# no filters'; - let ignoreSelectedValues = '# no selected values'; + let parentFilterStr = '# no filters' + let ignoreSelectedValues = '# no selected values' if (constraints !== null) { parentFilterStr = generateConstraintsBlock({ facetClass: facetClass, @@ -204,13 +204,13 @@ const generateParentBlock = ({ filterTarget: 'instance2', facetID: facetID, inverse: false - }); + }) if (hasPreviousSelections) { ignoreSelectedValues = generateSelectedFilter({ facetID: facetID, constraints: constraints, inverse: true - }); + }) } } return ` @@ -225,5 +225,5 @@ const generateParentBlock = ({ BIND(false AS ?selected_) ${ignoreSelectedValues} } - `; -}; + ` +} diff --git a/src/server/sparql/Filters.js b/src/server/sparql/Filters.js index c0d34bc9282a4932add6cfbe2460d5c5c20d036d..a440908ddef939322378bd173d24e937676f74c8 100644 --- a/src/server/sparql/Filters.js +++ b/src/server/sparql/Filters.js @@ -1,32 +1,32 @@ -import { facetConfigs } from './FacetConfigsMMM'; +import { facetConfigs } from './FacetConfigsMMM' export const hasPreviousSelections = (constraints, facetID) => { - let hasPreviousSelections = false; + let hasPreviousSelections = false for (const [key, value] of Object.entries(constraints)) { if (key === facetID && value.filterType === 'uriFilter') { - hasPreviousSelections = true; + hasPreviousSelections = true } } - return hasPreviousSelections; -}; + return hasPreviousSelections +} export const hasPreviousSelectionsFromOtherFacets = (constraints, facetID) => { for (const [key, value] of Object.entries(constraints)) { if (key !== facetID && value.filterType === 'uriFilter') { - return true; + return true } } - return false; -}; + return false +} export const getUriFilters = (constraints, facetID) => { for (const [key, value] of Object.entries(constraints)) { if (key === facetID && value.filterType === 'uriFilter') { - return value.values; + return value.values } } - return []; -}; + return [] +} export const generateConstraintsBlock = ({ facetClass, @@ -36,21 +36,21 @@ export const generateConstraintsBlock = ({ inverse, constrainSelf = false }) => { - //delete constraints[facetID]; - let filterStr = ''; - let constraintsArr = []; - let skipFacetID = constrainSelf ? '' : facetID; + // delete constraints[facetID]; + let filterStr = '' + const constraintsArr = [] + const skipFacetID = constrainSelf ? '' : facetID for (const [key, value] of Object.entries(constraints)) { - if (key !== skipFacetID) { + if (key !== skipFacetID) { constraintsArr.push({ id: key, filterType: value.filterType, priority: value.priority, - values: value.values, - }); + values: value.values + }) } } - constraintsArr.sort((a, b) => a.priority - b.priority); + constraintsArr.sort((a, b) => a.priority - b.priority) constraintsArr.map(c => { switch (c.filterType) { case 'textFilter': @@ -60,8 +60,8 @@ export const generateConstraintsBlock = ({ filterTarget: filterTarget, queryString: c.values, inverse: inverse - }); - break; + }) + break case 'uriFilter': filterStr += generateUriFilter({ facetClass: facetClass, @@ -69,8 +69,8 @@ export const generateConstraintsBlock = ({ filterTarget: filterTarget, values: c.values, inverse: inverse - }); - break; + }) + break case 'spatialFilter': filterStr += generateSpatialFilter({ facetClass: facetClass, @@ -78,8 +78,8 @@ export const generateConstraintsBlock = ({ filterTarget: filterTarget, values: c.values, inverse: inverse - }); - break; + }) + break case 'timespanFilter': filterStr += generateTimespanFilter({ facetClass: facetClass, @@ -87,8 +87,8 @@ export const generateConstraintsBlock = ({ filterTarget: filterTarget, values: c.values, inverse: inverse - }); - break; + }) + break case 'integerFilter': case 'integerFilterRange': filterStr += generateIntegerFilter({ @@ -97,12 +97,12 @@ export const generateConstraintsBlock = ({ filterTarget: filterTarget, values: c.values, inverse: inverse - }); - break; + }) + break } - }); - return filterStr; -}; + }) + return filterStr +} const generateTextFilter = ({ facetClass, @@ -111,27 +111,27 @@ const generateTextFilter = ({ queryString, inverse }) => { - const facetConfig = facetConfigs[facetClass][facetID]; - let filterStr = ''; + const facetConfig = facetConfigs[facetClass][facetID] + let filterStr = '' if (facetConfig.textQueryPredicate === '') { - filterStr = `?${filterTarget} text:query (${facetConfig.textQueryProperty} '${queryString}') .`; + filterStr = `?${filterTarget} text:query (${facetConfig.textQueryProperty} '${queryString}') .` } else { filterStr = ` ?textQueryTarget text:query (${facetConfig.textQueryProperty} '${queryString}') . ?${filterTarget} ${facetConfig.textQueryPredicate} ?textQueryTarget . - `; + ` } if (inverse) { return ` FILTER NOT EXISTS { ${filterStr} } - `; + ` } else { - return filterStr; + return filterStr } -}; +} const generateSpatialFilter = ({ facetClass, @@ -140,21 +140,21 @@ const generateSpatialFilter = ({ values, inverse }) => { - const { latMin, longMin, latMax, longMax } = values; + const { latMin, longMin, latMax, longMax } = values const filterStr = ` ?${facetID}Filter spatial:withinBox (${latMin} ${longMin} ${latMax} ${longMax} 1000000) . ?${filterTarget} ${facetConfigs[facetClass][facetID].predicate} ?${facetID}Filter . - `; + ` if (inverse) { return ` FILTER NOT EXISTS { ${filterStr} } - `; + ` } else { - return filterStr; + return filterStr } -}; +} const generateTimespanFilter = ({ facetClass, @@ -163,10 +163,10 @@ const generateTimespanFilter = ({ values, inverse }) => { - const facetConfig = facetConfigs[facetClass][facetID]; - const { start, end } = values; - const selectionStart = start; - const selectionEnd = end; + const facetConfig = facetConfigs[facetClass][facetID] + const { start, end } = values + const selectionStart = start + const selectionEnd = end // return ` // ?${filterTarget} ${facetConfig.predicate} ?timespan . // ?timespan ${facetConfig.startProperty} ?start . @@ -185,17 +185,17 @@ const generateTimespanFilter = ({ || ?${facetID}End >= "${selectionStart}"^^xsd:date && ?${facetID}End <= "${selectionEnd}"^^xsd:date ) - `; + ` if (inverse) { return ` FILTER NOT EXISTS { ${filterStr} } - `; + ` } else { - return filterStr; + return filterStr } -}; +} const generateIntegerFilter = ({ facetClass, @@ -204,32 +204,32 @@ const generateIntegerFilter = ({ values, inverse }) => { - const facetConfig = facetConfigs[facetClass][facetID]; - const { start, end } = values; - let integerFilter = ''; + const facetConfig = facetConfigs[facetClass][facetID] + const { start, end } = values + let integerFilter = '' if (start === '') { - integerFilter = `xsd:integer(?value) <= ${end}`; + integerFilter = `xsd:integer(?value) <= ${end}` } else if (end === '') { - integerFilter = `xsd:integer(?value) >= ${start}`; + integerFilter = `xsd:integer(?value) >= ${start}` } else { - integerFilter = `xsd:integer(?value) >= ${start} && xsd:integer(?value) <= ${end}`; + integerFilter = `xsd:integer(?value) >= ${start} && xsd:integer(?value) <= ${end}` } const filterStr = ` ?${filterTarget} ${facetConfig.predicate} ?value . FILTER( ${integerFilter} ) - `; + ` if (inverse) { return ` FILTER NOT EXISTS { ${filterStr} } - `; + ` } else { - return filterStr; + return filterStr } -}; +} const generateUriFilter = ({ facetClass, @@ -238,17 +238,17 @@ const generateUriFilter = ({ values, inverse }) => { - let s = ''; - let addChildren = facetConfigs[facetClass][facetID].type == 'hierarchical'; + let s = '' + const addChildren = facetConfigs[facetClass][facetID].type === 'hierarchical' if (addChildren) { s = ` VALUES ?${facetID}Filter { <${values.join('> <')}> } ?${facetID}FilterWithChildren gvp:broaderPreferred* ?${facetID}Filter . - `; + ` } else { s = ` VALUES ?${facetID}Filter { <${values.join('> <')}> } - `; + ` } if (inverse) { s += ` @@ -256,17 +256,17 @@ const generateUriFilter = ({ ?${filterTarget} ${facetConfigs[facetClass][facetID].predicate} ?${facetID}Filter . ?${filterTarget} ${facetConfigs[facetClass][facetID].predicate} ?id . } - `; + ` } else { const filterValue = addChildren ? `?${facetID}FilterWithChildren` - : `?${facetID}Filter`; + : `?${facetID}Filter` s += ` ?${filterTarget} ${facetConfigs[facetClass][facetID].predicate} ${filterValue} . - `; + ` } - return s; -}; + return s +} export const generateSelectedFilter = ({ facetID, @@ -275,5 +275,5 @@ export const generateSelectedFilter = ({ }) => { return (` FILTER(?id ${inverse ? 'NOT' : ''} IN ( <${getUriFilters(constraints, facetID).join('>, <')}> )) - `); -}; + `) +} diff --git a/src/server/sparql/JenaQuery.js b/src/server/sparql/JenaQuery.js index 991d748db4b3dd72f5e7ea8e52e1107dfdb167bd..89d5adccca1ab12a6f202576e022046d611aa545 100644 --- a/src/server/sparql/JenaQuery.js +++ b/src/server/sparql/JenaQuery.js @@ -1,21 +1,21 @@ -import { runSelectQuery } from './SparqlApi'; -import { prefixes } from './SparqlQueriesPrefixes'; -import { endpoint, jenaQuery } from './SparqlQueriesGeneral'; -import { makeObjectList } from './SparqlObjectMapper'; +import { runSelectQuery } from './SparqlApi' +import { prefixes } from './SparqlQueriesPrefixes' +import { endpoint, jenaQuery } from './SparqlQueriesGeneral' +import { makeObjectList } from './SparqlObjectMapper' export const queryJenaIndex = async ({ queryTerm, resultFormat }) => { - let q = jenaQuery; + let q = jenaQuery q = q.replace('<QUERY>', ` ?id text:query ('${queryTerm.toLowerCase()}' 2000) . - `); + `) const results = await runSelectQuery({ query: prefixes + q, endpoint, resultMapper: makeObjectList, resultFormat - }); - return results; + }) + return results }; diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js index 872ed4b3412470a86cfaa5b9952fac3a9c68c4b9..61d52a9e73e7933fce845d062fc123c55e5ba0b6 100644 --- a/src/server/sparql/Mappers.js +++ b/src/server/sparql/Mappers.js @@ -1,57 +1,57 @@ -import { has } from 'lodash'; -import { getTreeFromFlatData } from 'react-sortable-tree'; +import { has } from 'lodash' +import { getTreeFromFlatData } from 'react-sortable-tree' // import { makeObjectList } from './SparqlObjectMapper'; export const mapPlaces = sparqlBindings => { - //console.log(sparqlBindings); + // console.log(sparqlBindings); const results = sparqlBindings.map(b => { return { id: b.id.value, lat: b.lat.value, long: b.long.value, - instanceCount: b.instanceCount.value, - }; - }); - return results; -}; + instanceCount: b.instanceCount.value + } + }) + return results +} export const mapCount = sparqlBindings => { - return sparqlBindings[0].count.value; -}; + return sparqlBindings[0].count.value +} export const mapFacet = (sparqlBindings, previousSelections) => { - //console.log(previousSelections) - let results = []; + // console.log(previousSelections) + let results = [] if (sparqlBindings.length > 0) { - results = mapFacetValues(sparqlBindings); + results = mapFacetValues(sparqlBindings) } - return results; -}; + return results +} export const mapHierarchicalFacet = (sparqlBindings, previousSelections) => { - //console.log(previousSelections) - const results = mapFacetValues(sparqlBindings); + // console.log(previousSelections) + const results = mapFacetValues(sparqlBindings) let treeData = getTreeFromFlatData({ flatData: results, getKey: node => node.id, // resolve a node's key getParentKey: node => node.parent, // resolve node's parent's key - rootKey: '0', // The value of the parent key when there is no parent (i.e., at root level) - }); - treeData = recursiveSort(treeData); - treeData.forEach(node => sumUpAndSelectChildren(node)); + rootKey: '0' // The value of the parent key when there is no parent (i.e., at root level) + }) + treeData = recursiveSort(treeData) + treeData.forEach(node => sumUpAndSelectChildren(node)) return ({ treeData, flatData: results - }); -}; + }) +} export const mapTimespanFacet = sparqlBindings => { - const b = sparqlBindings[0]; + const b = sparqlBindings[0] return { min: b.min.value, max: b.max.value - }; -}; + } +} const mapFacetValues = sparqlBindings => { const results = sparqlBindings.map(b => { @@ -62,45 +62,44 @@ const mapFacetValues = sparqlBindings => { selected: b.selected.value, parent: b.parent ? b.parent.value : null, instanceCount: b.instanceCount.value - }; - } catch(err) { - console.log(err); + } + } catch (err) { + console.log(err) } - }); - return results; -}; + }) + return results +} const comparator = (a, b) => { if (Array.isArray(a.prefLabel)) { - a.prefLabel = a.prefLabel[0]; + a.prefLabel = a.prefLabel[0] } if (Array.isArray(b.prefLabel)) { - b.prefLabel = b.prefLabel[0]; + b.prefLabel = b.prefLabel[0] } - return a.prefLabel.localeCompare(b.prefLabel); -}; - + return a.prefLabel.localeCompare(b.prefLabel) +} const sumUpAndSelectChildren = node => { - node.totalInstanceCount = parseInt(node.instanceCount); + node.totalInstanceCount = parseInt(node.instanceCount) if (has(node, 'children')) { - for (let child of node.children) { - if (node.selected == 'true') { - child.selected = 'true'; - child.disabled = 'true'; + for (const child of node.children) { + if (node.selected === 'true') { + child.selected = 'true' + child.disabled = 'true' } - node.totalInstanceCount += sumUpAndSelectChildren(child); + node.totalInstanceCount += sumUpAndSelectChildren(child) } } - return node.totalInstanceCount; -}; + return node.totalInstanceCount +} const recursiveSort = nodes => { - nodes.sort(comparator); + nodes.sort(comparator) nodes.forEach(node => { if (has(node, 'children')) { - recursiveSort(node.children); + recursiveSort(node.children) } - }); - return nodes; -}; + }) + return nodes +} diff --git a/src/server/sparql/SparqlApi.js b/src/server/sparql/SparqlApi.js index 30eb68e44faa1fa218e62b5e550b7687e1f5adf3..c717c9c84e65ff5e3cc420167d8f3fb11acae470 100644 --- a/src/server/sparql/SparqlApi.js +++ b/src/server/sparql/SparqlApi.js @@ -1,5 +1,5 @@ -import axios from 'axios'; -import querystring from 'querystring'; +import axios from 'axios' +import querystring from 'querystring' // const defaultConstructHeaders = { // 'Content-Type': 'application/x-www-form-urlencoded', // 'Accept': 'text/turtle' @@ -12,46 +12,46 @@ export const runSelectQuery = async ({ previousSelections = null, resultFormat }) => { - let MIMEtype = resultFormat === 'json' + const MIMEtype = resultFormat === 'json' ? 'application/sparql-results+json; charset=utf-8' - : 'text/csv; charset=utf-8'; + : 'text/csv; charset=utf-8' const headers = { 'Content-Type': 'application/x-www-form-urlencoded', - 'Accept': MIMEtype - }; - const q = querystring.stringify({ query }); + Accept: MIMEtype + } + const q = querystring.stringify({ query }) try { const response = await axios({ method: 'post', headers: headers, url: endpoint, - data: q, - }); + data: q + }) if (resultFormat === 'json') { - const mappedResults = resultMapper(response.data.results.bindings, previousSelections); + const mappedResults = resultMapper(response.data.results.bindings, previousSelections) return { data: mappedResults, sparqlQuery: query - }; + } } else { - return response.data; + return response.data } - } catch(error) { + } catch (error) { if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx - console.log(error.response.data); - //console.log(error.response.status); - //console.log(error.response.headers); + console.log(error.response.data) + // console.log(error.response.status); + // console.log(error.response.headers); } else if (error.request) { // The request was made but no response was received // `error.request` is an instance of XMLHttpRequest in the browser and an instance of // http.ClientRequest in node.js - console.log(error.request); + console.log(error.request) } else { // Something happened in setting up the request that triggered an Error - console.log('Error', error.message); + console.log('Error', error.message) } - console.log(error.config); + console.log(error.config) } -}; +} diff --git a/src/server/sparql/SparqlObjectMapper.js b/src/server/sparql/SparqlObjectMapper.js index 94ede23a3108eac2517c3f477e0f50cbfb6277d1..0d064d0c48455c403907af86ca936968b5c69e43 100644 --- a/src/server/sparql/SparqlObjectMapper.js +++ b/src/server/sparql/SparqlObjectMapper.js @@ -1,4 +1,4 @@ -import _ from 'lodash'; +import _ from 'lodash' /** * @param {Array} objects A list of objects as SPARQL results. @@ -9,22 +9,22 @@ import _ from 'lodash'; */ export const makeObjectList = (objects) => { // console.log(objects) - let objList = _.transform(objects, function(result, obj) { + const objList = _.transform(objects, function (result, obj) { if (!obj.id) { - return null; + return null } - //let orig = obj; - obj = makeObject(obj); - //obj = reviseObject(obj, orig); - mergeValueToList(result, obj); - }); - return objList; - //return self.postProcess(objList); -}; + // let orig = obj; + obj = makeObject(obj) + // obj = reviseObject(obj, orig); + mergeValueToList(result, obj) + }) + return objList + // return self.postProcess(objList); +} export const makeDict = (objects) => { - return arrayToObject(objects, 'id'); -}; + return arrayToObject(objects, 'id') +} /** * @param {Object} obj A single SPARQL result row object. @@ -35,15 +35,15 @@ export const makeDict = (objects) => { * the actual value. */ const makeObject = (obj) => { - let o = new Object; - _.forIn(obj, function(value, key) { + const o = {} + _.forIn(obj, function (value, key) { // If the variable name contains "__", an object // will be created as the value // E.g. { place__id: '1' } -> { place: { id: '1' } } - _.set(o, key.replace(/__/g, '.'), value.value); - }); - return o; -}; + _.set(o, key.replace(/__/g, '.'), value.value) + }) + return o +} /** * @param {Array} valueList A list to which the value should be added. @@ -55,28 +55,28 @@ const makeObject = (obj) => { * A value already present in valueList is discarded. */ const mergeValueToList = (valueList, value) => { - let old; + let old if (_.isObject(value) && value.id) { // Check if this object has been constructed earlier - old = _.findLast(valueList, function(e) { - return e.id === value.id; - }); + old = _.findLast(valueList, function (e) { + return e.id === value.id + }) if (old) { // Merge this object to the object constructed earlier - mergeObjects(old, value); + mergeObjects(old, value) } } else { // Check if this value is present in the list - old = _.findLast(valueList, function(e) { - return _.isEqual(e, value); - }); + old = _.findLast(valueList, function (e) { + return _.isEqual(e, value) + }) } if (!old) { // This is a distinct value - valueList.push(value); + valueList.push(value) } - return valueList; -}; + return valueList +} /** * @param {Object} first An object as returned by makeObject. @@ -87,45 +87,45 @@ const mergeValueToList = (valueList, value) => { */ const mergeObjects = (first, second) => { // Merge two objects into one object. - return _.mergeWith(first, second, merger); -}; + return _.mergeWith(first, second, merger) +} const merger = (a, b) => { if (_.isEqual(a, b)) { - return a; + return a } if (a && !b) { - return a; + return a } if (b && !a) { - return b; + return b } if (_.isArray(a)) { if (_.isArray(b)) { - b.forEach(function(bVal) { - return mergeValueToList(a, bVal); - }); - return a; + b.forEach(function (bVal) { + return mergeValueToList(a, bVal) + }) + return a } - return mergeValueToList(a, b); + return mergeValueToList(a, b) } if (_.isArray(b)) { - return mergeValueToList(b, a); + return mergeValueToList(b, a) } if (!(_.isObject(a) && _.isObject(b) && a.id === b.id)) { - return [a, b]; + return [a, b] } - return mergeObjects(a, b); -}; + return mergeObjects(a, b) +} const arrayToObject = (array, keyField) => array.reduce((obj, item) => { - let newItem = {}; + const newItem = {} Object.entries(item).forEach(([key, value]) => { if (key !== keyField) { - newItem[key] = value.value; + newItem[key] = value.value } - }); - obj[item[keyField].value] = newItem; - return obj; - }, {}); + }) + obj[item[keyField].value] = newItem + return obj + }, {}) diff --git a/src/server/sparql/SparqlQueriesActors.js b/src/server/sparql/SparqlQueriesActors.js index 8e9f1ce40438ee1c84c5f6befb7d4e70e0d5b4c8..501b650e7a2fb86fde2af744fc7dec2dfca75e83 100644 --- a/src/server/sparql/SparqlQueriesActors.js +++ b/src/server/sparql/SparqlQueriesActors.js @@ -205,7 +205,7 @@ export const actorProperties = ` BIND("Selling agent" as ?role) } -`; +` export const placesActorsQuery = ` SELECT ?id ?lat ?long @@ -221,4 +221,4 @@ export const placesActorsQuery = ` wgs84:long ?long . } GROUP BY ?id ?lat ?long -`; +` diff --git a/src/server/sparql/SparqlQueriesEvents.js b/src/server/sparql/SparqlQueriesEvents.js index 0da0541e1740a74da572b7e619f1b4ce9dc4a531..4cade203f1fdf20dfb02178239b2f1d9edfd1177 100644 --- a/src/server/sparql/SparqlQueriesEvents.js +++ b/src/server/sparql/SparqlQueriesEvents.js @@ -85,7 +85,7 @@ export const eventProperties = ` { ?id crm:P3_has_note ?note . } -`; +` export const eventPlacesQuery = ` SELECT ?id ?lat ?long @@ -97,7 +97,7 @@ export const eventPlacesQuery = ` wgs84:long ?long . } GROUP BY ?id ?lat ?long -`; +` export const eventsByTimePeriodQuery = ` SELECT ?id ?type__id ?type__prefLabel @@ -108,7 +108,7 @@ export const eventsByTimePeriodQuery = ` } GROUP BY ?id ?type__id ?type__prefLabel ORDER BY ?id -`; +` export const eventsByTimePeriodQuery2 = ` SELECT ?id ?prefLabel ?period ?instanceCount @@ -116,4 +116,4 @@ export const eventsByTimePeriodQuery2 = ` <FILTER> <TIME_PERIODS> } -`; +` diff --git a/src/server/sparql/SparqlQueriesGeneral.js b/src/server/sparql/SparqlQueriesGeneral.js index 73085273a1853b588c6a6b9c140a08af6652d7f6..a61555aeea2f12181d64c8c469c7b7a75c99b251 100644 --- a/src/server/sparql/SparqlQueriesGeneral.js +++ b/src/server/sparql/SparqlQueriesGeneral.js @@ -1,5 +1,5 @@ -export const endpoint = 'http://ldf.fi/mmm-cidoc/sparql'; -//export const endpoint = 'http://localhost:3050/ds/sparql'; +export const endpoint = 'http://ldf.fi/mmm-cidoc/sparql' +// export const endpoint = 'http://localhost:3050/ds/sparql'; export const instanceQuery = ` SELECT * { @@ -7,7 +7,7 @@ export const instanceQuery = ` <PROPERTIES> <RELATED_INSTANCES> } -`; +` export const countQuery = ` SELECT (COUNT(DISTINCT ?id) as ?count) @@ -16,7 +16,7 @@ export const countQuery = ` VALUES ?facetClass { <FACET_CLASS> } ?id a ?facetClass . } -`; +` export const jenaQuery = ` SELECT * @@ -92,7 +92,7 @@ export const jenaQuery = ` BIND(CONCAT("/expressions/page/", REPLACE(STR(?id), "^.*\\\\/(.+)", "$1")) AS ?prefLabel__dataProviderUrl) } } -`; +` export const facetResultSetQuery = ` SELECT * @@ -110,7 +110,7 @@ export const facetResultSetQuery = ` FILTER(BOUND(?id)) <RESULT_SET_PROPERTIES> } -`; +` export const facetValuesQuery = ` SELECT DISTINCT ?id ?prefLabel ?selected ?parent ?instanceCount { @@ -161,7 +161,7 @@ export const facetValuesQuery = ` } } <ORDER_BY> -`; +` export const facetValuesQueryTimespan = ` # ignore selections from other facets @@ -185,7 +185,7 @@ export const facetValuesQueryTimespan = ` } } } -`; +` export const facetValuesRange = ` # ignore selections from other facets @@ -195,4 +195,4 @@ export const facetValuesRange = ` ?instance a ?facetClass . <FACET_VALUE_FILTER> } -`; +` diff --git a/src/server/sparql/SparqlQueriesManuscripts.js b/src/server/sparql/SparqlQueriesManuscripts.js index 861e0e1fd67c668277362a2121dcc1bf24e3f646..453e728026445ed8185e880bbbc52f6e1b3eeaa2 100644 --- a/src/server/sparql/SparqlQueriesManuscripts.js +++ b/src/server/sparql/SparqlQueriesManuscripts.js @@ -197,7 +197,7 @@ export const manuscriptPropertiesInstancePage = { ?id mmm-schema:historiated_initials/crm:P90_has_value ?historiatedInitials . } -`; +` export const manuscriptPropertiesFacetResults = `?id skos:prefLabel ?prefLabel__id . @@ -357,7 +357,7 @@ export const manuscriptPropertiesFacetResults = { ?id mmm-schema:historiated_initials/crm:P90_has_value ?historiatedInitials . } -`; +` export const expressionProperties = ` { @@ -386,7 +386,7 @@ export const expressionProperties = ?language__id skos:prefLabel ?language__prefLabel . BIND(?language__id as ?language__dataProviderUrl) } -`; +` export const collectionProperties = ` { @@ -421,8 +421,7 @@ export const collectionProperties = ?place__id skos:prefLabel ?place__prefLabel . BIND(CONCAT("/places/page/", REPLACE(STR(?place__id), "^.*\\\\/(.+)", "$1")) AS ?place__dataProviderUrl) } -`; - +` export const allManuscriptsQuery = ` SELECT ?id ?prefLabel @@ -431,7 +430,7 @@ export const allManuscriptsQuery = ` ?id a frbroo:F4_Manifestation_Singleton ; skos:prefLabel ?prefLabel . } -`; +` export const productionPlacesQuery = ` SELECT ?id ?lat ?long @@ -443,7 +442,7 @@ export const productionPlacesQuery = ` wgs84:long ?long . } GROUP BY ?id ?lat ?long -`; +` export const lastKnownLocationsQuery = ` SELECT ?id ?lat ?long @@ -455,9 +454,9 @@ export const lastKnownLocationsQuery = ` wgs84:long ?long . } GROUP BY ?id ?lat ?long -`; +` -//# https://github.com/uber/deck.gl/blob/master/docs/layers/arc-layer.md +// # https://github.com/uber/deck.gl/blob/master/docs/layers/arc-layer.md export const migrationsQuery = ` SELECT DISTINCT ?id ?manuscript__id ?manuscript__prefLabel ?manuscript__dataProviderUrl ?from__id ?from__prefLabel ?from__dataProviderUrl ?from__lat ?from__long @@ -478,11 +477,11 @@ export const migrationsQuery = ` BIND(CONCAT("/places/page/", REPLACE(STR(?to__id), "^.*\\\\/(.+)", "$1")) AS ?to__dataProviderUrl) BIND(IRI(CONCAT(STR(?from__id), "-", REPLACE(STR(?to__id), "http://ldf.fi/mmm/place/", ""))) as ?id) } -`; +` export const networkQuery = ` SELECT DISTINCT ?id WHERE { } -`; +` diff --git a/src/server/sparql/SparqlQueriesPlaces.js b/src/server/sparql/SparqlQueriesPlaces.js index ac4c3e2857165f3a10cfd486abb3ee629010b36e..a8254edca13ad04b3699c35b99da72ce8ba21293 100644 --- a/src/server/sparql/SparqlQueriesPlaces.js +++ b/src/server/sparql/SparqlQueriesPlaces.js @@ -74,7 +74,7 @@ export const placePropertiesInstancePage = ` BIND(CONCAT("/manuscripts/page/", REPLACE(STR(?manuscriptObserved__id), "^.*\\\\/(.+)", "$1")) AS ?manuscriptObserved__dataProviderUrl) FILTER (?id != <http://ldf.fi/mmm/place/tgn_7029392>) # exclude the top concept } -`; +` export const placePropertiesFacetResults = ` { @@ -98,15 +98,15 @@ export const placePropertiesFacetResults = ` ?area__id skos:prefLabel ?area__prefLabel . BIND(CONCAT("/places/page/", REPLACE(STR(?area__id), "^.*\\\\/(.+)", "$1")) AS ?area__dataProviderUrl) } -`; +` export const placePropertiesInfoWindow = ` ?id skos:prefLabel ?prefLabel__id . BIND(?prefLabel__id AS ?prefLabel__prefLabel) BIND(CONCAT("/places/page/", REPLACE(STR(?id), "^.*\\\\/(.+)", "$1")) AS ?prefLabel__dataProviderUrl) -`; +` -export const allPlacesQuery = ` +export const allPlacesQuery = ` SELECT * WHERE { <FILTER> @@ -127,7 +127,7 @@ export const allPlacesQuery = ` OPTIONAL { ?id owl:sameAs ?placeAuthorityURI } FILTER(?id != <http://ldf.fi/mmm/places/tgn_7031096>) } -`; +` export const manuscriptsProducedAt = ` OPTIONAL { @@ -136,7 +136,7 @@ export const manuscriptsProducedAt = ` ?related__id skos:prefLabel ?related__prefLabel . BIND(CONCAT("/manuscripts/page/", REPLACE(STR(?related__id), "^.*\\\\/(.+)", "$1")) AS ?related__dataProviderUrl) } -`; +` export const lastKnownLocationsAt = ` OPTIONAL { @@ -145,7 +145,7 @@ export const lastKnownLocationsAt = ` ?related__id skos:prefLabel ?related__prefLabel . BIND(CONCAT("/manuscripts/page/", REPLACE(STR(?related__id), "^.*\\\\/(.+)", "$1")) AS ?related__dataProviderUrl) } -`; +` export const actorsAt = ` OPTIONAL { @@ -157,4 +157,4 @@ export const actorsAt = ` ?related__id skos:prefLabel ?related__prefLabel . BIND(CONCAT("/actors/page/", REPLACE(STR(?related__id), "^.*\\\\/(.+)", "$1")) AS ?related__dataProviderUrl) } -`; +` diff --git a/src/server/sparql/SparqlQueriesPrefixes.js b/src/server/sparql/SparqlQueriesPrefixes.js index 4b7704c0e1fdd235bef0a6609f704f1606486253..c0feabec895076e9866187d4a208d188cd2bbc60 100644 --- a/src/server/sparql/SparqlQueriesPrefixes.js +++ b/src/server/sparql/SparqlQueriesPrefixes.js @@ -16,4 +16,4 @@ export const prefixes = ` PREFIX wgs84: <http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX spatial: <http://jena.apache.org/spatial#> PREFIX text: <http://jena.apache.org/text#> -`; +` diff --git a/src/server/sparql/SparqlQueriesWorks.js b/src/server/sparql/SparqlQueriesWorks.js index 426add209c2e68b6de76a2bb9e1e94f27fc2e1ea..c303266ccdf55fb6ecbf1cbe57e298165249c831 100644 --- a/src/server/sparql/SparqlQueriesWorks.js +++ b/src/server/sparql/SparqlQueriesWorks.js @@ -57,4 +57,4 @@ export const workProperties = ` OPTIONAL { ?productionTimespan__id crm:P82a_begin_of_the_begin ?productionTimespan__start } OPTIONAL { ?productionTimespan__id crm:P82b_end_of_the_end ?productionTimespan__end } } -`; +`