Modèle Technologique


Introduction

3 piliers :
  • Le logiciel libre: nous croyons au code libre et à l'économie de la contribution. Tous nos développements seront open source en licence Apache 2 .
  • L'interopérabilité des données: nous croyons à la puissance de la distribution et à une répartition plus équilibrée des données.
  • Le biomimétisme: la nature est organisée de manière aléatoire et repose sur des équilibres systémiques.

Entièrement basés sur des standards ouverts, les composants de SemApps sont conçus pour être indépendants, interopérables et interchangeables, de telle sorte que la base de données, l’ontologie, le serveur ou les interfaces pourront être remplacés par d’autres briques logicielles respectant elles-mêmes ces standards.

Dans une version future, SemApps sera construit sur une approche “Ontology Driven Architecture” permettant de construire “à la volée” des applications métiers à partir des ontologies qu’on lui fournit.

Persistance / Base de donées :
- technologies : Jena, Fuseki, Jena Permission
- standards : TripleStore, SPARQL, WebACL

BackEnd / Middlware / serveur Web :
- technologies : NodeJS + moleculer + lerna
- standards : LDP, SHACL, ActivityPub, WebId, OIDC, CAS, SparqlEndpoint

FrontEnd / Interface :
- technologies IHM : Web Component Natif ou Startin'Blox ou REACT ou Solid React Component
- tehnologies conneteurs : Redux Connector ou LdFlex ouPostal Connector


Une gestion des identités et des contrôles d’accès à l’aide des standards OIDC et WebACL.
Des connecteurs basés sur LDP (decrit par OpenAPI) et ActivityPub.

L'éco-système technologique


SemApps vise une implémentation d'un serveur de données web sémantique aux normes Solid. Solid permet de stocker, manipuler, exposer, synchroniser et échanger les données dans des formats standards (W3C). Le web sémantique permet de relier les données entre elles, peu importe leur origine et localisation, en suivant des ontologies communes.

  • Le web sémantique : Une grammaire universelle pour les données

Selon Wikipedia , "*Le Web sémantique, ou toile sémantique, est une extension du Web standardisée par le World Wide Web Consortium (W3C)2. Ces standards encouragent l'utilisation de formats de données et de protocoles d'échange normés sur le Web, en s'appuyant sur le modèle Resource Description Framework (RDF).*

Assimilables à un langage universel pour les données, les standards du web sémantique permettent :
* De structurer les données et d'organiser l'information de manière optimale
* De rendre interopérables les systèmes d'information pouvant dès lors être autonomes ET reliés, dans le cadre d'une architecture de réseau décentralisée.

Plus de détails ici


SOLID : Permettre le développement d'un web social sécurisé et distribué
SOLID est une spécification prenant la forme d'un ensemble de protocoles pour interopérer les plateformes sur le web.
SOLID rend possible le développement d'applications Web sociales, dans laquelle les données des utilisateurs sont gérées indépendamment des applications qui créent et consomment ces données :
* Chaque utilisateur stocke ses données dans une espace en ligne (ou pod) personnel accessible sur le Web.
* Chaque utilisateur peut avoir un ou plusieurs pods de différents fournisseurs de pods, et peut facilement changer de fournisseur.

Plus de détails ici


Activity Pub : Synchroniser les données statiques par des flux de notifications dynamiques
- Faire un serveur générique ActivityPub indépendant, basé sur le même triple store, puisqu'on a également besoin d'ACL.
- ActivityPub n'est pas du tout un "sous-ensemble" de LDN. La spec d'AP est 3 fois plus importante. LDN ne gère que l'inbox et l'outbox.
  • ActivityPub est un protocole spécialisé pour des échanges d’information de type “ réseau social” et n’est pas un protocole générique d’échange fédéré de données. Ce protocole générique est LDN Linked Data Notifciations.
  • ActivityPub and Linked Data Notifications: ActivityPub specialises LDN as the mechanism for delivery of notifications by requiring that payloads are AS2. Inbox endpoint discovery is the same. LDN receivers can understand requests from ActivityPub federated servers, but ActivityPub servers can't necessarily understand requests from generic LDN senders.
  • Par exemple, si on voulait synchroniser un stock de produits entre plusieurs acteurs, ça ne peut pas s’exprimer en ActivityPub, mais ca peut en LDN.

Aller plus loin

L'architecture


SemApps propose une architecture standard. Chaque brique technologique est indépendante l'une de l'autre. C'est à dire qu'il est possible d'utiliser l'une des trois avec des technologies déjà existantes.

SemApps est donc un serveur disponible à tous ceux qui veulent que leur données soient interopérables, au standard Solid.

Les endpoints seront en HTTP REST mais il sera peut être aussi possible d'avoir accès à SemApps comme librairie nodejs (npm).

shéma d'implémentation

* Une base de données TripleStore Jena
* Un serveur en node.js basé sur Express.JS
* Une gestion des identités à l’aide du standard WebID (authentification avec OIDC ou CAS)
* Une gestion des contrôles d’accès à l'aide du standard WebACL
* L'ontologie PAIR, alignée avec les principales ontologies du Linked Open Vocabulary (LOV) : SKOS (concepts), Dublin Core (documents), Schema, FOAF (Agents)
* Des connecteurs basés sur LDP, ActivityPub, SPARQL
* Des “services métiers” déployables à la carte selon les besoins, à travers des agents (p.ex. des services Moleculer internes ou externes)
* Une interface autonome du serveur (Single Page Application)

La modularité

L'intention :
- Pouvoir créer un serveur qui puisse répondre à des besoins variés
- Pouvoir faire des tous petits serveurs indépendants (type bot) qui traitent des données selon les besoins.
-> boite à outils.

Elle est sous 2 formes :
- Utiliser moleculer : services internes et externes. Architecture en micro service ou monolithique à la demande
- Aspect lerna : publier des packages qui peuvent être utiliser de manières indépendantes (et packagé sous npm).

Finalité : constuire son serveur SemApps le plus adapté à ses besoins et donc le plus léger, avec aussi la possibilité d'avoir un serveur tout paramétré.



Spécifications techniques

Base de données


Nous utilisons Jena + Jena Permissions + ldp-service-jena packagé dans un seul repo avec toutes les couches. Docker compose pour structurer la stack.


  • Pour les droits d'accès et WebACL (qui peut changer les ACL) ce sera a nous de nous en charger, mais ce sera pareil, nous verifirons les droits pour tout CRUD sur les triple qui representent des ACLs

Backend

Un backend générique peut répondre à la diversité des besoins de nos différentes communautés.
Celui-ci peut se concevoir comme une composant autonome, et composante de SemApps.

Frontend