Main Page

From solid-wiki
Jump to: navigation, search

This wiki for newbies is a work in progress. Feel free to add or edit content. A lot of information comes from the Solid chat's and forum. Thanks to all

Introduction to SOLID

1. Presentation by Ruben Verborgh at FOSDEM 2019 in Brussels Video[1] - Slides[2]

2. Solid is a web server and data hub. The foundations are based on :

  • Sharing of data with personal data control via :
    • POD (Personal Online Data/Datastore/Dataspace)
    • WebID for identity and authorization control
    • Fine-grained data authorization via ACL (Access Control List)
  • Separation of data and application
  • Linked Data concepts from W3C (World Wide Web Consortium)
    • URI kind of URL to identify a data
    • Graph representation with triples (Subject, Predicat, Object)
    • Vocabularies also called Ontologies
  • Open source resources (github, MIT Licence)

3. Actually Solid offers the ability to create POD's on a node-solid-server used as Hub.

You can register Pod's on existing SolidHub and/or make your own SolidHub on your own server/computer or in the cloud with node-solid-server [3]

Each Pod has access to a few apps through the UI (User Interface). The actual UI is considered as not very friendly. It shall improve with version 5.xx

Solid and the community are building tools and apps. It's mostly a work in progress.

4. Solid is represented by and a Solid Community.

5. Solid source and documentation

Chat and forum

What Solid is and isn't

Solid is a specification for servers. The Solid specification is intended to describe servers, also called pods, that are as simple as possible, but no simpler, that will provide access to data resources by WebId in a hierarchical file or with Sparql queries, with notifications on changes.

WebId's are the new thing that enables Solid. They are how people can identify themselves on the web. A WebId is a uri, a link, to a profile that describes a person or an agent that can access resources on the web.

A WebId is not a government issued id. It is more like a persona, one that describes the person or agent to a pod or pods. It is invented by its owner. It identifies that owner only according to its use with a pod. So you can create any WebId, but if a pod knows you by a WebId then you must consistently use that WebId in order to claim or grant access to any data you put on that pod. You can have any number of WebId’s.

Data on a Solid pod can be associated with a list that controls access to it by WebId. The list can be a complicated recipe involving one or many WebId’s. Each resource on a server can have its own access control list, or lists can be applied to containers of resources.

In this way, Solid servers can give rise to many client applications that have all of the features of current social media platforms, and more than that, access to each item of data can be designated for exactly specified users or groups of users. This will cause data silos on centralized servers to be broken up into small servers for each individual or project where data access is controlled by that individual or project.

Solid will precipitate an inversion of control from the current regime of powerful centralized servers and simple clients. Client applications will aggregate and present data according to the WebIds that they have authenticated, and they will become bigger and more highly evolved, and servers will be simpler and smaller and more decentralized.

So how are, to take one example, user comments, better on Solid? The short answer is they aren’t. Yet. Because the apps are not built yet.

But they will be. And user comments will be better because each user can have their comments on their own pod and have complete control of them. No one can delete them. Only those of the users choosing can even see them.

Web of data Concepts

Introductory Videos


node-solid-server Pod creation and webid

To create a Pod you register on it You will receive a webid or you can use your own webid for authentication if you already have one

Your own Pod and WebID

Solid managed server

You register for a free Pod, a webID with :

  1. [11]
  2. [12]

note : You can use an already owned webID to authenticate to your Pod

Personal/cloud server installation

You create a node-solid-server and register to it. you create your server where you want : on your computer, server or in the cloud. [13]

You can create a test or beta-production Pod on node.js with npm

You can also create your Pod with Docker

Example : Solid server with docker on a Synology Nas


Data and Solid filesystem

What to do next

  first app : app-on-your-lunch-break [14]
  and more ...

Graph Building

Vocabularies and Ontologies

"There is no clear division between what is referred to as “vocabularies” and “ontologies”. The trend is to use the word “ontology” for more complex, and possibly quite formal collection of terms, whereas “vocabulary” is used when such strict formalism is not necessarily used or only in a very loose sense. Vocabularies are the basic building blocks for inference techniques on the Semantic Web." (source W3C)

