diff --git a/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js b/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js index 4183991deb4..e2380087fe2 100644 --- a/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js +++ b/jena-fuseki2/jena-fuseki-ui/src/services/fuseki.service.js @@ -22,6 +22,39 @@ import { BUS } from '@/events' const DATASET_SIZE_QUERY_1 = 'select (count(*) as ?count) {?s ?p ?o}' const DATASET_SIZE_QUERY_2 = 'select ?g (count(*) as ?count) {graph ?g {?s ?p ?o}} group by ?g' +const CONF_DATASET_NAME = 'yasgui-config' +const CONF_EXAMPLE_QUERIES_QUERY = `PREFIX conf: +PREFIX rdfs: +PREFIX rdf: +PREFIX sd: +PREFIX list: +JSON { + "text": ?text, + "value": ?value +} WHERE { + ?root sd:endpoint "/@DATASET_NAME@/" . + ?root conf:exampleQueries ?list . + ?list list:index (?idx ?ex) . + ?ex rdfs:label ?text . + ?ex conf:query ?value . +} +ORDER BY ?idx` +const CONF_PREFIXES_QUERY = `PREFIX conf: +PREFIX rdfs: +PREFIX rdf: +PREFIX sd: +PREFIX list: +JSON { + "text": ?text, + "uri": ?uri +} WHERE { + ?root sd:endpoint "/@DATASET_NAME@/" . + ?root conf:prefixes ?list . + ?list list:index (?idx ?ex) . + ?ex rdfs:label ?text . + ?ex conf:uri ?uri . +} +ORDER BY ?idx` class FusekiService { /** @@ -208,6 +241,28 @@ class FusekiService { throw new Error(error.response.data) }) } + + async getYasguiExampleQueries (datasetName) { + return await axios + .get(this.getFusekiUrl(`/${CONF_DATASET_NAME}`), { + params: { + query: CONF_EXAMPLE_QUERIES_QUERY.replaceAll("@DATASET_NAME@", datasetName) + } + }) + } + + async getYasguiPrefixes (datasetName) { + return await axios + .get(this.getFusekiUrl(`/${CONF_DATASET_NAME}`), { + params: { + query: CONF_PREFIXES_QUERY.replaceAll("@DATASET_NAME@", datasetName) + } + }) + } + + getYasguiConfigDsName () { + return CONF_DATASET_NAME + } } export default FusekiService diff --git a/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Query.vue b/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Query.vue index f007362f89f..00111fa330e 100644 --- a/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Query.vue +++ b/jena-fuseki2/jena-fuseki-ui/src/views/dataset/Query.vue @@ -345,10 +345,22 @@ export default { datasetUrl: function (val, oldVal) { this.currentDatasetUrl = val }, - currentDatasetUrl: function (val, oldVal) { + currentDatasetUrl: async function (val, oldVal) { if (this.yasqe) { this.yasqe.options.requestConfig.endpoint = this.$fusekiService.getFusekiUrl(val) } + if (this.serverData.datasets.find((ds) => ds['ds.name'] === `/${this.$fusekiService.getYasguiConfigDsName()}`)) { + const [queries_res, prefixes_res] = await Promise.all([ + this.$fusekiService.getYasguiExampleQueries(this.datasetName), + this.$fusekiService.getYasguiPrefixes(this.datasetName) + ]) + if (queries_res.data.length !== 0) { + this.queries.splice(0, Infinity, ...queries_res.data) + } + if (prefixes_res.data.length !== 0) { + this.prefixes.splice(0, Infinity, ...prefixes_res.data) + } + } }, contentTypeSelect: function (val, oldVal) { if (this.yasqe) {