So the first thing the user would need to do would be to create a pod. I’ll write up the spec for that soon, but for now just assume it is a scratchpad with RDF entries.
To make an index, you would map Autonomi addresses using the subject → predicate → object RDF structure, known as a triple. A set of RDF triples describing a website would look like (in psuedo code):
<Autonomi address> <is a type of> <website>
<Autonomi address> <has a short name> <"Autonomi Forum">
And in RDF N-triples:
<ant://c859818c623ce4fc0899c2ab43061b19caa0b0598eec35ef309dbe50c8af8d59> <rdf:type> <http://schema.org/website>
<ant://c859818c623ce4fc0899c2ab43061b19caa0b0598eec35ef309dbe50c8af8d59> <http://schema.org/name> <"Autonomi Forum">
Enter in all of the sites that you want to track into your pod. Obviously, the frontend would obfuscate all this data entry rigmarole.
Then you share your index pod with other people and they in turn share your index by referencing it in one of their pods.
A user wanting to find this site will read in all of the pods that they know of, starting with their own, and recurse through all the pods that they reference, dumping the triples into their local RDF database. Then they are ready to search with a SPARQL query.
To search for the “Autonomi Forum” string across all RDF triples in the database:
SELECT DISTINCT ?subject ?predicate ?object ?graph WHERE {
GRAPH ?graph {
?subject ?predicate ?object .
FILTER(isLiteral(?object) && CONTAINS(LCASE(STR(?object)), LCASE("Autonomi Forum")))
}
}
ORDER BY ?graph ?subject
Same as the data entry, colonylib wraps this into a ‘simple search’ function that works basically like google does when you enter in a search string.
SPARQL is extremely flexble. This particular query is wide open and searches every literal stored, which probably isn’t what you want. You can narrow this down to a specific predicate (or type) or limit the search to a specific pod (by graph), change the results ordering, or limit the number of results shown.
The end goal for search I have in Colony is to have a local LLM that you converse with and it formulates a SPARQL query based on what you ask so we can get a much better search experience. As long as everything is written in a way that we can traverse Autonomi to find the RDF triples to load into a local RDF database, adding an LLM is the easy part. The key is getting folks to follow the same format when they write their metadata so that it can be searched like this.
@happybeing You’ve been around RDF/SPARQL/Solid longer than I have, how does this fit your view of this?
One of the cool things about RDF is that the predicate/object pointers don’t have to be real things, they just need to be in the URI format for the RDF parser. So the http://schema.org/website identifier doesn’t actually mean anything and it is never visited as a website, it is just a unique identifier that allows things to associate with each other in the graph.
Falling down the rabbit hole of graphs, we could build layers of associations in RDF that don’t describe files on Autonomi, but abstract concepts that link to files. So the map someone creates may not just an index of “things” but a graph representing knowledge and associations. It is a really cool concept that can incrementally be expanded upon by many users simultaneously, which is why I think this structure really falls in line with the vision of the Autonomi network.