# Protocols specifications

The overall strategy is to implement the prototype in roughly two phases:

* Esential: implementing an MVP of the prototype (DFC), to showcase the potential of the project and help raise additional funds.
* Target : the full implementation of the prototype (DFC). It will complete phase 1 to enable industrialization and professionalization of the standard through improvement of the tools, of the technical architecture, and of the possibilities of integration with external actors.

|                                       | Essential Platorm                                                                                                                                                   | Essential DFC                                                          | Target Platform                                                                                                                                         | Target DFC                                                                                                                                                              |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Protocole**                         | <p>Data must be expressed in a semantic way in the API and must respect the OWL DFC model</p><p>User-friendly and easy to implement</p><p><strong>DONE</strong></p> | <p><em>Essential</em></p><p><em>Platorm</em> <strong>DONE</strong></p> | <p><em>Essential</em></p><p><em>Platorm</em> + LDP</p><p><strong>IN PROGRESS</strong></p>                                                               | <p><em>Essential</em></p><p><em>DFC +</em> Full Semantic protocol (LDP + SPARQL)</p><p><strong>DONE</strong></p>                                                        |
| **Stateless or stateful**             | <p>Stateless</p><p><strong>DONE</strong></p>                                                                                                                        | <p><em>Essential Platorm</em><br><strong>DONE</strong></p>             | <p>Stateless<br><strong>DONE</strong></p>                                                                                                               | <p><em>Target Platform</em><br><strong>DONE</strong></p>                                                                                                                |
| **Granularity**                       | <p>low granularity service (get all data of an authentified user)</p><p><strong>DONE</strong></p>                                                                   | <p><em>Essential Platorm</em></p><p><strong>ABANDONED</strong></p>     | <p><em>optional : Essential platorm to read</em> + mandatory : high granularity (atomic) via LDP to write & read</p><p><strong>IN PROGRESS</strong></p> | <p>NO DIRECT WRITE</p><p>read :high granularity (atomic) via</p><p><strong>DONE</strong></p>                                                                            |
| **URL**                               | <p>REST resource driven sémantic, without parameter</p><p><strong>DONE</strong></p>                                                                                 | <p><em>Essential Platform</em><br><strong>DONE</strong></p>            | <p><em>Essential</em></p><p><em>Platform</em><br><strong>DONE</strong></p>                                                                              | <p><em>Target DFC</em> +</p><p>parameters enabling queries (SPARQL or HyperGraphQL)</p><p>SPARQL : <strong>DONE</strong><br>HyperGraphQL : <strong>OUTLOOK</strong></p> |
| **Service specifications**            | <p>OpenAPI except for the input/output data structure, for which use OWL. LDP specification compliant.</p><p><strong>OUTLOOK</strong></p>                           | <p><em>Essential Platform</em><br><strong>OUTLOOK</strong></p>         | <p>Complete OpenAPI specifications for standard services. LDP specification compliant.</p><p><strong>OUTLOOK</strong></p>                               | <p>SPARQL spec for high granularity service by Query</p><p><strong>OUTLOOK</strong></p>                                                                                 |
| **Serialization**                     | <p>JSON-LD</p><p>LDP specification compliant.<br><strong>DONE</strong></p>                                                                                          | <p><em>Essential Platform</em><br><strong>DONE</strong></p>            | <p><em>Essential</em></p><p><em>Platform</em><br><strong>DONE</strong></p>                                                                              | <p><em>Essential DFC</em> + JSON-LD in the data attribute if HyperGraphQL</p><p><strong>OUTLOOK</strong></p>                                                            |
| **Transport layer**                   | <p>HTTP</p><p><strong>DONE</strong></p>                                                                                                                             | <p><em>Essential Platform</em><br><strong>DONE</strong></p>            | <p><em>Essential Platform</em><br><strong>DONE</strong></p>                                                                                             | <p><em>Essential DFC</em><br><strong>DONE</strong></p>                                                                                                                  |
| **Single or multi-source**            | <p>Simple access to one logical source</p><p><strong>DONE</strong></p>                                                                                              | <p><em>Essential Platorm</em><br><strong>DONE</strong></p>             | <p><em>Essential Platform</em><br><strong>DONE</strong></p>                                                                                             | <p>Query on multiple sources</p><p><strong>OUTLOOK</strong></p>                                                                                                         |
| **Right delegation**                  | <p>Standardized<br>OIDC authentification + platform manage acces to data using authentification : authentified user data or more</p><p><strong>DONE</strong></p>    | <p><em>Essential Platorm</em><br><strong>IN PROGRESS</strong></p>      | <p>Yes (web ACL Compliance)</p><p><strong>OUTLOOK</strong></p>                                                                                          | <p>Yes (web ACL implementation)</p><p><strong>OUTLOOK</strong></p>                                                                                                      |
| **Identification and authentication** | <p>OIDC (hosted by lescommuns.org)</p><p><strong>DONE</strong></p>                                                                                                  | <p><em>Essential Platorm</em><br><strong>DONE</strong></p>             | <p>webId-OIDC (decentralised authentification serveur : need platform implémentation)<br><strong>OUTLOOK</strong></p>                                   | <p><em>Target Platform</em><br><strong>OUTLOOK</strong></p>                                                                                                             |
| **Data storage**                      | <p>Distributed data on each platform</p><p><strong>DONE</strong></p>                                                                                                | <p>linked uri directory</p><p><strong>DONE</strong></p>                | <p><em>Essential Platform</em></p><p><strong>DONE</strong></p>                                                                                          | <p><em>Essential DFC</em> +semantic cache</p><p><strong>IN PROGRESS</strong></p>                                                                                        |
| **User data**                         | <p>ID centralized by lescommuns.org</p><p><strong>DONE</strong></p>                                                                                                 | <p><em>Essential Platform</em><br><strong>DONE</strong></p>            | <p>webId-OIDC (decentralised authentification serveur : need platform implémentation)<br><strong>OUTLOOK</strong></p>                                   | <p><em>Target Platform</em><br><strong>OUTLOOK</strong></p>                                                                                                             |
| **Product data**                      | <p>Decentralized ID management reconcile thanks to linked uri directory</p><p><strong>DONE</strong></p>                                                             | <p><em>Essential Platform</em><br><strong>DONE</strong></p>            | <p><em>Essential Platform</em></p><p><strong>DONE</strong></p>                                                                                          | <p><em>Essential DFC</em></p><p><strong>DONE</strong></p>                                                                                                               |
| **Interface & server of prototype**   | NA                                                                                                                                                                  | <p>Native web components & NodeJs</p><p><strong>DONE</strong></p>      | NA                                                                                                                                                      | <p>Semantic Serveur (Semapps)</p><p>Interface could be React OR Startin’blox</p><p>server : <strong>DONE</strong><br>interface : <strong>OUTLOOK</strong></p>           |

## Federation vs Syndication Summary

Federation: all entities follow the same protocol

Syndication: entities may have different protocols

Ontology: Federation

Taxonomy: Federation

Storage: Syndication

Identification and authentication : Federation

Validation: ?

Synchronisation / caching: Federation

Notification: ?

Serialisation : Federation

Others aspects of the protocol: Federation
