Need help getting started on app development for SOLID

Hi there! I’m a french software developer for almost 8 years and I’ve been trying to get my head around Linked Data and SOLID recently. I’ve read a lot of specs and think it’s time to write some apps to get a feel of how it works.

So, here I am, trying to build a simple bookmark app (something like which should store links in my pod. I guess the first step is to define what vocab I should use for my simple needs :

  • Store a bookmark URL
  • Add a description
  • Add some tags to categorize a bookmark

And this is where I’m stuck. I found some bookmark related vocab at but don’t really know where to start from here… How I should attach some tags to a bookmark for example.

Can someone give me a help? I’m not very familiar with the semantic web but I guess this step is really important when developping a new software in the SOLID ecosystem.

1 Like

Salut @julien_leicher did you take a look at Poddit - link sharing app ?

cwork:tag ?

Nope! Looks like finding the right vocab is indeed the complex part :slight_smile:

As for the idea, it’s just a way to get my feet wet with SOLID.

Both Poddit and Markbook use the same data model, primarily based on the Bookmark vocabulary, and a dc:title for the description. Neither app supports tags, I think, so you can pick an appropriate vocab for that yourself :slight_smile:

What do you think of the vocab at ?

Looks like I can represent a bookmark with the class nfo:Bookmark, a description with nie:title and tags as nie:keyword so it makes sense to me, am I right?

I’m pretty confident there is not a single correct vocab to use but this one looks really good to me.

Thanks for your answers btw!

When you use it, your app won’t be interoperable with Markbook and Poddit, but if it is actually a better fit, one might argue for it. Those things are still in motion and there is no “Solid Bookmarking Spec” yet.

Yep, I totally understand this. But can I use multiple class to describe a thing therefore making it interoperable?

I know I can use multiple predicates on the same subject to represent the same property to make it more useful for other apps but don’t know if the same applies for classes yet.

yes you can do this, Persons in Solid are e.g. schema:Person as well as foaf:Person

This interoperability problem is also tackled by shaping, but it exists only in theory right now and is not implemented in Solid Servers.

BTW. @Vincent did not include the URL for the Bookmark ontology. Is that custom defined for your 2 apps?

Ah yes! This is really cool!

Good to know, will look into it :wink:


1 Like

Sorry, that was a Markdown typo. Link is fixed now.

No, it was an existing ontology.

1 Like

You can do this, but it will lead to one-way interoperability - bookmarks created by you will be visible in Poddit and Markbook, but not vice versa (depending on which ontology you use as your source of truth). So it’s not exactly clear what the advantage is, compared to consolidating on a single ontology.

That said, interoperability is a voluntary action from the app’s point of view, so if you feel that a different ontology suits your needs better, you can just choose to mark interoperability as a non-goal.


Ok so with the in mind, to tag a bookmark, I think two choices make sense : the and maybe the one, which one whould you choose? Should I choose both?

Things start to make sense :slight_smile:

I would just choose one that you think best suits your use case. If Markbook or Poddit ever get updated to also support tags, they can just choose to use what you’re using.

As for which is best: no idea, really :man_shrugging:

As you can see you got a relative freedom and things can move… the best way I think is choose one (or more for compatibility) and to communicate your choice in the help section of your app…

That’s right! I think I get a better understanding now. As a side question, does SOLID supports the LDP-PAGING specs? Because if I’ve got a lot of bookmarks, how should I paginate them? Looking at some github issues, it looks like it doesn’t say it requires the server to implement it but I’m a bit confused.

For now only LDP Basic Container. But I hope it is only a matter of time to support more.