assemblee-virtuelle / semapps

A toolbox to create semantic web applications
https://semapps.org
Apache License 2.0
87 stars 8 forks source link

Pouvoir restaurer un ou plusieurs backups #958

Open srosset81 opened 2 years ago

srosset81 commented 2 years ago

Le backup de Fuseki génère des fichiers de quads zippés (.nq.gz), mais il n'y a rien qui permet de les réimporter facilement, en particulier quand il y a plusieurs graphs (ce qui est le cas lorsque les WebACL sont activés).

Il serait bien d'avoir une action de type restoreBackup qui gère ça automatiquement, et peut-être aussi un restoreAllBackups qui lise tous les fichiers dans un dossier.

srosset81 commented 2 years ago

J'ai fait ça mais je me suis heurté au fait que triplestore.insert attendant des triples et non des quads (il faut utiliser le mot clé GRAPH pour les triples qui ne sont pas dans le graph par défaut)

    async restoreBackup(ctx) {
      const { dataset, secure, fileName } = ctx.params;

      let buffer = await fsPromises.readFile(fileName);

      if (path.extname(fileName) === '.gz') {
        buffer = await promisify(unzip)(buffer);
      }

      const quads = buffer.toString();

      const exist = await this.actions.datasetExist({ dataset }, { parentCtx: ctx });

      if (exist) {
        await ctx.call('triplestore.dropAll', { dataset, webId: 'system' });
      } else {
        await this.actions.createDataset({ dataset, secure }, { parentCtx: ctx });
      }

      await ctx.call('triplestore.insert', {
        resource: quads,
        contentType: MIME_TYPES.TRIPLE,
        dataset,
        webId: 'system'
      });
    }

Je pense qu'il serait mieux de passer par un POST dans l'API de Fuseki, comme le fait l'interface. L'upload de quads marche bien, il déduit lui-même les graphs à créer.

https://jena.apache.org/documentation/fuseki2/fuseki-server-protocol.html

rmkni commented 4 months ago

import a backup for dev test there are 2 files to import : localData and settings refactor your nq files to replace base url with http://localhost:3000 go to http://localhost:3030 /!\ notice 3030 for backend web app then add data select files and upload careful select the second settings dataset at the top of the window before uploading the second file image contact me if you want the files

don't delete datasets if you need ACL because you can't create secure dataset from jena backend