A State-Based Add-Wins CRDT for
RDF 1.2 Datastores
Requirements
  • Interact with shared Knowledge Graphs and decentralized data ecosystems through SPARQL
  • Serving CRDT-aware and non-aware clients
  • Heterogeneous interfaces supported by minimizing requirements
Offline-First Collaborative RDF Editing using Web Standards
<> a crdt:container .
[] crdt:tags <<( <> a crdt:container )>> ;
   crdt:add "be2f95dd-..."^^crdt:uuid .
:me a :human .
[] crdt:tags <<( :me a :human )>> ;
   crdt:add "be2f95dd-..."^^crdt:uuid .
   crdt:remove "be2f95dd-..."^^crdt:uuid .
[] crdt:tags <<( :me a :man )>> ;
   crdt:remove
"216ac011-...--2025-03-13T14:00:00Z"^^crdt:stamp-uuid .
:me a :human — present Has add-tag not in tombstone set add-wins over concurrent remove
:me a :man — absent No add-tags remain stampUuid enables tombstone expiry
Notation
  • RDF 1.2 native reification
  • NTP-bound optimize
    • Drop old & redundant tags
    • Drop old tombstones
  • NTP max pairwise 2000s drift
Architecture
  • RESTful state based interactions
  • ETAG preventing mid flight collision
  • Atomicity through self confinement
Conclusion &
Future Work