1 of 29

Linked Data Event Streams in Solid LDP containers

Wout Slabbinck, Ruben Dedecker, Sindhu Vasireddy, Ruben Verborgh and Pieter Colpaert

DEPARTMENT ELIS

RESEARCH GROUP IDLab Technology

2 of 29

What is Solid?

A protocol to give people control over their data

  • Cross app interoperability
  • Separating the data from applications

3 of 29

Storage in Solid

Linked Data Platform (LDP)

  • Container-resource pattern�<container> a ldp:Container;� ldp:contains <container/resource1>;� ldp:contains <container/resource2>;

4 of 29

Storage in Solid

Linked Data Platform (LDP)

  • Container-resource pattern�<container> a ldp:Container;� ldp:contains <container/resource1>;� ldp:contains <container/resource2>;
  • HTTP-based CRUD operations for interacting with resources

5 of 29

Core components of Solid

WebID

  • Identity of the agent

Solid Open ID Connect

  • Authenticate a person

6 of 29

Core components of Solid

Web Access Control (WAC)

  • Provide access control over resources
  • Through Access Control Lists (ACLs)

7 of 29

Core components of Solid

  • Interacting with data: LDP
  • Authentication: WebID and Solid-OIDC
  • Authorization: WAC

Let’s build an application!

8 of 29

Solid in practice: Location application

9 of 29

Solid in practice: Location application

51° 0' 46.90'' N

3° 42' 29.48'' E

10 of 29

Location application example

Writing

HTTP PUT

Pod/private/location.ttl

11 of 29

Location application example

Reading

HTTP GET

Pod/private/location.ttl

12 of 29

Location application example

It works. We are done!

13 of 29

Location application example

Remember cross app interoperability

  • Data and application are not separated
    • E.g. Solid app that visualizes routes won’t work with the location data as we only have latest value

14 of 29

Let’s take a step back

15 of 29

Event Sourcing to the rescue

In an Event Source every action is written as an immutable event in an append-only event log

16 of 29

Event Sourcing

Event log

App

Writing

App

Snapshot

State

Reading

Location event t0

Location event t1

Location event t2

17 of 29

Event Sourcing

Location event t0

Location event t1

Location event t2

Event log

App

App

Complex query

Writing

18 of 29

Append-only Event Log

Linked Data Event Streams (LDES)

  • Event Stream: collection of immutable objects
  • Hypermedia interface

𝚫

𝚫

𝚫

𝚫

𝚫

𝚫

𝚫

View

Fragments

Event Stream

19 of 29

Event Sourcing in Solid

LDES in LDP Protocol

  • Linked Data Event Streams (LDES): collection of immutable objects
  • First explain LDES very briefly
  • Take images from slide deck LDES Write for the REAL protocol

20 of 29

Append-only Event Log in Solid

𝚫

𝚫

𝚫

𝚫

𝚫

𝚫

𝚫

View

Fragments

Event Stream

LDES in a Solid Container

21 of 29

LDES in a Solid Container

𝚫

𝚫

𝚫

𝚫

𝚫

𝚫

𝚫

View

Fragments

Event Stream

22 of 29

LDES in a Solid Container

Event Stream

View

Fragments

23 of 29

Location application: revisited

Append location

Event log

24 of 29

Location application: revisited

Event log

Read latest location

App

App

Read routes

App

25 of 29

Conclusion

Event sourcing in Solid is possible

  • Strong separation of data and apps
    • Allows for multiple views over data

But, some limitations using the Solid LDP Protocol

26 of 29

Re-balancing is impossible

  • Dealing with a large number of resources
    • We proposed B+ Tree for optimisation
  • With slash semantics, impossible to move resources as their IRI would change

27 of 29

Not strictly following the LDES in LDP protocol

  • May lead to a corrupt event source
  • LDES view invalid
    • Unable to retrieve correct objects

28 of 29

Retention policies are client managed

  • Clients enforcing these policies is not efficient
  • Solid server should indicate retention policies based on its capacity

29 of 29

Let us have a discussion

Should there be a new kind of append-only container, managed by the server, in the Solid Specification?