diff --git a/src/client/actions/index.js b/src/client/actions/index.js index 2602476ee00bcaa747ec979e467090dcec4007a5..e7d63803772cbecd72a4d0c12b773473259d5da8 100644 --- a/src/client/actions/index.js +++ b/src/client/actions/index.js @@ -50,9 +50,9 @@ export const updatePage = (resultClass, page) => ({ type: UPDATE_PAGE, resultClass, page }); -export const fetchByURI = (resultClass, facetClass, uri) => ({ +export const fetchByURI = (resultClass, facetClass, variant, uri) => ({ type: FETCH_BY_URI, - resultClass, facetClass, uri + resultClass, facetClass, variant, uri }); export const fetchByURIFailed = (resultClass, error, message) => ({ type: FETCH_RESULTS_FAILED, diff --git a/src/client/components/LeafletMap.js b/src/client/components/LeafletMap.js index 814c8aa1c276de3a4a83078d9430e73dc52799f0..399f9aa08c2187ff42bae728758123f56a06fdac 100644 --- a/src/client/components/LeafletMap.js +++ b/src/client/components/LeafletMap.js @@ -289,13 +289,13 @@ class LeafletMap extends React.Component { } markerOnClick = event => { - this.props.fetchByURI(this.props.resultClass, this.props.facetClass, event.target.options.id,); + this.props.fetchByURI(this.props.resultClass, this.props.facetClass, this.props.variant, event.target.options.id,); }; createPopUpContent(result) { - let popUpTemplate = `<h3>${result.prefLabel}</h3>`; + let popUpTemplate = `<a target="_blank" rel="noopener noreferrer" href=${result.id}><h3>${result.prefLabel}</h3></a>`; if (has(result, 'dataProviderUrl')) { - popUpTemplate += `<p>Data provider: <a target="_blank" rel="noopener noreferrer" href=${result.dataProviderUrl}>${result.dataProviderUrl}</a></p>`; + popUpTemplate += `<p>Data provider url: <a target="_blank" rel="noopener noreferrer" href=${result.dataProviderUrl}>${result.dataProviderUrl}</a></p>`; } if (has(result, 'sameAs')) { popUpTemplate += `<p>Place authority: <a target="_blank" rel="noopener noreferrer" href=${result.sameAs}>${result.sameAs}</a></p>`; diff --git a/src/client/components/Main.js b/src/client/components/Main.js index e6ec29af8796bbdfbadcd58e9134714ca957d22c..cd9827310761b8df3d4aa8248679eed94c58fcac 100644 --- a/src/client/components/Main.js +++ b/src/client/components/Main.js @@ -146,7 +146,7 @@ let Main = props => { People </Typography> <Typography component="p"> - People related to manuscripts. + People related to manuscripts and works. </Typography> </CardContent> </CardActionArea> @@ -186,7 +186,7 @@ let Main = props => { Places </Typography> <Typography component="p"> - Places related to manuscripts. + Places related to manuscripts and works. </Typography> </CardContent> </CardActionArea> diff --git a/src/client/epics/index.js b/src/client/epics/index.js index 537f65e101193dfd834436eae060148cc0edc0b7..587c177fa6c8e2d43a2252ea5aee2239c1f7bd87 100644 --- a/src/client/epics/index.js +++ b/src/client/epics/index.js @@ -75,8 +75,8 @@ const fetchByURIEpic = (action$, state$) => action$.pipe( ofType(FETCH_BY_URI), withLatestFrom(state$), mergeMap(([action, state]) => { - const { resultClass, facetClass, uri } = action; - const params = stateSlicesToUrl(null, state[`${facetClass}Facets`], null, null); + const { resultClass, facetClass, variant, uri } = action; + const params = stateSlicesToUrl(null, state[`${facetClass}Facets`], variant, facetClass); const requestUrl = `${apiUrl}${resultClass}/instance/${encodeURIComponent(uri)}?${params}`; return ajax.getJSON(requestUrl).pipe( map(response => updateInstance({ resultClass: resultClass, instance: response })), diff --git a/src/server/index.js b/src/server/index.js index 7c4659034e507adaf4a5152da359b029c0bec833..474d3f0904d890da9bf302299da69405d4015e13 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -1,7 +1,7 @@ import express from 'express'; import path from 'path'; import bodyParser from 'body-parser'; -import { getPaginatedResults, getAllResults, getPlace } from './sparql/FacetResults'; +import { getPaginatedResults, getAllResults, getByURI } from './sparql/FacetResults'; import { getFacet } from './sparql/Facets'; const DEFAULT_PORT = 3001; const app = express(); @@ -34,7 +34,8 @@ app.get(`${apiPath}/:resultClass/paginated`, (req, res, next) => { app.get(`${apiPath}/:resultClass/all`, (req, res, next) => { const filters = req.query.filters == null ? null : JSON.parse(req.query.filters); const variant = req.query.variant || null; - return getAllResults(req.params.resultClass, req.query.facetClass, variant, filters).then(data => { + const facetClass = req.query.facetClass || null; + return getAllResults(req.params.resultClass, facetClass, variant, filters).then(data => { //console.log(data) res.json({ resultCount: data.count, @@ -45,16 +46,9 @@ app.get(`${apiPath}/:resultClass/all`, (req, res, next) => { app.get(`${apiPath}/:resultClass/instance/:uri`, (req, res, next) => { const filters = req.query.filters == null ? null : JSON.parse(req.query.filters); - let getByURI = null; - switch (req.params.resultClass) { - // case 'manuscripts': - // getByURI = getManuscript; - // break; - case 'places': - getByURI = getPlace; - break; - } - return getByURI(filters, req.params.uri).then(data => { + const variant = req.query.variant || null; + const facetClass = req.query.facetClass || null; + return getByURI(req.params.resultClass, facetClass, variant, filters, req.params.uri).then(data => { res.json(data[0]); }).catch(next); }); diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index 46043640704f11acee99330d8ee3950fa7a52a8f..b08d8181cdc4d6a132e68500823894fb6dea73d0 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -91,13 +91,27 @@ const getPaginatedData = (resultClass, page, pagesize, filters, sortBy, sortDire return sparqlSearchEngine.doSearch(prefixes + q, endpoint, makeObjectList); }; -export const getPlace = (filters, uri) => { - let q = placeQuery; - q = q.replace('<PLACE_ID>', `<${uri}>`); - if (filters == null) { - q = q.replace('<FILTER>', '# no filters'); +export const getByURI = (resultClass, facetClass, variant, filters, uri) => { + let q; + switch (resultClass) { + case 'places': + q = placeQuery; + break; + } + if (variant === 'productionPlaces') { + const manuscriptsProduced = + `OPTIONAL { + ${generateFilter(resultClass, facetClass, filters, 'manuscript__id', null)} + ?manuscript__id ^crm:P108_has_produced/crm:P7_took_place_at ?id . + ?manuscript__id mmm-schema:data_provider_url ?manuscript__dataProviderUrl . + }`; + q = q.replace('<MANUSCRIPTS>', manuscriptsProduced); } else { - q = q.replace('<FILTER>', generateFilter('places', 'manuscripts', filters, 'manuscript__id', null)); + q = q.replace('<MANUSCRIPTS>', ''); } + q = q.replace('<ID>', `<${uri}>`); + // if (variant === 'productionPlaces') { + // console.log(prefixes + q) + // } return sparqlSearchEngine.doSearch(prefixes + q, endpoint, makeObjectList); }; diff --git a/src/server/sparql/Facets.js b/src/server/sparql/Facets.js index d86e93186abf5ece1c6b307307d334fa7df2efac..bb33ef72c9018d57127c64c3b28b71d4c3bc3d6b 100644 --- a/src/server/sparql/Facets.js +++ b/src/server/sparql/Facets.js @@ -40,9 +40,12 @@ export const getFacet = (resultClass, facetID, sortBy, sortDirection, filters) = OPTIONAL { ?id skos:prefLabel ?prefLabel_ } BIND(COALESCE(STR(?prefLabel_), STR(?id)) AS ?prefLabel) OPTIONAL { ?id dct:source ?source } - OPTIONAL { ?id gvp:broaderPreferred ?parent_ } + OPTIONAL { + ?id gvp:broaderPreferred ?parent_ + FILTER(?parent_ != <http://ldf.fi/mmm/places/tgn_7026519>) + } BIND(COALESCE(?parent_, '0') as ?parent) - FILTER(?id != <http://ldf.fi/mmm/places/tgn_7026519>) + #FILTER(?id != <http://ldf.fi/mmm/places/tgn_7026519>) } `; } diff --git a/src/server/sparql/SparqlQueriesPlaces.js b/src/server/sparql/SparqlQueriesPlaces.js index d7732f21b8f694736bc5c6384187cde66f5f526c..7e85715f3a1d0fc32034d5ccc02668ab035eee11 100644 --- a/src/server/sparql/SparqlQueriesPlaces.js +++ b/src/server/sparql/SparqlQueriesPlaces.js @@ -54,10 +54,9 @@ export const placeQuery = ` PREFIX crm: <http://www.cidoc-crm.org/cidoc-crm/> PREFIX mmm-schema: <http://ldf.fi/mmm/schema/> PREFIX gvp: <http://vocab.getty.edu/ontology#> - SELECT ?id ?prefLabel ?sameAs ?dataProviderUrl ?parent__id ?parent__prefLabel ?manuscript__id ?manuscript__dataProviderUrl WHERE { - BIND (<PLACE_ID> AS ?id) + BIND (<ID> AS ?id) OPTIONAL { ?id skos:prefLabel ?prefLabel_ } BIND(COALESCE(?prefLabel_, ?id) AS ?prefLabel) OPTIONAL { @@ -66,10 +65,6 @@ export const placeQuery = ` } OPTIONAL { ?id mmm-schema:data_provider_url ?dataProviderUrl } OPTIONAL { ?id owl:sameAs ?sameAs } - OPTIONAL { - ?manuscript__id ^crm:P108_has_produced/crm:P7_took_place_at ?id . - ?manuscript__id mmm-schema:data_provider_url ?manuscript__dataProviderUrl . - <FILTER> - } + <MANUSCRIPTS> } `;