I was chewing over ideas today for a nice little side project for when I was blocked on other things, and it kind of exploded. This often happens when I go for a walk or sit thinking deeply to long!
The app I was contemplating is a fusion of ideas from current and past experience, driven by my love of visualisation. For example, consider if spoggy was combined with the Data Browser, where you can pull in, query and display data from RDF sources through a user interface that mixes and matches entity relationships, tabular, and even spreadsheet like UI. And where the source data can be added to, edited, annotated through simple gestures like dragging an icon, drawing a link, editing a property and so on.
I love UI that is fun to explore and encourages users to discover features and workflows, as well as design their own, by being intuitive, forgiving and… fun!
Anyway, the app itself is not the subject of this topic. I’m posting this to wonder out loud if RDF can become the fabric of applications themselves.
In contemplating my app it became obvious that making the elements of it interchangeable and flexible would make it both more powerful, and create opportunities to build the ‘spreadsheet of the RDF world’, by which I mean an application which users can customise and program themselves.
An App Composed of RDF
So focusing in for a moment, I’ll kick this off with a diagram. This illustrates how an app could be composed entirely of RDF. It would need an ‘engine’ (interpreter or compiler, not shown) which would consume the RDF that defines it’s various components (UI, business logic, modules, functions, code) and ‘enact’ the resulting application.
I hope it is self explanatory, but ask if not and I’ll update this post to clarify.
What do you think? I’m not proposing building this, it’s too ambitious for me alone, but I find the idea interesting.
Implications
Such an app could edit itself, could have bits of other apps (of this type) pulled into it, tweaked, pipelined, mixed and matched just as we do when we play with a spreadsheet. So anyone could do this at some level - maybe just tweaking parameters of a feature here and there, up to rewriting or replacing different parts, or cannibalising something for a new app and so on.
Adding RDF Interfaces
I had another thought this morning, and I’ve not even been for my walk yet! I’m wondering what it would mean if each of these ‘objects’ (the UI Element, Function etc) had RDF interfaces such as exposing its RDF graph store (as in say rdflib.js), an LDP interface and so on. Then any RDF aware app, or component, could explore and/or modify any other component. It starts to feel like ALife!
Seen this before?
I doubt this is a new idea (even I had a similar one twenty years ago ) so if you know of other attempts like this whether or not RDF based, let me know.