Triples description languages

It is all about the graph description with triples (Subject, Predicat, Object)

  • RDF Turtle : [15]
  • JSON-LD [16] (examples includes Turtle transcription)

Vocabularies Search databases

Often used vocabularies/ontologies

Commonly used and have a common prefixes for around solid

From highest to lowest formal concept:

   @prefix owl:              # theThing, Class and SubClass relations
   @prefix rdf: # RDF graph relations
   @prefix foaf:                 # in relation to Person
   @prefix dc:             # Dublin Core a general Elements
   @prefix dct:   # Dublin Core Terms
   @prefix solid:         # Solid Ontology
   @prefix xsd:           # offer detailed specifications on values
   @prefix :                             # your own vocabulary
   <>  by convention <URIoftheCurrentfile>
   <#> by convention <URIoftheCurrentfile#>

and also:

   @prefix schema:                        # general purpose created by Google, yahoo and bing and 
                                                              # mainly created to markup HTML documents in a view
                                                              # to make them understandable by machine

Graph and linked data

RDF graph and Queries

Data description : RDF/OWL [1]
    . example graph Mona Lisa
    . example triples Mona Lisa
      Here are examples of RDF triples (informally expressed in pseudocode):
      Example 1: Sample triples (informal)
      <Bob> <is a> <person>.
      <Bob> <is a friend of> <Alice>.
      <Bob> <is born on> <the 14th of July 1990>. 
      <Bob> <is interested in> <the Mona Lisa>.
      <the Mona Lisa> <was created by> <Leonardo da Vinci>.
      <the video 'La Joconde à Washington'> <is about> <the Mona Lisa>
Query language SPARQL/LDflex

Graph Validation and Viewer

Check and validate RDF documents
       JSON-LD Playground
       Check and validate RDF documents
       RDF Translator
       Shapes Constraint Language (SHACL)
Other graph tools

--> easy make a graph & export as turtle with '/t' command. screenshots

Demo : Spoggy functionnalities --> wait 15s & refresh to let the server awake if nothing appear --> see help/tutorial videos for 'how to use Spoggy' --> now working with plug Spoggy to Solid' with the help of solid-file-client

App building


rdflibjs uses solid-auth-client under the hood. So basically, if you're going to read and write RDF, use rdflib. If you're just reading and writing arbitrary files, you can use solid-auth-client by itself

    Solid Application Data Discovery
    Solid App Discovery
    A browser library for reading and writing to Solid pods 
    Access Control List (ACL)

What languages can I use to write solid applications ?

  • HTML/CSS (cheat sheet )
  • Javascript (cheat sheet)
   . node.js + npm packages
   . rdflib.js jsonld.js etc .....
   . vue.js react.js etc ....
   . Polymer2, Polymer3


   . solid authorization client --> get authorization to act with a POD (browser)
   . solid-file-client --> create & manage / update files and folders on a POD (uses rdflib)
   . solid-auth-cli --> a node/command-line Solid client with persistent login
   . solid-shell --> a command-line and interactive shell for managing Solid PODs
   . rdflib.js tutorial [2] --> access to RDF data               rdflibjs.js Api
   . LDflex --> A DSL for querying Linked Data on the web [3]    Query    Playground

React SDK for Solid[17]

   . Release Timeline
   . React SDK for Solid
   . Contributing to the Solid React SDK

Examples of Solid Ressources

   . Solid github project [4]
   . Solid github Community [5]

Examples apps

Solid apps

  A few apps are already delivered with the Pod's :
  . contacts
  . chat
  . meetings
  . dokieli text editor with linked data

Community apps

 ** file manager and editor
  Solid-ide            Web App       Source
  Pod Explorer         Web App        Source
 ** play and demos
  Chess                LiveVersion   Source
  RC-LogBook           AppLink       Source
  ToDos                work in progress
  LDflex playground    Web app       Source
 ** graph
  Spoggy Graph         Web app       Source
  (uk.) Online app    Source
 ** Tiddlywiki         Web App Source

table of contents

  Data and Filesystem
  Solid server with docker on a Synology Nas