Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
b286527
Added first stab at an application profile and server primer
pietercolpaert Sep 10, 2025
39b2ae5
Merge branch 'master' into feat-server-primer
pietercolpaert Sep 25, 2025
75c435d
Merge master and fix links
pietercolpaert Sep 25, 2025
62e3e45
Vocabulary in a different document
pietercolpaert Sep 25, 2025
13afd61
Correct links to now vocabulary
pietercolpaert Sep 25, 2025
5bc5242
Restructuring
pietercolpaert Sep 25, 2025
28a3369
Added LDES server in terminology and added an image
pietercolpaert Sep 26, 2025
3e6aa89
added search tree illustration
pietercolpaert Oct 2, 2025
cf85c51
Proof-reading the spec
pietercolpaert Oct 2, 2025
3be30be
Fixed example 5
pietercolpaert Oct 2, 2025
938ef05
Revision of the SHACL target text
pietercolpaert Oct 2, 2025
f16cc5d
Added width
pietercolpaert Oct 2, 2025
277b0d7
More text on the server primer
pietercolpaert Oct 2, 2025
10efe79
More text on the server primer
pietercolpaert Oct 2, 2025
a309cd5
Fix #106
pietercolpaert Oct 2, 2025
9ce41c3
Fix #107
pietercolpaert Oct 2, 2025
79fbaf6
Remove too much detail in validating of pages
pietercolpaert Oct 2, 2025
332ce63
Initial text on retention policies
pietercolpaert Oct 2, 2025
fe3a5b4
Vocabulary proofreading
pietercolpaert Oct 3, 2025
07851f7
Consistency in listing
pietercolpaert Oct 3, 2025
c3f1c87
We will not close the status logs issue this time
pietercolpaert Oct 6, 2025
b13a82c
Make sure all specs build using a workflow
pietercolpaert Oct 6, 2025
fa57fea
Fix #41
pietercolpaert Oct 6, 2025
f3801d0
Add pollingInterval and immutable in the vocabualry
pietercolpaert Oct 7, 2025
b0b12a8
Added tag-based version now
pietercolpaert Oct 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 0 additions & 42 deletions .github/workflows/gh-pages-workflow.yml

This file was deleted.

63 changes: 63 additions & 0 deletions .github/workflows/ldes-server-primer-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: LDES Server Primer Build

on:
pull_request:
paths: ["server-primer.bs"]
push:
branches: [main]
paths: ["server-primer.bs"]
tags: ["*"]

workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Publish Bikeshed document
uses: w3c/spec-prod@v2
with:
TOOLCHAIN: bikeshed

# Modify as appropriate
GH_PAGES_BRANCH: gh-pages
# The source file
SOURCE: server-primer.bs

# output filename defaults to your input
# with .html extension instead,
# but if you want to customize it:
DESTINATION: server-primer.html

copy-tag-version:
name: Copy tag snapshot
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
steps:
- name: Checkout gh-pages
uses: actions/checkout@v3
with:
ref: gh-pages
fetch-depth: 0

- name: Copy server-primer snapshot
run: |
set -euo pipefail
tag="${GITHUB_REF_NAME}"
dest="versions/${tag}"
mkdir -p "${dest}"
cp server-primer.html "${dest}/server-primer.html"
if git status --porcelain | grep . >/dev/null; then
git config user.email "semic-eu+github-actions[bot]@users.noreply.github.com"
git config user.name "SEMIC EU archival [bot]"
git add "${dest}/server-primer.html"
git commit -m "Add server primer snapshot for ${tag}"
git push
else
echo "No changes to commit."
69 changes: 69 additions & 0 deletions .github/workflows/ldes-specification-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: LDES Specification Build

on:
pull_request:
paths: ["eventstreams.bs"]
push:
branches: [main]
paths: ["eventstreams.bs"]
tags: ["*"]

workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3

- name: Publish Bikeshed document
# You may pin to the exact commit or the version.
uses: w3c/spec-prod@v2
with:
TOOLCHAIN: bikeshed

# Modify as appropriate
GH_PAGES_BRANCH: gh-pages
# The source file
SOURCE: eventstreams.bs

# output filename defaults to your input
# with .html extension instead,
# but if you want to customize it:
DESTINATION: index.html

copy-tag-version:
name: Copy tag snapshot
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
steps:
- name: Checkout gh-pages
uses: actions/checkout@v3
with:
ref: gh-pages
fetch-depth: 0

