# Need help getting started on app development for SOLID

**URL:** <https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166>\
**Category:** Solid App Development FAQs\
**Created:** [June 4, 2020, 1:46pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166 "2020-06-04T13:46:44Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 4, 2020, 1:46pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/1 "2020-06-04T13:46:44Z")

</div>

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 [https://github.com/shaarli/Shaarli/](https://github.com/shaarli/Shaarli/)) 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 [https://lov.linkeddata.es/dataset/lov/terms?q=bookmark](https://lov.linkeddata.es/dataset/lov/terms?q=bookmark) 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.

---

<div class="post-metadata">

**Author:** ![Smag0](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/smag0/32/310_2.png) [@Smag0](https://forum.solidproject.org/u/Smag0)\
**Post date:** [June 4, 2020, 2:55pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/2 "2020-06-04T14:55:31Z")

</div>

Salut @julien_leicher did you take a look at [Poddit - link sharing app](http://forum.solidproject.org/t/poddit-link-sharing-app/1672) ?

cwork:tag ? [https://lov.linkeddata.es/dataset/lov/terms?q=Tag](https://lov.linkeddata.es/dataset/lov/terms?q=Tag)

---

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 4, 2020, 3:12pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/3 "2020-06-04T15:12:48Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![Vincent](https://avatars.discourse-cdn.com/v4/letter/v/e9bcb4/32.png) [@Vincent](https://forum.solidproject.org/u/Vincent)\
**Post date:** [June 4, 2020, 3:48pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/4 "2020-06-04T15:48:26Z")

</div>

Both Poddit and [Markbook](https://github.com/mark-book/markbook) use the same data model, primarily based on the [Bookmark vocabulary](http://www.w3.org/2002/01/bookmark), and a `dc:title` for the description. Neither app supports tags, I think, so you can pick an appropriate vocab for that yourself 🙂

---

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 5, 2020, 7:13am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/5 "2020-06-05T07:13:32Z")

</div>

What do you think of the vocab at [https://www.semanticdesktop.org/ontologies/2007/03/22/nfo/#Bookmark](https://www.semanticdesktop.org/ontologies/2007/03/22/nfo/#Bookmark) ?

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!

---

<div class="post-metadata">

**Author:** ![aveltens](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/aveltens/32/3987_2.png) [@aveltens](https://forum.solidproject.org/u/aveltens)\
**Post date:** [June 5, 2020, 7:26am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/6 "2020-06-05T07:26:45Z")

</div>

> [@julien\_leicher](#):
>
> What do you think of the vocab at [Nepomuk File Ontology (NFO)](https://www.semanticdesktop.org/ontologies/2007/03/22/nfo/#Bookmark) ?

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.

---

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 5, 2020, 7:29am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/7 "2020-06-05T07:29:38Z")

</div>

> [@aveltens](#):
>
> When you use it, your app won’t be interoperable with Markbook and Poddit

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.

---

<div class="post-metadata">

**Author:** ![aveltens](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/aveltens/32/3987_2.png) [@aveltens](https://forum.solidproject.org/u/aveltens)\
**Post date:** [June 5, 2020, 7:34am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/8 "2020-06-05T07:34:24Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![aveltens](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/aveltens/32/3987_2.png) [@aveltens](https://forum.solidproject.org/u/aveltens)\
**Post date:** [June 5, 2020, 7:36am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/9 "2020-06-05T07:36:18Z")

</div>

This interoperability problem is also [tackled by shaping](https://ruben.verborgh.org/blog/2019/06/17/shaping-linked-data-apps/#shapes), but it exists only in theory right now and is not implemented in Solid Servers.

---

<div class="post-metadata">

**Author:** ![aschrijver](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/aschrijver/32/463_2.png) [@aschrijver](https://forum.solidproject.org/u/aschrijver)\
**Post date:** [June 5, 2020, 7:37am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/10 "2020-06-05T07:37:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 5, 2020, 7:54am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/11 "2020-06-05T07:54:30Z")

</div>

> [@aveltens](#):
>
> yes you can do this, Persons in Solid are e.g. `schema:Person` as well as `foaf:Person`

Ah yes! This is really cool!

> [@aveltens](#):
>
> This interoperability problem is also [tackled by shaping](https://ruben.verborgh.org/blog/2019/06/17/shaping-linked-data-apps/#shapes), but it exists only in theory right now and is not implemented in Solid Servers.

Good to know, will look into it 😉

Thanks!

---

<div class="post-metadata">

**Author:** ![Vincent](https://avatars.discourse-cdn.com/v4/letter/v/e9bcb4/32.png) [@Vincent](https://forum.solidproject.org/u/Vincent)\
**Post date:** [June 5, 2020, 7:54am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/12 "2020-06-05T07:54:55Z")

</div>

> [@aschrijver](#):
>
> BTW. @Vincent did not include the URL for the Bookmark ontology. Is that custom defined for your 2 apps?

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

No, it was an existing ontology.

---

<div class="post-metadata">

**Author:** ![Vincent](https://avatars.discourse-cdn.com/v4/letter/v/e9bcb4/32.png) [@Vincent](https://forum.solidproject.org/u/Vincent)\
**Post date:** [June 5, 2020, 7:57am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/13 "2020-06-05T07:57:01Z")

</div>

> [@julien\_leicher](#):
>
> Yep, I totally understand this. But can I use multiple class to describe a thing therefore making it interoperable?

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.

---

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 5, 2020, 8:36am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/14 "2020-06-05T08:36:29Z")

</div>

Ok so with the [https://www.w3.org/2002/01/bookmark](https://www.w3.org/2002/01/bookmark) in mind, to tag a bookmark, I think two choices make sense : the [https://www.w3.org/2002/01/bookmark#hasTopic](https://www.w3.org/2002/01/bookmark#hasTopic) and maybe the [https://www.dublincore.org/specifications/dublin-core/dcmi-terms/terms/subject/](https://www.dublincore.org/specifications/dublin-core/dcmi-terms/terms/subject/) one, which one whould you choose? Should I choose both?

Things start to make sense 🙂

---

<div class="post-metadata">

**Author:** ![Vincent](https://avatars.discourse-cdn.com/v4/letter/v/e9bcb4/32.png) [@Vincent](https://forum.solidproject.org/u/Vincent)\
**Post date:** [June 5, 2020, 8:48am UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/15 "2020-06-05T08:48:14Z")

</div>

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 🤷‍♂️

---

<div class="post-metadata">

**Author:** ![Smag0](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/smag0/32/310_2.png) [@Smag0](https://forum.solidproject.org/u/Smag0)\
**Post date:** [June 5, 2020, 1:08pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/16 "2020-06-05T13:08:38Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![julien\_leicher](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/julien_leicher/32/1961_2.png) [@julien\_leicher](https://forum.solidproject.org/u/julien_leicher)\
**Post date:** [June 5, 2020, 2:10pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/17 "2020-06-05T14:10:25Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![aveltens](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.solidproject.org/aveltens/32/3987_2.png) [@aveltens](https://forum.solidproject.org/u/aveltens)\
**Post date:** [June 5, 2020, 2:32pm UTC](https://forum.solidproject.org/t/need-help-getting-started-on-app-development-for-solid/3166/18 "2020-06-05T14:32:04Z")

</div>

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