Hello!
I’m trying to answer the question “How to find people who are interested in the same stuff as me?” Or “How do I find people living in a certain area?”
This seems to be a fundamental issue of distributed social networks that aspire to connect strangers with each other (hospitality exchange, collaboration, meetups…).
The solutions I can think of:
- Follow your nose through foaf:knows links, and hope you discover the relevant people in the social graph. (e.g. used in friend crawler)
- Make a list/group, and people register there, and find each other there (e.g. used in ohn-solid)
- Make an index
- Anything else?
In this post I specifically ask about the 3rd option. How to implement an index?
I came up with the following architecture and I’m interested in your feedback before implementing it:
Let’s say we want to index people and their interests.
Input API is a (REST?) API that allows a human via app to suggest a Person or other Thing for indexing
Linked Data Fragments is the API through which a human via app can access the indexed info (i would use Linked Data Fragments Server.js for this, and query it with Comunica from the app)
Crawler (Bot) is a bot that visits the Persons or other Things suggested by Input API, or those outdated. Then it updates the index with the specific relationships it founds that we’re interested in (e.g. (Person) --(foaf:topic_interest)–> (Thing)). If the bot is a little bit curious/evil, it will also perhaps crawl foaf:knows links, to discover new people and stuff.
RDF is just abstract layer - underlying data are stored as RDF triples, perhaps limited to
?person --foaf:topic_interest–> ?thing
?person --a–> foaf:Person
Storage can be anything - I’d probably use (My)SQL for speed, but even a turtle document (within a Solid Pod?) (or whatever) may do. Or not. We also want to store at least the date of the last visit, and suggested Things to add. (both won’t appear in the LDF output)
As you can see, i haven’t concerned myself with anything like distributed hash indexes, whatever that means. I simply don’t understand what that means and how that’s supposed to work, so far. If you can suggest some resources on this topic, please do!
I’m particularly wondering:
Has anybody already implemented something similar (i.e. to solve the discovery issue)? I don’t want to reinvent a wheel.
I haven’t decided if one would need to authenticate/authorize for Input API and Linked Data Fragments API. Perhaps Solid OIDC could be used for this (i don’t know much about that). Or we would only index public stuff, and perhaps people would have to solve a Captcha or something to make suggestions via Input API
The Input API doesn’t feel very “standard”. It would be just some REST-like endpoints. What would be a nicer (Linked Dataey) way for suggesting things to the Index?
The Linked Data Fragments (LDF) would not suffice for searching people by location; AFAIK LDF doesn’t support that option [geospatial search - find something located within a bounding box].
And yes, such system wouldn’t be very discoverable. Its whereabouts would be probably just hardcoded into the app that needs it.
But well, I just want something working!
I’m interested in any [other] ideas[, too]!