- name: Copy spec snapshot
run: |
set -euo pipefail
tag="${GITHUB_REF_NAME}"
dest="versions/${tag}"
mkdir -p "${dest}"
cp index.html "${dest}/index.html"
if git status --porcelain | grep . >/dev/null; then
git config user.email "semic-eu+github-actions[bot]@users.noreply.github.com"
git config user.name "SEMIC EU archival [bot]"
git add "${dest}/index.html"
git commit -m "Add spec snapshot for ${tag}"
git push
else
echo "No changes to commit."
63 changes: 63 additions & 0 deletions .github/workflows/ldes-vocabulary-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: LDES Vocabulary Build

on:
pull_request:
paths: ["vocabulary.bs"]
push:
branches: [main]
paths: ["vocabulary.bs"]
tags: ["*"]

workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Publish Bikeshed document
uses: w3c/spec-prod@v2
with:
TOOLCHAIN: bikeshed

# Modify as appropriate
GH_PAGES_BRANCH: gh-pages
# The source file
SOURCE: vocabulary.bs

# output filename defaults to your input
# with .html extension instead,
# but if you want to customize it:
DESTINATION: vocabulary.html

copy-tag-version:
name: Copy tag snapshot
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
steps:
- name: Checkout gh-pages
uses: actions/checkout@v3
with:
ref: gh-pages
fetch-depth: 0

- name: Copy vocabulary snapshot
run: |
set -euo pipefail
tag="${GITHUB_REF_NAME}"
dest="versions/${tag}"
mkdir -p "${dest}"
cp vocabulary.html "${dest}/vocabulary.html"
if git status --porcelain | grep . >/dev/null; then
git config user.email "semic-eu+github-actions[bot]@users.noreply.github.com"
git config user.name "SEMIC EU archival [bot]"
git add "${dest}/vocabulary.html"
git commit -m "Add vocabulary snapshot for ${tag}"
git push
else
echo "No changes to commit."
19 changes: 9 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
# The Linked Data Event Streams specification

A Linked Data Event Stream is a collection of immutable objects (such as version objects, sensor observations or archived representation). Each object is described in RDF.
Linked Data Event Streams (LDES) is an initiative to, as a data publisher, find a balance between publishing your data using a as-complete-as-possible set of querying APIs and a data dump. We propose an event stream as the base API, and want to make it as light-weight as possible to host one.

The objective of a Linked Data Event Stream is to allow consumers to replicate all of its items and to stay in sync when items are added.
LDES includes:
* A [vocabulary](https://w3id.org/ldes) that introduces terms to talk about an `ldes:EventStream`
* An example JSON-LD context that can be accessed from [here](https://w3id.org/ldes/context). It includes the JSON labels we recommend to use in JSON-LD documents. This document may however change over time and does not come with any waranties cfr. uptime. When building for a production environment, do thus not use this URL as an external context.
* A [consumer oriented specification](https://w3id.org/specification). You can use this spec if you want to implement an LDES client or consumer pipeline.
* A [server primer](https://w3id.org/ldes/server-primer) that you can consult when building an LDES as a data provider.

The HTML specification can be accessed from [here](https://w3id.org/ldes/specification).

An example JSON-LD context can be accessed from [here](https://w3id.org/ldes/context). It includes the JSON labels we recommend to use in JSON-LD documents. This document may however change over time and does not come with any waranties cfr. uptime. When building for a production environment, do thus not use this URL as an external context.

This specification uses [TREE](https://w3id.org/tree/specification) for its collection and fragmentation features, which in its turn is compatible to other specifications such as Activity Streams, DCAT-AP, LDP or Shape Trees.

If you are new to the concept of Linked Data Event Stream or Linked Data, [this short training](https://academy.europa.eu/courses/publishing-data-with-linked-data-event-streams-why-and-how) introduces the main concepts.
The LDES specification uses the W3C [TREE hypermedia specification](https://w3id.org/tree/specification) for creating paginated search tree of event stream pages.

## Build the spec

Expand All @@ -24,7 +22,8 @@ Install [bikeshed](https://tabatkins.github.io/bikeshed/) and then run `bikeshed

## Changelog

In 2025 the LDES specification is being rewritten from a consumer oriented perspective, while adding functionalities. Check the releases for changelogs.
* 2025-11-25: v1.0 launched: redesignd retention policies, a client algorithm, a server primer, etc.
* 2021-03-15: v0.1 launched: an initial design of the vocabulary with retention policies

## Acknowledgements

Expand Down
Loading