Building an app out of RDF

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! :smile:

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 :wink:) so if you know of other attempts like this whether or not RDF based, let me know.

3 Likes

Theoretically such application is feasible, and that is the power of semantics. From the functional aspect of it, it would be useful to narrow the domain of the application by feeding it the specifications needless to say in RDF.

It would be necessary for a DNS-like service that would make RDF datasets discoverable.

I guess, once AI becomes more robust, this would be the norm.

1 Like

@joepio and the other Ontola folks have been doing a subset of this, I think.

2 Likes

Thanks for your links @Vincent and @anon36056958, I’ll take a look.

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!

I’m going for my walk now, so… :grimacing:

@happybeing Some years ago, I made a try ( an under alpha Spoggy version) with Processing & Jena reading an .owl configuration file
http://smag0.blogspot.com/2014/03/creer-une-interface-pour-visualiser-les.html?m=0 ( can be translated with Google Traduction on the right) .
For the test, That just ajust width,height & background color of the app, but I think this could be easily ported to JavaScript with p5js https://p5js.org/ and why apply ‘machine learning’ with ml5 https://ml5js.org/

This sort of config file could be shared on pods, and incrementally completed, so that everyone could copy apps.
Does this example correspond to your vision ?
Some work on ui-ontology could be integrated.
Is there a vocabulary to describe apps, Classes, Objects, Functions, parameters?

1 Like

That’s very interesting @Smag0, thanks. I don’t think I understand your overall idea - where this was going. I see you using RDF to read properties that customise the application, but I think you have much more in mind, along the same lines as I describe as you suggest. You have probably thought more about it than me though. Thanks for sharing this.

Writing my notes on this I think the difference is that you have a templated app which can be configured by adding components and logic which are read by the templated app. Whereas rather than a template, I think in terms of a simple engine, with the entire app being defined in RDF (as containers, resources), and run by the engine. Not that different, and I think your demo is a step towards that anyway.

Another interesting one is Sparql Web Pages, which I think is part of Topbraid Composer. We need a free open source alternative to that, which can be tailored for Solid pods :grinning:

2 Likes

Lots of relevant and useful suggestions, thanks for this one @anon36056958. I think they can all contribute something to this idea and some might be steal-able! :slight_smile:

1 Like

Not steal, liberate!

1 Like

What worklow could we imagine with Spoggy ->
A plume post on my Pod

1 Like

Regarding this, I made a note in another thread: Conceptual Design - Solid better User Experience

Hey man!
Are you still working on the idea?

I have had what seems to be the exact same one, and managed to get a prototype working with regular web tech. I am now looking to port it to solid which seems like a perfect fit for the concept.
I don’t have any experience with solid yet, working with someone who has relevant skills would be pretty neat :slight_smile:

1 Like

That’s great. I was thinking out loud rather than working on this, so will be very interested in how you get on. At some point I might be able to help, but there are plenty of people in the community who can help as well.

Gotcha

Core concepts are an entity based architecture, where each entity got its own pod, access rules, interface etc. I call them spaces, because they’re ultimately just holders of data, what they actually represent will depend on what the pod/space owner will put inside.
By using a common langage to describe the elements constituting these spaces, we enable access to any of them through a universal interface, which also allows the user to manage its own pod/space/user account. Same interface will allow live creation and editing of spaces.

I think it’s all very doable with solid, I’m just not quite sure how to handle live pod creation quite yet. I’ll see what I can get going tomorrow, and probably create my own topic to look for help then.

1 Like