assemblee-virtuelle / assemblee-virtuelle/semapps

updateSingleMirroredResources ne fonctionne pas s'il y a des blank nodes

Open
#1,000 5 comments 0 reactions 1 assignee Claimed by @srosset81 View on GitHub
bug
Dominant language
TypeScript
Stars
103
Forks
14
Avg merge
1m
Merged PRs (30d)
2

Description

`ldp.resource.put` est cassé avec du Turtle lorsqu'on a des blank nodes. Le GET fonctionne bien mais ensuite le PUT échoue.

J'ai essayé avec https://data.virtual-assembly.org/organizations/animacoop (qui a un blank node au niveau de `pair:hasLocation`)

J'ai essayé de remplacer avec du JSON-LD:

```js
try {
const resourceUri = single.s.value;

const response = await fetch(resourceUri, { headers: { Accept: MIME_TYPES.JSON } });
let resource = await response.json();
resource['http://semapps.org/ns/core#singleMirroredResource'] = new URL(resourceUri).origin;

await this.broker.call(
'ldp.resource.put',
{ resource, contentType: MIME_TYPES.JSON, webId: 'system' },
{ meta: { forceMirror: true } }
);
} catch (e) {
this.logger.warn("Failed to update single mirrored resource " + single.s.value);
console.error(e);
}
```

Cela marche à la première mise à jour, mais ensuite j'ai une erreur que je n'ai jamais eu jusqu'ici:

```
ErrorCoded: Found duplicate @ids 'df_5_0' and 'https://data.virtual-assembly.org/organizations/transiscope'
at EntryHandlerKeywordId.handle (/home/sebastien/SemApps/semapps/src/middleware/node_modules/jsonld-streaming-parser/lib/entryhandler/keyword/EntryHandlerKeywordId.js:31:42)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async JsonLdParser.newOnValueJob (/home/sebastien/SemApps/semapps/src/middleware/node_modules/jsonld-streaming-parser/lib/JsonLdParser.js:189:21)
at async JsonLdParser.executeBufferedJobs (/home/sebastien/SemApps/semapps/src/middleware/node_modules/jsonld-streaming-parser/lib/JsonLdParser.js:429:13) {
code: 'colliding keywords'
```

Elle vient d'ici:
https://github.com/rubensworks/jsonld-streaming-parser.js/blob/master/lib/entryhandler/keyword/EntryHandlerKeywordId.ts

Comme l'opération PUT est coûteuse, ne pourrait-on pas simplement supprimer la ressource et la reposter ?
A mon avis on pourrait même passer directement par le service triplestore et mettre à jour la ressource avec une simple requête SPARQL.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.