Timeline (Draft)

Introduction

Many different types of data are collected over time by a user of the solid platform. It is helpful to have a place where all this data can be collated and reviewed. That place is known as your timeline.

In this current draft the first time of timeline used is a set of Containers on a per day basis. Each container is of the form yyyy-mm-dd ( in JavaScript date.toISOString().substring(0,10) ). This is to ensure file system based servers can aggregate data without it becoming too large.

Timelines typically collect SIOC Posts of data. They can then be rendered to a screen.

Finding the timeline

A timeline is typically linked from a user's WebID with the solid terms timeline predicate.

    <#me> <http://www.w3.org/ns/solid/terms#timeline> <LDPC_Parent>
TODO: Discuss creation of this predicate.

A timeline linked from a WebID will normally be Public readable and there will normally only be one found.

Timeline structure

A timeline is a linked data platform container. Each container may contain sub containers, one for each day. The sub cointainers are of the form yyyy-mm-dd which is similar to ISO date format, and forms a natural sorting order.

Each sub container will contain a number of posts, which represents items on that day's timeline.

While it is not strictly necessary to sub divide a time line in this way, it works well with file based servers in order to divide resources into logical units without growing too large. Other strategies are also permissible, but not yet explored here.

Reading the timeline

To read the entries in the timeline it is possible to take advantage of the glob function of Solid, or to use the contains predicate on the timeline container.

This will yield a number of sub containers, one for each day. The easiest way to get items in that day's timeline is to use the glob function of solid, for example:

GET  /Public/timeline/2015-12-12/*

Posts Structure

Posts are of type Sioc : Post. They have content, a created time and a SIOC has_creator. The creator is a SIOC Account with name, avatar and WebID.

<#author>
    <http://rdfs.org/sioc/ns#account_of> <http://melvincarvalho.com/#me> ;
    <http://rdfs.org/sioc/ns#avatar> <http://melvincarvalho.com/melvincarvalho.png> ;
    a <http://rdfs.org/sioc/ns#UserAccount> ;
    <http://xmlns.com/foaf/0.1/name> "Melvin Carvalho" .

<#this>
    <http://purl.org/dc/terms/created> "2015-12-07T13:56:08+00:00"
    ^^<http://www.w3.org/2001/XMLSchema#dateTime> ;
    <http://purl.org/dc/terms/title> "" ;
    <http://rdfs.org/sioc/ns#content> """Testing images ...

![](http://i.telegraph.co.uk/multimedia/archive/02525/dory_2525738b.jpg)""" ;
    <http://rdfs.org/sioc/ns#has_creator> <#author> ;
    a <http://rdfs.org/sioc/ns#Post> .

Writing to the timeline

Posts are written to a timeline by posting to the LDP Container. Normally only the owner of the Container and possibly friends can do this.

Subscribing to a timeline

It is possible to subscribe to updates in realtime, using container using Websockets.

Example implementation