Three Layers, One Graph
Data triples: regular RDF relationships (
Vector triples: embeddings stored as typed literals (
HNSW triples: neighbor edges generated on-the-fly from the HNSW index (
:discusses, :author).Vector triples: embeddings stored as typed literals (
:hasEmbedding "..."^^sutra:f32vec).HNSW triples: neighbor edges generated on-the-fly from the HNSW index (
sutra:hnswNeighbor).
Example Triple
:paper_42 :hasEmbedding "0.23 -0.11 0.87 ..."^^sutra:f32vec .
SELECT ?similar ?topic
WHERE {
:paper_42 sutra:hnswNeighbor+ ?similar .
?similar :discusses ?topic .
}
SELECT ?similar ?topic
WHERE {
:paper_42 sutra:hnswNeighbor+ ?similar .
?similar :discusses ?topic .
}
Why This Matters
The HNSW index is the 4th index type alongside SPO/POS/OSP. SPARQL property paths can traverse
sutra:hnswNeighbor+ just like :hasFather+. The query planner decides whether to use HNSW or triple indexes based on cost — no separate vector database API needed.
Steps