5
5
import fr .vcity .converg .repository .*;
6
6
import lombok .extern .slf4j .Slf4j ;
7
7
import org .apache .commons .io .FilenameUtils ;
8
- import org .apache .jena .query .Dataset ;
9
- import org .apache .jena .rdf .model .*;
8
+ import org .apache .jena .graph .Graph ;
9
+ import org .apache .jena .graph .Node ;
10
+ import org .apache .jena .graph .Triple ;
10
11
import org .apache .jena .riot .RDFLanguages ;
11
12
import org .apache .jena .riot .RDFParser ;
12
13
import org .apache .jena .riot .RiotException ;
13
14
import org .apache .jena .riot .system .ErrorHandlerFactory ;
15
+ import org .apache .jena .sparql .core .DatasetGraph ;
14
16
import org .springframework .stereotype .Service ;
15
17
import org .springframework .web .multipart .MultipartFile ;
16
18
23
25
@ Slf4j
24
26
public class QuadImportService implements IQuadImportService {
25
27
26
- public record Node (String value , String type ) {
27
- }
28
-
29
28
public record TripleValueType (String sValue , String sType , String pValue , String pType , String oValue ,
30
29
String oType ) {
31
30
}
@@ -89,17 +88,17 @@ public Integer importModel(MultipartFile file) throws RiotException {
89
88
log .info ("Current file: {}" , file .getOriginalFilename ());
90
89
91
90
try (InputStream inputStream = file .getInputStream ()) {
92
- Dataset dataset =
91
+ DatasetGraph datasetGraph =
93
92
RDFParser .create ()
94
93
.source (inputStream )
95
94
.lang (RDFLanguages .nameToLang (FilenameUtils .getExtension (file .getOriginalFilename ())))
96
95
.errorHandler (ErrorHandlerFactory .errorHandlerStrict )
97
- .toDataset ();
96
+ .toDatasetGraph ();
98
97
99
98
Long start = System .nanoTime ();
100
99
101
- extractAndInsertVersionedNamedGraph (file , dataset , version );
102
- extractAndInsertQuads (dataset , version );
100
+ extractAndInsertVersionedNamedGraph (file , datasetGraph , version );
101
+ extractAndInsertQuads (datasetGraph , version );
103
102
104
103
Long end = System .nanoTime ();
105
104
log .info ("[Measure] (Import relational internal): {} ns for file: {};" , end - start , file .getOriginalFilename ());
@@ -139,23 +138,22 @@ public void importMetadata(MultipartFile file) throws RiotException {
139
138
log .info ("Current file: {}" , file .getOriginalFilename ());
140
139
141
140
try (InputStream inputStream = file .getInputStream ()) {
142
- Dataset dataset =
141
+ DatasetGraph datasetGraph =
143
142
RDFParser .create ()
144
143
.source (inputStream )
145
144
.lang (RDFLanguages .nameToLang (FilenameUtils .getExtension (file .getOriginalFilename ())))
146
145
.errorHandler (ErrorHandlerFactory .errorHandlerStrict )
147
- .toDataset ();
146
+ .toDatasetGraph ();
148
147
149
148
Long start = System .nanoTime ();
150
149
151
- if (!dataset . getDefaultModel (). listStatements (). toList ().isEmpty ()) {
152
- importDefaultModel (dataset . getDefaultModel ());
150
+ if (!datasetGraph . getDefaultGraph ().isEmpty ()) {
151
+ importDefaultModel (datasetGraph . getDefaultGraph ());
153
152
}
154
153
155
- for (Iterator <Resource > i = dataset .listModelNames (); i .hasNext (); ) {
156
- Resource namedModel = i .next ();
157
- Model model = dataset .getNamedModel (namedModel );
158
- importDefaultModel (model );
154
+ for (Iterator <Node > i = datasetGraph .listGraphNodes (); i .hasNext (); ) {
155
+ var graphNode = i .next ();
156
+ importDefaultModel (datasetGraph .getGraph (graphNode ));
159
157
}
160
158
161
159
Long end = System .nanoTime ();
@@ -193,15 +191,14 @@ public void condenseModel() {
193
191
/**
194
192
* Import RDF default model statements
195
193
*
196
- * @param defaultModel The default graph
194
+ * @param graph The default graph
197
195
*/
198
- private void importDefaultModel (Model defaultModel ) {
199
- Set <RDFNode > nodeSet = new HashSet <>();
196
+ private void importDefaultModel (Graph graph ) {
197
+ Set <Node > nodeSet = new HashSet <>();
200
198
List <TripleValueType > tripleValueTypes = new ArrayList <>();
201
199
202
- for (StmtIterator stmtIterator = defaultModel .listStatements (); stmtIterator .hasNext (); ) {
203
- tripleValueTypes .add (getTripleValueType (stmtIterator , nodeSet ));
204
- }
200
+ graph .stream ()
201
+ .forEach (triple -> tripleValueTypes .add (getTripleValueType (triple , nodeSet )));
205
202
206
203
if (!tripleValueTypes .isEmpty ()) {
207
204
metadataComponent .saveTriples (tripleValueTypes );
@@ -215,30 +212,25 @@ private void importDefaultModel(Model defaultModel) {
215
212
/**
216
213
* Extract and insert the quads
217
214
*
218
- * @param dataset The dataset
219
- * @param version The version
215
+ * @param datasetGraph The datasetGraph
216
+ * @param version The version
220
217
*/
221
- private void extractAndInsertQuads (Dataset dataset , Version version ) {
222
- Set <RDFNode > nodeSet = new HashSet <>();
218
+ private void extractAndInsertQuads (DatasetGraph datasetGraph , Version version ) {
219
+ Set <Node > nodeSet = new HashSet <>();
223
220
List <QuadValueType > quadValueTypes = new ArrayList <>();
224
221
225
- for (Iterator <Resource > i = dataset .listModelNames (); i .hasNext (); ) {
226
- Resource namedModel = i .next ();
227
- Model model = dataset .getNamedModel (namedModel );
228
- log .info ("Name Graph : {}" , namedModel .getURI ());
222
+ datasetGraph .stream ()
223
+ .forEach (quad -> {
224
+ QuadValueType quadValueType = new QuadValueType (getTripleValueType (quad .asTriple (), nodeSet ), quad .getGraph ().getURI (), version .getIndexVersion () - 1 );
225
+ quadValueTypes .add (quadValueType );
226
+ });
229
227
230
- for (StmtIterator stmtIterator = model .listStatements (); stmtIterator .hasNext (); ) {
231
- QuadValueType quadValueType = new QuadValueType (getTripleValueType (stmtIterator , nodeSet ), namedModel .getURI (), version .getIndexVersion () - 1 );
232
- quadValueTypes .add (quadValueType );
233
- }
234
- }
235
-
236
- if (!dataset .getDefaultModel ().listStatements ().toList ().isEmpty ()) {
237
- for (StmtIterator stmtIterator = dataset .getDefaultModel ().listStatements (); stmtIterator .hasNext (); ) {
238
- QuadValueType quadValueType = new QuadValueType (getTripleValueType (stmtIterator , nodeSet ), defaultGraphURI .getName (), version .getIndexVersion () - 1 );
239
- quadValueTypes .add (quadValueType );
240
- }
241
- }
228
+ datasetGraph .getDefaultGraph ()
229
+ .stream ()
230
+ .forEach (triple -> {
231
+ QuadValueType quadValueType = new QuadValueType (getTripleValueType (triple , nodeSet ), defaultGraphURI .getName (), version .getIndexVersion () - 1 );
232
+ quadValueTypes .add (quadValueType );
233
+ });
242
234
243
235
if (!quadValueTypes .isEmpty ()) {
244
236
versionedQuadComponent .saveQuads (quadValueTypes );
@@ -248,18 +240,19 @@ private void extractAndInsertQuads(Dataset dataset, Version version) {
248
240
/**
249
241
* Extract and insert the versioned named graph
250
242
*
251
- * @param file The input file
252
- * @param dataset The dataset
253
- * @param version The version
243
+ * @param file The input file
244
+ * @param datasetGraph The datasetGraph
245
+ * @param version The version
254
246
*/
255
- private void extractAndInsertVersionedNamedGraph (MultipartFile file , Dataset dataset , Version version ) {
247
+ private void extractAndInsertVersionedNamedGraph (MultipartFile file , DatasetGraph datasetGraph , Version version ) {
256
248
List <String > namedGraphs = new ArrayList <>();
257
- for (Iterator <Resource > i = dataset .listModelNames (); i .hasNext (); ) {
258
- Resource namedModel = i .next ();
249
+
250
+ for (Iterator <Node > i = datasetGraph .listGraphNodes (); i .hasNext (); ) {
251
+ var namedModel = i .next ();
259
252
namedGraphs .add (namedModel .getURI ());
260
253
}
261
254
262
- if (!dataset . getDefaultModel (). listStatements (). toList ().isEmpty ()) {
255
+ if (!datasetGraph . getDefaultGraph ().isEmpty ()) {
263
256
namedGraphs .add (defaultGraphURI .getName ());
264
257
}
265
258
@@ -271,28 +264,27 @@ private void extractAndInsertVersionedNamedGraph(MultipartFile file, Dataset dat
271
264
/**
272
265
* Get the triple value type
273
266
*
274
- * @param stmtIterator The statement iterator
275
- * @param nodeSet The node set
267
+ * @param triple The triple
268
+ * @param nodeSet The node set
276
269
* @return The triple value type
277
270
*/
278
- private static TripleValueType getTripleValueType (StmtIterator stmtIterator , Set <RDFNode > nodeSet ) {
279
- Statement statement = stmtIterator .next ();
280
- RDFNode subject = statement .getSubject ();
281
- RDFNode predicate = statement .getPredicate ();
282
- RDFNode object = statement .getObject ();
271
+ private static TripleValueType getTripleValueType (Triple triple , Set <Node > nodeSet ) {
272
+ var subject = triple .getSubject ();
273
+ var predicate = triple .getPredicate ();
274
+ var object = triple .getObject ();
283
275
284
276
nodeSet .add (subject );
285
277
nodeSet .add (predicate );
286
278
nodeSet .add (object );
287
279
288
- String sValue = subject .isLiteral () ? subject .asLiteral ().getString () : subject .toString ();
289
- String sType = subject .isLiteral () ? subject .asLiteral ().getDatatype ().getURI () : null ;
280
+ String sValue = subject .isLiteral () ? subject .getLiteral ().getValue (). toString () : subject .toString ();
281
+ String sType = subject .isLiteral () ? subject .getLiteral ().getDatatype ().getURI () : null ;
290
282
291
- String pValue = predicate .isLiteral () ? predicate .asLiteral ().getString () : predicate .toString ();
292
- String pType = predicate .isLiteral () ? predicate .asLiteral ().getDatatype ().getURI () : null ;
283
+ String pValue = predicate .isLiteral () ? predicate .getLiteral ().getValue (). toString () : predicate .toString ();
284
+ String pType = predicate .isLiteral () ? predicate .getLiteral ().getDatatype ().getURI () : null ;
293
285
294
- String oValue = object .isLiteral () ? object .asLiteral ().getString () : object .toString ();
295
- String oType = object .isLiteral () ? object .asLiteral ().getDatatype ().getURI () : null ;
286
+ String oValue = object .isLiteral () ? object .getLiteral ().getValue (). toString () : object .toString ();
287
+ String oType = object .isLiteral () ? object .getLiteral ().getDatatype ().getURI () : null ;
296
288
return new TripleValueType (sValue , sType , pValue , pType , oValue , oType );
297
289
}
298
290
}
0 commit comments