diff --git a/src/client/components/facet_results/Network.js b/src/client/components/facet_results/Network.js index 2ef9ca8b3bfe0f3a0edfeccef44930521d4c7808..61ca5fd50b432c2566cef116be6e1dc2fbdab609 100644 --- a/src/client/components/facet_results/Network.js +++ b/src/client/components/facet_results/Network.js @@ -23,6 +23,12 @@ class Network extends React.Component { } componentDidMount = () => { + + this.props.fetchResults({ + resultClass: this.props.resultClass, + facetClass: this.props.facetClass, + }); + this.cy = cytoscape({ container: this.cyRef.current }); @@ -45,7 +51,11 @@ class Network extends React.Component { } Network.propTypes = { - classes: PropTypes.object.isRequired + classes: PropTypes.object.isRequired, + results: PropTypes.object, + fetchResults: PropTypes.func.isRequired, + resultClass: PropTypes.string.isRequired, + facetClass: PropTypes.string.isRequired, }; export default withStyles(styles)(Network); diff --git a/src/client/components/perspectives/mmm/Manuscripts.js b/src/client/components/perspectives/mmm/Manuscripts.js index 193c8dc78f400fd10a23a7bcd2cc52667f48b821..b42d192f3cc57f366eb1bdaacc68551be68de398 100644 --- a/src/client/components/perspectives/mmm/Manuscripts.js +++ b/src/client/components/perspectives/mmm/Manuscripts.js @@ -81,7 +81,10 @@ let Manuscripts = props => { path={'/manuscripts/faceted-search/network'} render={() => <Network - + results={props.manuscripts.results} + fetchResults={props.fetchResults} + resultClass='manuscriptsNetwork' + facetClass='manuscripts' />} /> <Route diff --git a/src/client/reducers/mmm/manuscripts.js b/src/client/reducers/mmm/manuscripts.js index e80f43ba4af74c79c938a3aa842a7eb6e6202a2b..3d79097cd2c35c19b646c26e7ad68910e7d92a11 100644 --- a/src/client/reducers/mmm/manuscripts.js +++ b/src/client/reducers/mmm/manuscripts.js @@ -30,7 +30,7 @@ import { } from '../helpers'; export const INITIAL_STATE = { - results: [], + results: null, resultsSparqlQuery: null, paginatedResults: [], paginatedResultsSparqlQuery: null, diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index 5faba03b0909e9d839f2dc146131cf3e8471b16d..781a6beab4459dd9786eac83313c99c7c70af1ed 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -1,4 +1,5 @@ import { runSelectQuery } from './SparqlApi'; +import { runNetworkQuery } from './NetworkApi'; import { prefixes } from './SparqlQueriesPrefixes'; import { endpoint, @@ -14,8 +15,8 @@ import { productionPlacesQuery, lastKnownLocationsQuery, migrationsQuery, - networkQuery, - allManuscriptsQuery + networkLinksQuery, + networkNodesQuery } from './SparqlQueriesManuscripts'; import { workProperties } from './SparqlQueriesWorks'; import { eventProperties, eventPlacesQuery } from './SparqlQueriesEvents'; @@ -110,13 +111,9 @@ export const getAllResults = ({ q = generateEventsByPeriodQuery({ startYear: 1600, endYear: 1620, periodLength: 10 }); filterTarget = 'event'; break; - case 'network': - q = networkQuery; - filterTarget = 'manuscript__id'; - break; - case 'allManuscripts': - q = allManuscriptsQuery; - filterTarget = 'id'; + case 'manuscriptsNetwork': + q = networkLinksQuery; + filterTarget = 'source'; break; } if (constraints == null) { @@ -130,6 +127,15 @@ export const getAllResults = ({ facetID: null })); } + if (resultClass === 'manuscriptsNetwork') { + // console.log(prefixes + q) + return runNetworkQuery({ + endpoint, + prefixes, + links: q, + nodes: networkNodesQuery, + }); + } // console.log(prefixes + q) return runSelectQuery({ query: prefixes + q, diff --git a/src/server/sparql/NetworkApi.js b/src/server/sparql/NetworkApi.js new file mode 100644 index 0000000000000000000000000000000000000000..f4638feb970290832594d9f8da9c952f415952f4 --- /dev/null +++ b/src/server/sparql/NetworkApi.js @@ -0,0 +1,45 @@ +import axios from 'axios'; + +export const runNetworkQuery = async({ + endpoint, + prefixes, + links, + nodes +}) => { + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + }; + const params = JSON.stringify({ + endpoint, + prefixes, + nodes, + links + }); + try { + const response = await axios({ + method: 'post', + headers: headers, + url: 'http://127.0.0.1:5000/query', + data: params, + }); + return response.data; + } 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); + } 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); + } else { + // Something happened in setting up the request that triggered an Error + console.log('Error', error.message); + } + console.log(error.config); + } +}; +; diff --git a/src/server/sparql/SparqlApi.js b/src/server/sparql/SparqlApi.js index 30eb68e44faa1fa218e62b5e550b7687e1f5adf3..0cbb54783961d2b402296bb55262da8a96080cc8 100644 --- a/src/server/sparql/SparqlApi.js +++ b/src/server/sparql/SparqlApi.js @@ -1,9 +1,5 @@ import axios from 'axios'; import querystring from 'querystring'; -// const defaultConstructHeaders = { -// 'Content-Type': 'application/x-www-form-urlencoded', -// 'Accept': 'text/turtle' -// }; export const runSelectQuery = async ({ query, diff --git a/src/server/sparql/SparqlQueriesManuscripts.js b/src/server/sparql/SparqlQueriesManuscripts.js index 861e0e1fd67c668277362a2121dcc1bf24e3f646..d04deff919122ad72f108341b828ed43a9ec13fd 100644 --- a/src/server/sparql/SparqlQueriesManuscripts.js +++ b/src/server/sparql/SparqlQueriesManuscripts.js @@ -424,11 +424,21 @@ export const collectionProperties = `; -export const allManuscriptsQuery = ` - SELECT ?id ?prefLabel +export const networkLinksQuery = ` + SELECT DISTINCT ?source ?target WHERE { <FILTER> - ?id a frbroo:F4_Manifestation_Singleton ; + ?source mmm-schema:manuscript_author ?target . + } + LIMIT 100 +`; + +export const networkNodesQuery = ` + SELECT DISTINCT ?id ?prefLabel ?class + WHERE { + VALUES ?class { frbroo:F4_Manifestation_Singleton crm:E21_Person } + VALUES ?id { <ID_SET> } + ?id a ?class ; skos:prefLabel ?prefLabel . } `; @@ -479,10 +489,3 @@ export const migrationsQuery = ` BIND(IRI(CONCAT(STR(?from__id), "-", REPLACE(STR(?to__id), "http://ldf.fi/mmm/place/", ""))) as ?id) } `; - -export const networkQuery = ` - SELECT DISTINCT ?id - WHERE { - - } -`;