assemblee-virtuelle / assemblee-virtuelle/semapps

Trouver un bon format Markdown pour créer des liens entre les ressources.

Open
#586 3 comments 0 reactions 0 assignees View on GitHub
feature needs concertation
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.