assemblee-virtuelle / assemblee-virtuelle/semapps
Trouver un bon format Markdown pour créer des liens entre les ressources.
- Dominant language
- TypeScript
- Stars
- 103
- Forks
- 14
- Avg merge
- 1m
- Merged PRs (30d)
- 2
Description
Dans la PR https://github.com/assemblee-virtuelle/semapps/pull/584, je permets d'ajouter des liens vers d'autres ressources en faisant une recherche par mots-clé ([voir la vidéo ici](https://drive.google.com/file/d/1Ooo5t-0VjXe4Tc_74m39U8eamCbsNRbx/view)). Cela génère des liens Markdown du type:
```markdown
# Exemple 1
[RESOURCE_LABEL](#/Document/RESOURCE_URI/show)
```
Le problème, du point de vue du web sémantique, c'est qu'on enregistre des données qui concernent uniquement l'interface archipel.assemblee-virtuelle.org, alors que potentiellement ces données pourraient être récupérées par toutes sortes d'interface. Idéalement il faudrait donc plutôt avoir:
```markdown
# Exemple 2
[RESOURCE_LABEL](RESOURCE_URI)`
```
Avec le composant React qu'on utilise pour faire un rendu Markdown (`react-markdown`), il est possible de décider comment on fait le rendu des liens:
```jsx
{
return {children}
}
}}
/>
```
Du coup on pourrait transformer le lien data.virtual-assembly.org (qui pointe vers les données JSON-LD) vers un lien qui amène sur une page React-Admin.
Le problème c'est qu'on ne sait pas ce que c'est comme resource: un document, un projet, etc. Du coup il faudrait d'abord faire un fetch de la ressource linkée pour déterminer son type et donc son URL React-Admin (`#/Document/...`). C'est complètement possible avec React, mais ça peut un peu ralentir l'affichage.
Autre possibilité: lorsqu'on crée un lien, on indique non seulement l'URI de la ressource, mais aussi son type. Par exemple:
```markdown
# Exemple 3
[ADEME](pair:Organization|https://data.virtual-assembly.org/organizations/ademe)
```
Le problème alors c'est qu'on n'est plus sur du Markdown pur et simple. Mieux vaut penser la chose bien si on veut que ça puisse être utilisé plus largement. Par exemple si on veut pouvoir mettre un lien vers une ressource qui n'existe pas encore, on pourrait juste indiquer:
```markdown
# Exemple 4
[ADEME](pair:Organization)
```
Reste le problème qu'une fois la ressource créée, il faudra ajouter son URI dans le lien, ce qui n'est pas évident.
## Semantic Markdown ?
J'ai pensé naturellement au [Semantic Markdown](http://blog.sparna.fr/2020/02/20/semantic-markdown/) de @tfrancart mais son but n'est pas vraiment le même, il est plutôt de générer des triplets sémantiques à partir d'un document. Il y a quand même cet exemple de lien:
```markdown
# Exemple 5
Je vais bientôt me rendre à [Berlin](https://www.wikidata.org/wiki/Q64) {.schema:Place}
Je travaille pour l'[ADEME](https://data.virtual-assembly.org/organizations/ademe) {.pair:Organization}
```
Cela ressemble à l'exemple 3, à la différence qu'on sort du Markdown basique, et qu'on doit donc adapter le rendu. Et cela ne règle pas le problème de mettre un lien vers une ressource qui n'existe pas encore, à moins de faire quelque chose comme ça, et de ne transformer
```markdown
# Exemple 6
Je vais bientôt me rendre à Berlin {.schema:Place}
```
## Créer des relations automatiquement
Dernier petit point, histoire de bien charger le bateau... ;-)
Avec un package comme [markdown-link-extractor](https://github.com/tcort/markdown-link-extractor], il est possible d'extraire les liens d'un document, par exemple au moment de la sauvegarde (par exemple avec la prop [transform](https://marmelab.com/react-admin/CreateEdit.html#transform) du composant Edit de React-Admin).
J'ai donc pensé qu'on pourrait de cette manière automatiquement créer une relation `pair:refers` depuis la ressource où se trouve le lien sémantique. Et ainsi la ressource linkée (l'ADEME dans mes exemples) pourrait automatiquement avoir une relation `pair:referredBy`, ce qui permettrait de voir toutes les ressources qui font référence à elle.
Mais est-ce qu'on pourrait aussi indiquer le type de relation dans le code markdown ?
```markdown
# Exemple 7: profil de Sébastien
Je suis membre de l'[AV](https://data.virtual-assembly.org/organizations/assemblee-virtuelle) {.pair:Organization/pair:affiliatedBy}
```
Bon on peut peut-être se contenter d'utiliser `pair:refers/pair:referredBy` partout, mais je mets quand même cet élément là au cas où ça peut nourrir les réflexions.
Ping @simonLouvet @GuillaumeAV
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reviewing PR 584 and the react-markdown link renderer described in the issue, then examine whether markdown-link-extractor is suitable for relation creation. The work needs an agreed resource-link format before implementation; done means the syntax, rendering behavior, resource-type handling, and scope of automatic relations are decided.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend, web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100