@piveau/piveau-hub-ui-modules 4.6.21 → 4.6.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/data-provider-interface/CatalogueMQA.vue.mjs +23 -21
  2. package/dist/data-provider-interface/CatalogueMQA.vue.mjs.map +1 -1
  3. package/dist/data-provider-interface/DataProviderInterface.vue.d.ts +1 -1
  4. package/dist/data-provider-interface/DataProviderInterface.vue.mjs.map +1 -1
  5. package/dist/data-provider-interface/DataProviderInterface.vue2.mjs +7 -6
  6. package/dist/data-provider-interface/DataProviderInterface.vue2.mjs.map +1 -1
  7. package/dist/data-provider-interface/components/Navigation.vue.d.ts +1 -1
  8. package/dist/data-provider-interface/components/Navigation.vue.mjs +63 -59
  9. package/dist/data-provider-interface/components/Navigation.vue.mjs.map +1 -1
  10. package/dist/data-provider-interface/components/SimpleSelect.vue.mjs +74 -74
  11. package/dist/data-provider-interface/components/SimpleSelect.vue.mjs.map +1 -1
  12. package/dist/data-provider-interface/composables/useDpiContext.d.ts +1 -0
  13. package/dist/data-provider-interface/composables/useDpiContext.mjs.map +1 -1
  14. package/dist/data-provider-interface/config/dcatapde/input-definition.mjs +3 -2
  15. package/dist/data-provider-interface/config/dcatapde/input-definition.mjs.map +1 -1
  16. package/dist/data-provider-interface/utils/RDFconverter.mjs +70 -76
  17. package/dist/data-provider-interface/utils/RDFconverter.mjs.map +1 -1
  18. package/dist/data-provider-interface/views/InputPage.vue.d.ts +1 -1
  19. package/dist/piveau-hub-ui-modules.css +1 -1
  20. package/dist/services/catalogService.d.ts +1 -1
  21. package/dist/services/catalogService.mjs +19 -18
  22. package/dist/services/catalogService.mjs.map +1 -1
  23. package/dist/store/modules/cataloguesStore.d.ts +9 -1
  24. package/dist/store/modules/cataloguesStore.mjs +24 -14
  25. package/dist/store/modules/cataloguesStore.mjs.map +1 -1
  26. package/dist/store/modules/datasetsStore.mjs +0 -1
  27. package/dist/store/modules/datasetsStore.mjs.map +1 -1
  28. package/package.json +1 -1
@@ -6,28 +6,28 @@ import "../config/dcatapdeODB/prefixes.mjs";
6
6
  import "../config/dcatapdeODB/format-types.mjs";
7
7
  import "../config/dcatapdeODB/vocab-prefixes.mjs";
8
8
  import l from "./general-helper.mjs";
