Triadic Things Are Special (to Triple Store)
I finally understand why triple store need triple things. You must have triple things to store relational information.
In database: key, value, table id. Triple store is, in some sense, freer.
memory with 3-way association and fuzzy lookup
each record be like (A, B, C) where ABC are all SDRs each field of (A, B, C) can be looked up by SDR “closeness” given any two fields, the third can be retrieved by fuzzily (like normal RDF database)
fuzzy (SDR) triple memory store.
Relation logic control (Prolog.) may be related to this. (Up, In, Out)
Triples in Obsidian
You can do @[[B]][[C]]
or [[A]]:@:[[C]]
, where @
represents the current page. Both syntaxes are machine readable.
IndraDB Algorithm Distillation
this one is a bit restrictive. the tuple elements have edge/vertex specialization.
IndraDB stores data in RocksDB (key-value database).
type definitions and K->V maps:
Id = [256]const u8; // actual size not matter much. (a) need fixed size.
Identifier = []const u8;
PropertyName = []const u8;
Unit = struct{};
Vertex = struct {
id: Id,
t: Identifier,
};
Edge = struct {
in: Id,
t: Identifier, // type of edge (e.g. "like", "follow")
out: Id,
};
Properties = whatever, maybe JSON, although should be indexable;
// essential K -> V
Vertex.id -> Vertex.t
(Edge.in, Edge.t, Edge.out) -> Unit // (a) required here
(Edge.out, Edge.t, Edge.in) -> Unit
// properties
Vertex.id -> Properties
(Edge.in, Edge.t, Edge.out) -> Properties
// Bonus point!
(Vertex.id, PropertyName) -> Properties
(Edge.in, Edge.t, Edge.out, PropertyName) -> Properties
Its Application-facing API design:
Redland librdf
Unlike IndraDB, Redland stores homogeneous triples. (A: Node, B: Node, C: Node) instead of (Vertex, Edge, Vertex).
it doesn’t seem to have a way to retrive all tuples with only one node specified. you need two.
each node can be blank (an internal ID), resource (URL), literal (has an XML string, language, XML space)
the three maps to UUID, index text, free-form text (not indexed)
data storacge: TBD