Is RDF “hard”?
Apologies ahead for a somewhat long post, I promise I have a point to this. I’m certainly not looking to create any wars over this, I’m just trying to understand how it all works out.
I’ve started up on this after mostly finishing a recreation of the To Do Solid example application.
While trying to get a better understanding of how it all works, I found this site
Which seems a bit dated, but I thought the explanation was useful. (Also asking questions on Reddit, which also helped.)
Basically, for me, whenever I want to develop an application, I generally believe that I just want to write an application as quickly as possible. I’m used to kind of the mental pattern of “File => New Project” (or if you’re a command line person, “framework new foobar” i.e “cargo new project” for Rust or “npm install create-new-project init newprojectname” for npm) and just start writing things out. My data often just takes the shape of some classes that I’ve created, and I’m just interested in storing that data “somewhere”, traditionally for me in a SQL database.
I personally believe that kind of attitude is how we’ve arrived at where we are in the world today in application development: the rise of Object Relational Mappers (ORM) and various NoSQL implementations. Not that there aren’t valid reasons for those technologies; it’s just that in my view that often one of the factors in creating such tools is to try and reduce the development impedence of “figuring out data” when you’re writing an application. I don’t want to sit down and figure out how to design a SQL database for my app, I just want to write my app and let it use “data.”
Which brings me to RDF and the various walkthroughs I’ve used in the last few weeks in trying to understand how to use Solid. The walkthroughs for the most part seem to me that it forces the developer to think about data up front. Not only thinking about it up front, but really thinking about it.
When I want to create an app to manage To Do items, I now have to sit down and figure out if someone has already done this, and find a vocabulary for it. Then when building out an RDF document, I have to think about it in a different shape: Whereas I’m used to thinking about things in objects and loosely in relational database, I now have to think about things in triples, which is one of those foundational concepts you really have to understand first before you get anywhere. (This last item isn’t really that big of an emotional consequence for me: to me it’s analogus to understanding how columns and rows work in a table in a SQL database - it’s pretty foundational.)
All of this is hard, at least to me. To be clear, I’m not saying these things are wrong; I’m just saying that it’s more work up front mentally.
After I mulled on this for awhile, I emotionally came around to the notion that while this is harder than usual, it’s easier for me to accept if I conclude the following things first before I write any application:
My app really isn’t that special. Specifically, the data in my app really isn’t that special. As an example: there are a million different to do apps: Google Keep, Microsoft To Do, etc. This isn’t a new concept, therefore to me the notion of the data in my app isn’t special, and it’s worth my while to go figure out if someone else has already modeled it.
I have to care about data portability up front. If I don’t care about data portability, then I’m not going to use RDF, I’ll just continue to store my data in a SQL database, or a CSV, or whatever. This is one of those things where I, as a developer, have to learn to commit to. If I truly do believe that I’m going to be a good citizen of the internet, I should commit to this whenever I’m writing any app.
All of this is to say: how can I make this process easier for developers? Do we need another command line tool that does: “datamagic new data-structure” and it magically figures out how to produce an RDF structure for us to consume in our app?
Or is it simply a function of accepting that there’s going to be a hard requirement of the above notions, and try to expand that notion to the rest of app devs?
Or am I simply just not educated enough?
If you’ve made it this far, thanks, and my apologies.