9
- function g(r, o, t) {
9
+ function g(c, o, t) {
10
10
  let d, i = t;
11
- const u = new a.Writer({ prefixes: i.prefixes, format: "N-Triples" }), n = `https://piveau.eu/set/data/${r.datasets.datasetID}`;
12
- if (Q(u, r[o], o, "", "", !0, n, i), o === "datasets")
13
- for (let c = 0; c < r.distributions.length; c += 1)
14
- Q(u, r.distributions[c], "distributions", "", "", !0, n, i);
15
- return u.end((c, N) => d = N), d;
11
+ const u = new a.Writer({ prefixes: i.prefixes, format: "N-Triples" }), n = `https://piveau.eu/set/data/${c.datasets.datasetID}`;
12
+ if (Q(u, c[o], o, "", "", !0, n, i), o === "datasets")
13
+ for (let r = 0; r < c.distributions.length; r += 1)
14
+ Q(u, c.distributions[r], "distributions", "", "", !0, n, i);
15
+ return u.end((r, N) => d = N), d;
16
16
  }
17
- function Q(r, o, t, d, i, u, n, c) {
18
- const N = c.formatTypes;
17
+ function Q(c, o, t, d, i, u, n, r) {
18
+ const N = r.formatTypes;
19
19
  let y, v;
20
20
  if (u) {
21
21
  if (t === "datasets")
22
- v = l.addNamespace("dcat:Dataset", c), y = a.DataFactory.namedNode(n);
22
+ v = l.addNamespace("dcat:Dataset", r), y = a.DataFactory.namedNode(n);
23
23
  else if (t === "catalogues")
24
- v = l.addNamespace("dcat:Catalog", c), y = a.DataFactory.namedNode(`https://piveau.eu/set/data/${o.datasetID}`);
24
+ v = l.addNamespace("dcat:Catalog", r), y = a.DataFactory.namedNode(`https://piveau.eu/set/data/${o.datasetID}`);
25
25
  else {
26
- v = l.addNamespace("dcat:Distribution", c);
26
+ v = l.addNamespace("dcat:Distribution", r);
27
27
  const q = l.makeId(10);
28
28
  y = a.DataFactory.namedNode(`https://piveau.eu/set/data/${q}`);
29
29
  }
30
- H(r, o, y, v, t, n, c);
30
+ H(c, o, y, v, t, n, r);
31
31
  } else
32
32
  y = d, v = i;
33
33
  const T = Object.keys(o);
@@ -35,15 +35,15 @@ function Q(r, o, t, d, i, u, n, c) {
35
35
  const e = T[q];
36
36
  if (l.propertyHasValue(o[e]))
37
37
  if (N.singularString[t].includes(e))
38
- A(r, y, o, e, c);
38
+ U(c, y, o, e, r);
39
39
  else if (N.singularURI[t].includes(e))
40
- P(r, y, o, e, c);
40
+ P(c, y, o, e, r);
41
41
  else if (N.multipleURI[t].includes(e))
42
- U(r, y, o, e, t, c);
42
+ A(c, y, o, e, t, r);
43
43
  else if (N.typedStrings[t].includes(e))
44
- Y(r, y, o, e, c);
44
+ Y(c, y, o, e, r);
45
45
  else if (N.multilingualStrings[t].includes(e))
46
- j(r, y, o, e, c);
46
+ j(c, y, o, e, r);
47
47
  else if (N.groupedProperties[t].includes(e)) {
48
48
  let s;
49
49
  e === "vcard:hasAddress" || e === "dct:creator" || e === "skos:notation" || e === "spdx:checksum" ? s = [o[e]] : s = o[e];
@@ -53,13 +53,13 @@ function Q(r, o, t, d, i, u, n, c) {
53
53
  if (e === "skos:notation") {
54
54
  if (D(m, "@value") && !f(m["@value"])) {
55
55
  let p;
56
- D(m, "@type") && !f(m["@type"]) ? p = a.DataFactory.literal(m["@value"], a.DataFactory.namedNode(m["@type"].resource)) : p = a.DataFactory.literal(m["@value"]), r.addQuad(a.DataFactory.quad(
56
+ D(m, "@type") && !f(m["@type"]) ? p = a.DataFactory.literal(m["@value"], a.DataFactory.namedNode(m["@type"].resource)) : p = a.DataFactory.literal(m["@value"]), c.addQuad(a.DataFactory.quad(
57
57
  y,
58
- a.DataFactory.namedNode(l.addNamespace("rdf:type", c)),
59
- a.DataFactory.namedNode(l.addNamespace("adms:Identifier", c))
60
- )), r.addQuad(a.DataFactory.quad(
58
+ a.DataFactory.namedNode(l.addNamespace("rdf:type", r)),
59
+ a.DataFactory.namedNode(l.addNamespace("adms:Identifier", r))
60
+ )), c.addQuad(a.DataFactory.quad(
61
61
  y,
62
- a.DataFactory.namedNode(l.addNamespace(e, c)),
62
+ a.DataFactory.namedNode(l.addNamespace(e, r)),
63
63
  p
64
64
  ));
65
65
  }
@@ -72,129 +72,123 @@ function Q(r, o, t, d, i, u, n, c) {
72
72
  let I = !0, S = !0, x = !0, M = !0;
73
73
  V && (I = !m["dct:title"].every((h) => D(h, "@value")), S = m["dct:title"].every((h) => f(h["@value"]))), $ && (x = !m["dct:description"].every((h) => D(h, "@value")), M = m["dct:description"].every((h) => f(h["@value"]))), (I || S) && (x || M) && (b = !0);
74
74
  }
75
- b || (p || (p = a.DataFactory.blankNode("")), r.addQuad(a.DataFactory.quad(
75
+ b || (p || (p = a.DataFactory.blankNode("")), c.addQuad(a.DataFactory.quad(
76
76
  y,
77
- a.DataFactory.namedNode(l.addNamespace(e, c)),
77
+ a.DataFactory.namedNode(l.addNamespace(e, r)),
78
78
  p
79
- )), D(N.additionalPropertyTypes, e) && r.addQuad(a.DataFactory.quad(
79
+ )), D(N.additionalPropertyTypes, e) && c.addQuad(a.DataFactory.quad(
80
80
  p,
81
- a.DataFactory.namedNode(l.addNamespace("rdf:type", c)),
82
- a.DataFactory.namedNode(l.addNamespace(N.additionalPropertyTypes[e], c))
83
- )), e === "dct:temporal" && D(m, "dct:temporal") && (m = m["dct:temporal"]), Q(r, m, t, p, v, !1, c, c));
81
+ a.DataFactory.namedNode(l.addNamespace("rdf:type", r)),
82
+ a.DataFactory.namedNode(l.addNamespace(N.additionalPropertyTypes[e], r))
83
+ )), e === "dct:temporal" && D(m, "dct:temporal") && (m = m["dct:temporal"]), Q(c, m, t, p, v, !1, r, r));
84
84
  }
85
85
  }
86
86
  } else if (N.conditionalProperties[t].includes(e)) {
87
87
  if (e === "dct:publisher" || e === "dct:license")
88
88
  if (D(o[e], "resource"))
89
- P(r, y, o, e, c);
89
+ P(c, y, o, e, r);
90
90
  else {
91
91
  const s = a.DataFactory.blankNode("");
92
- D(N.additionalPropertyTypes, e) && r.addQuad(a.DataFactory.quad(
92
+ D(N.additionalPropertyTypes, e) && c.addQuad(a.DataFactory.quad(
93
93
  s,
94
- a.DataFactory.namedNode(l.addNamespace("rdf:type", c)),
95
- a.DataFactory.namedNode(l.addNamespace(N.additionalPropertyTypes[e], c))
96
- )), r.addQuad(a.DataFactory.quad(
94
+ a.DataFactory.namedNode(l.addNamespace("rdf:type", r)),
95
+ a.DataFactory.namedNode(l.addNamespace(N.additionalPropertyTypes[e], r))
96
+ )), c.addQuad(a.DataFactory.quad(
97
97
  y,
98
- a.DataFactory.namedNode(l.addNamespace(e, c)),
98
+ a.DataFactory.namedNode(l.addNamespace(e, r)),
99
99
  s
100
- )), Q(r, o[e], t, s, v, !1, c, c);
100
+ )), Q(c, o[e], t, s, v, !1, r, r);
101
101
  }
102
102
  } else if (e === "dcat:temporalResolution") {
103
103
  const s = o[e], F = `P${s.Year ? s.Year : 0}Y${s.Month ? s.Month : 0}M${s.Day ? s.Day : 0}DT${s.Hour ? s.Hour : 0}H${s.Minute ? s.Minute : 0}M${s.Second ? s.Second : 0}S`;
104
- F !== "P0Y0M0DT0H0M0S" && r.addQuad(a.DataFactory.quad(
104
+ F !== "P0Y0M0DT0H0M0S" && c.addQuad(a.DataFactory.quad(
105
105
  y,
106
- a.DataFactory.namedNode(l.addNamespace(e, c)),
107
- a.DataFactory.literal(F, a.DataFactory.namedNode(l.addNamespace("xsd:duration", c)))
106
+ a.DataFactory.namedNode(l.addNamespace(e, r)),
107
+ a.DataFactory.literal(F, a.DataFactory.namedNode(l.addNamespace("xsd:duration", r)))
108
108
  ));
109
109
  } else if (e === "dct:identifier")
110
110
  for (let s = 0; s < o[e].length; s += 1) {
111
111
  const F = o[e][s];
112
- D(F, "@value") && !f(F["@value"]) && r.addQuad(a.DataFactory.quad(
112
+ D(F, "@value") && !f(F["@value"]) && c.addQuad(a.DataFactory.quad(
113
113
  y,
114
- a.DataFactory.namedNode(l.addNamespace(e, c)),
114
+ a.DataFactory.namedNode(l.addNamespace(e, r)),
115
115
  a.DataFactory.literal(F["@value"])
116
116
  ));
117
117
  }
118
118
  else if (e === "dct:rights") {
119
119
  const s = a.DataFactory.blankNode("");
120
- r.addQuad(a.DataFactory.quad(
120
+ c.addQuad(a.DataFactory.quad(
121
121
  y,
122
- a.DataFactory.namedNode(l.addNamespace(e, c)),
122
+ a.DataFactory.namedNode(l.addNamespace(e, r)),
123
123
  s
124
- )), r.addQuad(a.DataFactory.quad(
124
+ )), c.addQuad(a.DataFactory.quad(
125
125
  s,
126
- a.DataFactory.namedNode(l.addNamespace("rdf:type", c)),
127
- a.DataFactory.namedNode(l.addNamespace("dct:RightsStatement", c))
126
+ a.DataFactory.namedNode(l.addNamespace("rdf:type", r)),
127
+ a.DataFactory.namedNode(l.addNamespace("dct:RightsStatement", r))
128
128
  ));
129
129
  let F;
130
- o[e]["@type"] === "url" ? F = a.DataFactory.namedNode(o[e]["rdfs:label"]) : F = a.DataFactory.literal(o[e]["rdfs:label"]), r.addQuad(a.DataFactory.quad(
130
+ o[e]["@type"] === "url" ? F = a.DataFactory.namedNode(o[e]["rdfs:label"]) : F = a.DataFactory.literal(o[e]["rdfs:label"]), c.addQuad(a.DataFactory.quad(
131
131
  s,
132
- a.DataFactory.namedNode(l.addNamespace("rdfs:label", c)),
132
+ a.DataFactory.namedNode(l.addNamespace("rdfs:label", r)),
133
133
  F
134
134
  ));
135
135
  } else
136
- e === "rdf:type" && r.addQuad(a.DataFactory.quad(
136
+ e === "rdf:type" && c.addQuad(a.DataFactory.quad(
137
137
  y,
138
- a.DataFactory.namedNode(l.addNamespace("rdf:type", c)),
139
- a.DataFactory.namedNode(l.addNamespace(o[e], c))
138
+ a.DataFactory.namedNode(l.addNamespace("rdf:type", r)),
139
+ a.DataFactory.namedNode(l.addNamespace(o[e], r))
140
140
  ));
141
141
  }
142
142
  }
143
- function H(r, o, t, d, i, u, n) {
144
- r.addQuad(a.DataFactory.quad(
143
+ function H(c, o, t, d, i, u, n) {
144
+ c.addQuad(a.DataFactory.quad(
145
145
  t,
146
146
  a.DataFactory.namedNode(l.addNamespace("rdf:type", n)),
147
147
  a.DataFactory.namedNode(d)
148
- )), i === "datasets" && r.addQuad(a.DataFactory.quad(
149
- t,
150
- a.DataFactory.namedNode(l.addNamespace("dcat:catalog", n)),
151
- // no actual vocabulary
152
- a.DataFactory.literal(o["dcat:catalog"])
153
- // hould never be empty because of frontend checking
154
- )), i === "catalogues" && r.addQuad(a.DataFactory.quad(
148
+ )), i === "catalogues" && c.addQuad(a.DataFactory.quad(
155
149
  t,
156
150
  a.DataFactory.namedNode(l.addNamespace("dct:type", n)),
157
151
  a.DataFactory.literal("dcat-ap")
158
- )), i === "distributions" && r.addQuad(a.DataFactory.quad(
152
+ )), i === "distributions" && c.addQuad(a.DataFactory.quad(
159
153
  a.DataFactory.namedNode(u),
160
154
  a.DataFactory.namedNode(l.addNamespace("dcat:distribution", n)),
161
155
  t
162
156
  ));
163
157
  }
164
- function A(r, o, t, d, i) {
165
- f(t[d]) || r.addQuad(a.DataFactory.quad(
158
+ function U(c, o, t, d, i) {
159
+ f(t[d]) || c.addQuad(a.DataFactory.quad(
166
160
  o,
167
161
  a.DataFactory.namedNode(l.addNamespace(d, i)),
168
162
  a.DataFactory.literal(t[d])
169
163
  ));
170
164
  }
171
- function P(r, o, t, d, i) {
165
+ function P(c, o, t, d, i) {
172
166
  if (!f(t[d])) {
173
167
  let u;
174
- typeof t[d] == "object" ? D(t[d], "resource") && (u = t[d].resource) : t[d].includes("@") ? u = `mailto:${t[d]}` : u = t[d], r.addQuad(a.DataFactory.quad(
168
+ typeof t[d] == "object" ? D(t[d], "resource") && (u = t[d].resource) : t[d].includes("@") ? u = `mailto:${t[d]}` : u = t[d], c.addQuad(a.DataFactory.quad(
175
169
  o,
176
170
  a.DataFactory.namedNode(l.addNamespace(d, i)),
177
171
  a.DataFactory.namedNode(u)
178
172
  ));
179
173
  }
180
174
  }
181
- function U(r, o, t, d, i, u) {
175
+ function A(c, o, t, d, i, u) {
182
176
  for (let n = 0; n < t[d].length; n += 1) {
183
- let c;
177
+ let r;
184
178
  const N = t[d][n];
185
- f(N) || (D(N, "resource") ? c = N.resource : D(N, "@id") && (c = N["@id"])), r.addQuad(a.DataFactory.quad(
179
+ f(N) || (D(N, "resource") ? r = N.resource : D(N, "@id") && (r = N["@id"])), c.addQuad(a.DataFactory.quad(
186
180
  o,
187
181
  a.DataFactory.namedNode(l.addNamespace(d, u)),
188
- a.DataFactory.namedNode(c)
182
+ a.DataFactory.namedNode(r)
189
183
  ));
190
184
  }
191
185
  }
192
- function Y(r, o, t, d, i) {
186
+ function Y(c, o, t, d, i) {
193
187
  if (!f(t[d]))
194
188
  if (d === "dct:issued" || d === "dct:modified") {
195
189
  if (D(t[d], "@value") && !f(t[d]["@value"])) {
196
190
  const u = t[d]["@type"] === "date" ? t[d]["@type"] : "dateTime", n = l.addNamespace(`xsd:${u}`, i);
197
- r.addQuad(a.DataFactory.quad(
191
+ c.addQuad(a.DataFactory.quad(
198
192
  o,
199
193
  a.DataFactory.namedNode(l.addNamespace(d, i)),
200
194
  a.DataFactory.literal(t[d]["@value"], a.DataFactory.namedNode(n))
@@ -202,17 +196,17 @@ function Y(r, o, t, d, i) {
202
196
  }
203
197
  } else {
204
198
  let u;
205
- d === "dcat:endDate" || d === "dcat:startDate" ? u = l.addNamespace("xsd:dateTime", i) : (d === "dcat:spatialResolutionInMeters" || d === "dcat:byteSize") && (u = l.addNamespace("xsd:decimal", i)), r.addQuad(a.DataFactory.quad(
199
+ d === "dcat:endDate" || d === "dcat:startDate" ? u = l.addNamespace("xsd:dateTime", i) : (d === "dcat:spatialResolutionInMeters" || d === "dcat:byteSize") && (u = l.addNamespace("xsd:decimal", i)), c.addQuad(a.DataFactory.quad(
206
200
  o,
207
201
  a.DataFactory.namedNode(l.addNamespace(d, i)),
208
202
  a.DataFactory.literal(t[d], a.DataFactory.namedNode(u))
209
203
  ));
210
204
  }
211
205
  }
212
- function j(r, o, t, d, i) {
206
+ function j(c, o, t, d, i) {
213
207
  if (!f(t[d]))
214
208
  if (!Array.isArray(t[d]))
215
- r.addQuad(a.DataFactory.quad(
209
+ c.addQuad(a.DataFactory.quad(
216
210
  o,
217
211
  a.DataFactory.namedNode(l.addNamespace(d, i)),
218
212
  a.DataFactory.literal(t[d])
@@ -221,11 +215,11 @@ function j(r, o, t, d, i) {
221
215
  for (let u = 0; u < t[d].length; u += 1) {
222
216
  const n = t[d][u];
223
217
  if (!f(n) && D(n, "@value") && !f(n["@value"])) {
224
- let c;
225
- !D(n, "@language") || f(n, "@language") ? c = "en" : c = n["@language"], r.addQuad(a.DataFactory.quad(
218
+ let r;
219
+ !D(n, "@language") || f(n, "@language") ? r = "en" : r = n["@language"], c.addQuad(a.DataFactory.quad(
226
220
  o,
227
221
  a.DataFactory.namedNode(l.addNamespace(d, i)),
228
- a.DataFactory.literal(n["@value"], c)
222
+ a.DataFactory.literal(n["@value"], r)
229
223
  ));
230
224
  }
231
225
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RDFconverter.mjs","sources":["../../../lib/data-provider-interface/utils/RDFconverter.js"],"sourcesContent":["import N3 from 'n3';\nimport { isEmpty } from 'lodash';\nimport { has } from 'lodash';\n\nimport generalDpiConfig from '../config/dpi-spec-config';\n\nimport generalHelper from './general-helper';\n\n/**\n * Converts all properties for given data from form input data into RDF (N-Triples)\n * @param {Object} data Data given within an object. Data stored as follows { datasets: {...}, distributions: [{...},...], catalogues: {...}} \n * @param {String} property Name of property which should be converted (either 'datasets' or 'catalogues')\n * @returns String of converted data in RDF format (N-Triples)\n */\nfunction convertToRDF(data, property, specification) {\n\n let finishedRDFdata;\n\n let dpiConfig = specification;\n\n // writer for adding data as quads\n const RDFdata = new N3.Writer({ prefixes: dpiConfig.prefixes, format: 'N-Triples' });\n // datasetURI also needed for distribution creation (add distributionURI to dataset (dcat:distribution))\n const datasetURI = `https://piveau.eu/set/data/${data.datasets.datasetID}`;\n\n // convert values for datasets/catalogues\n convertPropertyValues(RDFdata, data[property], property, '', '', true, datasetURI, dpiConfig); // datasets and catalogues\n\n // include distribution data into same graph\n // differentiation neccessary because datasets also include distributions\n if (property === 'datasets') {\n // multiple distributions possible -> [{data of distribution 1}, {data of distribution 2}, ...]\n for (let index = 0; index < data.distributions.length; index += 1) {\n convertPropertyValues(RDFdata, data.distributions[index], 'distributions', '', '', true, datasetURI, dpiConfig);\n }\n }\n\n RDFdata.end((error, result) => finishedRDFdata = result);\n return finishedRDFdata;\n}\n\n/**\n * Converts each single value of given form data based on type into RDF\n * @param {N3.Writer} RDFdataset Dataset the converted RDF data should be added to\n * @param {Object} data Object containing data as key-value pairs\n * @param {String} property String determining which property is handled (datasets/distributions/catalogues)\n * @param {DataFactory} preMainURI (can be undefined) Could be a namedNode or BlankNode containing an URI\n * @param {DataFactory} preMainType (can be undefined) NamedNode determining the type of the current property (e.g. dcat:Dataset (as object))\n * @param {Boolean} setMain Value determining if additional values should be set (type, id, sample...)\n * @param {String} datasetURI URI of dataset for use in distribution conversion \n */\nfunction convertPropertyValues(RDFdataset, data, property, preMainURI, preMainType, setMain, datasetURI, dpiConfig) {\n\n const formatTypes = dpiConfig.formatTypes;\n\n // method can be called recursively for nested properties\n // need to access id of parent node for later use as subject -> provide via method parameters (preMainURI & preMainType)\n let mainURI;\n let mainType;\n\n // parent method can be called recursively for nested values\n // if called on non-nested values a overall id and type muste be set (setMain -> true)\n if (setMain) {\n if (property === 'datasets') {\n mainType = generalHelper.addNamespace('dcat:Dataset', dpiConfig);\n mainURI = N3.DataFactory.namedNode(datasetURI); // datasetID should never be empty because of frontend checking\n } else if (property === 'catalogues') {\n mainType = generalHelper.addNamespace('dcat:Catalog', dpiConfig);\n mainURI = N3.DataFactory.namedNode(`https://piveau.eu/set/data/${data.datasetID}`); // datasetID should never be empty because of frontend checking\n } else {\n mainType = generalHelper.addNamespace('dcat:Distribution', dpiConfig);\n const randomId = generalHelper.makeId(10);\n // distribution id can be random, will be overwritten by backend on saving data\n mainURI = N3.DataFactory.namedNode(`https://piveau.eu/set/data/${randomId}`);\n }\n\n // parent method can be called recursively to convert nested values\n // but setting the overal type and id of a dataset/catalogue is only required once at the beginning\n // -> only set additional properties when setMain === true\n setAdditionalProperties(RDFdataset, data, mainURI, mainType, property, datasetURI, dpiConfig);\n } else {\n // called on nested properties with already given URI and type which should used in the following conversion process\n mainURI = preMainURI;\n mainType = preMainType;\n }\n\n // distributions may have download URLs, if no downloadURL is provided -> provided accessUrls will be also set as downloadUrls\n // accessUrl is a required property and therefore always provided (made sure by the frontend)\n // const downloadUrlsProvided = has(data, 'dcat:downloadURL') && !isEmpty(data['dcat:downloadURL']) && data['dcat:downloadURL'].map(el => !isEmpty(el['@id'])).reduce((a, b) => b);\n\n // loop trough all keys within data object and convert values (or nested values) to RDF\n const valueKeys = Object.keys(data);\n for (let index = 0; index < valueKeys.length; index += 1) {\n const key = valueKeys[index]; // key format: either a normal name for special properties (e.g. datasetID) or namespaced keys (e.g. dct:title)\n\n if(generalHelper.propertyHasValue(data[key])) {\n // all properties are sorted by their format (see .../data-provider-interface/config/format-types.js)\n // depending on the format the corresponding conversion-method is used, writing the result to the overall RDF-writer\n if (formatTypes.singularString[property].includes(key)) {\n convertSingularString(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.singularURI[property].includes(key)) {\n convertSingularURI(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.multipleURI[property].includes(key)) {\n // if no dowloadURL is provided, set accessUrls as downloadUrls\n // if (!downloadUrlsProvided && key === 'dcat:accessURL') {\n // // copy accessurl array to donwloadurl array and convert data\n\n // data['dcat:downloadURL'] = cloneDeep(data['dcat:accessURL']);\n // convertMultipleURI(RDFdataset, mainURI, data, 'dcat:downloadURL', property, dpiConfig);\n // }\n\n convertMultipleURI(RDFdataset, mainURI, data, key, property, dpiConfig);\n } else if (formatTypes.typedStrings[property].includes(key)) {\n convertTypedString(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.multilingualStrings[property].includes(key)) {\n convertMultilingual(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.groupedProperties[property].includes(key)) {\n\n // grouped properties are properties provided by the form which consist of multiple properties (e.g contactPoint)\n // the properties values are stored within an object located within an array\n // for repeatable properties there are multiple objects in this array, otherwise there is just one\n \n let actualData;\n // vcard:hasAdress is an object as well as dct:creator and skos:notation\n if (key === 'vcard:hasAddress' || key === 'dct:creator' || key === 'skos:notation' || key === 'spdx:checksum' ) actualData = [data[key]];\n else actualData = data[key];\n\n // looping trough all existing objects within the array\n for (let groupId = 0; groupId < actualData.length; groupId += 1) {\n let currentGroupData = actualData[groupId];\n\n if (!isEmpty(currentGroupData)) {\n if (key === 'skos:notation') {\n // property skos:notation work a little bit different then other properties\n // the form provides a value and a type from two seperated fields ({'@value': '...', '@type': '...'})\n // the resulting RDF should merge these values into a typed literal (value^^type)\n if (has(currentGroupData, '@value') && !isEmpty(currentGroupData['@value'])) {\n let notationValue;\n\n // if a type is given, use to form typed literal\n // if no type is given, only use value to create literal\n if (has(currentGroupData, '@type') && !isEmpty(currentGroupData['@type'])) { // typed literal\n notationValue = N3.DataFactory.literal(currentGroupData['@value'], N3.DataFactory.namedNode(currentGroupData['@type'].resource));\n } else { // literal\n notationValue = N3.DataFactory.literal(currentGroupData['@value']);\n }\n\n // add type for adms:identifier\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace('adms:Identifier', dpiConfig))\n ))\n\n // save quadruple with typed or untyped literal\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n notationValue\n ))\n\n // resulting rdf quads should look like this:\n // datasetId adms:identifier admsIdentifierUtl\n // admsIdentifierUrl rdf:type adms:Identifier\n // admsIdentifierUrl skos:notation value^^type\n }\n } else {\n let groupBlankNode;\n\n // because grouped properties have a list of nested properties we need an initial quadruple stating the parent property\n // using a blank node as object which later serves as subject for the nested properties\n // RDF example:\n // datasetID dct:contactPoint blankNodeId\n // blankNodeId foaf:mbox email@exmaple.com\n // blankNodeId fn:name InsitutionName ...\n\n // some form fields provide an URL which should serves as namedNode for other nested values (e.g. conformsTo)\n // RDF example:\n // datasetID dct:conformsTo conformsToURI\n // conformsToURI dct:title conformsTitle\n if ((key === 'foaf:page' || key === 'adms:identifier' || key === 'dct:conformsTo') && has(currentGroupData, '@id')) {\n groupBlankNode = N3.DataFactory.namedNode(currentGroupData['@id']);\n }\n // all properties that don't provide an URL serving as namedNode for nested values need to define a blank node\n\n // page gets type but also has multilingual fields with preseleted langauge\n // don't create blank node if there is not data for page beside the preselected language\n let emptyPage = false;\n\n if (key === 'foaf:page') {\n\n // if page has title and/or description property given, check if there are values given \n const hasTitle = has(currentGroupData, 'dct:title');\n const hasDescription = has(currentGroupData, 'dct:description');\n\n let hasNoValueKeysTitle = true;\n let hasEmptyValueTitle = true;\n let hasNoValueKeysDescription = true;\n let hasEmptyValueDescription = true;\n\n if (hasTitle) {\n hasNoValueKeysTitle = !currentGroupData['dct:title'].every(el => has(el, '@value'));\n hasEmptyValueTitle = currentGroupData['dct:title'].every(el => isEmpty(el['@value']));\n }\n\n if (hasDescription) {\n hasNoValueKeysDescription = !currentGroupData['dct:description'].every(el => has(el, '@value'));\n hasEmptyValueDescription = currentGroupData['dct:description'].every(el => isEmpty(el['@value']));\n }\n\n // page should be handled as empty if:\n // no title and/or no description given\n // if properties given: no value given or value empty\n if ((hasNoValueKeysTitle || hasEmptyValueTitle) && (hasNoValueKeysDescription || hasEmptyValueDescription)) emptyPage = true;\n }\n\n if (!emptyPage) {\n if (!groupBlankNode) groupBlankNode = N3.DataFactory.blankNode('');\n\n // save inital quadruple using the named or blank node as object\n // e.g. datasetId dct:contactPoint blankNode/namedNode\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n groupBlankNode\n ))\n\n // some properties provide additional types\n if (has(formatTypes.additionalPropertyTypes, key)) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n groupBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace(formatTypes.additionalPropertyTypes[key], dpiConfig))\n ))\n }\n\n // temporal values nested inside another object: \"dct:temporal\": [{ \"dct:temporal\": { \"dcat:startDate\": \"...\", \"dcat:endDate\": \"...\" } }] \n if (key === 'dct:temporal') {\n if (has(currentGroupData, 'dct:temporal')) {\n currentGroupData = currentGroupData['dct:temporal'];\n }\n }\n\n // convert all nested values provided by form\n convertPropertyValues(RDFdataset, currentGroupData, property, groupBlankNode, mainType, false, dpiConfig, dpiConfig);\n }\n }\n }\n }\n } else if (formatTypes.conditionalProperties[property].includes(key)) {\n // publisher either is an URI or a group with multiple values (name, homepage, email)\n // license either is an URI or a group with multiple values ()\n if (key === 'dct:publisher' || key === 'dct:license') {\n\n // data contains either {resource: '...', name: '...'} or object containing other keys\n if (has(data[key], 'resource')) {\n convertSingularURI(RDFdataset, mainURI, data, key, dpiConfig);\n } else {\n const groupBlankNode = N3.DataFactory.blankNode('');\n\n // some properties provide additional types\n if (has(formatTypes.additionalPropertyTypes, key)) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n groupBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace(formatTypes.additionalPropertyTypes[key], dpiConfig))\n ))\n }\n\n // save inital quadruple using the named or blank node as object\n // e.g. datasetId dct:contactPoint blankNode/namedNode\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n groupBlankNode\n ))\n\n convertPropertyValues(RDFdataset, data[key], property, groupBlankNode, mainType, false, dpiConfig, dpiConfig);\n }\n \n\n }\n } else if (key === 'dcat:temporalResolution') {\n // temporal resolution is displayed as group of input forms for each property (year, month, day, ...)\n // the form provides the data as following: [ { 'Year': '...', 'Month': '...', ... } ]\n // the final format of this property should look like this: P?Y?M?DT?H?M?S\n // not all values must be filled and therefore be present -> default behavior if not given: value = 0\n\n const resolutionValues = data[key];\n const valueString = `P${resolutionValues.Year ? resolutionValues.Year : 0}Y${resolutionValues.Month ? resolutionValues.Month : 0}M${resolutionValues.Day ? resolutionValues.Day : 0}DT${resolutionValues.Hour ? resolutionValues.Hour : 0}H${resolutionValues.Minute ? resolutionValues.Minute : 0}M${resolutionValues.Second ? resolutionValues.Second : 0}S`;\n\n // frontend always provides temporalResolution even if there is no value resulting in P0Y0M0DT0H0M0S\n // don't save if value is equal to P0Y0M0DT0H0M0S\n if (valueString !== \"P0Y0M0DT0H0M0S\") {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(valueString, N3.DataFactory.namedNode(generalHelper.addNamespace('xsd:duration', dpiConfig)))\n ))\n }\n } else if (key === 'dct:identifier') {\n // form provides data as array of objects with strings: [ { '@value': 'string1' }, { '@value': 'string2' }, ... ]\n // create quadruple for each given object in the array\n for (let valueId = 0; valueId < data[key].length; valueId += 1) {\n const currentValue = data[key][valueId];\n if (has(currentValue, '@value') && !isEmpty(currentValue['@value'])) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(currentValue['@value'])\n ))\n }\n }\n } else if (key === 'dct:rights') {\n // rights has a static type (RightsStatement) which needs to be added to linked data as additional node\n // therefore we need to create an initial quadruple for with 'rights' being the predicate having a blank node\n // blank node serves as subject for the following quadruples which contain the type and actual value of the form field\n // RDF:\n // datasetID dct:rights blankNodeID\n // blankNodeId rdf:type RightsStatement\n // blankNodeId rdfs:label LabelValue\n\n // blank node as object for inital quadruple and also as subject for following quadruples\n const rightsBlankNode = N3.DataFactory.blankNode('');\n\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n rightsBlankNode\n ))\n\n // add additional type declaration\n RDFdataset.addQuad(N3.DataFactory.quad(\n rightsBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace('dct:RightsStatement', dpiConfig))\n ))\n\n // rights is a conditional property and provides either an URI or a string ( { rdfs:label : 'URL/string' } )\n let rightsValue;\n\n if (data[key]['@type'] === 'url') {\n rightsValue = N3.DataFactory.namedNode(data[key]['rdfs:label']);\n } else {\n rightsValue = N3.DataFactory.literal(data[key]['rdfs:label']);\n }\n\n // add actual value\n RDFdataset.addQuad(N3.DataFactory.quad(\n rightsBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdfs:label', dpiConfig)),\n rightsValue\n ))\n \n } else if (key === 'rdf:type') {\n // some properties have additional type information which needs to be added to graph\n // e.g contactPoint -> vcard:Individual\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace(data[key], dpiConfig))\n ))\n }\n } \n }\n}\n\n/**\n * Creates additional quads depending on given property and saves them to given RDF dataset\n * @param {N3.Writer} RDFdataset RDF dataset the quads are saved to\n * @param {Object} data Object containing data as key-value pairs\n * @param {DataFactory.namedNode} mainURI NamedNode defining URI of current property graph\n * @param {DataFactory} mainType NamedNode defining type of current property graph\n * @param {String} property String determining which property is converted (datasets/distributions/catalogues)\n * @param {String} datasetURI URI of dataset used to add distribution URI to dct:distribution within dataset graph\n */\nfunction setAdditionalProperties(RDFdataset, data, mainURI, mainType, property, datasetURI, dpiConfig) {\n\n // adding id and type of property\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(mainType)\n ))\n\n // adding sample and catalog for datasets\n if (property === 'datasets') {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('dcat:catalog', dpiConfig)), // no actual vocabulary\n N3.DataFactory.literal(data['dcat:catalog']) // hould never be empty because of frontend checking\n ))\n }\n\n // catalogues always have to contain the property dct:type with the value 'dcat-ap'\n if (property === 'catalogues') {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('dct:type', dpiConfig)),\n N3.DataFactory.literal('dcat-ap')\n ))\n }\n\n // add distribution id to dataset graph (dcat:distribution)\n if (property === 'distributions') {\n RDFdataset.addQuad(N3.DataFactory.quad(\n N3.DataFactory.namedNode(datasetURI),\n N3.DataFactory.namedNode(generalHelper.addNamespace('dcat:distribution', dpiConfig)),\n mainURI\n ))\n }\n}\n\n//-----------------------------------------------------------------------------------------------------\n// basic conversion (input to RDF) methods for different categories of data\n//-----------------------------------------------------------------------------------------------------\n// seems unnecessary at first but if we want to convert nested properties as well, we need these \n// methods (especially to provide the correct parent URI)\n\n/**\n * Converts provided data to quad and saves it to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quad\n * @param {String} data Data given by form used as object in quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quad\n */\nfunction convertSingularString(RDFdataset, id, data, key, dpiConfig) {\n if (!isEmpty(data[key])) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key])\n ))\n }\n}\n\n/**\n * Converts provided data to quad and saves it to given dataset\n * @param {N3.Writer} RDFdata Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quad\n * @param {String} data Data given by form used as object in quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quad\n */\nfunction convertSingularURI(RDFdataset, id, data, key, dpiConfig) {\n // there are two different formats the frontend delivers URIs\n // 1: 'URI' or 2: {'name': 'abc', 'resource': 'URI'}\n\n // URIs can either be a normal URL or an email address\n // mail addresses typicall include '@' which is used to determine if the given string is a normal URL or an email address\n if (!isEmpty(data[key])) {\n\n let singleURI;\n\n if (typeof data[key] === 'object') {\n if (has(data[key], 'resource')) {\n singleURI = data[key].resource;\n }\n } else {\n if (data[key].includes('@')) {\n // mail address\n singleURI = `mailto:${data[key]}`;\n } else {\n // normal URL\n singleURI = data[key];\n }\n }\n\n // save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.namedNode(singleURI)\n ));\n }\n}\n\n/**\n * Converts provided data to quads and saves them to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quads\n * @param {Array} data Array containing URLs used as object within quads\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quads\n * @param {String} property Determining which property is concerted (datasets/distributions/catalogues)\n */\nfunction convertMultipleURI(RDFdataset, id, data, key, property, dpiConfig) {\n // there are two different formats the frontend delivers multiple URIs\n // 1: [ {\"name\": '...', \"resource\": 'URI'}, {...} ] -> multi-autocomplete fields\n // 2: [ { \"@id\": \"URI1\" }, { \"@id\": \"URI2\" } ] repeatable fields\n\n for (let uriIndex = 0; uriIndex < data[key].length; uriIndex += 1) {\n\n let currentURI;\n const valueObject = data[key][uriIndex];\n if (!isEmpty(valueObject)) {\n if (has(valueObject, 'resource')) currentURI = valueObject.resource;\n else if (has(valueObject, '@id')) currentURI = valueObject['@id'];\n }\n\n // save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.namedNode(currentURI)\n ));\n }\n}\n\n/**\n * Converts provided data to quad and saves them to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quad\n * @param {String} data String data used as object with type in quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quad and to determine quad-object type\n */\nfunction convertTypedString(RDFdataset, id, data, key, dpiConfig) {\n if (!isEmpty(data[key])) {\n\n // there is a variety of properties which can have different types\n // issued and motified already provide a type definition ({'@type': 'date/datetime', '@value': '...'})\n if (key === 'dct:issued' || key === 'dct:modified') {\n if (has(data[key], '@value') && !isEmpty(data[key]['@value'])) {\n const imValueType = data[key]['@type'] === 'date' ? data[key]['@type'] : 'dateTime';\n const valueType = generalHelper.addNamespace(`xsd:${imValueType}`, dpiConfig);\n\n /// save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key]['@value'], N3.DataFactory.namedNode(valueType))\n ));\n }\n } else {\n // all other properties are given as a simple string\n let valueType;\n if (key === 'dcat:endDate' || key === 'dcat:startDate') {\n // dcat:endDate and dcat:startDate are xsd:dateTime\n valueType = generalHelper.addNamespace('xsd:dateTime', dpiConfig);\n } else if (key === 'dcat:spatialResolutionInMeters' || key === \"dcat:byteSize\") {\n // dcat:spatialResolutionInMeters and dcat:byteSize are xsd:decimal\n valueType = generalHelper.addNamespace('xsd:decimal', dpiConfig);\n }\n\n /// save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key], N3.DataFactory.namedNode(valueType))\n ));\n }\n }\n}\n\n/**\n * Converts provided data to quads and saves them to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quads\n * @param {Array} data Array of objects containing data and language converted into literal with language for quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quads\n */\nfunction convertMultilingual(RDFdataset, id, data, key, dpiConfig) {\n // multilingual fields mostly provide data as followed\n // [ { '@value': '....', '@language': '...' }, ... ]\n // only the licence title provides no language\n\n if (!isEmpty(data[key])) {\n\n // licence title\n if (!Array.isArray(data[key])) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key])\n ))\n } else {\n for (let langIndex = 0; langIndex < data[key].length; langIndex += 1) {\n const currentData = data[key][langIndex];\n // only save data if a value is given (forntend provides preselected language which don't need to be saved if there is no actaul value)\n if (!isEmpty(currentData) && has(currentData, '@value') && !isEmpty(currentData['@value'])) {\n let languageTag;\n \n // if there is no langauge given, set language to english\n if (!has(currentData, '@language') || isEmpty(currentData, '@language')) {\n languageTag = 'en';\n } else {\n // if language is given, use given tag\n languageTag = currentData['@language'];\n }\n \n // saving quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(currentData['@value'], languageTag)\n ))\n }\n }\n }\n }\n}\n\nexport default {\n convertToRDF,\n};"],"names":["convertToRDF","data","property","specification","finishedRDFdata","dpiConfig","RDFdata","N3","datasetURI","convertPropertyValues","index","error","result","RDFdataset","preMainURI","preMainType","setMain","formatTypes","mainURI","mainType","generalHelper","randomId","setAdditionalProperties","valueKeys","key","convertSingularString","convertSingularURI","convertMultipleURI","convertTypedString","convertMultilingual","actualData","groupId","currentGroupData","isEmpty","has","notationValue","groupBlankNode","emptyPage","hasTitle","hasDescription","hasNoValueKeysTitle","hasEmptyValueTitle","hasNoValueKeysDescription","hasEmptyValueDescription","el","resolutionValues","valueString","valueId","currentValue","rightsBlankNode","rightsValue","id","singleURI","uriIndex","currentURI","valueObject","imValueType","valueType","langIndex","currentData","languageTag","toRDF"],"mappings":"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"}
1
+ {"version":3,"file":"RDFconverter.mjs","sources":["../../../lib/data-provider-interface/utils/RDFconverter.js"],"sourcesContent":["import N3 from 'n3';\nimport { isEmpty } from 'lodash';\nimport { has } from 'lodash';\n\nimport generalDpiConfig from '../config/dpi-spec-config';\n\nimport generalHelper from './general-helper';\n\n/**\n * Converts all properties for given data from form input data into RDF (N-Triples)\n * @param {Object} data Data given within an object. Data stored as follows { datasets: {...}, distributions: [{...},...], catalogues: {...}} \n * @param {String} property Name of property which should be converted (either 'datasets' or 'catalogues')\n * @returns String of converted data in RDF format (N-Triples)\n */\nfunction convertToRDF(data, property, specification) {\n\n let finishedRDFdata;\n\n let dpiConfig = specification;\n\n // writer for adding data as quads\n const RDFdata = new N3.Writer({ prefixes: dpiConfig.prefixes, format: 'N-Triples' });\n // datasetURI also needed for distribution creation (add distributionURI to dataset (dcat:distribution))\n const datasetURI = `https://piveau.eu/set/data/${data.datasets.datasetID}`;\n\n // convert values for datasets/catalogues\n convertPropertyValues(RDFdata, data[property], property, '', '', true, datasetURI, dpiConfig); // datasets and catalogues\n\n // include distribution data into same graph\n // differentiation neccessary because datasets also include distributions\n if (property === 'datasets') {\n // multiple distributions possible -> [{data of distribution 1}, {data of distribution 2}, ...]\n for (let index = 0; index < data.distributions.length; index += 1) {\n convertPropertyValues(RDFdata, data.distributions[index], 'distributions', '', '', true, datasetURI, dpiConfig);\n }\n }\n\n RDFdata.end((error, result) => finishedRDFdata = result);\n return finishedRDFdata;\n}\n\n/**\n * Converts each single value of given form data based on type into RDF\n * @param {N3.Writer} RDFdataset Dataset the converted RDF data should be added to\n * @param {Object} data Object containing data as key-value pairs\n * @param {String} property String determining which property is handled (datasets/distributions/catalogues)\n * @param {DataFactory} preMainURI (can be undefined) Could be a namedNode or BlankNode containing an URI\n * @param {DataFactory} preMainType (can be undefined) NamedNode determining the type of the current property (e.g. dcat:Dataset (as object))\n * @param {Boolean} setMain Value determining if additional values should be set (type, id, sample...)\n * @param {String} datasetURI URI of dataset for use in distribution conversion \n */\nfunction convertPropertyValues(RDFdataset, data, property, preMainURI, preMainType, setMain, datasetURI, dpiConfig) {\n\n const formatTypes = dpiConfig.formatTypes;\n\n // method can be called recursively for nested properties\n // need to access id of parent node for later use as subject -> provide via method parameters (preMainURI & preMainType)\n let mainURI;\n let mainType;\n\n // parent method can be called recursively for nested values\n // if called on non-nested values a overall id and type muste be set (setMain -> true)\n if (setMain) {\n if (property === 'datasets') {\n mainType = generalHelper.addNamespace('dcat:Dataset', dpiConfig);\n mainURI = N3.DataFactory.namedNode(datasetURI); // datasetID should never be empty because of frontend checking\n } else if (property === 'catalogues') {\n mainType = generalHelper.addNamespace('dcat:Catalog', dpiConfig);\n mainURI = N3.DataFactory.namedNode(`https://piveau.eu/set/data/${data.datasetID}`); // datasetID should never be empty because of frontend checking\n } else {\n mainType = generalHelper.addNamespace('dcat:Distribution', dpiConfig);\n const randomId = generalHelper.makeId(10);\n // distribution id can be random, will be overwritten by backend on saving data\n mainURI = N3.DataFactory.namedNode(`https://piveau.eu/set/data/${randomId}`);\n }\n\n // parent method can be called recursively to convert nested values\n // but setting the overal type and id of a dataset/catalogue is only required once at the beginning\n // -> only set additional properties when setMain === true\n setAdditionalProperties(RDFdataset, data, mainURI, mainType, property, datasetURI, dpiConfig);\n } else {\n // called on nested properties with already given URI and type which should used in the following conversion process\n mainURI = preMainURI;\n mainType = preMainType;\n }\n\n // distributions may have download URLs, if no downloadURL is provided -> provided accessUrls will be also set as downloadUrls\n // accessUrl is a required property and therefore always provided (made sure by the frontend)\n // const downloadUrlsProvided = has(data, 'dcat:downloadURL') && !isEmpty(data['dcat:downloadURL']) && data['dcat:downloadURL'].map(el => !isEmpty(el['@id'])).reduce((a, b) => b);\n\n // loop trough all keys within data object and convert values (or nested values) to RDF\n const valueKeys = Object.keys(data);\n for (let index = 0; index < valueKeys.length; index += 1) {\n const key = valueKeys[index]; // key format: either a normal name for special properties (e.g. datasetID) or namespaced keys (e.g. dct:title)\n\n if(generalHelper.propertyHasValue(data[key])) {\n // all properties are sorted by their format (see .../data-provider-interface/config/format-types.js)\n // depending on the format the corresponding conversion-method is used, writing the result to the overall RDF-writer\n if (formatTypes.singularString[property].includes(key)) {\n convertSingularString(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.singularURI[property].includes(key)) {\n convertSingularURI(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.multipleURI[property].includes(key)) {\n // if no dowloadURL is provided, set accessUrls as downloadUrls\n // if (!downloadUrlsProvided && key === 'dcat:accessURL') {\n // // copy accessurl array to donwloadurl array and convert data\n\n // data['dcat:downloadURL'] = cloneDeep(data['dcat:accessURL']);\n // convertMultipleURI(RDFdataset, mainURI, data, 'dcat:downloadURL', property, dpiConfig);\n // }\n\n convertMultipleURI(RDFdataset, mainURI, data, key, property, dpiConfig);\n } else if (formatTypes.typedStrings[property].includes(key)) {\n convertTypedString(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.multilingualStrings[property].includes(key)) {\n convertMultilingual(RDFdataset, mainURI, data, key, dpiConfig);\n } else if (formatTypes.groupedProperties[property].includes(key)) {\n\n // grouped properties are properties provided by the form which consist of multiple properties (e.g contactPoint)\n // the properties values are stored within an object located within an array\n // for repeatable properties there are multiple objects in this array, otherwise there is just one\n \n let actualData;\n // vcard:hasAdress is an object as well as dct:creator and skos:notation\n if (key === 'vcard:hasAddress' || key === 'dct:creator' || key === 'skos:notation' || key === 'spdx:checksum' ) actualData = [data[key]];\n else actualData = data[key];\n\n // looping trough all existing objects within the array\n for (let groupId = 0; groupId < actualData.length; groupId += 1) {\n let currentGroupData = actualData[groupId];\n\n if (!isEmpty(currentGroupData)) {\n if (key === 'skos:notation') {\n // property skos:notation work a little bit different then other properties\n // the form provides a value and a type from two seperated fields ({'@value': '...', '@type': '...'})\n // the resulting RDF should merge these values into a typed literal (value^^type)\n if (has(currentGroupData, '@value') && !isEmpty(currentGroupData['@value'])) {\n let notationValue;\n\n // if a type is given, use to form typed literal\n // if no type is given, only use value to create literal\n if (has(currentGroupData, '@type') && !isEmpty(currentGroupData['@type'])) { // typed literal\n notationValue = N3.DataFactory.literal(currentGroupData['@value'], N3.DataFactory.namedNode(currentGroupData['@type'].resource));\n } else { // literal\n notationValue = N3.DataFactory.literal(currentGroupData['@value']);\n }\n\n // add type for adms:identifier\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace('adms:Identifier', dpiConfig))\n ))\n\n // save quadruple with typed or untyped literal\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n notationValue\n ))\n\n // resulting rdf quads should look like this:\n // datasetId adms:identifier admsIdentifierUtl\n // admsIdentifierUrl rdf:type adms:Identifier\n // admsIdentifierUrl skos:notation value^^type\n }\n } else {\n let groupBlankNode;\n\n // because grouped properties have a list of nested properties we need an initial quadruple stating the parent property\n // using a blank node as object which later serves as subject for the nested properties\n // RDF example:\n // datasetID dct:contactPoint blankNodeId\n // blankNodeId foaf:mbox email@exmaple.com\n // blankNodeId fn:name InsitutionName ...\n\n // some form fields provide an URL which should serves as namedNode for other nested values (e.g. conformsTo)\n // RDF example:\n // datasetID dct:conformsTo conformsToURI\n // conformsToURI dct:title conformsTitle\n if ((key === 'foaf:page' || key === 'adms:identifier' || key === 'dct:conformsTo') && has(currentGroupData, '@id')) {\n groupBlankNode = N3.DataFactory.namedNode(currentGroupData['@id']);\n }\n // all properties that don't provide an URL serving as namedNode for nested values need to define a blank node\n\n // page gets type but also has multilingual fields with preseleted langauge\n // don't create blank node if there is not data for page beside the preselected language\n let emptyPage = false;\n\n if (key === 'foaf:page') {\n\n // if page has title and/or description property given, check if there are values given \n const hasTitle = has(currentGroupData, 'dct:title');\n const hasDescription = has(currentGroupData, 'dct:description');\n\n let hasNoValueKeysTitle = true;\n let hasEmptyValueTitle = true;\n let hasNoValueKeysDescription = true;\n let hasEmptyValueDescription = true;\n\n if (hasTitle) {\n hasNoValueKeysTitle = !currentGroupData['dct:title'].every(el => has(el, '@value'));\n hasEmptyValueTitle = currentGroupData['dct:title'].every(el => isEmpty(el['@value']));\n }\n\n if (hasDescription) {\n hasNoValueKeysDescription = !currentGroupData['dct:description'].every(el => has(el, '@value'));\n hasEmptyValueDescription = currentGroupData['dct:description'].every(el => isEmpty(el['@value']));\n }\n\n // page should be handled as empty if:\n // no title and/or no description given\n // if properties given: no value given or value empty\n if ((hasNoValueKeysTitle || hasEmptyValueTitle) && (hasNoValueKeysDescription || hasEmptyValueDescription)) emptyPage = true;\n }\n\n if (!emptyPage) {\n if (!groupBlankNode) groupBlankNode = N3.DataFactory.blankNode('');\n\n // save inital quadruple using the named or blank node as object\n // e.g. datasetId dct:contactPoint blankNode/namedNode\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n groupBlankNode\n ))\n\n // some properties provide additional types\n if (has(formatTypes.additionalPropertyTypes, key)) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n groupBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace(formatTypes.additionalPropertyTypes[key], dpiConfig))\n ))\n }\n\n // temporal values nested inside another object: \"dct:temporal\": [{ \"dct:temporal\": { \"dcat:startDate\": \"...\", \"dcat:endDate\": \"...\" } }] \n if (key === 'dct:temporal') {\n if (has(currentGroupData, 'dct:temporal')) {\n currentGroupData = currentGroupData['dct:temporal'];\n }\n }\n\n // convert all nested values provided by form\n convertPropertyValues(RDFdataset, currentGroupData, property, groupBlankNode, mainType, false, dpiConfig, dpiConfig);\n }\n }\n }\n }\n } else if (formatTypes.conditionalProperties[property].includes(key)) {\n // publisher either is an URI or a group with multiple values (name, homepage, email)\n // license either is an URI or a group with multiple values ()\n if (key === 'dct:publisher' || key === 'dct:license') {\n\n // data contains either {resource: '...', name: '...'} or object containing other keys\n if (has(data[key], 'resource')) {\n convertSingularURI(RDFdataset, mainURI, data, key, dpiConfig);\n } else {\n const groupBlankNode = N3.DataFactory.blankNode('');\n\n // some properties provide additional types\n if (has(formatTypes.additionalPropertyTypes, key)) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n groupBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace(formatTypes.additionalPropertyTypes[key], dpiConfig))\n ))\n }\n\n // save inital quadruple using the named or blank node as object\n // e.g. datasetId dct:contactPoint blankNode/namedNode\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n groupBlankNode\n ))\n\n convertPropertyValues(RDFdataset, data[key], property, groupBlankNode, mainType, false, dpiConfig, dpiConfig);\n }\n \n\n }\n } else if (key === 'dcat:temporalResolution') {\n // temporal resolution is displayed as group of input forms for each property (year, month, day, ...)\n // the form provides the data as following: [ { 'Year': '...', 'Month': '...', ... } ]\n // the final format of this property should look like this: P?Y?M?DT?H?M?S\n // not all values must be filled and therefore be present -> default behavior if not given: value = 0\n\n const resolutionValues = data[key];\n const valueString = `P${resolutionValues.Year ? resolutionValues.Year : 0}Y${resolutionValues.Month ? resolutionValues.Month : 0}M${resolutionValues.Day ? resolutionValues.Day : 0}DT${resolutionValues.Hour ? resolutionValues.Hour : 0}H${resolutionValues.Minute ? resolutionValues.Minute : 0}M${resolutionValues.Second ? resolutionValues.Second : 0}S`;\n\n // frontend always provides temporalResolution even if there is no value resulting in P0Y0M0DT0H0M0S\n // don't save if value is equal to P0Y0M0DT0H0M0S\n if (valueString !== \"P0Y0M0DT0H0M0S\") {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(valueString, N3.DataFactory.namedNode(generalHelper.addNamespace('xsd:duration', dpiConfig)))\n ))\n }\n } else if (key === 'dct:identifier') {\n // form provides data as array of objects with strings: [ { '@value': 'string1' }, { '@value': 'string2' }, ... ]\n // create quadruple for each given object in the array\n for (let valueId = 0; valueId < data[key].length; valueId += 1) {\n const currentValue = data[key][valueId];\n if (has(currentValue, '@value') && !isEmpty(currentValue['@value'])) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(currentValue['@value'])\n ))\n }\n }\n } else if (key === 'dct:rights') {\n // rights has a static type (RightsStatement) which needs to be added to linked data as additional node\n // therefore we need to create an initial quadruple for with 'rights' being the predicate having a blank node\n // blank node serves as subject for the following quadruples which contain the type and actual value of the form field\n // RDF:\n // datasetID dct:rights blankNodeID\n // blankNodeId rdf:type RightsStatement\n // blankNodeId rdfs:label LabelValue\n\n // blank node as object for inital quadruple and also as subject for following quadruples\n const rightsBlankNode = N3.DataFactory.blankNode('');\n\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n rightsBlankNode\n ))\n\n // add additional type declaration\n RDFdataset.addQuad(N3.DataFactory.quad(\n rightsBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace('dct:RightsStatement', dpiConfig))\n ))\n\n // rights is a conditional property and provides either an URI or a string ( { rdfs:label : 'URL/string' } )\n let rightsValue;\n\n if (data[key]['@type'] === 'url') {\n rightsValue = N3.DataFactory.namedNode(data[key]['rdfs:label']);\n } else {\n rightsValue = N3.DataFactory.literal(data[key]['rdfs:label']);\n }\n\n // add actual value\n RDFdataset.addQuad(N3.DataFactory.quad(\n rightsBlankNode,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdfs:label', dpiConfig)),\n rightsValue\n ))\n \n } else if (key === 'rdf:type') {\n // some properties have additional type information which needs to be added to graph\n // e.g contactPoint -> vcard:Individual\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(generalHelper.addNamespace(data[key], dpiConfig))\n ))\n }\n } \n }\n}\n\n/**\n * Creates additional quads depending on given property and saves them to given RDF dataset\n * @param {N3.Writer} RDFdataset RDF dataset the quads are saved to\n * @param {Object} data Object containing data as key-value pairs\n * @param {DataFactory.namedNode} mainURI NamedNode defining URI of current property graph\n * @param {DataFactory} mainType NamedNode defining type of current property graph\n * @param {String} property String determining which property is converted (datasets/distributions/catalogues)\n * @param {String} datasetURI URI of dataset used to add distribution URI to dct:distribution within dataset graph\n */\nfunction setAdditionalProperties(RDFdataset, data, mainURI, mainType, property, datasetURI, dpiConfig) {\n\n // adding id and type of property\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('rdf:type', dpiConfig)),\n N3.DataFactory.namedNode(mainType)\n ))\n\n // catalogues always have to contain the property dct:type with the value 'dcat-ap'\n if (property === 'catalogues') {\n RDFdataset.addQuad(N3.DataFactory.quad(\n mainURI,\n N3.DataFactory.namedNode(generalHelper.addNamespace('dct:type', dpiConfig)),\n N3.DataFactory.literal('dcat-ap')\n ))\n }\n\n // add distribution id to dataset graph (dcat:distribution)\n if (property === 'distributions') {\n RDFdataset.addQuad(N3.DataFactory.quad(\n N3.DataFactory.namedNode(datasetURI),\n N3.DataFactory.namedNode(generalHelper.addNamespace('dcat:distribution', dpiConfig)),\n mainURI\n ))\n }\n}\n\n//-----------------------------------------------------------------------------------------------------\n// basic conversion (input to RDF) methods for different categories of data\n//-----------------------------------------------------------------------------------------------------\n// seems unnecessary at first but if we want to convert nested properties as well, we need these \n// methods (especially to provide the correct parent URI)\n\n/**\n * Converts provided data to quad and saves it to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quad\n * @param {String} data Data given by form used as object in quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quad\n */\nfunction convertSingularString(RDFdataset, id, data, key, dpiConfig) {\n if (!isEmpty(data[key])) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key])\n ))\n }\n}\n\n/**\n * Converts provided data to quad and saves it to given dataset\n * @param {N3.Writer} RDFdata Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quad\n * @param {String} data Data given by form used as object in quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quad\n */\nfunction convertSingularURI(RDFdataset, id, data, key, dpiConfig) {\n // there are two different formats the frontend delivers URIs\n // 1: 'URI' or 2: {'name': 'abc', 'resource': 'URI'}\n\n // URIs can either be a normal URL or an email address\n // mail addresses typicall include '@' which is used to determine if the given string is a normal URL or an email address\n if (!isEmpty(data[key])) {\n\n let singleURI;\n\n if (typeof data[key] === 'object') {\n if (has(data[key], 'resource')) {\n singleURI = data[key].resource;\n }\n } else {\n if (data[key].includes('@')) {\n // mail address\n singleURI = `mailto:${data[key]}`;\n } else {\n // normal URL\n singleURI = data[key];\n }\n }\n\n // save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.namedNode(singleURI)\n ));\n }\n}\n\n/**\n * Converts provided data to quads and saves them to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quads\n * @param {Array} data Array containing URLs used as object within quads\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quads\n * @param {String} property Determining which property is concerted (datasets/distributions/catalogues)\n */\nfunction convertMultipleURI(RDFdataset, id, data, key, property, dpiConfig) {\n // there are two different formats the frontend delivers multiple URIs\n // 1: [ {\"name\": '...', \"resource\": 'URI'}, {...} ] -> multi-autocomplete fields\n // 2: [ { \"@id\": \"URI1\" }, { \"@id\": \"URI2\" } ] repeatable fields\n\n for (let uriIndex = 0; uriIndex < data[key].length; uriIndex += 1) {\n\n let currentURI;\n const valueObject = data[key][uriIndex];\n if (!isEmpty(valueObject)) {\n if (has(valueObject, 'resource')) currentURI = valueObject.resource;\n else if (has(valueObject, '@id')) currentURI = valueObject['@id'];\n }\n\n // save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.namedNode(currentURI)\n ));\n }\n}\n\n/**\n * Converts provided data to quad and saves them to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quad\n * @param {String} data String data used as object with type in quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quad and to determine quad-object type\n */\nfunction convertTypedString(RDFdataset, id, data, key, dpiConfig) {\n if (!isEmpty(data[key])) {\n\n // there is a variety of properties which can have different types\n // issued and motified already provide a type definition ({'@type': 'date/datetime', '@value': '...'})\n if (key === 'dct:issued' || key === 'dct:modified') {\n if (has(data[key], '@value') && !isEmpty(data[key]['@value'])) {\n const imValueType = data[key]['@type'] === 'date' ? data[key]['@type'] : 'dateTime';\n const valueType = generalHelper.addNamespace(`xsd:${imValueType}`, dpiConfig);\n\n /// save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key]['@value'], N3.DataFactory.namedNode(valueType))\n ));\n }\n } else {\n // all other properties are given as a simple string\n let valueType;\n if (key === 'dcat:endDate' || key === 'dcat:startDate') {\n // dcat:endDate and dcat:startDate are xsd:dateTime\n valueType = generalHelper.addNamespace('xsd:dateTime', dpiConfig);\n } else if (key === 'dcat:spatialResolutionInMeters' || key === \"dcat:byteSize\") {\n // dcat:spatialResolutionInMeters and dcat:byteSize are xsd:decimal\n valueType = generalHelper.addNamespace('xsd:decimal', dpiConfig);\n }\n\n /// save quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key], N3.DataFactory.namedNode(valueType))\n ));\n }\n }\n}\n\n/**\n * Converts provided data to quads and saves them to given dataset\n * @param {N3.Writer} RDFdataset Dataset the converter saves the converted data to\n * @param {DataFactory} id Node (Blank or Named) used as subject in quads\n * @param {Array} data Array of objects containing data and language converted into literal with language for quad\n * @param {String} key Name of current value (e.g. dct:title) used as predicate in quads\n */\nfunction convertMultilingual(RDFdataset, id, data, key, dpiConfig) {\n // multilingual fields mostly provide data as followed\n // [ { '@value': '....', '@language': '...' }, ... ]\n // only the licence title provides no language\n\n if (!isEmpty(data[key])) {\n\n // licence title\n if (!Array.isArray(data[key])) {\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(data[key])\n ))\n } else {\n for (let langIndex = 0; langIndex < data[key].length; langIndex += 1) {\n const currentData = data[key][langIndex];\n // only save data if a value is given (forntend provides preselected language which don't need to be saved if there is no actaul value)\n if (!isEmpty(currentData) && has(currentData, '@value') && !isEmpty(currentData['@value'])) {\n let languageTag;\n \n // if there is no langauge given, set language to english\n if (!has(currentData, '@language') || isEmpty(currentData, '@language')) {\n languageTag = 'en';\n } else {\n // if language is given, use given tag\n languageTag = currentData['@language'];\n }\n \n // saving quad to dataset\n RDFdataset.addQuad(N3.DataFactory.quad(\n id,\n N3.DataFactory.namedNode(generalHelper.addNamespace(key, dpiConfig)),\n N3.DataFactory.literal(currentData['@value'], languageTag)\n ))\n }\n }\n }\n }\n}\n\nexport default {\n convertToRDF,\n};"],"names":["convertToRDF","data","property","specification","finishedRDFdata","dpiConfig","RDFdata","N3","datasetURI","convertPropertyValues","index","error","result","RDFdataset","preMainURI","preMainType","setMain","formatTypes","mainURI","mainType","generalHelper","randomId","setAdditionalProperties","valueKeys","key","convertSingularString","convertSingularURI","convertMultipleURI","convertTypedString","convertMultilingual","actualData","groupId","currentGroupData","isEmpty","has","notationValue","groupBlankNode","emptyPage","hasTitle","hasDescription","hasNoValueKeysTitle","hasEmptyValueTitle","hasNoValueKeysDescription","hasEmptyValueDescription","el","resolutionValues","valueString","valueId","currentValue","rightsBlankNode","rightsValue","id","singleURI","uriIndex","currentURI","valueObject","imValueType","valueType","langIndex","currentData","languageTag","toRDF"],"mappings":"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"}
@@ -1304,7 +1304,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1304
1304
  goToNextStep?: any;
1305
1305
  goToPreviousStep?: any;
1306
1306
  }, {
1307
- scrollToTop: () => void;
1307
+ dpiContext: import('../composables').ComputedDpiContext;
1308
1308
  }, {
1309
1309
  instance: {
1310
1310
  metadata: {