From f57a5e47c2856f2f4127ba545a9acbda4c2e7f24 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 5 Oct 2021 16:47:17 +0200 Subject: [PATCH 1/4] bugfix --- src/middleware/packages/inference/service.js | 1 + .../packages/ldp/services/resource/methods.js | 136 ++++++++++++++---- 2 files changed, 108 insertions(+), 29 deletions(-) diff --git a/src/middleware/packages/inference/service.js b/src/middleware/packages/inference/service.js index 70e8fd93c..59f1ecb12 100644 --- a/src/middleware/packages/inference/service.js +++ b/src/middleware/packages/inference/service.js @@ -15,6 +15,7 @@ module.exports = { for (let ontology of this.settings.ontologies) { if (ontology.owl) { const result = await this.findInverseRelations(ontology.owl); + console.log('RELATIONS',result); console.log(`Found ${Object.keys(result).length} inverse relations in ${ontology.owl}`); this.inverseRelations = { ...this.inverseRelations, ...result }; } diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.js index a32aa03db..20d0a413b 100644 --- a/src/middleware/packages/ldp/services/resource/methods.js +++ b/src/middleware/packages/ldp/services/resource/methods.js @@ -1,10 +1,44 @@ const rdfParser = require('rdf-parse').default; const streamifyString = require('streamify-string'); -const { variable } = require('rdf-data-model'); -const { MIME_TYPES } = require('@semapps/mime-types'); +const { + variable +} = require('rdf-data-model'); +const { + MIME_TYPES +} = require('@semapps/mime-types'); const fs = require('fs'); -const { defaultToArray } = require('../../utils'); +const { + defaultToArray +} = require('../../utils'); + +const cleanDisassemblyPerdicate = v => { + if (v['@id'] != undefined) { + return { + origin: v, + clean: v + } + } else if (v.id != undefined) { + const out = { + origin: v, + clean: { + ...v, + "@id": v.id + } + } + + delete out.clean.id; + return out; + } else { + return { + origin: v, + clean: { + "@id": v, + "@type": "@id" + } + } + } +} // TODO put each method in a different file (problems with "this" not working) module.exports = { @@ -24,7 +58,9 @@ module.exports = { const textStream = streamifyString(body); let res = []; rdfParser - .parse(textStream, { contentType }) + .parse(textStream, { + contentType + }) .on('data', quad => res.push(quad)) .on('error', error => reject(error)) .on('end', () => resolve(res)); @@ -84,7 +120,7 @@ module.exports = { return triples .map( triple => - `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` + `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` ) .join('\n'); }, @@ -100,7 +136,10 @@ module.exports = { } const uriAdded = []; for (let resource of disassemblyValue) { - let { id, ...resourceWithoutId } = resource; + let { + id, + ...resourceWithoutId + } = resource; const newResourceUri = await ctx.call('ldp.resource.post', { containerUri: disassemblyConfig.container, resource: { @@ -110,7 +149,10 @@ module.exports = { contentType: MIME_TYPES.JSON, webId: 'system' }); - uriAdded.push({ '@id': newResourceUri, '@type': '@id' }); + uriAdded.push({ + '@id': newResourceUri, + '@type': '@id' + }); } newData[disassemblyConfig.path] = uriAdded; } @@ -124,50 +166,86 @@ module.exports = { let oldDisassemblyValue = defaultToArray(oldData[disassemblyConfig.path]) || []; let newDisassemblyValue = defaultToArray(newData[disassemblyConfig.path]) || []; + oldDisassemblyValue = oldDisassemblyValue.map(v => cleanDisassemblyPerdicate(v)); + newDisassemblyValue = newDisassemblyValue.map(v => cleanDisassemblyPerdicate(v)); let resourcesToAdd = newDisassemblyValue.filter( - t1 => !oldDisassemblyValue.some(t2 => (t1.id || t1['@id']) === (t2.id || t2['@id'])) + t1 => !oldDisassemblyValue.some(t2 => (t1.clean['@id']) === (t2.clean['@id'])) ); let resourcesToRemove = oldDisassemblyValue.filter( - t1 => !newDisassemblyValue.some(t2 => (t1.id || t1['@id']) === (t2.id || t2['@id'])) + t1 => !newDisassemblyValue.some(t2 => (t1.clean['@id']) === (t2.clean['@id'])) ); - let resourcesToKeep = oldDisassemblyValue.filter(t1 => - newDisassemblyValue.some(t2 => (t1.id || t1['@id']) === (t2.id || t2['@id'])) + + let resourcesToKeep = newDisassemblyValue.filter(t1 => + oldDisassemblyValue.some(t2 => (t1.clean['@id']) === (t2.clean['@id'])) ); if (resourcesToAdd) { for (let resource of resourcesToAdd) { - delete resource.id; - - const newResourceUri = await ctx.call('ldp.resource.post', { - containerUri: disassemblyConfig.container, - resource: { - '@context': newData['@context'], - ...resource - }, - contentType: MIME_TYPES.JSON, - webId: 'system' - }); - uriAdded.push({ '@id': newResourceUri, '@type': '@id' }); + if (!(typeof resource.origin === 'string' || resource.origin instanceof String)) { + const newResourceUri = await ctx.call('ldp.resource.post', { + containerUri: disassemblyConfig.container, + resource: { + '@context': newData['@context'], + ...resource.clean + }, + contentType: MIME_TYPES.JSON, + webId: 'system' + }); + uriAdded.push({ + '@id': newResourceUri, + '@type': '@id' + }); + }else { + throw new Error('disassembly can not create resource from string') + } } } - if (method === 'PUT') { + if (method === 'PUT' || (method === 'PATCH' && newData[disassemblyConfig.path] != undefined)) { if (resourcesToRemove) { for (let resource of resourcesToRemove) { await ctx.call('ldp.resource.delete', { - resourceUri: resource['@id'] || resource['id'] || resource, + resourceUri: resource.clean['@id'], webId: 'system' }); - uriRemoved.push({ '@id': resource['@id'] || resource['id'] || resource, '@type': '@id' }); + uriRemoved.push({ + '@id': resource['@id'], + '@type': '@id' + }); } } if (resourcesToKeep) { - uriKept = resourcesToKeep.map(r => ({ '@id': r['@id'] || r.id || r, '@type': '@id' })); + for (let resource of resourcesToKeep) { + if (resource.origin['@id'] != undefined || resource.origin.id != undefined) { + await ctx.call('ldp.resource.put', { + resourceUri: resource.clean['@id'], + resource: { + '@context': newData['@context'], + ...resource.clean + }, + contentType: MIME_TYPES.JSON, + webId: 'system' + }); + uriRemoved.push({ + '@id': resource.clean['@id'], + '@type': '@id' + }); + } else { + //Nothing to do resource because resource is only uri and not antity to update + } + } + uriKept = resourcesToKeep.map(r => ({ + '@id': r.clean['@id'], + '@type': '@id' + })); } - } else if (method === 'PATCH') { - uriKept = oldDisassemblyValue.map(r => ({ '@id': r['@id'] || r.id || r, '@type': '@id' })); + } else if (method === 'PATCH' && newData[disassemblyConfig.path] == undefined) { + uriKept = oldDisassemblyValue.map(r => ({ + '@id': r.clean['@id'], + '@type': '@id' + })); } else { throw new Error('Unknown method ' + method); } From 4c85758483c371632988ab9284a5faff07757837 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 5 Oct 2021 16:50:06 +0200 Subject: [PATCH 2/4] bugfix --- src/middleware/packages/inference/service.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/middleware/packages/inference/service.js b/src/middleware/packages/inference/service.js index 59f1ecb12..70e8fd93c 100644 --- a/src/middleware/packages/inference/service.js +++ b/src/middleware/packages/inference/service.js @@ -15,7 +15,6 @@ module.exports = { for (let ontology of this.settings.ontologies) { if (ontology.owl) { const result = await this.findInverseRelations(ontology.owl); - console.log('RELATIONS',result); console.log(`Found ${Object.keys(result).length} inverse relations in ${ontology.owl}`); this.inverseRelations = { ...this.inverseRelations, ...result }; } From c3ed5da6fd73b82ed215c0b4bbd6da8cd328cc3c Mon Sep 17 00:00:00 2001 From: simonLouvet Date: Tue, 5 Oct 2021 15:20:56 +0000 Subject: [PATCH 3/4] Automatic prettier --- .../packages/ldp/services/resource/methods.js | 43 ++++++++----------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.js index 20d0a413b..22bf344fa 100644 --- a/src/middleware/packages/ldp/services/resource/methods.js +++ b/src/middleware/packages/ldp/services/resource/methods.js @@ -1,31 +1,25 @@ const rdfParser = require('rdf-parse').default; const streamifyString = require('streamify-string'); -const { - variable -} = require('rdf-data-model'); -const { - MIME_TYPES -} = require('@semapps/mime-types'); +const { variable } = require('rdf-data-model'); +const { MIME_TYPES } = require('@semapps/mime-types'); const fs = require('fs'); -const { - defaultToArray -} = require('../../utils'); +const { defaultToArray } = require('../../utils'); const cleanDisassemblyPerdicate = v => { if (v['@id'] != undefined) { return { origin: v, clean: v - } + }; } else if (v.id != undefined) { const out = { origin: v, clean: { ...v, - "@id": v.id + '@id': v.id } - } + }; delete out.clean.id; return out; @@ -33,12 +27,12 @@ const cleanDisassemblyPerdicate = v => { return { origin: v, clean: { - "@id": v, - "@type": "@id" + '@id': v, + '@type': '@id' } - } + }; } -} +}; // TODO put each method in a different file (problems with "this" not working) module.exports = { @@ -120,7 +114,7 @@ module.exports = { return triples .map( triple => - `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` + `${this.nodeToString(triple.subject)} <${triple.predicate.value}> ${this.nodeToString(triple.object)} .` ) .join('\n'); }, @@ -136,10 +130,7 @@ module.exports = { } const uriAdded = []; for (let resource of disassemblyValue) { - let { - id, - ...resourceWithoutId - } = resource; + let { id, ...resourceWithoutId } = resource; const newResourceUri = await ctx.call('ldp.resource.post', { containerUri: disassemblyConfig.container, resource: { @@ -170,14 +161,14 @@ module.exports = { newDisassemblyValue = newDisassemblyValue.map(v => cleanDisassemblyPerdicate(v)); let resourcesToAdd = newDisassemblyValue.filter( - t1 => !oldDisassemblyValue.some(t2 => (t1.clean['@id']) === (t2.clean['@id'])) + t1 => !oldDisassemblyValue.some(t2 => t1.clean['@id'] === t2.clean['@id']) ); let resourcesToRemove = oldDisassemblyValue.filter( - t1 => !newDisassemblyValue.some(t2 => (t1.clean['@id']) === (t2.clean['@id'])) + t1 => !newDisassemblyValue.some(t2 => t1.clean['@id'] === t2.clean['@id']) ); let resourcesToKeep = newDisassemblyValue.filter(t1 => - oldDisassemblyValue.some(t2 => (t1.clean['@id']) === (t2.clean['@id'])) + oldDisassemblyValue.some(t2 => t1.clean['@id'] === t2.clean['@id']) ); if (resourcesToAdd) { @@ -196,8 +187,8 @@ module.exports = { '@id': newResourceUri, '@type': '@id' }); - }else { - throw new Error('disassembly can not create resource from string') + } else { + throw new Error('disassembly can not create resource from string'); } } } From bcfa9d4431be9a1a2c9f205bc15162aa0391980e Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 5 Oct 2021 18:29:32 +0200 Subject: [PATCH 4/4] CRUD ok --- .../ldp/services/resource/actions/delete.js | 2 +- .../packages/ldp/services/resource/methods.js | 37 ++++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/middleware/packages/ldp/services/resource/actions/delete.js b/src/middleware/packages/ldp/services/resource/actions/delete.js index 2921d2f35..56f7ee6f4 100644 --- a/src/middleware/packages/ldp/services/resource/actions/delete.js +++ b/src/middleware/packages/ldp/services/resource/actions/delete.js @@ -79,7 +79,7 @@ module.exports = { await ctx.call('triplestore.update', { query: ` DELETE - WHERE { + WHERE { <${resourceUri}> ?p1 ?o1 . } `, diff --git a/src/middleware/packages/ldp/services/resource/methods.js b/src/middleware/packages/ldp/services/resource/methods.js index 20d0a413b..30891566b 100644 --- a/src/middleware/packages/ldp/services/resource/methods.js +++ b/src/middleware/packages/ldp/services/resource/methods.js @@ -13,28 +13,31 @@ const { } = require('../../utils'); const cleanDisassemblyPerdicate = v => { - if (v['@id'] != undefined) { + if(typeof v.origin === 'string' || v.origin instanceof String){ return { - origin: v, - clean: v - } - } else if (v.id != undefined) { - const out = { origin: v, clean: { - ...v, - "@id": v.id + "@id": v, + "@type": "@id" } } + } + else{ + if (v.id != undefined) { + const out = { + origin: v, + clean: { + ...v, + "@id": v.id + } + } - delete out.clean.id; - return out; - } else { - return { - origin: v, - clean: { - "@id": v, - "@type": "@id" + delete out.clean.id; + return out; + }else{ + return { + origin: v, + clean: v } } } @@ -210,7 +213,7 @@ module.exports = { webId: 'system' }); uriRemoved.push({ - '@id': resource['@id'], + '@id': resource.clean['@id'], '@type': '@id' }); }