A State-Based Add-Wins CRDT for
RDF 1.2 Datastores
  • Heterogeneous interfaces supported by minimizing requirements
  • Interact with shared Knowledge Graphs and decentralized data ecosystems through SPARQL
  • Serving CRDT aware and non-aware clients
Two agents communicating with two datastores.
             The first datastore is exposed through an LDP interface while the second is exposed through a TPF interface.
             The first agents communicates with both datastores while the second agent communicates only with the second datastore.
Conflict Free RDF Replication 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
Two agents communicating with two datastores.
             The first datastore is exposed through an LDP interface while the second is exposed through a TPF interface.
             The first agents communicates with both datastores while the second agent communicates only with the second datastore.
Conclusion &
Future Work
  • orset-rdf-store
  • 🗸 Abstracted to RDF/JS Types Store interface
  • 🔬 Need for Constraint Aware Merge