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
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
Conclusion &
Future Work
orset-rdf-store
- 🗸 Abstracted to
RDF/JS Types
Store interface
- 🔬 Need for Constraint Aware Merge